自己的脱壳过程(SoftDefender)

OEP的部分简略一点吧,主要是想写下这个IAT的修复,其实也没什么技术含量,因为技术菜,跟不出如何不让壳加密IAT,权衡之下只好用这个连自己也鄙视的笨办法了

Too eagerly want to unpack a powerful packer, however old one

OEP到达方法:

一 用API监视工具查找CreateProcess的调用地址(当然也可以下硬件断点),然后把程序运行起来再在OD转到这个地址(没运行起来之前代码还没解码,这个地方的代码还非常乱)

二 在这上面找到一个je跳转,下一个硬件断点,每次运行的时候改下标志位就行,直接patch的话一定会被检测到。

三 在je断下之后在401000那里下个内存访问断点,然后再自己单步一段(断下来的时候是开始解码代码段了,再走一段是要把码全部解开),现在来搜索下delphi的特征码直接到OEP(或者下API断点,当然也要是硬件断点)

来到OEP之后,就开始修复吧

随便找一个APIcall,来到IAT的地方,发现主要是有两种格式,一种是以15开头的,一种是以40开头的


找一个以15开头的函数,随便跟了几步就到API了,这种类型的用IR可以快速解决。

但是以40开头的函数却怎么走也到不到API(难道看漏了?)

先不管,能修复的先修复掉,最后剩下6


然后再拿来一个delphi的无壳程序。在有壳的程序中分别向那6个无效指针下断,

断下之后然后回溯到最初的那个调用(你会在堆栈窗口看到返回地址)

例如最初的调用地址是A,然后也到无壳的delphi程序的地址A处看下调用的API是什么,

然后在IR里面双击无效指针,自己把库和函数填进去就可以了


还有五个指针也是一样的,修复之后即可运行

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章