飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

12
返回列表 发新帖
楼主: dbsx

[讨论] 穿山甲壳的问题(概念问题)

[复制链接]
  • TA的每日心情
    开心
    2023-11-24 21:15
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    发表于 2009-10-14 09:00:39 | 显示全部楼层
    没人鸟我们,就我们自己研究吧,我发现所说的MAGIC跳,是在LoadLibraryA下面的那个,跳,如果是未知壳,可以先查壳,有专门查穿山甲的工具,但是我没有,要是双线程,在任务管理器里可以看到。我理解的所谓缓冲比较大的说法,我觉得不是很准确,但是好象也只能靠感觉,如果怕自己判断不准,可以不删除硬件断点,SHIFT+F9运行一次,就返回一次看下,我想这样比较保险。
    PYG19周年生日快乐!
  • 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是不是全都有效,或者就修复一下看行不行。(呵呵,菜鸟的方法)
    建议楼主可以看下“脱壳经验谈”
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表