asprotect脱壳经验谈

    数月前对某一程序分析,拿到程序应PEid扫描了一下,发现是asp 的壳,之前脱过此类壳感觉难度不大,此程序在OEP调用了GetStartupInfo,找到OEP并不困难,结合堆栈基本就可以确定OEP。然后开始用ollydump dump程序,importrec修复,一切顺利。

    好了,开始运行脱壳后的程序,程序开始处理,显示进度条。在这时本人喜悦不胜言表,就等着开始自己的探索之旅,突然我windbg弹出来了(注册表设置windbg为即时调试器),开始调试我之前脱壳的程序,看了一下,原来是内存违规导致程序崩溃了,这个时候堆栈已经被破坏,无法定位代码位置。从入口点重新运行程序,发现某个call调用的地址不是代码,这是什么原因呢,载入无脱壳的程序运行到此处,代码是存在的,原来程序使用了asp sdk,采用了动态代码生成的方式,在dump的时间点该出代码还没生成。

    既然这样,那就运行到哪里出错就补到哪里吧,等全部补完发现不行,分析了一下原来代码会随着每次的运行而变化,代码是在不同次的运行中补全的,这样是不一致的。

找齐了所有缺失代码段,在一次运行中依次修复,程序OK了。

    总结一下。从脱壳的难度上看,asp的壳强度还是不够,其主要有几个方面的弱点:1.花指令模式单一,易于识别。 2. 不对OEP进行混淆处理。 要想更好地对程序进行保护,还得加上其他手段,如手动混淆,加vmp壳,vmp的壳有个不好的地方就是易被杀软误报,在用vmp加壳后的软件再加个asp的壳应该是个不错的选择。

 

你可能感兴趣的:(软件逆向与安全)