首页
论坛
课程
招聘
[顶起]Execryptor的线程逃跑
2007-11-22 16:07 8746

[顶起]Execryptor的线程逃跑

2007-11-22 16:07
8746
Execryptor 有线程逃跑, 大概意思就是
一开始有个线程祖宗(主线程), 然后它生了一个儿子线程, 你跑一半,我跑一半
然后儿子可以继续生儿子
最后子孙们把该跑的都该完, 祖宗继续执行下面的

这东西其实是纸老虎, 不过Execryptor花指令比较厉害,
然后子孙们会狼狈为奸, 所以不小心的话很容易中招

我把框架扣了出来, C++的
实际中可能并不怎么好使, 因为VC编译出来很多会从esp找参数和变量
子孙们的esp是不同的, 容易挂, 如果是ebp方式的成功率就高

有兴趣的可以作份delphi的, delphi会好一些, 多是ebp的

使用的时候成对加, 可以嵌套

tp.h
#ifndef _T_P_H_
#define _T_P_H_

#include <windows.h>

#define TP_START if (tp_protect())\
	{

#define TP_END __asm retn\
	}

	BOOL tp_protect();


#endif //_T_P_H_


tp.cpp
#include "tp.h"

DWORD WINAPI tp_therad(LPVOID lParam)
{
	__asm
	{
		push ebp
		mov eax, lParam
		mov ecx, [eax]
		add eax, 4
		mov ebx, [eax]
		add eax, 4
		mov edi, [eax]
		add eax, 4
		mov esi, [eax]
		add eax, 4
		mov ebp, [eax]
		add eax, 4
		mov edx, [eax]
		mov eax, 1
		call edx
		pop ebp
	}
	return 0;
}

BOOL __declspec(naked) tp_protect()
{
	__asm
	{
		push ebp
		push esi
		push edi
		push ebx
		push ecx
		mov eax, esp
		push 0
		mov edx, esp
		push edx
		push 0
		push eax
		lea eax, tp_therad
		push eax
		push 0
		push 0
		call dword ptr [CreateThread]
		pop edx
		push eax
		push -1
		push eax
		call dword ptr [WaitForSingleObject]
		call dword ptr [CloseHandle]
		add esp, 0x10
		pop ebp
		xor eax, eax
		retn
	}
}


aaa.cpp 测试程序
#include <windows.h>
#include "tp.h"

#pragma comment (linker, "/subsystem:windows")

int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
	char p[]= "0";
	MessageBox(0, p, p, 0);
	TP_START
	p[0]++;
	TP_START
	TP_START
	p[0]++;
	TP_START
	MessageBox(0, p, p, 0);
	TP_END
	TP_START
	TP_END
	TP_END
	p[0]++;
	TP_END
	TP_START
	MessageBox(0, p, p, 0);
	TP_END
	TP_END
	return 0;
}

【看雪培训】《Adroid高级研修班》2022年春季班招生中!

上传的附件:
收藏
点赞0
打赏
分享
最新回复 (24)
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lOOp 活跃值 2007-11-22 16:35
2
0
膜拜ing
  完全不懂
雪    币: 60
活跃值: 活跃值 (118)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
fly 活跃值 85 2007-11-22 16:35
3
0


