weibin 发表于 2008-9-4 07:10:02

求助!Armadillo 1.xx - 2.xx 的帮助

OD载入来到这里:

00744740 > 55 push ebp

00744741 8BEC mov ebp,esp

00744743 6A FF push -1

00744745 68 A0FA7500 push chinast.0075FAA0

0074474A 68 18447400 push chinast.00744418

0074474F 64:A1 00000000 mov eax,dword ptr fs:

00744755 50 push eax

00744756 64:8925 0000000>mov dword ptr fs:,esp

0074475D 83EC 58 sub esp,58

00744760 53 push ebx

00744761 56 push esi

00744762 57 push edi

00744763 8965 E8 mov dword ptr ss:,esp

00744766 FF15 78A17500 call dword ptr ds:[<&KERNEL32.GetVersion>; kernel32.GetVersion

0074476C 33D2 xor edx,edx

0074476E 8AD4 mov dl,ah

****************************************************************

命令行下断点 BP OpenMutexA,F9运行。

7C80EC1B > 8BFF mov edi,edi //中断在这里

7C80EC1D 55 push ebp

7C80EC1E 8BEC mov ebp,esp

7C80EC20 51 push ecx

7C80EC21 51 push ecx

7C80EC22 837D 10 00 cmp dword ptr ss:,0

7C80EC26 56 push esi

7C80EC27 0F84 7A500300 je kernel32.7C843CA7

****************************************************************

堆栈内容:

0012D7A0 00730380 /CALL 到 OpenMutexA 来自 chinast.0073037A

0012D7A4 001F0001 |Access = 1F0001

0012D7A8 00000000 |Inheritable = FALSE

0012D7AC 0012DDE0 \MutexName = "BF4::DA2A9E4090"注意MutexName 这个地址 每个机器不同,以看到的为主。

Ctrl+G 401000

00401000 0000 ADD BYTE PTR DS:,AL //都是空地址。

00401002 0000 ADD BYTE PTR DS:,AL

00401004 0000 ADD BYTE PTR DS:,AL

00401006 0000 ADD BYTE PTR DS:,AL

00401008 0000 ADD BYTE PTR DS:,AL

0040100A 0000 ADD BYTE PTR DS:,AL

0040100C 0000 ADD BYTE PTR DS:,AL

0040100E 0000 ADD BYTE PTR DS:,AL

00401010 0000 ADD BYTE PTR DS:,AL

00401012 0000 ADD BYTE PTR DS:,AL

填入以下代码:

00401000 60 PUSHAD

00401001 9C PUSHFD

00401002 68 DCFB1200 PUSH 12DDE0

00401007 33C0 XOR EAX,EAX

00401009 50 PUSH EAX

0040100A 50 PUSH EAX

0040100B E8 687BA677 CALL KERNEL32.CreateMutexA

00401010 9D POPFD

00401011 61 POPAD

00401012 - E9 75C7A677 JMP KERNEL32.OpenMutexA

点右键 选在此处新建 Eip ,看到Eip 变为 401000

F9运行

7C80EC1B > 8BFF mov edi,edi //断在这里,清除断点

7C80EC1D 55 push ebp

7C80EC1E 8BEC mov ebp,esp

7C80EC20 51 push ecx

7C80EC21 51 push ecx

7C80EC22 837D 10 00 cmp dword ptr ss:,0

7C80EC26 56 push esi

7C80EC27 0F84 7A500300 je kernel32.7C843CA7

7C80EC2D 64:A1 18000000 mov eax,dword ptr fs:

7C80EC33 FF75 10 push dword ptr ss:

7C80EC36 8DB0 F80B0000 lea esi,dword ptr ds:

7C80EC3C 8D45 F8 lea eax,dword ptr ss:

7C80EC3F 50 push eax

7C80EC40 FF15 8C10807C call dword ptr ds:[<&ntdll.RtlInitAnsiSt>; ntdll.RtlInitAnsiString

7C80EC46 6A 00 push 0

****************************************************************

Ctrl+G 401000来到:

00401000 60 pushad

00401001 9C pushfd

00401002 68 E0DD1200 push 12DDE0 ; ASCII "CE4::DA2A9E4090"

00401007 33C0 xor eax,eax

00401009 50 push eax

0040100A 50 push eax

0040100B E8 2FDB407C call kernel32.CreateMutexA

00401010 9D popfd

00401011 61 popad

00401012 - E9 04DC407C jmp kernel32.OpenMutexA

撤消刚才的修改~~~~~~~~

下bp GetModuleHandleA,并该为硬件断点:

7C80B529 > 8BFF mov edi,edi //在这里~~~~~

7C80B52B 55 push ebp

7C80B52C 8BEC mov ebp,esp

7C80B52E 837D 08 00 cmp dword ptr ss:,0

7C80B532 74 18 je short kernel32.7C80B54C

7C80B534 FF75 08 push dword ptr ss:

7C80B537 E8 682D0000 call kernel32.7C80E2A4

7C80B53C 85C0 test eax,eax

7C80B53E 74 08 je short kernel32.7C80B548

7C80B540 FF70 04 push dword ptr ds:

7C80B543 E8 F4300000 call kernel32.GetModuleHandleW

7C80B548 5D pop ebp

7C80B549 C2 0400 retn 4


本篇文章来源于 广安IT网 http://www.826it.com原文链接:http://www.826it.com/l/3139.html
F9运行N次,若遇见非法指令错误就Shift+F9过~~~~~

在此期间仔细观察堆栈内容,直到看见:

00127908 00FA9AF7 /CALL 到 GetModuleHandleA 来自 00FA9AF1

0012790C 00127A4C \pModule = "advapi32.dll"****这个东东****

再一次就看见:

00127B9C 00FC6AB9 /CALL 到 GetModuleHandleA 来自 00FC6AB3

00127BA0 00000000 \pModule = NULL

也就是到达magic jmp附近了~~~~~~~^-^

清除硬件断点,Ctrl+F9 返回~~~~~~~~

下面该怎么判断呀不知道看了好多下面的都不一样,不知道怎么才能接着做下去?

小生我怕怕 发表于 2008-9-4 17:05:37

活学活用,不要硬把教程套到你的软件上!

weibin 发表于 2008-9-4 18:43:08

GetModuleHandleA
和下面的LOAD。。。离十万八千里、
不知道怎么搞的

aj3423 发表于 2008-9-4 19:12:00

双进程改单进程有新的方法,无需到401000加那段代码,黑鹰教程里有
另外找magic jump说下我的方法,先ctrl+G 到 GetModuleHandleA函数处,在那个je或者函数尾F2下断点,shift+f9,每运行一次都alt+f9返回看看,这样就不会错过了,不用死记什么按几次返回

ohyeah521 发表于 2008-10-26 07:15:41

双进程改单进程。直接用脚本跑,变成点进程的后要是替换key,下“he GetDlgItem”断点。
找魔法跳下“bp GetModuleHandleA+5”这个断点。找OEP下“bp CreateThread”/:001


教程下载::time:
http://www.3800hk.com/donghua/d/25391.html
http://www.3800hk.com/donghua/f/25319.html
页: [1]
查看完整版本: 求助!Armadillo 1.xx - 2.xx 的帮助