很久没在这个版块发帖了
手脱 Armadillo + aspack 双层加壳之某彩票缩水软件
脱壳机不能用,看区段发现 aspack。
od载入停在这里:
0053B243 >/$ 55 push ebp
0053B244 |. 8BEC mov ebp, esp
0053B246 |. 6A FF push -1
0053B248 |. 68 404F5600 push 00564F40
0053B24D |. 68 80AF5300 push 0053AF80 ; SE 处理程序安装
0053B252 |. 64:A1 0000000>mov eax, dword ptr fs:[0]
0053B258 |. 50 push eax
0053B259 |. 64:8925 00000>mov dword ptr fs:[0], esp
0053B260 |. 83EC 58 sub esp, 58
0053B263 |. 53 push ebx
0053B264 |. 56 push esi
0053B265 |. 57 push edi
0053B266 |. 8965 E8 mov dword ptr [ebp-18], esp
0053B269 |. FF15 88F15500 call dword ptr [<&KERNEL32.GetVersion>; kernel32.GetVersion
0053B26F |. 33D2 xor edx, edx
懒得检测加壳方式了,直接转单进程,此操作方法有很多,举一例:
OpenMutexA 下断,shift + F9 ,中断后,Alt + F9 返回,把 EAX 置1,再shift + F9 ,再中断后,Alt + F9 返回,再把 EAX 置1。
转好后取消断点,shift + F9 ,程序忽忽悠悠地运行了。看来应该不是copyme Ⅱ 。好像这种类型的双层加壳基本不是 copyme Ⅱ 。
重新载入,转单进程,GetModuleHandleA 函数末尾下断点,然后避开输入表加密:
00129528 00BF6DF3 返回到 00BF6DF3 来自 kernel32.GetModuleHandleA
0012952C 00C0BC1C ASCII "kernel32.dll"
00129530 00C0CEC4 ASCII "VirtualAlloc"
00129528 00BF6E10 返回到 00BF6E10 来自 kernel32.GetModuleHandleA
0012952C 00C0BC1C ASCII "kernel32.dll"
00129530 00C0CEB8 ASCII "VirtualFree"
0012928C 00BE5CE1 返回到 00BE5CE1 来自 kernel32.GetModuleHandleA
00129290 001293DC ASCII "kernel32.dll"
00129294 00000000
堆栈如上时,返回:
00BE5CE1 8B0D AC40C100 mov ecx, dword ptr [C140AC]
00BE5CE7 89040E mov dword ptr [esi+ecx], eax
00BE5CEA A1 AC40C100 mov eax, dword ptr [C140AC]
00BE5CEF 391C06 cmp dword ptr [esi+eax], ebx
00BE5CF2 75 16 jnz short 00BE5D0A
00BE5CF4 8D85 B4FEFFFF lea eax, dword ptr [ebp-14C]
00BE5CFA 50 push eax
00BE5CFB FF15 BC62C000 call dword ptr [C062BC] ; kernel32.LoadLibraryA
00BE5D01 8B0D AC40C100 mov ecx, dword ptr [C140AC]
00BE5D07 89040E mov dword ptr [esi+ecx], eax
00BE5D0A A1 AC40C100 mov eax, dword ptr [C140AC]
00BE5D0F 391C06 cmp dword ptr [esi+eax], ebx
00BE5D12 0F84 2F010000 je 00BE5E47 ; 这里 jmp 掉
00BE5D18 33C9 xor ecx, ecx
00BE5D1A 8B07 mov eax, dword ptr [edi]
00BE5D1C 3918 cmp dword ptr [eax], ebx
00BE5D1E 74 06 je short 00BE5D26
00BE5D20 41 inc ecx
00BE5D21 83C0 0C add eax, 0C
取消所有断点,然后code区段下内存写入断点,shift + F9 :
第一次中断:
004FC115 C607 C3 mov byte ptr [edi], 0C3
004FC118 FFD7 call edi
这里到aspack了,下面就是压缩壳过程了。
第二次中断:
004FC11A 8F07 pop dword ptr [edi]
004FC11C 50 push eax
第三次中断:
004FC180 F3:A5 rep movs dword ptr es:[edi], dword p>
中断在上面时,清除code区段的内存写入断点,下面一句下断点:
004FC182 8BC8 mov ecx, eax ; 这里下断
shift + F9 断下,然后code区段下内存访问断点,shift + F9 :
断在oep :
004B91F4 55 push ebp
004B91F5 8BEC mov ebp, esp
004B91F7 83C4 F4 add esp, -0C
004B91FA B8 EC8E4B00 mov eax, 004B8EEC
004B91FF E8 94D7F4FF call 00406998
004B9204 A1 C4C14B00 mov eax, dword ptr [4BC1C4]
004B9209 8B00 mov eax, dword ptr [eax]
004B920B E8 4C61F9FF call 0044F35C
dump出来,Imprec 选中 Use PE Header From Disk 选项,修复iat,完成。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课