第一次异常:
003933A8 9C pushfd
003933A9 804C24 01 01 or byte ptr [esp+1], 1
003933AE 9D popfd
003933AF 90 nop
003933B0 64:8F00 pop dword ptr fs:[eax] ; 0012FF98
第2次异常:
00393402 66:BE 4746 mov si, 4647
00393406 66:BF 4D4A mov di, 4A4D
0039340A CC int3
第3次异常
0039037B 8918 mov dword ptr [eax], ebx ; KRYPTON.0041D400
第4次异常:
00393928 D975 F8 fstenv (28-byte) ptr [ebp-8]
看堆栈
SE句柄=003939DD
003939DD 64:67:A1 0000 mov eax, dword ptr fs:[0]
003939E2 8B20 mov esp, dword ptr [eax]
003939E4 64:67:8F06 0000 pop dword ptr fs:[0]
003939EA E8 00000000 call 003939EF
003939EF 5D pop ebp
003939F0 81ED A2794000 sub ebp, 4079A2
003939F6 80BD FB824000 F>cmp byte ptr [ebp+4082FB], 0FF
003939FD 74 11 je short 00393A10
003939FF 8B8D AFBB4100 mov ecx, dword ptr [ebp+41BBAF]
00393A05 890C24 mov dword ptr [esp], ecx
00393A08 8B95 B6BB4100 mov edx, dword ptr [ebp+41BBB6]
00393A0E FFE2 jmp edx
00393A10 E8 00000000 call 00393A15
00393A15 5D pop ebp
00393A16 81ED C8794000 sub ebp, 4079C8
00393A1C B8 00104000 mov eax, 401000
00393A21 8B8D 00834000 mov ecx, dword ptr [ebp+408300]
00393A27 8D9D 137A4000 lea ebx, dword ptr [ebp+407A13]
00393A2D 899D A8BB4100 mov dword ptr [ebp+41BBA8], ebx
00393A33 8D9D A8BB4100 lea ebx, dword ptr [ebp+41BBA8]
00393A39 66:8138 FF15 cmp word ptr [eax], 15FF
00393A3E 75 09 jnz short 00393A49
00393A40 8378 02 00 cmp dword ptr [eax+2], 0
00393A44 75 03 jnz short 00393A49
00393A46 8958 02 mov dword ptr [eax+2], ebx
00393A49 40 inc eax
00393A4A 49 dec ecx
00393A4B 85C9 test ecx, ecx
00393A4D ^ 75 EA jnz short 00393A39
00393A4F 8B8D AFBB4100 mov ecx, dword ptr [ebp+41BBAF]
00393A55 890C24 mov dword ptr [esp], ecx
00393A58 8B95 B6BB4100 mov edx, dword ptr [ebp+41BBB6]
00393A5E FFE2 jmp edx //到OEP
下面轮到找壳怎么处理IAT:
0040206E $- FF25 C8D04100 jmp dword ptr [41D0C8]
.......................................................
0040210A $- FF25 38D14100 jmp dword ptr [41D138]
随便跟进一个:
003701F0 8135 0B023700 6>xor dword ptr [37020B], 344BB764
003701FA A1 0B023700 mov eax, dword ptr [37020B] //正确的函数指针
003701FF 8135 0B023700 6>xor dword ptr [37020B], 344BB764
00370209 FFE0 jmp eax
上面的就象一个表,观察发现从0037001F开始是这样类似的结构
0037001F 81 35 3A 00 37 00 CB F0 A8 38 A1 3A 00 37 00 81 ?:.7.损??.7.
0037002F 35 3A 00 37 00 CB F0 A8 38 FF E0 69 3A 29 44 81 5:.7.损?鄆:)D
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
0037032F 37 A1 41 03 37 00 81 35 41 03 37 00 F0 E5 88 37 77.?A7.疱?
0037033F FF E0 AA 39 59 40 81 35 60 03 37 00 69 37 F9 22 嗒9Y@?`7.i7?
0037034F A1 60 03 37 00 81 35 60 03 37 00 69 37 F9 22 FF 7.?`7.i7?
0037035F E0 77 06 CB 54 鄔薚..
========================================================================================
下命令:hr 0037001F
00392AE8 43 inc ebx // ebx=0037001F
00392B09 47 inc edi //edi=003931C8
00392B2B 833F 00 cmp dword ptr [edi], 0 //ds:[003931C9]=40719635
00392AA1 8A0F mov cl, byte ptr [edi]
00392AC3 880B mov byte ptr [ebx], cl
00392AE8 43 inc ebx
00392B09 47 inc edi
00392B2B 833F 00 cmp dword ptr [edi], 0
00392AA1 8A0F mov cl, byte ptr [edi]
00392AC3 880B mov byte ptr [ebx], cl
原来这个表是从003931C8的地址copy过来的
003931C8 8135 96714000 1>xor dword ptr [407196], 11111111
003931D2 A1 96714000 mov eax, dword ptr [407196]
003931D7 8135 96714000 1>xor dword ptr [407196], 11111111
003931E1 FFE0 jmp eax
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
到这里我就卡住了,也参考了论坛上关于KRYPTON的脱壳文章,自己研究了下,始终领悟不了,理解能力太差了
不知道怎么样修改代码才可以避开加密IAT
下面我就乱来了,把0037001F开始的当作一个表,现在我的想法是让程序把这个表印射到0040####这样的地址当中!
1。先给未脱壳程序增加一个区段
名称; hhq
虚拟地址: 0004D000
虚拟大小; 00028000 //要尽量大
物理偏移: 00047800
物理大小: 00002000
标志: E0000020
静象大小:00075000
2.
0044BDA1 FF95 0DBE4100 call dword ptr [ebp+41BE0D] //申请内存
0044BDA7 8985 34BE4100 mov dword ptr [ebp+41BE34], eax //EAX=00370000,我改成0044D000
0044BDAD B8 11810100 mov eax, 18111
0044BDB2 6A 40 push 40
0044BDB4 68 00100000 push 1000
0044BDB9 50 push eax
0044BDBA 6A 00 push 0
0044BDBC 50 push eax
0044BDBD 8B85 0DBE4100 mov eax, dword ptr [ebp+41BE0D]
0044BDC3 8038 CC cmp byte ptr [eax], 0CC
0044BDC6 0F84 81000000 je 0044BE4D
0044BDCC 58 pop eax
0044BDCD FF95 0DBE4100 call dword ptr [ebp+41BE0D] //申请内存
0044BDD3 8BF0 mov esi, eax //EAX=00390000,我改成0044F000
其余的同上,到OEP后dump,这个表是被隐射到了004#####这样的地址,
但是DUMP的程序还是有些函数的指针出错了!!!!!
太累了,弄了几天还是搞不明白,希望大虾指点下,比如怎么避开加密
脱壳的真差劲,撞墙!!
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)