已测环境 :
XP SP2 ' SP3
原版 OD + StrongOD 0.4.1.716
这个壳最近好像很夯. 最常见到的帖子就是 "无法下断点"
壳用的方法虽非首创, 但用得好杀伤力很大.
研究一个壳若 *无法下断点 的话, 只能在上面飞来飞去的,
这是不行的, 没办法研究的.
后面会提供一个附件(一个Crackme), 正常 Run 起会有 8 个 Thread.
Main Thread 不说, 其它全是 Anti 调试.
这时刚好可先确定你的 OD 不下任何断点时, 按 F9 能执行起来才行.
否则请先检查你的 OD.
原理可能你下面的内容边看就能边了解到了.
----
开始
----
用OD载入后要怎么弄呢? 首先我们在 KiUserExceptionDispatcher 的第 1 条
指令按 F2 设软断, 按 F9 Run
第 1 次断下时, 此时 : [ESP+8]=80000003
此时模块己 Shadow 进来, 且尚未建立 Anti 的 Thread
第 2 次断下时, 此时 : [ESP+8]=80000004
看 CPU 窗口, 记下 Dr0~3 四个值.
看 Stack 窗口, 记下 [ESP+14] 值. 此样本为 42F765
这 5 个值为这 Case 专用的.
OD 重新载入 ...
断'停在第 1 次 KiUserExceptionDispatcher , 不要乱动.
完成下面5项,就任你调试了.
(1)
在内存里找 CreateThread 的 Shadow :
癈了他. 请将第一条指令改成 ret 18, 如 :
shadow_CreateThread
00D1FB55 8BFF mov edi, edi ;改成 ret 18
00D1FB57 55 push ebp
00D1FB58 8BEC mov ebp, esp
00D1FB5A FF75 1C push dword ptr [ebp+1C]
00D1FB5D FF75 18 push dword ptr [ebp+18]
00D1FB60 FF75 14 push dword ptr [ebp+14]
00D1FB63 FF75 10 push dword ptr [ebp+10]
00D1FB66 FF75 0C push dword ptr [ebp+C]
00D1FB69 FF75 08 push dword ptr [ebp+8]
00D1FB6C 6A FF push -1
00D1FB6E E8 D9FDFFFF call 00D1F94C
00D1FB73 5D pop ebp
00D1FB74 C2 1800 ret 18
Shadow_GetThreadContext
00D488DD 8BFF mov edi, edi
00D488DF 55 push ebp
00D488E0 8BEC mov ebp, esp
00D488E2 FF75 0C push dword ptr [ebp+C]
00D488E5 FF75 08 push dword ptr [ebp+8]
00D488E8 FF15 EA0ED100 call [D10EEA]
00D488EE 85C0 test eax, eax
00D488F0 0F8C 57B60000 jl 00D53F4D
00D488F6 33C0 xor eax, eax
00D488F8 40 inc eax
00D488F9 5D pop ebp
00D488FA C2 0800 ret 8 ;jmp 00E41F90
00D488FD 90 nop
00D488FE 90 nop
00D488FF 90 nop
00D48900 90 nop
00D48901 90 nop
00E41F90 50 push eax
00E41F91 8B4424 0C mov eax, [esp+C]
00E41F95 8038 10 cmp byte ptr [eax], 10
00E41F98 75 16 jnz short 00E41FB0
00E41F9A 33D2 xor edx, edx
00E41F9C 8950 04 mov [eax+4], edx ;clr Dr0~3
00E41F9F 8950 08 mov [eax+8], edx
00E41FA2 8950 0C mov [eax+C], edx
00E41FA5 8950 10 mov [eax+10], edx
00E41FA8 52 push edx
00E41FA9 6A 04 push 4 ;Index
00E41FAB E8 457C9C7B call kernel32.TlsSetValue
00E41FB0 58 pop eax
00E41FB1 C2 0800 ret 8
mov al, 1
ret 8
vm.ds:[imm]
0042F763 8B01 mov eax, [ecx] ;jmp 00534FC5
0042F765 8D1C33 lea ebx, [ebx+esi]
0042F768 ^ 7E B9 jle short 0042F723
0042F76A ^ 7F CB jg short 0042F737
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)