雪    币: 205
活跃值: 活跃值 (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
okdodo 活跃值 2 2007-11-22 16:42
4
0
学习了  
雪    币: 1835
活跃值: 活跃值 (131)
能力值: (RANK:330 )
在线值:
发帖
回帖
粉丝
Bughoho 活跃值 8 2007-11-22 17:07
5
0
顶
雪    币: 5536
活跃值: 活跃值 (56)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
forgot 活跃值 26 2007-11-22 17:57
6
0
我就会几个单词,什么paper呀tiger呀
雪    币: 217
活跃值: 活跃值 (36)
能力值: ( LV9,RANK:1210 )
在线值:
发帖
回帖
粉丝
softworm 活跃值 30 2007-11-22 18:16
7
0
很好很大没看懂
雪    币: 27
活跃值: 活跃值 (26)
能力值: ( LV9,RANK:970 )
在线值:
发帖
回帖
粉丝
wynney 活跃值 24 2007-11-22 18:56
8
0
C++都炉火纯青了...
雪    币: 206
活跃值: 活跃值 (11)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
newsoft 活跃值 4 2007-11-22 20:25
9
0
这才是“水牛”了
雪    币: 246
活跃值: 活跃值 (11)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
Isaiah 活跃值 10 2007-11-23 12:22
10
0
血洗,血洗!

框架才是最难的东西...
雪    币: 205
活跃值: 活跃值 (95)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
softbihu 活跃值 3 2007-11-23 12:26
11
0
太帅了~
膜拜~
雪    币: 213
活跃值: 活跃值 (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
inraining 活跃值 2 2007-11-23 12:29
12
0
學習學習!
雪    币: 521
活跃值: 活跃值 (151)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
笨笨雄 活跃值 14 2007-11-23 12:31
13
0
收藏~~~~~~~~~~~~
雪    币: 70
活跃值: 活跃值 (47)
能力值: ( LV15,RANK:930 )
在线值:
发帖
回帖
粉丝
dummy 活跃值 23 2007-11-23 14:15
14
0
膜拜~~
雪    币: 661
活跃值: 活跃值 (682)
能力值: ( LV9,RANK:190 )
在线值:
发帖
回帖
粉丝
qyc 活跃值 4 2007-11-23 17:08
15
0
顶起啊!! SHOOOO为Execryptor计划生育
雪    币: 212
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
fool 活跃值 2007-11-23 18:09
16
0
太强了,顶起
雪    币: 189
活跃值: 活跃值 (502)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
freecat 活跃值 1 2007-11-24 04:01
17
0
99% Delphi版
program Project1;

uses
  Windows;

var
    p : string = '0';

{$R *.res}

function tp_thread(lParam : Pointer) : DWORD; stdcall;
var
    Retn : procedure; stdcall;

begin

    Retn := lParam;
    Retn;
    Result := 0;
end;

function tp_proctect : BOOL; stdcall;
var
    dwThreadHandle, dwThread : DWORD;
    lParam : Pointer;
begin
    asm //1%的汇编了 没想到其它的办法那位Delphi牛人指教一下  
        mov eax, [esp + $14]
        mov lParam, eax
    end;
    dwThreadHandle := CreateThread(nil, 0, @tp_thread, lParam, 0, dwThread);
    WaitForSingleObject(dwThreadHandle, INFINITE);
    CloseHandle(dwThreadHandle);
    Result := True;
end;

begin
        MessageBox(0, PChar(p), PChar(p), 0);
    {$i tp_start.inc}
    Inc(Byte(p[1]));
    {$i tp_start.inc}
    {$i tp_start.inc}
    Inc(Byte(p[1]));
    {$i tp_start.inc}
        MessageBox(0, PChar(p), PChar(p), 0);
    {$i tp_end.inc}
    {$i tp_start.inc}
    {$i tp_end.inc}
    {$i tp_end.inc}
    Inc(Byte(p[1]));
    {$i tp_end.inc}
    {$i tp_start.inc}
        MessageBox(0, PChar(p), PChar(p), 0);
    {$i tp_end.inc}
    {$i tp_end.inc}
end.

{$i tp_start.inc}
if tp_proctect then
begin

{$i tp_end.inc}
end;
雪    币: 207
活跃值: 活跃值 (10)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
fonge 活跃值 5 2007-11-25 11:25
18
0
csdn这样说,我是完全不懂,不知道对cat老大有没有帮助
lpParameter指针类型,线程的传入参数,我们如果想给线程执行体ThreadProc传递我们自己的数据,就要通过它
雪    币: 59
活跃值: 活跃值 (12)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
jjnet 活跃值 5 2007-11-25 17:06
19
0
膜拜            .
雪    币: 189
活跃值: 活跃值 (502)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
freecat 活跃值 1 2007-11-25 23:07
20
0
[QUOTE=fonge;384612]csdn这样说,我是完全不懂,不知道对cat老大有没有帮助
lpParameter指针类型,线程的传入参数,我们如果想给线程执行体ThreadProc传递我们自己的数据,就要通过它
[/QUOTE]


是这样
所以我传入了让他逃跑的地址
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
我是战天 活跃值 2007-12-7 15:27
21
0
我有一个软件想找人帮我脱壳,付款(¥500RMB)请高人呀,成功脱壳后先款后货!
雪    币: 2016
活跃值: 活跃值 (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
LOVE 活跃值 2007-12-7 16:15
22
0
上海四环是强啊
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
天字一号 活跃值 2007-12-7 17:18
23
0
顶起,努力学习中........
雪    币: 111
活跃值: 活跃值 (81)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
bbbsl 活跃值 2007-12-22 04:11
24
0
看得迷迷糊糊,想了半天似乎是懂了个七八分
雪    币: 3022
活跃值: 活跃值 (1060)
能力值: (RANK:215 )
在线值:
发帖
回帖
粉丝
china 活跃值 5 2007-12-22 13:33
25
0
看不懂的飘过
游客
登录 | 注册 方可回帖
返回