lufei 发表于 2017-3-16 17:50

笔记之压缩壳的trick

本帖最后由 lufei 于 2017-3-16 18:28 编辑

FSG2.0压缩壳遇到的一个trick。首先一路f7,遇到往回跳的跳转就f4到下一条指令。来到下图的40B26A的位置。trick开始位置。
1.1
可以看到调用了两个call,一个是调用GetProcAddress,获取函数地址。另外一个是调用CreateThread,创建一个线程。这两个call都f8步过。然后f7步入40B272,如下图所示。
1.2
又调用了两个call,一个是调用GetProcAddress,获取函数地址。另外一个是调用CloaseHandle,关闭线程句柄。继续f8步过这两个call。然后f7步入40B272,如下图所示。
1.3
又调用了两个call,一个是调用GetProcAddress,获取函数地址。另外一个是调用ExitThread,结束当前线程。这时候第二个call不能步过了。你f8步过40B29D就会跑飞了。这时候应该在0040B2A4这个位置f2下断点。然后f9。然后一路单步,来到下图。
1.4
这时候可以看到一个比较大的跳转。004001D1- FF63 0C         jmpdword ptr ds:                        ; UnPackMe.00401700在这里下f2下断点,然后f9,单步就到了OEP
1.5
这里的trick就是结束当前线程,然后执行CreateThread创建那个线程的函数去了。代码如下。
#include <stdio.h>
#include <windows.h>
DWORD WINAPI ThreadProc(LPVOID pM)
{
    printf("1111111111");
    return 0;
}
void main()
{
      HANDLE handle1=CreateThread(NULL,0,ThreadProc,NULL,0,NULL);
      ExitThread(0);
      getchar();
}
脱壳样本:http://www.52pojie.cn/thread-10607-1-1.html

K2061707326 发表于 2017-3-17 06:26

很棒的帖子啊!!!!!

52pojieiymm 发表于 2017-3-17 08:18

很不错吖。

yssun 发表于 2017-3-17 08:54

{:1_933:}         呵呵,支持楼主

jkl718293 发表于 2017-3-17 09:10

额,,不是很明白

我不是高手 发表于 2017-3-17 10:04

谢谢分享

yu逍遥 发表于 2017-3-17 11:39

楼主辛苦,,支持一下

xuxiaoshan 发表于 2017-3-17 13:33

横厉害的帖子啊

xiaofengzi 发表于 2017-3-17 16:01

仔细看完了,学习了

xiaohong 发表于 2017-3-27 21:13


楼主辛苦,支持一下!
页: [1] 2
查看完整版本: 笔记之压缩壳的trick