首页
社区
课程
招聘
[顶起]Execryptor的线程逃跑
发表于: 2007-11-22 16:07 10113

[顶起]Execryptor的线程逃跑

2007-11-22 16:07
10113
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;
}

[课程]Android-CTF解题方法汇总!

上传的附件:
收藏
免费 7
支持
分享
最新回复 (24)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
膜拜ing
  完全不懂
2007-11-22 16:35
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
3


2007-11-22 16:35
0
雪    币: 233
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
4
学习了  
2007-11-22 16:42
0
雪    币: 1946
活跃值: (243)
能力值: (RANK:330 )
在线值:
发帖
回帖
粉丝
5
顶
2007-11-22 17:07
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
6
我就会几个单词,什么paper呀tiger呀
2007-11-22 17:57
0
雪    币: 494
活跃值: (629)
能力值: ( LV9,RANK:1210 )
在线值:
发帖
回帖
粉丝
7
很好很大没看懂
2007-11-22 18:16
0
雪    币: 224
活跃值: (147)
能力值: ( LV9,RANK:970 )
在线值:
发帖
回帖
粉丝
8
C++都炉火纯青了...
2007-11-22 18:56
0
雪    币: 236
活跃值: (11)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
9
这才是“水牛”了
2007-11-22 20:25
0
雪    币: 331
活跃值: (56)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
10
血洗,血洗!

框架才是最难的东西...
2007-11-23 12:22
0
雪    币: 226
活跃值: (179)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
11
太帅了~
膜拜~
2007-11-23 12:26
0
雪    币: 234
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
12
學習學習!
2007-11-23 12:29
0
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
13
收藏~~~~~~~~~~~~
2007-11-23 12:31
0
雪    币: 272
活跃值: (143)
能力值: ( LV15,RANK:930 )
在线值:
发帖
回帖
粉丝
14
膜拜~~
2007-11-23 14:15
0
雪    币: 707
活跃值: (1301)
能力值: ( LV9,RANK:190 )
在线值:
发帖
回帖
粉丝
15
顶起啊!! SHOOOO为Execryptor计划生育
2007-11-23 17:08
0
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
太强了,顶起
2007-11-23 18:09
0
雪    币: 191
活跃值: (1978)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
17
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;
2007-11-24 04:01
0
雪    币: 263
活跃值: (10)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
18
csdn这样说,我是完全不懂,不知道对cat老大有没有帮助
lpParameter指针类型,线程的传入参数,我们如果想给线程执行体ThreadProc传递我们自己的数据,就要通过它
2007-11-25 11:25
0
雪    币: 101
活跃值: (12)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
19
膜拜            .
2007-11-25 17:06
0
雪    币: 191
活跃值: (1978)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
20
[QUOTE=fonge;384612]csdn这样说,我是完全不懂,不知道对cat老大有没有帮助
lpParameter指针类型,线程的传入参数,我们如果想给线程执行体ThreadProc传递我们自己的数据,就要通过它
[/QUOTE]


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