【脱壳文件】图标制作工具
【下载地址】http://iconutils.com/iconxp/iconxp.zip
【加壳方式】ASProtect 2.2 SKE -> Alexey Solodovnikov
【作者声明】:只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教
【调试环境】:Win2003、OllyDBD、PEiD、LordPE、ImportREC
【脱壳过程】:一鼓作气,再脱一个带OEP抽取的ASProtect吧。
一、避开加密,得到完整IAT
这个程序没有任何异常,F9一下,程序界面全出来了,应该是2.2的版本了吧。那我们换个方法,OD忽略所有异常,bp GetModuleHandleA,过两次后取消断点,Alt+F9返回。
00F9E4AC 85C0 TEST EAX,EAX ; kernel32.7C800000
00F9E4AE 75 07 JNZ SHORT 00F9E4B7
00F9E4B0 53 PUSH EBX
00F9E4B1 FF95 F0314400 CALL DWORD PTR SS:[EBP+4431F0]
00F9E4B7 8985 4D294400 MOV DWORD PTR SS:[EBP+44294D],EAX
00F9E4BD C785 51294400 0>MOV DWORD PTR SS:[EBP+442951],0
00F9E4C7 8B95 D8304400 MOV EDX,DWORD PTR SS:[EBP+4430D8]
向下找到这里:
……
00F9E5C9 C2 0C00 RETN 0C
00F9E5CC 68 00000000 PUSH 0
00F9E5D1 C3 RETN //在这里F4下来
F7一下到达壳的代码部分(此法来自LOOVBOOM的ASProtect 2.x脱壳系列)
搜索一下83,C4,28,5D,5F,5E,5B,C3 ,有两处,在第二处下断点
00F8887A 8D5424 04 LEA EDX,DWORD PTR SS:[ESP+4]
00F8887E E8 B1750000 CALL 00F8FE34
00F88883 E8 5C700000 CALL 00F8F8E4
00F88888 8BC3 MOV EAX,EBX
00F8888A E8 61A3FEFF CALL 00F72BF0
00F8888F E8 10F0FFFF CALL 00F878A4 //这里进去
00F88894 83C4 28 ADD ESP,28
00F88897 5D POP EBP
00F88898 5F POP EDI
00F88899 5E POP ESI
00F8889A 5B POP EBX
00F8889B C3 RETN
进入以后按Ctrl+F9,再F7一下,到达OEP
00F60241 55 PUSH EBP //这里下个硬断点,下次直接就到这里了。
00F60242 BD 262B4800 MOV EBP,482B26
00F60247 BD DE8D4800 MOV EBP,488DDE
00F6024C 8BEC MOV EBP,ESP
00F6024E E9 C7010000 JMP 00F6041A
00F60253 81D0 B693A431 ADC EAX,31A493B6
00F60259 FF35 0CB15500 PUSH DWORD PTR DS:[55B10C]
00F6025F B8 16334900 MOV EAX,493316
00F60264 034424 38 ADD EAX,DWORD PTR SS:[ESP+38]
00F60268 58 POP EAX
00F60269 E9 460B0000 JMP 00F60DB4
00F6026E C3 RETN
这个程序的输入表被加密了,搜索参考文本串,两个85之间的CALL进去后,找到IAT处理的CALL(详细的请参考我的上一篇)
00F93B84 55 PUSH EBP
00F93B85 8BEC MOV EBP,ESP
00F93B87 81C4 F8FEFFFF ADD ESP,-108
00F93B8D 53 PUSH EBX
00F93B8E 56 PUSH ESI
00F93B8F 57 PUSH EDI
00F93B90 8B55 14 MOV EDX,DWORD PTR SS:[EBP+14]
00F93B93 8B5D 08 MOV EBX,DWORD PTR SS:[EBP+8]
00F93B96 8DBD FAFEFFFF LEA EDI,DWORD PTR SS:[EBP-106]
00F93B9C 8BC2 MOV EAX,EDX
00F93B9E 48 DEC EAX
00F93B9F 83E8 02 SUB EAX,2
00F93BA2 0FB630 MOVZX ESI,BYTE PTR DS:[EAX]
00F93BA5 8B45 10 MOV EAX,DWORD PTR SS:[EBP+10]
00F93BA8 83E8 02 SUB EAX,2
00F93BAB 0FB600 MOVZX EAX,BYTE PTR DS:[EAX]
00F93BAE 3B43 2C CMP EAX,DWORD PTR DS:[EBX+2C]
00F93BB1 76 06 JBE SHORT 00F93BB9
00F93BB3 8943 2C MOV DWORD PTR DS:[EBX+2C],EAX
00F93BB6 EB 01 JMP SHORT 00F93BB9
00F93BB8 6933 C08A433B IMUL ESI,DWORD PTR DS:[EBX],3B438AC0
00F93BBE 3BF0 CMP ESI,EAX
00F93BC0 75 5E JNZ SHORT 00F93C20 //这里开始PATCH
00F93BC2 EB 01 JMP SHORT 00F93BC5
00F93BC4 C7 ???
改为:JMP f60000(你申请到的内存地址)
这个程序的ESI值有四种情况,E3,A4,30,E7,其中E7,A4两种情况不加密,E3-->E7 ,30-->A4
继续PATCH:
00F60000 - 0F84 BF3B0300 JE 00F93BC5
00F60006 81FE E7000000 CMP ESI,0E7
00F6000C - 0F84 0E3C0300 JE 00F93C20
00F60012 81FE E3000000 CMP ESI,0E3
00F60018 74 0A JE SHORT 00F60024
00F6001A BE A4000000 MOV ESI,0A4
00F6001F - E9 FC3B0300 JMP 00F93C20
00F60024 BE E7000000 MOV ESI,0E7
00F60029 ^ EB F4 JMP SHORT 00F6001F
二进制代码:
0F 84 BF 3B 03 00 81 FE E7 00 00 00 0F 84 0E 3C 03 00 81 FE E3 00 00 00 74 0A BE A4 00 00 00 E9
FC 3B 03 00 BE E7 00 00 00 EB F4
取消断点运行,拿到正确的IAT表。
二、修复CALL XXXXXXXX。
到OEP后开始修复吧,搜索一下89,45,F0,B8,00,07,00,00 到达这里:
00F93754 8945 F0 MOV DWORD PTR SS:[EBP-10],EAX
00F93757 B8 00070000 MOV EAX,700
00F9375C E8 E3EDFDFF CALL 00F72544 //这里PATCH
PATCH:
00F9375C - E9 6B8E2200 JMP 011A0043
到11A0000处写上代码
011A0000 0000 ADD BYTE PTR DS:[EAX],AL
011A0002 0000 ADD BYTE PTR DS:[EAX],AL
011A0004 0000 ADD BYTE PTR DS:[EAX],AL
011A0006 0000 ADD BYTE PTR DS:[EAX],AL
011A0008 0000 ADD BYTE PTR DS:[EAX],AL
011A000A BA 00104000 MOV EDX,iat.<模块入口点>
011A000F 803A E8 CMP BYTE PTR DS:[EDX],0E8
011A0012 75 14 JNZ SHORT 011A0028
011A0014 8B42 01 MOV EAX,DWORD PTR DS:[EDX+1]
011A0017 03C2 ADD EAX,EDX
011A0019 05 05000000 ADD EAX,5
011A001E 3D 00000A01 CMP EAX,10A0000
011A0023 75 03 JNZ SHORT 011A0028
011A0025 EB 0C JMP SHORT 011A0033
011A0027 90 NOP
011A0028 42 INC EDX
011A0029 81FA 00B05500 CMP EDX,55B000
011A002F ^ 72 DE JB SHORT 011A000F
011A0031 - EB FE JMP SHORT 011A0031
011A0033 8915 00011A01 MOV DWORD PTR DS:[11A0100],EDX
011A0039 60 PUSHAD
011A003A FFE2 JMP EDX
011A003C 90 NOP
011A003D 90 NOP
011A003E 90 NOP
011A003F 90 NOP
011A0040 90 NOP
011A0041 90 NOP
011A0042 90 NOP
011A0043 90 NOP
011A0044 B8 A4415600 MOV EAX,5641A4
011A0049 90 NOP
011A004A 3910 CMP DWORD PTR DS:[EAX],EDX
011A004C 75 23 JNZ SHORT 011A0071
011A004E 8B0D 00011A01 MOV ECX,DWORD PTR DS:[11A0100]
011A0054 C701 FF250000 MOV DWORD PTR DS:[ECX],25FF
011A005A 8941 02 MOV DWORD PTR DS:[ECX+2],EAX
011A005D 61 POPAD
011A005E 90 NOP
011A005F 8B15 00011A01 MOV EDX,DWORD PTR DS:[11A0100]
011A0065 90 NOP
011A0066 90 NOP
011A0067 90 NOP
011A0068 ^ EB BE JMP SHORT 011A0028
011A006A 90 NOP
011A006B 90 NOP
011A006C 90 NOP
011A006D 90 NOP
011A006E 90 NOP
011A006F 90 NOP
011A0070 90 NOP
011A0071 83C0 04 ADD EAX,4
011A0074 3D 404A5600 CMP EAX,564A40
011A0079 ^ 7E CF JLE SHORT 011A004A
011A007B ^ EB E0 JMP SHORT 011A005D
011A007D 90 NOP
00 00 00 00 00 00 00 00 00 00 BA 00 10 40 00 80 3A E8 75 14 8B 42 01 03 C2 05 05 00 00 00 3D 00
00 0A 01 75 03 EB 0C 90 42 81 FA 00 B0 55 00 72 DE EB FE 89 15 00 01 1A 01 60 FF E2 90 90 90 90
90 90 90 90 B8 A4 41 56 00 90 39 10 75 23 8B 0D 00 01 1A 01 C7 01 FF 25 00 00 89 41 02 61 90 8B
15 00 01 1A 01 90 90 90 EB BE 90 90 90 90 90 90 90 83 C0 04 3D 40 4A 56 00 7E CF EB E0 90
代码还是上一个,修改了几个值就可以啦。
在011A000A新建EIP,F9运行一下,OK。
LODEPE开始DUMP,IMR修复一下。
三、修复OEP抽取
还是用SYSCOM的补区段大法吧
1.且不要关OD,把F40000到1430000的所有区段都保存下来,一共二十多个,都保存下来,再用LODEPE装配进DUMP后的文件中。(高手莫笑啊,这样为了保险,再费事也总比一句一句猜代码省事吧)
2.修正Route Check
用OD载入后跟踪到这里:
00F94C06 8B40 34 MOV EAX,DWORD PTR DS:[EAX+34]
00F94C09 FFD0 CALL EAX
00F94C0B 2945 0C SUB DWORD PTR SS:[EBP+C],EAX
修改为:
00F94C06 90 NOP
00F94C07 90 NOP
00F94C08 90 NOP
00F94C09 8B4424 58 MOV EAX,DWORD PTR SS:[ESP+58]
00F94C0D 83E8 05 SUB EAX,5
00F94C10 90 NOP
3.修正预先解码用到的API
再运行后还是有错误,发现是有二个API函数错误
00401300 - FF25 F8415600 JMP DWORD PTR DS:[5641F8]
004071A0 - FF25 BC435600 JMP DWORD PTR DS:[5643BC]
经跟踪后发现都是: kernel32.GetProcAddress,修正它。
4.自校验:
再运行后发现已经能出窗口了,但是一点OK就出来十几个注册窗口,再改掉两个JLE为JMP。
最后跨平台测试,OK了.
参考文章:
LOOVBOOM的ASProtect 2.x脱壳系列
syscom的ASProtect delphi+OEP stolen篇
林海雪原的aspr2.2 SKE 外壳简单分析
……
脱壳后文件在我的网络优盘中:
http://pickup.mofile.com/5595561565230235
[课程]Android-CTF解题方法汇总!