一点脱壳省精力的想法
我个人认为没有必要对所有的外壳代码都要深究其意义,这样太耗精力了,会很累很累,需要抓住关键的代码进行分析,集中火力研究关键的代码,对于一般的外壳来说,大概有以下几个关键代码需要进行分析:1. 解压解密各个区段数据的外壳代码进行分析,一般这一步都可以省略
2. 处理IAT的代码,可能是经过加密的,需要分析,抓出各个加密后的API函数的地址,记录下来,做修复IAT用。
3. IAT相关代码之后,分析如何到达OEP。
当然要抓到这3个点的关键代码也是需要相当的经验的,因为过程中会有很多的反调试的代码,所以,跟踪这些反调试的代码也是对外壳代码进行分析的一个部分,也是值得耗费精力去研究如何绕过这些反调试反跟踪的代码。
抓住以上关键部分的外壳代码的方法: 【均于最简单外壳所有技术分析^_^】
1. 抓住解压解密各个区段数据的外壳的代码,应该是对未加壳前的区段内存下硬件写入断点,或者相关的内存写入断点。
对于高级的外壳的处理方法: [留空,以后懂了再说].......................
2. 抓住IAT处理的外壳代码的方法: 对于最简单的外壳应该是对GetProceAddress, LoadLibraryA函数下断点,返回后一般能看到外壳加载IAT。。当然外壳的其他部分也会调用,这个应该容易辨别..
对于高级的外壳的处理方法: [留空,以后懂了再说].......................
3. 对于反调试之类的代码,可能有的外壳对发现调试器给出的反应很明显,简单的外壳的话就是调用一些系统API函数来做对发现调试器后的一些处理。所以我们可以对能造成这种结果的相关API进行跟踪。。哎,不过现在高级的外壳,基本上下API断点都没有用了,因为都是经过加密的,外壳和被加密的程序都不在调用原本的系统API函数了,而是调用外壳自己的函数 (当然这些函数很大一部分是抄系统API函数代码的).
对于高级的外壳的处理方法: [留空,以后懂了再说]......................
4. 对于OEP,要怎么走到? 是不是在跟踪完IAT的代码后,一步一步地F8过去?现在高级的外壳,把OEP搞个稀巴烂,把OEP的代码搬来搬去,一句话在外壳申请的内存中,一句话在被加密程序的区段中。(如果是像VC++的入口代码都是差不多的,还能搬回来。。如果遇到VM就不要说了,放弃吧。。)
本文要表达的意思或者是【入门人士的疑问】有两个:
1. 是不是应该就需要只对这些关键的外壳代码进行分析? 因为不是所有外壳都是UPX,从头到尾的过程也就那么些代码? 【毕竟人的精力和体力都是有限的】【这种是不是浮躁的表现呢?前辈指点】当然如果是想写外壳的例外吧?
我按照前辈的意见好好去分析ASPACK,想要达到能看懂所有的汇编代码所做的目的,分析一阵子,刚开始还很有力气,两下半就没气了,【累就一个字】, 所以我就开始发牢骚,写这个,希望得到前辈们的一些指点,希望能少走一些弯路。。。
2. 如何找到并且到达这些关键的外壳代码? 各位前辈都是过来人,可否透露一些呢?呵呵 奇怪,为什么有人加分,却没人愿意留下个意见啊?????:'(weeqw:'(weeqw
以后懂了再说.....
我汗~! 我自己还在学习中 象我们这些菜鸟一般到了OEP能、很开心了``````:victory:
页:
[1]