按照刹那恍惚的用OD手脱 Armadillo v4.40 DLL壳
1 侦壳:用PEiD查壳 Armadillo 2.51 - 3.xx DLL Stub -> Silicon Realms Toolworks
这里如何判断Arm的版本呢?记得FLY大狭说过Armadillo V4.0新增的反跟踪手段:
OllyDbg在处理调式包含格式串的消息时存在问题,被跟踪的应用程序可以使OllyDbg崩溃,或可能以进程权限执行任意指令。OutputDebugString函数可发送字符串到调试器上,然后OllyDbg会在底端显示相关状态消息,但是如果包含格式串消息,就可能使OllyDbg崩溃。Armadillo以前的版本没有此种Anti,自V4.0始才有。
有他这句话我们就可以做如下判断了:
OD 载入
下断点 HE OutputDebugStringA
Shift+F9 运行,中断下来。看堆栈:
0006EA98 00B8580F /CALL 到 OutputDebugStringA 来自 00B85809
0006EA9C 0006F410 \String = "%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s"
出现这个说明这个DLL是经过Armadillo 4.X压缩过
2 判断进程:DLL文件加壳应该是不可以双进程,所以这里是单进程方式。
清除断点后OD 重新载入
008AFE97 >/$ 55 PUSH EBP ; 停在这里
008AFE98 |. 8BEC MOV EBP,ESP
008AFE9A |. 53 PUSH EBX
008AFE9B |. 8B5D 08 MOV EBX,DWORD PTR SS:[EBP+8]
008AFE9E |. 56 PUSH ESI
下断点 BP GetModuleHandleA+5,Shift+F9 运行中断后,注意看堆栈:
这里用 BP API+5 是为了躲过壳检查是否下过 API 断点,相关资料看雪论坛上面可以找到。
0006ED60 /0006ED7C
0006ED64 |77F45BD8 返回到 77F45BD8 来自 kernel32.GetModuleHandleA
0006ED68 |77F4501C ASCII "KERNEL32.DLL"
00069364 /0006EAAC
00069368 |00B86DF3 返回到 00B86DF3 来自 kernel32.GetModuleHandleA
0006936C |00B9BC1C ASCII "kernel32.dll"
00069370 |00B9CEC4 ASCII "VirtualAlloc"
00069364 /0006EAAC
00069368 |00B86E10 返回到 00B86E10 来自 kernel32.GetModuleHandleA
0006936C |00B9BC1C ASCII "kernel32.dll"
00069370 |00B9CEB8 ASCII "VirtualFree"
000690C8 /00069368
000690CC |00B75CE1 返回到 00B75CE1 来自 kernel32.GetModuleHandleA
000690D0 |0006921C ASCII "kernel32.dll" ; ★ 注意!在这里清除断点后Alt+F9返回程序
这里说下我判断返回的经验,我的经验是一般出现下面这两句就快到返回点了
00069364 /0006EAAC
00069368 |00B86DF3 返回到 00B86DF3 来自 kernel32.GetModuleHandleA
0006936C |00B9BC1C ASCII "kernel32.dll"
00069370 |00B9CEC4 ASCII "VirtualAlloc" ; ★ 注意这句
00069364 /0006EAAC
00069368 |00B86E10 返回到 00B86E10 来自 kernel32.GetModuleHandleA
0006936C |00B9BC1C ASCII "kernel32.dll"
00069370 |00B9CEB8 ASCII "VirtualFree" ; ★ 注意这句
00B75CE1 8B0D AC40BA00 MOV ECX,DWORD PTR DS:[BA40AC] ; 返回到这里
00B75CE7 89040E MOV DWORD PTR DS:[ESI+ECX],EAX
00B75CEA A1 AC40BA00 MOV EAX,DWORD PTR DS:[BA40AC]
00B75CEF 391C06 CMP DWORD PTR DS:[ESI+EAX],EBX
00B75CF2 75 16 JNZ SHORT 00B75D0A
00B75CF4 8D85 B4FEFFFF LEA EAX,DWORD PTR SS:[EBP-14C]
00B75CFA 50 PUSH EAX
00B75CFB FF15 BC62B900 CALL DWORD PTR DS:[B962BC] ; kernel32.LoadLibraryA
00B75D01 8B0D AC40BA00 MOV ECX,DWORD PTR DS:[BA40AC]
00B75D07 89040E MOV DWORD PTR DS:[ESI+ECX],EAX
00B75D0A A1 AC40BA00 MOV EAX,DWORD PTR DS:[BA40AC]
00B75D0F 391C06 CMP DWORD PTR DS:[ESI+EAX],EBX
00B75D12 0F84 2F010000 JE 00B75E47 ; Magic Jump 改 JE 为 JMP 避开 IAT 加密
00B75D18 33C9 XOR ECX,ECX
00B75D1A 8B07 MOV EAX,DWORD PTR DS:[EDI]
00B75D1C 3918 CMP DWORD PTR DS:[EAX],EBX
00B75D1E 74 06 JE SHORT 00B75D26
00B75D20 41 INC ECX
00B75D21 83C0 0C ADD EAX,0C
00B75D24 ^ EB F6 JMP SHORT 00B75D1C
把 00B75D12 这句的 JE 00B75E47 改成 JMP 00B75E47
2 获得重定位信息
下断点 bp GetTickCount,Shift+F9 运行中断后,注意看堆栈:
00069370 00B8C009 /CALL 到 GetTickCount 来自 00B8C003
00069370 00B8C3C8 /CALL 到 GetTickCount 来自 00B8C3C2 ; ★ 注意!在这里清除断点后Alt+F9返回程序
00B8C3C8 2B85 A4D4FFFF SUB EAX,DWORD PTR SS:[EBP-2B5C] ; 返回到这里
00B8C3CE 8B8D A8D4FFFF MOV ECX,DWORD PTR SS:[EBP-2B58]
00B8C3D4 6BC9 32 IMUL ECX,ECX,32
00B8C3D7 81C1 D0070000 ADD ECX,7D0
00B8C3DD 3BC1 CMP EAX,ECX
00B8C3DF 76 07 JBE SHORT 00B8C3E8
00B8C3E1 C685 34D9FFFF 0>MOV BYTE PTR SS:[EBP-26CC],1
00B8C3E8 83BD E4D7FFFF 0>CMP DWORD PTR SS:[EBP-281C],0
00B8C3EF 0F85 8A000000 JNZ 00B8C47F
在 CPU 窗口按 Ctrl+S 查找如下代码
PUSH EAX
XCHG CX,CX
POP EAX
STC
运行到这里找不到这段代码
用F8单步运行后
结果也出来红色代码段为如下请大侠帮忙分析代码这里是重定位吗
00B3CCA6 C705 E0C0B400 6>mov dword ptr ds:[B4C0E0], 0B4CB68 ; ★ 从这里开始出现红色代码
00B3CCB0 A1 E01EB500 mov eax, dword ptr ds:[B51EE0]
00B3CCB5 8B80 70050000 mov eax, dword ptr ds:[eax+570]
00B3CCBB 8985 14D9FFFF mov dword ptr ss:[ebp-26EC], eax
00B3CCC1 83A5 50D9FFFF 0>and dword ptr ss:[ebp-26B0], 0
00B3CCC8 EB 0D jmp short 00B3CCD7
00B3CCCA 8B85 50D9FFFF mov eax, dword ptr ss:[ebp-26B0]
00B3CCD0 40 inc eax
00B3CCD1 8985 50D9FFFF mov dword ptr ss:[ebp-26B0], eax
00B3CCD7 A1 E01EB500 mov eax, dword ptr ds:[B51EE0]
00B3CCDC 66:8B80 6C05000>mov ax, word ptr ds:[eax+56C]
00B3CCE3 66:8985 3CA9FFF>mov word ptr ss:[ebp+FFFFA93C], ax
00B3CCEA 0FB785 3CA9FFFF movzx eax, word ptr ss:[ebp+FFFFA93C]
00B3CCF1 3985 50D9FFFF cmp dword ptr ss:[ebp-26B0], eax
00B3CCF7 0F8D EC010000 jge 00B3CEE9
00B3CCFD 8B85 14D9FFFF mov eax, dword ptr ss:[ebp-26EC]
00B3CD03 8B00 mov eax, dword ptr ds:[eax]
00B3CD05 8985 0CC1FFFF mov dword ptr ss:[ebp-3EF4], eax
00B3CD0B 8B85 14D9FFFF mov eax, dword ptr ss:[ebp-26EC]
00B3CD11 83C0 04 add eax, 4
00B3CD14 8985 14D9FFFF mov dword ptr ss:[ebp-26EC], eax
00B3CD1A 8B85 14D9FFFF mov eax, dword ptr ss:[ebp-26EC]
00B3CD20 8B00 mov eax, dword ptr ds:[eax]
00B3CD22 8985 10C1FFFF mov dword ptr ss:[ebp-3EF0], eax
00B3CD28 8B85 14D9FFFF mov eax, dword ptr ss:[ebp-26EC]
00B3CD2E 83C0 04 add eax, 4
00B3CD31 8985 14D9FFFF mov dword ptr ss:[ebp-26EC], eax
00B3CD37 A1 E49FB500 mov eax, dword ptr ds:[B59FE4]
00B3CD3C 66:8B00 mov ax, word ptr ds:[eax]
00B3CD3F 66:8985 14C1FFF>mov word ptr ss:[ebp-3EEC], ax
00B3CD46 A1 E49FB500 mov eax, dword ptr ds:[B59FE4]
00B3CD4B 40 inc eax
00B3CD4C 40 inc eax
00B3CD4D A3 E49FB500 mov dword ptr ds:[B59FE4], eax
00B3CD52 0FB785 14C1FFFF movzx eax, word ptr ss:[ebp-3EEC]
00B3CD59 50 push eax
00B3CD5A FF35 E49FB500 push dword ptr ds:[B59FE4] ; 复件_Scr.009CF9BE
00B3CD60 8D85 0CB1FFFF lea eax, dword ptr ss:[ebp+FFFFB10C]
00B3CD66 50 push eax
00B3CD67 E8 EC840000 call 00B45258 ; jmp 到 msvcrt.memcpy
00B3CD6C 83C4 0C add esp, 0C
00B3CD6F 0FB785 14C1FFFF movzx eax, word ptr ss:[ebp-3EEC]
00B3CD76 8B0D E49FB500 mov ecx, dword ptr ds:[B59FE4] ; 复件_Scr.009CF9BE
00B3CD7C 03C8 add ecx, eax
00B3CD7E 890D E49FB500 mov dword ptr ds:[B59FE4], ecx
00B3CD84 83BD 0CC1FFFF 0>cmp dword ptr ss:[ebp-3EF4], 0
00B3CD8B 0F84 53010000 je 00B3CEE4
00B3CD91 8B85 10C1FFFF mov eax, dword ptr ss:[ebp-3EF0]
00B3CD97 8985 00B1FFFF mov dword ptr ss:[ebp+FFFFB100], eax
00B3CD9D 8D85 0CB1FFFF lea eax, dword ptr ss:[ebp+FFFFB10C]
00B3CDA3 8985 08B1FFFF mov dword ptr ss:[ebp+FFFFB108], eax
00B3CDA9 0FB785 14C1FFFF movzx eax, word ptr ss:[ebp-3EEC]
00B3CDB0 8B8D 08B1FFFF mov ecx, dword ptr ss:[ebp+FFFFB108]
00B3CDB6 03C8 add ecx, eax
00B3CDB8 898D 04B1FFFF mov dword ptr ss:[ebp+FFFFB104], ecx
00B3CDBE EB 0D jmp short 00B3CDCD
00B3CDC0 8B85 08B1FFFF mov eax, dword ptr ss:[ebp+FFFFB108]
00B3CDC6 40 inc eax
00B3CDC7 8985 08B1FFFF mov dword ptr ss:[ebp+FFFFB108], eax
00B3CDCD 8B85 08B1FFFF mov eax, dword ptr ss:[ebp+FFFFB108]
00B3CDD3 3B85 04B1FFFF cmp eax, dword ptr ss:[ebp+FFFFB104]
00B3CDD9 73 1F jnb short 00B3CDFA
00B3CDDB 8D8D 00B1FFFF lea ecx, dword ptr ss:[ebp+FFFFB100]
00B3CDE1 E8 5A42FDFF call 00B11040
00B3CDE6 8B8D 08B1FFFF mov ecx, dword ptr ss:[ebp+FFFFB108]
00B3CDEC 8A09 mov cl, byte ptr ds:[ecx]
00B3CDEE 32C8 xor cl, al
00B3CDF0 8B85 08B1FFFF mov eax, dword ptr ss:[ebp+FFFFB108]
00B3CDF6 8808 mov byte ptr ds:[eax], cl
00B3CDF8 ^ EB C6 jmp short 00B3CDC0
00B3CDFA 8D85 FCB0FFFF lea eax, dword ptr ss:[ebp+FFFFB0FC]
00B3CE00 50 push eax
00B3CE01 6A 04 push 4
00B3CE03 0FB785 14C1FFFF movzx eax, word ptr ss:[ebp-3EEC]
00B3CE0A 50 push eax
00B3CE0B 8B85 0CD8FFFF mov eax, dword ptr ss:[ebp-27F4]
00B3CE11 0385 0CC1FFFF add eax, dword ptr ss:[ebp-3EF4]
00B3CE17 50 push eax
00B3CE18 FF15 1861B400 call dword ptr ds:[B46118] ; kernel32.VirtualProtect
00B3CE1E A0 BC00B500 mov al, byte ptr ds:[B500BC]
00B3CE23 8885 24A9FFFF mov byte ptr ss:[ebp+FFFFA924], al
00B3CE29 0FB685 24A9FFFF movzx eax, byte ptr ss:[ebp+FFFFA924]
00B3CE30 85C0 test eax, eax
00B3CE32 74 64 je short 00B3CE98
00B3CE34 6A 00 push 0
00B3CE36 0FB785 14C1FFFF movzx eax, word ptr ss:[ebp-3EEC]
00B3CE3D 50 push eax
00B3CE3E 8B85 0CD8FFFF mov eax, dword ptr ss:[ebp-27F4]
00B3CE44 0385 0CC1FFFF add eax, dword ptr ss:[ebp-3EF4]
00B3CE4A 50 push eax
00B3CE4B E8 EA160000 call 00B3E53A
00B3CE50 83C4 0C add esp, 0C
00B3CE53 0FB785 14C1FFFF movzx eax, word ptr ss:[ebp-3EEC]
00B3CE5A 50 push eax
00B3CE5B 8D85 0CB1FFFF lea eax, dword ptr ss:[ebp+FFFFB10C]
00B3CE61 50 push eax
00B3CE62 8B85 0CD8FFFF mov eax, dword ptr ss:[ebp-27F4]
00B3CE68 0385 0CC1FFFF add eax, dword ptr ss:[ebp-3EF4]
00B3CE6E 50 push eax
00B3CE6F E8 E4830000 call 00B45258 ; jmp 到 msvcrt.memcpy
00B3CE74 83C4 0C add esp, 0C
00B3CE77 6A 01 push 1
00B3CE79 0FB785 14C1FFFF movzx eax, word ptr ss:[ebp-3EEC]
00B3CE80 50 push eax
00B3CE81 8B85 0CD8FFFF mov eax, dword ptr ss:[ebp-27F4]
00B3CE87 0385 0CC1FFFF add eax, dword ptr ss:[ebp-3EF4]
00B3CE8D 50 push eax
00B3CE8E E8 A7160000 call 00B3E53A
00B3CE93 83C4 0C add esp, 0C
00B3CE96 EB 24 jmp short 00B3CEBC
00B3CE98 0FB785 14C1FFFF movzx eax, word ptr ss:[ebp-3EEC]
00B3CE9F 50 push eax
00B3CEA0 8D85 0CB1FFFF lea eax, dword ptr ss:[ebp+FFFFB10C]
00B3CEA6 50 push eax
00B3CEA7 8B85 0CD8FFFF mov eax, dword ptr ss:[ebp-27F4]
00B3CEAD 0385 0CC1FFFF add eax, dword ptr ss:[ebp-3EF4]
00B3CEB3 50 push eax
00B3CEB4 E8 9F830000 call 00B45258 ; jmp 到 msvcrt.memcpy
00B3CEB9 83C4 0C add esp, 0C
00B3CEBC 8D85 FCB0FFFF lea eax, dword ptr ss:[ebp+FFFFB0FC]
00B3CEC2 50 push eax
00B3CEC3 FFB5 FCB0FFFF push dword ptr ss:[ebp+FFFFB0FC]
00B3CEC9 0FB785 14C1FFFF movzx eax, word ptr ss:[ebp-3EEC]
00B3CED0 50 push eax
00B3CED1 8B85 0CD8FFFF mov eax, dword ptr ss:[ebp-27F4]
00B3CED7 0385 0CC1FFFF add eax, dword ptr ss:[ebp-3EF4]
00B3CEDD 50 push eax
00B3CEDE FF15 1861B400 call dword ptr ds:[B46118] ; kernel32.VirtualProtect
00B3CEE4 ^ E9 E1FDFFFF jmp 00B3CCCA
00B3CEE9 EB 03 jmp short 00B3CEEE
由于不能上传文件,附上DLL文件下载地址http://cxgaxy.go2.icpcn.com/dll.rar请大侠帮忙。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课