手脱 Armadillo 3.78 - 4.xx -> Silicon Realms Toolworks
这是一个穿山甲的壳。。。当运行它后,在任务窗口,只发现有一个进程,
那么我们就用常规的方法来处理它。。。
首先,用OD载入, 下 GetModuleHandleA+5 这个断点,然后 shift+F9 运行。
观察堆栈窗口
001292A4 /0012EBB0
001292A8 |00BC6AA1 返回到 00BC6AA1 来自 kernel32.GetModuleHandleA
001292AC |00BDBD6C ASCII "kernel32.dll"
001292B0 |00BDDDAC ASCII "VirtualAlloc"
这个就是一个标志,说明快到了。。在运行。。
00129008 /001292A8
0012900C |00BB5A14 返回到 00BB5A14 来自 kernel32.GetModuleHandleA
00129010 |0012915C ASCII "kernel32.dll"
00129014 |0012EA58
这就到了。。。
删除硬件断点,返回到程序代码。。。
会发现有两个跳转,有个是大跨度的,,那就是 magic jump;;; 将它改为 jmp
00BB5A25 /75 16 JNZ SHORT 00BB5A3D
00BB5A27 |8D85 B4FEFFFF LEA EAX,DWORD PTR SS:[EBP-14C]
00BB5A2D |50 PUSH EAX
00BB5A2E |FF15 B862BD00 CALL DWORD PTR DS:[BD62B8] ; kernel32.LoadLibraryA
00BB5A34 |8B0D 6C50BE00 MOV ECX,DWORD PTR DS:[BE506C]
00BB5A3A |89040E MOV DWORD PTR DS:[ESI+ECX],EAX
00BB5A3D /A1 6C50BE00 MOV EAX,DWORD PTR DS:[BE506C]
00BB5A42 391C06 CMP DWORD PTR DS:[ESI+EAX],EBX
00BB5A45 0F84 2F010000 JE 00BB5B7A // 他就是了
00BB5A4B 33C9 XOR ECX,ECX
00BB5A4D 8B07 MOV EAX,DWORD PTR DS:[EDI]
00BB5A4F 3918 CMP DWORD PTR DS:[EAX],EBX
然后呢??? 来到它跳向的地方观察。。。
00BB5B4E 8B85 ACFEFFFF MOV EAX,DWORD PTR SS:[EBP-154]
00BB5B54 8B00 MOV EAX,DWORD PTR DS:[EAX]
00BB5B56 85C0 TEST EAX,EAX
00BB5B58 ^ 0F85 34FFFFFF JNZ 00BB5A92
00BB5B5E 8BBD 78FDFFFF MOV EDI,DWORD PTR SS:[EBP-288]
00BB5B64 A1 6C50BE00 MOV EAX,DWORD PTR DS:[BE506C]
00BB5B69 8D1C06 LEA EBX,DWORD PTR DS:[ESI+EAX]
00BB5B6C B9 580ABE00 MOV ECX,0BE0A58
00BB5B71 E8 A6330000 CALL 00BB8F1C
00BB5B76 3103 XOR DWORD PTR DS:[EBX],EAX
00BB5B78 33DB XOR EBX,EBX
00BB5B7A 83C7 0C ADD EDI,0C
00BB5B7D 89BD 78FDFFFF MOV DWORD PTR SS:[EBP-288],EDI
00BB5B83 83C6 04 ADD ESI,4
00BB5B86 395F FC CMP DWORD PTR DS:[EDI-4],EBX
00BB5B89 ^ 0F85 49FEFFFF JNZ 00BB59D8
00BB5B8F EB 03 JMP SHORT 00BB5B94 //在这下断..
00BB5B91 D6 SALC
00BB5B92 D6 SALC
断下后,将原来改动的跳转还原,应为程序会检测到代码是否后被修改,
然后 在下一个断点。。bp CreateThread
断下后,F8 一路向下,跟着代码走就行,看到有 call ecx 或则 call edx 的就
进入。。
便会看到程序的OEP 了。。。。