文件名称: AOTE FIPS
狗壳:据说是Rocky4的壳
特殊标志:RY4SHL区段
带狗脱壳
软件拿到手上惯例Peid一下,什么也没有找到
继续惯例OllyDbg打开程序停在下面位置
008D4600 A> E8 D8020000 call AOTE-DJ.008D48DD
008D4605 EB 22 jmp short AOTE-DJ.008D4629
008D4607 80BA 3038857F 8A cmp byte ptr ds:[edx+7F853830],8A
008D460E 43 inc ebx
008D460F 9B wait
008D4610 192A sbb dword ptr ds:[edx],ebp
008D4612 FD std
008D4613 FB sti
008D4614 ^ E1 8B loopde short AOTE-DJ.008D45A1
008D4616 CA 237B retf 7B23
008D4619 58 pop eax
008D461A 847A AA test byte ptr ds:[edx-56],bh
008D461D F8 clc
不用说拉,一定是F7进去啦。
下面一路F8
慢慢的我们就到了这个位置啦...不要图方便直接下断点,要慢慢来
008C8760 /74 20 je short AOTE-DJ.008C8782
008C8762 |6A 00 push 0
008C8764 |6A 00 push 0
008C8766 |68 78E28A00 push AOTE-DJ.008AE278
008C876B |E8 2EFDFFFF call AOTE-DJ.008C849E
008C8770 |59 pop ecx
008C8771 |50 push eax
008C8772 |6A 00 push 0
008C8774 |FF15 FC818A00 call dword ptr ds:[8A81FC]
008C8760 Anti的判断位置,这个位置不跳就要弹出一个对话框,那么在着个位置的时候修改Z flag,或者直接改成 jmp short 008c8782 都可以.
经过两次retn后我们来到程序领空啦
0041EF30 55 push ebp
0041EF31 8BEC mov ebp,esp
0041EF33 6A FF push -1
0041EF35 68 60214200 push AOTE-DJ.00422160
0041EF3A 68 36F14100 push AOTE-DJ.0041F136
0041EF3F 64:A1 00000000 mov eax,dword ptr fs:[0]
0041EF45 50 push eax
0041EF46 64:8925 00000000 mov dword ptr fs:[0],esp
0041EF4D 83C4 94 add esp,-6C
0041EF50 53 push ebx
0041EF51 56 push esi
0041EF52 57 push edi
0041EF53 8965 E8 mov dword ptr ss:[ebp-18],esp
0041EF56 C745 FC 00000000 mov dword ptr ss:[ebp-4],0
0041EF5D 6A 02 push 2
0041EF5F FF15 C0014200 call dword ptr ds:[4201C0]
记录一下:
oep = 0041EF30
程序结构上看蛮熟悉的哦?VC++
观察一下
0041EF5F FF15 C0014200 call dword ptr ds:[4201C0]
ds:[004201C0]=01B70745
那么转到 01B70745
01B70745 /EB 01 jmp short 01B70748
01B70747 |1A68 D0 sbb ch,byte ptr ds:[eax-30]
01B7074A A4 movs byte ptr es:[edi],byte ptr ds:[esi]
01B7074B 2010 and byte ptr ds:[eax],dl
01B7074D EB 02 jmp short 01B70751
01B7074F 0A11 or dl,byte ptr ds:[ecx]
01B70751 C3 retn
有点乱乱的,Junk啦, 转到 01B70748 看看
01B70748 68 D0A42010 push MSVCRTD.__set_app_type
哦,真的哦.你知道是什么啦
下面观察一下1B70000区段 知道这样几个问题
EB 02
EB 01
这些jmp 只跳转一个位置,或者两个位置.
手工修复IAT吧
下硬件断点
hw 4201C0 (写入的时候中断)
重新载入程序,现在直接F9吧
观察一下代码
008C900C FF75 EC push dword ptr ss:[ebp-14]
008C900F FF75 CC push dword ptr ss:[ebp-34]
008C9012 FF55 D8 call dword ptr ss:[ebp-28]
008C9015 59 pop ecx
008C9016 8945 C8 mov dword ptr ss:[ebp-38],eax
008C9019 85C0 test eax,eax
008C901B 59 pop ecx
008C901C 75 25 jnz short AOTE-DJ.008C9043
008C901E FF75 F0 push dword ptr ss:[ebp-10]
008C9021 817D EC FFFF0000 cmp dword ptr ss:[ebp-14],0FFFF
008C9028 8D85 C4FEFFFF lea eax,dword ptr ss:[ebp-13C]
008C902E FF75 EC push dword ptr ss:[ebp-14]
008C9031 50 push eax
008C9032 76 07 jbe short AOTE-DJ.008C903B
008C9034 E8 E8F8FFFF call AOTE-DJ.008C8921
008C9039 EB 05 jmp short AOTE-DJ.008C9040
008C903B E8 27F9FFFF call AOTE-DJ.008C8967
008C9040 83C4 0C add esp,0C
008C9043 8B45 FC mov eax,dword ptr ss:[ebp-4]
008C9046 8B4D C8 mov ecx,dword ptr ss:[ebp-38]
008C9049 25 FFFFFF7F and eax,7FFFFFFF
008C904E 0343 04 add eax,dword ptr ds:[ebx+4]
008C9051 837D D4 00 cmp dword ptr ss:[ebp-2C],0
008C9055 8945 FC mov dword ptr ss:[ebp-4],eax
008C9058 8908 mov dword ptr ds:[eax],ecx
008C905A 75 03 jnz short AOTE-DJ.008C905F
008C905C 894D D4 mov dword ptr ss:[ebp-2C],ecx
008C905F 807D 0B 00 cmp byte ptr ss:[ebp+B],0
008C9063 ^ 0F85 06FFFFFF jnz AOTE-DJ.008C8F6F
008C9069 FF75 EC push dword ptr ss:[ebp-14]
008C906C E8 3FE1FEFF call AOTE-DJ.008B71B0
008C9071 50 push eax
记录下来这个位置.
008C9058 8908 mov dword ptr ds:[eax],ecx 写的地方就是这里
现在下硬件断点
hw 41EF30 (就是开始解密程序实体部分)
找到下面的retn.下断 F9 过去
转到 008C9058 这个位置
通过上面的观察我们在程序末尾找一个空白的地方 写上一段代码
008DBF00 81F9 0000B801 cmp ecx,1B80000
008DBF06 7D 2D jge short AOTE-DJ.008DBF35
008DBF08 81F9 0000B701 cmp ecx,1B70000
008DBF0E 7E 25 jle short AOTE-DJ.008DBF35
008DBF10 52 push edx
008DBF11 8079 01 01 cmp byte ptr ds:[ecx+1],1
008DBF15 75 17 jnz short AOTE-DJ.008DBF2E
008DBF17 8B51 04 mov edx,dword ptr ds:[ecx+4]
008DBF1A 8910 mov dword ptr ds:[eax],edx
008DBF1C 837D D4 00 cmp dword ptr ss:[ebp-2C],0
008DBF20 75 27 jnz short AOTE-DJ.008DBF49
008DBF22 90 nop
008DBF23 90 nop
008DBF24 90 nop
008DBF25 90 nop
008DBF26 8955 D4 mov dword ptr ss:[ebp-2C],edx
008DBF29 EB 1E jmp short AOTE-DJ.008DBF49
008DBF2B 90 nop
008DBF2C 90 nop
008DBF2D 90 nop
008DBF2E 8B51 05 mov edx,dword ptr ds:[ecx+5]
008DBF31 8910 mov dword ptr ds:[eax],edx
008DBF33 ^ EB E7 jmp short AOTE-DJ.008DBF1C
008DBF35 8908 mov dword ptr ds:[eax],ecx
008DBF37 837D D4 00 cmp dword ptr ss:[ebp-2C],0
008DBF3B ^ 0F85 1ED1FEFF jnz AOTE-DJ.008C905F
008DBF41 894D D4 mov dword ptr ss:[ebp-2C],ecx
008DBF44 ^ E9 16D1FEFF jmp AOTE-DJ.008C905F
008DBF49 5A pop edx
008DBF4A ^ E9 10D1FEFF jmp AOTE-DJ.008C905F
008DBF4F 90 nop
而原来的 008C9058 内容改成 jmp 008DBF00
下面就是在 0041EF30 处下断点咯(不是硬件断点)
F9过去
下面就是惯例 LordPE ,dump出来.
importRec 输入OEP 1EF30 ,Get一下
好了选择show invalid. -> Trace 1
最后就是Fix啦
程序现在就能打开咯.
谢谢各位
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课