笔记之压缩壳的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
很棒的帖子啊!!!!! 很不错吖。 {:1_933:} 呵呵,支持楼主 额,,不是很明白
谢谢分享 楼主辛苦,,支持一下 横厉害的帖子啊 仔细看完了,学习了
楼主辛苦,支持一下!
页:
[1]
2