欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

asprotect 加壳程序又有新的变化 (2千字)

asprotect 加壳程序又有新的变化 (2千字)

asprotect 加壳程序又有新的变化
我这里不打算讲如何脱壳和IAT的重建,因为ljtt兄的文章已经是很经典的了,也不打算讲如何破解,因为kingtall兄也已经说的很清楚了,我只想就我跟踪sfx2000这个程序看到的asprotect这个“伟大”的程序的新变化。
  在sfx2000.exe 里面,我们看到了asprotect较之以前的变化的地方
1.增加了OEP的定位的难度
  原来asprotect在处理完 IAT以后出来,按3-4次F8,然后按2-3次F12,就快接近OEP了,一般是连着的2-3个ret命令,就到OEP了。
  在sfx2000里面,不是这样的,在处理完 IAT以后出来,对于OEP的定位又增加了极高的难度,在这里的程序是分段恢复的,每一段的恢复都用了很大的循环次数来完成的,给我的感觉是程序在这里并没有做什么,都用来恢复后面的程序了,这里的程序用了相当多的花指令,一部分是jMP,还有一部分跳转是用CALL指令来完成的,所以指令必须找准循环的结束点,否则一不小心,从一个CALL就进到主程序里面了,又的从头开始。以前用冲击波来找protect压缩的程序的OEP,几乎没有找不到的,但是这一次却不行了,只好用手动的方法来找了,发现了上面的新变化。如果大家跟踪的话,可以看到在cs:135bb37处的指令是这样的:
    cs:135bb37  jmp  eax
    就是从这里到OEP的,这里的eax是5f4690。
2.另外的变化是输入函数的处理又有了新的花招
  asprotect 把一些输入函数在程序解压时首先运行,然后把得到的值存入一个变量里面,当解压后的程序去调用输入函数时,asprotect把这个函数改成直接到对应的变量里面去取值就可以了。这个变化是这样发现的,在用importREC.exe来重建IAT 时,有几个函数找不到正确的名称,我就随意给它们定了几个函数,看看程序能不能运行,结果是程序一运行老有非法操作,跟踪了很长时间也解决不了,最后想到是不是那几个没有修正的函数造成的,进去看那几个函数是干什么的,发现有的是到几个变量里面去取值赋给EAX,也有的是垃圾函数,我就想到看看那几个变量里面的值最初是如何得到的,就用了bpm 命令来看,一看使我大吃一惊,这几个变量里面的值是在运行了几个重要的函数后把得到的值赋进去的,实际上也就是输入函数的新的处理方法。我把得到的这几个函数的RVA,在asprotect的解压缩程序的地址以及真实名称和得到的值的存储的地址列出来:
    [RVA]        地址              函数名称            得到的值存储的地址
  [2192a4]    133c86c            GetCommandlLineA      [1343678]
  [219488]    133c834            GetVersion            [13435D8]
  [2194f8]    133c864            GetCurrentProcessID  [13435E0]
  当解压后的程序去调用这几个函数时,就到对应的变量里面去取就可以了。
  另外还有几个函数,在程序里面不太用,大家有兴趣的话可以在下面的程序里面看到,在cs:133c7da 打头的地方,大家可以跟踪去看一看。
  当我搞定这个程序的时候,心里不免感叹asprotect真是太。。。。。。
 
  就此打住。

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功