- UID
- 62966
注册时间2009-8-1
阅读权限20
最后登录1970-1-1
以武会友
TA的每日心情 | 开心 2023-11-24 21:15 |
---|
签到天数: 4 天 [LV.2]偶尔看看I
|
发表于 2009-10-14 09:24:29
|
显示全部楼层
还有关于LoadLibraryA的,呵呵,他的作用就是读取输入的函数,再用GetProcAddress获得函数地址,并将这个地址填入“输入地址表”,程序就通过这个输入地址表找到所要输入的函数了,然后进行调用。但是加壳后,穿山甲把一部分要输入的函数放到了它自己申请的内存中去执行了,当我们DUMP出的程序运行时,就找不到那一部分IAT了 ,也就是所谓的IAT加密了,所以他要有一个判断,判断将要输入的函数是不是要放到它申请的内存中去执行,是就不跳(或跳),<在黑鹰教程中如果JE不跳就是要加密了>,这就是MAGIC跳,只不过是别人给起的一个名字。
所以知道了这一点,在下GetModuleHandleA后,看堆栈应该是个不错的选择,我在对着教程做的时候,看到VirtualAlloc和VirtualFree后基本上就差不多到了返回时机了,因为壳既然要在自己申请的内存中执行一部分输入函数,那它就要申请内存,而VirtualAlloc和VirtualFree就是干这个事情的,也就是说发现壳申请内存了,就返回,LoadLibraryA,在这个函数下面的跳,就应该是MAGIC跳了,怎样知道找的对不对呢?只要到OEP去看下IAT是不是全都有效,或者就修复一下看行不行。(呵呵,菜鸟的方法)
建议楼主可以看下“脱壳经验谈” |
|