前言:以前版分析的一个版本,通过对旧版的了解可以很快的掌握新版的变化的,新版刚看完,谢谢hnhuqiong的帮助,脚本太多了,我自己看不下去:-(,
我还是选择了自己的方法,走了一程。走了后感觉新版变化也不是很大,虽然多
乱序IAT和特殊代码加密转换了一种比较方式,不过去乱序iat感觉就像鸡肋,
特殊代码处理虽然有一定难度,但很可惜,花指令太死了,如果有足够的时间的话,可以完全不用去掉花指令跟踪到特殊代码,也许是Magic esp的烂用吧:-),
没有任何的杀伤力可言。
当然这个壳的精彩代码是非常不错的,也因此非常感谢hexer。这段代码我现在还专门记录下来了:-).这篇文章把Simxx和hexer部分没有分析清楚的,自己补了一下。新版的总体流程还是差不多的。
【目 标】:Delphi
【工 具】:Olydbg1.1(diy版)
【任 务】:分析外壳loader
【操作平台】:Windows XP sp2
【作 者】:LOVEBOOM[DFCG][FCG][US]
【相关链接】:NONE
【简要说明】:Hying的外壳上次没有完全分析完下篇,这回来个全面的,外壳有几个地方很有"意思",新版本的花指令也比较有"意思"的.也随便把Hexer和simonzh2000
文章中没有分析明白的,自己分析了下.文章我大部分地方用了标签来注明,也因此很少额外写注释的.应该直接看下就知道什么意思了,看完后,事理一下可以做出
一个和原版一样的loader来的:-).
【详细过程】:
因为全面分析的文章,所以我也懒得多打几个字.边分析边写吧:-).
用OD载入,下断Bp VirtualAlloc然后执行到返回,之所以这样是因为前面的解压代码很是无聊,也没有什么价值,直接入主题更好:-).
来到这里:
0045A11A 6A 04 PUSH 4
0045A11C 68 00100000 PUSH 1000
0045A121 FF75 10 PUSH DWORD PTR SS:[EBP+10]
0045A124 6A 00 PUSH 0
0045A126 FF55 2C CALL DWORD PTR SS:[EBP+2C] ; VirtualAlloc
0045A129 50 PUSH EAX ; 返回这里
0045A12A 8945 0C MOV DWORD PTR SS:[EBP+C], EAX
0045A12D 8B5D 08 MOV EBX, DWORD PTR SS:[EBP+8]
0045A130 03DD ADD EBX, EBP
0045A132 50 PUSH EAX
0045A133 53 PUSH EBX
0045A134 E8 18000000 CALL ; 解压代码
0045A139 5A POP EDX ; 0012FFE0
0045A13A 52 PUSH EDX
0045A13B 55 PUSH EBP
0045A13C 8D85 DE000000 LEA EAX, DWORD PTR SS:[EBP+DE]
0045A142 C600 EB MOV BYTE PTR DS:[EAX], 0EB ; 对dll的再次重入进行处理
0045A145 C640 01 10 MOV BYTE PTR DS:[EAX+1], 10
0045A149 8B45 30 MOV EAX, DWORD PTR SS:[EBP+30]
0045A14C 8945 74 MOV DWORD PTR SS:[EBP+74], EAX
0045A14F - FFE2 JMP EDX ; 这里跳去壳的部分
************************************************************************************************************************************************
aplib_Unpack:
0045A151 > 60 PUSHAD ; aplib_Unpack
0045A152 8B7424 24 MOV ESI, DWORD PTR SS:[ESP+24] ; aplib解压代码,后面壳里还会用到一次
0045A156 8B7C24 28 MOV EDI, DWORD PTR SS:[ESP+28] ; 因此直接抓下来
0045A15A FC CLD
0045A15B B2 80 MOV DL, 80
0045A15D 33DB XOR EBX, EBX
0045A15F A4 MOVS BYTE PTR ES:[EDI], BYTE PTR DS:[ESI]
0045A160 B3 02