课1
略
课2
什么是脱壳
经常说脱壳,也用很多方法脱过壳,现在有点更深的认识了
一个程序被加壳的话他一定被做了以下的事情:
1 被加密了各个节
2 输入表肯定被清除或者保存到另外一个地方去了(还可能不是以原来输入表结构的形式,可能自己发明一个结构来存储输入表)
3 跳到OEP
加壳的程序执行时会做以下的事情:
1 还原各个节的代码
2 把IAT的地址还原(程序运行的时候并不需要用到输入表,而只需要用到IAT)
3 用Import_Rec(如果不嫌麻烦去修复几百个函数的话用自己的手)根据IAT表来还原原始输入表的样子
根据目前的理解,大概是这样子了
找OEP的方法
Delphi
方法1 GetModuleHandle外面的一层函数就是OEP附近了
方法2 搜索Delphi7 跳转表上面的一个函数,再直接搜索跳转表最后一个项
VC
方法1 GetVersion附近
方法2 msvcrt.__set_app_time附近
方法3 GetSystemAsFileTime附近
方法4 找特征码(为防Stolen code找后一点代码)
BC++
方法1 特征,找吧找吧
通用的方法
退出法:在课程里面用的是delphi,我在对其他程序好像用不了,原理不太明白
最后做了一个脱ASPack 2.12的练习,用的是退出法,重建输入表用的是Import-Rec,没什么特别的
课3
讲了完美脱壳,就是改下PE头,按照原语言生成的区段还原区段,云云
课4
介绍了几种加密壳的原理,如简单的ACprotectAPI重定向,没什么意义好像
课5
讲脱壳脚本的,略
课6
在这课里面学到了点东西,讲的是脱SoftDefender
分离壳和进程的方法:
先用一个API监视工具看下CreateProcess的位置,找到一个跳过此函数的je指令,把这个指令运行时的Z标志位改掉就可以分离进程
到OEP的方法:
分离进程之后在401000下一个内存访问断点,断下来之后单步跟一下直到401000处的代码被解码完毕。然后搜索delphi的特征码来到OEP
patchIAT加密的方法:
待续