1. 使用PEID v0.94检测为Armadillo 3.78 - 4.xx - Silicon Realms Toolworks
Vi检测为Armadillo V3.75? big (glue) .adata
观看执行绪只有一个进程
2. 乎略异常项目加入
C0000005 (ACCESS VIOLATION)
C0000008 (INVALID HANDLE)
C000001D (ILLEGAL INSTRUCTION)
C000001E (INVALID LOCK SEQUENCE)
C0000096 (PRIVILEGED INSTRUCTION)
插件选择IsDebugPresent>Hide
下硬断he GetModuleHandleA+5
3. 0105B000 > 60 pushad ;程序载入点
0105B001 E8 00000000 call NOTEPAD.0105B006
0105B006 5D pop ebp
0105B007 50 push eax
0105B008 51 push ecx
0105B009 0FCA bswap edx
0105B00B F7D2 not edx
0105B00D 9C pushfd
******************************************************
堆栈区为
0007FFC4 7C816FD7 返回到 kernel32.7C816FD7
0007FFC8 7C930738 ntdll.7C930738
0007FFCC FFFFFFFF
0007FFD0 7FFDE000
Shift+F9 run
第一次
00079500 |00B76DF3 返回到 00B76DF3 来自 kernel32.GetModuleHandleA
00079504 |00B8BC1C ASCII "kernel32.dll"
00079508 |00B8CEC4 ASCII "VirtualAlloc"
第二次
00079500 |00B76E10 返回到 00B76E10 来自 kernel32.GetModuleHandleA
00079504 |00B8BC1C ASCII "kernel32.dll"
00079508 |00B8CEB8 ASCII "VirtualFree"
第三次
00079264 |00B65CE1 返回到 00B65CE1 来自 kernel32.GetModuleHandleA
00079268 |000793B4 ASCII "kernel32.dll"
因该是这里了吧,可以返回了ALT+F9,取消硬体断点
00B65CE1 8B0D AC40B900 mov ecx,dword ptr ds:[B940AC]
00B65CE7 89040E mov dword ptr ds:[esi+ecx],eax
00B65CEA A1 AC40B900 mov eax,dword ptr ds:[B940AC]
00B65CEF 391C06 cmp dword ptr ds:[esi+eax],ebx
00B65CF2 75 16 jnz short 00B65D0A
00B65CF4 8D85 B4FEFFFF lea eax,dword ptr ss:[ebp-14C]
00B65CFA 50 push eax
00B65CFB FF15 BC62B800 call dword ptr ds:[B862BC] ; kernel32.LoadLibraryA
00B65D01 8B0D AC40B900 mov ecx,dword ptr ds:[B940AC]
00B65D07 89040E mov dword ptr ds:[esi+ecx],eax
00B65D0A A1 AC40B900 mov eax,dword ptr ds:[B940AC]
00B65D0F 391C06 cmp dword ptr ds:[esi+eax],ebx
00B65D12 0F84 2F010000 je 00B65E47 ;magic jump(修改为jmp)
00B65D18 33C9 xor ecx,ecx
00B65D1A 8B07 mov eax,dword ptr ds:[edi]
00B65D1C 3918 cmp dword ptr ds:[eax],ebx
00B65D1E 74 06 je short 00B65D26
00B65D20 41 inc ecx
00B65D21 83C0 0C add eax,0C
00B65D12 /E9 30010000 jmp 00B65E47
00B65D17 |90 nop
回车跟随
00B65E47 83C7 0C add edi,0C
00B65E4A 89BD 78FDFFFF mov dword ptr ss:[ebp-288],edi
00B65E50 83C6 04 add esi,4
00B65E53 395F FC cmp dword ptr ds:[edi-4],ebx
00B65E56 ^ 0F85 49FEFFFF jnz 00B65CA5
00B65E5C EB 03 jmp short 00B65E61 ;F2设断
00B65E5E D6 salc
00B65E5F D6 salc
00B65E5C设断后,Shift+f9,run到此处取消断点
向上拉至magic jmp的地址,并撤消选择
ALT+M
地址=01001000 ;在此段F2下断点,SHIFT+F9,run
大小=00008000
Owner=NOTEPAD
区段=.text
类型=Imag 01001002
访问=R
初始访问=RWE
按右键点击”设置记忆体访问断点(A)”
重点来了
00B71A88 8302 49 add dword ptr ds:[edx],49
00B71A8B 46 inc esi
00B71A8C BA 6B73B671 mov edx,71B6736B
00B71A91 06 push es
00B71A92 B3 BE mov bl,0BE
00B71A94 2D C7AF1651 sub eax,5116AFC7
00B71A99 45 inc ebp
00B71A9A AE scas byte ptr es:[edi]
00B71A9B 0A67 9C or ah,byte ptr ds:[edi-64]
00B71A9E 8B2CE4 mov ebp,dword ptr ss:[esp]
00B71AA1 5D pop ebp
00B71AA2 29A3 29A7EEC1 sub dword ptr ds:[ebx+C1EEA729],>
00B71AA8 60 pushad
红海一片,似我的鲜血
OD的左下角出现‘被?#123;试程序无法处理异常’
按shift+F9会变成程序已终止,退出代码C000005
上述是我用的第一个方法,一直卡在红海这里….恨啊
我又找到用初开始用BP GetModuleHandleA+5下断的方式如下
1. 一样乎略以下几个错误
C0000005 (ACCESS VIOLATION)
C0000008 (INVALID HANDLE)
C000001D (ILLEGAL INSTRUCTION)
C000001E (INVALID LOCK SEQUENCE)
C0000096 (PRIVILEGED INSTRUCTION)
2. 下断BP GetModuleHandleA+5,Shift+F9 RUN
堆栈变化如下
0007FFC4 7C816FD7 返回到 kernel32.7C816FD7
0007FFC8 7C930738 ntdll.7C930738
第一次
0007FF0C 0007FF98
0007FF10 0104730B 返回到 NOTEPAD.0104730B 来自 kernel32.GetModuleHandleA
0007FF14 00000000
第二次
0007F710 /0007F778
0007F714 |01031EF3 返回到 NOTEPAD.01031EF3 来自 kernel32.GetModuleHandleA
第三次
00079500 |00B76DF3 返回到 00B76DF3 来自 kernel32.GetModuleHandleA
00079504 |00B8BC1C ASCII "kernel32.dll"
00079508 |00B8CEC4 ASCII "VirtualAlloc"
第四次
00079500 |00B76E10 返回到 00B76E10 来自 kernel32.GetModuleHandleA
00079504 |00B8BC1C ASCII "kernel32.dll"
00079508 |00B8CEB8 ASCII "VirtualFree"
第五次
00079264 |00B65CE1 返回到 00B65CE1 来自 kernel32.GetModuleHandleA
00079268 |000793B4 ASCII "kernel32.dll"
取消断点,ALT+F9返回
00B65CE1 8B0D AC40B900 mov ecx,dword ptr ds:[B940AC]
00B65CE7 89040E mov dword ptr ds:[esi+ecx],eax
00B65CEA A1 AC40B900 mov eax,dword ptr ds:[B940AC]
00B65CEF 391C06 cmp dword ptr ds:[esi+eax],ebx
00B65CF2 75 16 jnz short 00B65D0A
00B65CF4 8D85 B4FEFFFF lea eax,dword ptr ss:[ebp-14C]
00B65CFA 50 push eax
00B65CFB FF15 BC62B800 call dword ptr ds:[B862BC] ; kernel32.LoadLibraryA
00B65D01 8B0D AC40B900 mov ecx,dword ptr ds:[B940AC]
00B65D07 89040E mov dword ptr ds:[esi+ecx],eax
00B65D0A A1 AC40B900 mov eax,dword ptr ds:[B940AC]
00B65D0F 391C06 cmp dword ptr ds:[esi+eax],ebx
00B65D12 0F84 2F010000 je 00B65E47 ;magic jump(改为JMP)
00B65D18 33C9 xor ecx,ecx
00B65D1A 8B07 mov eax,dword ptr ds:[edi]
00B65D1C 3918 cmp dword ptr ds:[eax],ebx
00B65D1E 74 06 je short 00B65D26
3. ALT+M
记忆体断点法,直达OEP
地址=01001000 ;在此段F2下断点,SHIFT+F9,run
大小=00008000
Owner=NOTEPAD
区段=.text
类型=Imag 01001002
访问=R
初始访问=RWE
00B71A7C F62D AA0D4E34 imul byte ptr ds:[344E0DAA]
00B71A82 F3: prefix rep:
00B71A83 8E32 mov seg?,word ptr ds:[edx] ; 不明确的段位寄存器
00B71A85 16 push ss
00B71A86 AB stos dword ptr es:[edi]
00B71A87 213B and dword ptr ds:[ebx],edi
00B71A89 89D9 mov ecx,ebx
00B71A8B E5 E7 in eax,0E7
00B71A8D 0181 8E1B889C add dword ptr ds:[ecx+9C881B8E],>
00B71A93 B2 5B mov dl,5B
00B71A95 4C dec esp
@@又一片红海了
这是为什么?
找了蛮多资料,总是失败于红海,应该是我没用心去理解
希望大大们指出我操作错误的地方?
请指教@@
附上调试的NOTEPAD
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)