一个外挂程序,Armadillo壳,下载地址
http://www.cy55.com/cycs/cycs_51227.exe
初步判断是单进程,但是不是标准不知道
听FLY老大的 不使用OpenMutexA断点
程序载入后停在这里
00664000 > $ 60 PUSHAD
00664001 . E8 00000000 CALL mir3adva.00664006
00664006 $ 5D POP EBP
00664007 . 50 PUSH EAX
00664008 . 51 PUSH ECX
00664009 . EB 0F JMP SHORT mir3adva.0066401A
0066400B B9 DB B9
0066400C > EB 0F JMP SHORT mir3adva.0066401D
0066400E > B8 EB07B9EB MOV EAX,EBB907EB
直接下 BP GetModuleHandleA 断点
F9
SHIFT+F9
SHIFT+F9
堆栈内容
1
0012FF10 0065C931 /CALL 到 GetModuleHandleA
0012FF14 00000000 \pModule = NULL
0012FF18 00000000
0012FF1C 00141F0E
2
0012FF10 0065C931 mir3adva.0065C931
0012FF14 00000000
0012FF18 00000000
0012FF1C 00141F0E
3
00E9F18C 77E5A5D9 返回到 kernel32.77E5A5D9 来自 kernel32.GetModuleHandleA
00E9F190 00000000
00E9F194 77E601B8 返回到 kernel32.77E601B8 来自 kernel32.77E5A5D2
00E9F198 00000000
4
00E9F588 77C059FC 返回到 77C059FC 来自 kernel32.GetModuleHandleA
00E9F58C 77BE31AC ASCII "kernel32.dll"
00E9F590 77C2CA20
00E9F594 00000000
5
0012ED50 70C19BDE 返回到 SHLWAPI.70C19BDE 来自 kernel32.GetModuleHandleA
0012ED54 70BDD3D0 ASCII "KERNEL32.DLL"
0012ED58 00000000
0012ED5C 70BD0000 SHLWAPI.70BD0000
6
00E9F6A0 702D8DB9 返回到 urlmon.702D8DB9 来自 kernel32.GetModuleHandleA
00E9F6A4 702D989C ASCII "kernel32.dll"
00E9F6A8 7030BA30 urlmon.7030BA30
00E9F6AC 00000000
7
00E9F6DC 702C6C94 返回到 urlmon.702C6C94 来自 kernel32.GetModuleHandleA
00E9F6E0 702C6CA4 ASCII "shlwapi.dll"
00E9F6E4 702C6CB0 ASCII "DelayLoadFailureHook"
00E9F6E8 702BF76B 返回到 urlmon.702BF76B 来自 urlmon.702C6C84
8
00E9F6A8 77103426 返回到 OLEAUT32.77103426 来自 kernel32.GetModuleHandleA
00E9F6AC 77172D94 ASCII "KERNEL32.DLL"
00E9F6B0 771033EA 返回到 OLEAUT32.771033EA 来自 OLEAUT32.7710341B
00E9F6B4 77172BB4 OLEAUT32.77172BB4
9
00E9F6A4 77103426 返回到 OLEAUT32.77103426 来自 kernel32.GetModuleHandleA
00E9F6A8 77172D94 ASCII "KERNEL32.DLL"
00E9F6AC 7710348D 返回到 OLEAUT32.7710348D 来自 OLEAUT32.7710341B
00E9F6B0 77172BD8 OLEAUT32.77172BD8
10
00E9F76C 7021B770 返回到 WININET.7021B770 来自 kernel32.GetModuleHandleA
00E9F770 70217AC0 ASCII "KERNEL32"
00E9F774 7021C906 返回到 WININET.7021C906 来自 WININET.7021B755
00E9F778 00000001
11
0012F518 006481E8 mir3adva.006481E8
0012F51C 00000000
0012F520 00000000
0012F524 00F040E4
12
0012BE5C 00F06A5E 返回到 00F06A5E 来自 kernel32.GetModuleHandleA
0012BE60 0012BF98 ASCII "kernel32.dll" 看坛子里有位达人说前面两个地址靠得很近就是返回时机了,这里取消断点按Ctrl+F9&F7返回
0012BE64 0012EF60
0012BE68 010B1D98
返回到这里
00F06A5E 8B0D 0876F300 MOV ECX,DWORD PTR DS:[F37608]
00F06A64 89040E MOV DWORD PTR DS:[ESI+ECX],EAX
00F06A67 A1 0876F300 MOV EAX,DWORD PTR DS:[F37608]
00F06A6C 393C06 CMP DWORD PTR DS:[ESI+EAX],EDI
00F06A6F 75 16 JNZ SHORT 00F06A87
00F06A71 8D85 B4FEFFFF LEA EAX,DWORD PTR SS:[EBP-14C]
00F06A77 50 PUSH EAX
00F06A78 FF15 CCC0F200 CALL DWORD PTR DS:[F2C0CC] ; kernel32.LoadLibraryA
00F06A7E 8B0D 0876F300 MOV ECX,DWORD PTR DS:[F37608]
00F06A84 89040E MOV DWORD PTR DS:[ESI+ECX],EAX
00F06A87 A1 0876F300 MOV EAX,DWORD PTR DS:[F37608]
00F06A8C 393C06 CMP DWORD PTR DS:[ESI+EAX],EDI
00F06A8F 0F84 AD000000 JE 00F06B42 改这里为JMP
00F06A95 33C9 XOR ECX,ECX
把00F06A8F处为JMP 00F06B42 不知道是不是这里
然后再下bp GetCurrentThreadId 断点
接下来就开始郁闷了,好像一直在转呀转的,昨天晚上被我碰到一次找到了OEP 4e85b4
堆栈内容
1
0012B748 66001E3A /CALL 到 GetCurrentThreadId 来自 66001E34
0012B74C 00000001
0012B750 66001C1E 返回到 66001C1E 来自 66001DE6
0012B754 66001B64 返回到 66001B64 来自 66001B90
2
0012B728 66003505 /CALL 到 GetCurrentThreadId 来自 660034FF
0012B72C 00000000
0012B730 6610E470
0012B734 6610E4D8
3
0012C0D4 010B1D98
0012C0D8 0012EF60
0012C0DC /0012ED4C
0012C0E0 |00F1DB60 返回到 00F1DB60 来自 00F241A0
4
0012B984 73D3B003 /CALL 到 GetCurrentThreadId 来自 73D3AFFD
0012B988 00000000
0012B98C 73E03738
0012B990 73D30000
5
0012B548 77C07BA7 /CALL 到 GetCurrentThreadId 来自 msvcrt.77C07BA1
0012B54C 00000000
0012B550 00000104
0012B554 77C00E17 返回到 msvcrt.77C00E17 来自 msvcrt.77C07B52
6
0012B718 77197D86 /CALL 到 GetCurrentThreadId 来自 ole32.77197D80
0012B71C 0015A278
0012B720 019ED004 BCGCBPRO.019ED004
0012B724 00000002
7
0012B6DC 77190A01 /CALL 到 GetCurrentThreadId 来自 ole32.771909FB
0012B6E0 0015A168
0012B6E4 00000000
0012B6E8 /0012B710
8
0012B720 771B22B4 /CALL 到 GetCurrentThreadId 来自 ole32.771B22AE
0012B724 /0012B764 如果按之前的判断方法在这里返回根本不对
0012B728 |771B2258 返回到 ole32.771B2258 来自 ole32.771B2267
0012B72C |77284534 ole32.77284534
9
......................
N多次以后就到了
今天再怎么找都找不到返回的时机了,不知道在什么地方返回,好像要按N多次F9,请哪位达人看下不吝赐教.是不是有什么技巧可言.谢谢.
另外,昨天我也尝试着修复了一下,可是修复后运行程序提示一个DLL不可用,用LORDPE 重建了下文件后不提示DLL出错了,直接就等半天出错.
还有上面有段代码好像怎么弄都排不齐,大家将点看吧.
[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法