文章标题:QQKAV脱壳
软件名称:QQKAV
保护方式:yoda's cryptor 1.x / modified
使用工具:od LordPE v1.40
软件大小:486K
作者声明:只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
软件下载地址:http://www.jsing.net/soft/qqkav.exe
脱壳篇
载入程序来到这里
005DD060 > 60 PUSHAD
005DD061 E8 00000000 CALL qqkav.005DD066
005DD066 5D POP EBP
005DD067 81ED 55204000 SUB EBP,qqkav.00402055
005DD06D B9 7B090000 MOV ECX,97B
005DD072 8DBD 9D204000 LEA EDI,DWORD PTR SS:[EBP+40209D]
005DD078 8BF7 MOV ESI,EDI
005DD07A AC LODS BYTE PTR DS:[ESI]
005DD07B 2C 59 SUB AL,59
005DD07D FEC8 DEC AL
005DD07F EB 01 JMP SHORT qqkav.005DD082
根据邪秀才上次讲过,先看看程序起动过程,一次INT3,一次非法访问内存,
忽略其它的异常,shift+f9两次,到最后一次异常处
005DD769 0000 ADD BYTE PTR DS:[EAX],AL
005DD76B 0000 ADD BYTE PTR DS:[EAX],AL
005DD76D 0000 ADD BYTE PTR DS:[EAX],AL
005DD76F 0000 ADD BYTE PTR DS:[EAX],AL
005DD771 0000 ADD BYTE PTR DS:[EAX],AL
005DD773 0000 ADD BYTE PTR DS:[EAX],AL
005DD775 0000 ADD BYTE PTR DS:[EAX],AL
005DD777 0000 ADD BYTE PTR DS:[EAX],AL
看堆栈窗口
0012FFBC 0012FFE0 指向下一个 SEH 记录的指针
0012FFC0 005DD70C SE处理程序
0012FFC4 7C816D4F 返回到 kernel32.7C816D4F
0012FFC8 7C930738 ntdll.7C930738
0012FFCC FFFFFFFF
0012FFD0 7FFDD000
在SE处下断,来到005DD70C处
005DD70C 55 PUSH EBP
005DD70D 8BEC MOV EBP,ESP
005DD70F 57 PUSH EDI
005DD710 8B45 10 MOV EAX,DWORD PTR SS:[EBP+10]
005DD713 8BB8 C4000000 MOV EDI,DWORD PTR DS:[EAX+C4]
005DD719 FF37 PUSH DWORD PTR DS:[EDI]
005DD71B 33FF XOR EDI,EDI
005DD71D 64:8F07 POP DWORD PTR FS:[EDI]
005DD720 8380 C4000000 0>ADD DWORD PTR DS:[EAX+C4],8
005DD727 8BB8 A4000000 MOV EDI,DWORD PTR DS:[EAX+A4]
005DD72D C1C7 07 ROL EDI,7
005DD730 89B8 B8000000 MOV DWORD PTR DS:[EAX+B8],EDI
005DD736 B8 00000000 MOV EAX,0
005DD73B 5F POP EDI
005DD73C C9 LEAVE
005DD73D C3 RETN
呵呵,我们F8往下走看看
005DD730 89B8 B8000000 MOV DWORD PTR DS:[EAX+B8],EDI
005DD736 B8 00000000 MOV EAX,0
005DD73B 5F POP EDI ; qqkav.00508200
005DD73C C9 LEAVE
005DD73D C3 RETN
在005DD73B处看到,EDI=00508200
ctrl+g,输入00508200
在00508200处下断,shift+f9来到00508200处
00508200 /EB 06 JMP SHORT qqkav.00508208
00508202 |68 F8C80C00 PUSH 0CC8F8
00508207 |C3 RETN
00508208 \9C PUSHFD
00508209 60 PUSHAD
0050820A E8 02000000 CALL qqkav.00508211
0050820F 33C0 XOR EAX,EAX
00508211 8BC4 MOV EAX,ESP
00508213 83C0 04 ADD EAX,4
00508216 93 XCHG EAX,EBX
00508217 8BE3 MOV ESP,EBX
00508219 8B5B FC MOV EBX,DWORD PTR DS:[EBX-4]
0050821C 81EB 3F904000 SUB EBX,qqkav.0040903F
00508222 87DD XCHG EBP,EBX
00508224 8B85 E6904000 MOV EAX,DWORD PTR SS:[EBP+4090E6]
0050822A 0185 33904000 ADD DWORD PTR SS:[EBP+409033],EAX
看到下面这里的信息,呵呵,典型的入口,再进行脱壳
00508208 \9C PUSHFD
00508209 60 PUSHAD
我这里是采用手动跟到OEP的,但经过测试,用ESP定律下断,很快就找到了OEP
这里就不多说ESP定律了,不知道的可以去看看,看雪的入门文章,好,来到这里
005D9546 85C0 TEST EAX,EAX
005D9548 ^ 0F85 9DFDFFFF JNZ qqkav.005D92EB
005D954E 61 POPAD
005D954F 9D POPFD
005D9550 50 PUSH EAX
005D9551 68 F8C84C00 PUSH qqkav.004CC8F8
005D9556 C2 0400 RETN 4
005D9559 8BB5 5B974000 MOV ESI,DWORD PTR SS:[EBP+40975B]
F8往下走来到OEP处
004CC8F8 55 PUSH EBP
004CC8F9 8BEC MOV EBP,ESP
004CC8FB 83C4 F0 ADD ESP,-10
004CC8FE B8 98C54C00 MOV EAX,qqkav.004CC598
004CC903 E8 DCA4F3FF CALL qqkav.00406DE4
004CC908 A1 C8EB4C00 MOV EAX,DWORD PTR DS:[4CEBC8]
004CC90D 8B00 MOV EAX,DWORD PTR DS:[EAX]
004CC90F E8 085EF9FF CALL qqkav.0046271C
004CC914 A1 C8EB4C00 MOV EAX,DWORD PTR DS:[4CEBC8]
004CC919 8B00 MOV EAX,DWORD PTR DS:[EAX]
004CC91B 33D2 XOR EDX,EDX
004CC91D E8 065AF9FF CALL qqkav.00462328
004CC922 8B0D 9CE84C00 MOV ECX,DWORD PTR DS:[4CE89C] ; qqkav.004CFE34
004CC928 A1 C8EB4C00 MOV EAX,DWORD PTR DS:[4CEBC8]
004CC92D 8B00 MOV EAX,DWORD PTR DS:[EAX]
OK直接脱壳,IAT修复下,程序运行起来了.算法篇且听下回分解,有兴趣的朋友可以自己研究下,这里提示下:软件采用TEA+RSA算法。
[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法