-
-
制作脱壳机-yoda's cryptor1.2
-
发表于:
2004-5-15 11:35
11645
-
制作脱壳机-yoda's cryptor1.2
kongfoo/2004.5.2-5.15
yoda's cryptor1.2没有OEP stolen code、Replace code、IAT加密、分段加密等
障碍,而且没来对原程序压缩,用来做作脱壳机的演示就最合适了。
当我们要做一个脱壳机时,面对的是加壳器对原程序的加密算法,知道了加密算法
就可以直接对文件进行解密还原。(题外话:所以加壳器所用的加密算法强度很重要:))
由于yoda's cryptor是动态加/解密,所以要借用原壳代码解码。
先来分析一下解密算法,解密算法就是加密算法的逆算法:
010103CF 8BFE MOV EDI,ESI ==代码已经去除花指令
010103D1 AC LODS BYTE PTR DS:[ESI]
010103D5 34 F2 XOR AL,0F2
010103DA 2AC1 SUB AL,CL
010103DF 2AC1 SUB AL,CL
010103E1 34 EB XOR AL,0EB
010103EA 02C1 ADD AL,CL
010103F0 04 36 ADD AL,36
010103F2 FEC8 DEC AL
010103F8 2AC1 SUB AL,CL
010103FC 2AC1 SUB AL,CL
010103FE C0C8 78 ROR AL,78
01010402 AA STOS BYTE PTR ES:[EDI]
01010403 ^ E2 CC LOOPD SHORT NOTEPAD2.010103D1
这段代码是跟踪加过壳的程序得到的,在Loader里面,而yoda's crytptor对Loader也
做了加密,哪么我们可以先提取解密Loader的代码解密,再提取解密原程序的代码运行。
分析yoda's cryptor的源码可知,加/解密时会跳过某些节。
脱壳解密思路:取节数(number of sections),定位到各节,根据节名判断是否需要
解密,解密节,再恢复peheader中的一些值,最后去掉壳增加的节。
源码附后,篇幅关系程序没有容错处理,也没有处理CheckSum等项目。另外在我的XP上
加壳时选上Erase PE header或Delete Import Information或API Redirection后被加壳程序
不能正常运行,所以加壳时只选上其它3项。另外测试方面只测试了notepad.exe和脱壳程序
本身。
写这个脱壳机感觉解密原程序并不难,难在修复peheader中的项目(引入表地址)。文
章很肤浅,旨在演示最简单的脱壳机写法,稍为复杂一点的壳我都写不出来啦,高手们不要
见笑:)
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)