中断
77E62391 > 55 push ebp 77E62392 8BEC mov ebp, esp 77E62394 51 push ecx 77E62395 51 push ecx 77E62396 837D 10 00 cmp dword ptr ss:[ebp+10], 0 77E6239A 56 push esi 77E6239B 0F84 C2E30100 je kernel32.77E80763 77E623A1 64:A1 18000000 mov eax, dword ptr fs:[18] 77E623A7 FF75 10 push dword ptr ss:[ebp+10] 77E623AA 8DB0 F80B0000 lea esi, dword ptr ds:[eax+BF8] 77E623B0 8D45 F8 lea eax, dword ptr ss:[ebp-8] 77E623B3 50 push eax 77E623B4 FF15 8C10E477 call dword ptr ds:[<&ntdll.RtlInitAnsiSt>; ntdll.RtlInitAnsiString .....................................................
堆栈提示
0012F574 0049D7D2 /CALL 到 OpenMutexA 来自 MrCaptor.0049D7CC 0012F578 001F0001 |Access = 1F0001 0012F57C 00000000 |Inheritable = FALSE 0012F580 0012FBB4 \MutexName = "204: AB0194A96" ★注意0012FBB4,以读者看到的为主。
找一块程序领空空地址,写入一些欺骗Arm的代码。
Ctrl+G 401000
00401000 0000 ADD BYTE PTR DS:[EAX],AL //都是空地址。 00401002 0000 ADD BYTE PTR DS:[EAX],AL 00401004 0000 ADD BYTE PTR DS:[EAX],AL 00401006 0000 ADD BYTE PTR DS:[EAX],AL 00401008 0000 ADD BYTE PTR DS:[EAX],AL 0040100A 0000 ADD BYTE PTR DS:[EAX],AL 0040100C 0000 ADD BYTE PTR DS:[EAX],AL 0040100E 0000 ADD BYTE PTR DS:[EAX],AL 00401010 0000 ADD BYTE PTR DS:[EAX],AL 00401012 0000 ADD BYTE PTR DS:[EAX],AL
替换为
00401000 60 pushad 00401001 9C pushfd 00401002 68 B4FB1200 push 12FBB4 //这里是我们填入刚才看到的东西 00401007 33C0 xor eax, eax 00401009 50 push eax 0040100A 50 push eax 0040100B E8 B5A6A577 call kernel32.CreateMutexA 00401010 9D popfd 00401011 61 popad 00401012 - E9 7A13A677 jmp kernel32.OpenMutexA
将当前的 Eip 77E62391 切换到 401000 来。
点右键 选在此处新建 Eip ,看到Eip 变为 401000
F9运行。
中断
77E62391 > 55 push ebp //又断在OpenMutexA,Arm已经不会生成双进程了,清除断点。 77E62392 8BEC mov ebp, esp 77E62394 51 push ecx 77E62395 51 push ecx 77E62396 837D 10 00 cmp dword ptr ss:[ebp+10], 0 77E6239A 56 push esi 77E6239B 0F84 C2E30100 je kernel32.77E80763 77E623A1 64:A1 18000000 mov eax, dword ptr fs:[18] 77E623A7 FF75 10 push dword ptr ss:[ebp+10] 77E623AA 8DB0 F80B0000 lea esi, dword ptr ds:[eax+BF8] 77E623B0 8D45 F8 lea eax, dword ptr ss:[ebp-8] 77E623B3 50 push eax 77E623B4 FF15 8C10E477 call dword ptr ds:[<&ntdll.RtlInitAnsiSt>; ntdll.RtlInitAnsiString ......................................................................
以前脱Armadillo标准壳一般有两种流程的操作方法:
1、先走到OEP,脱壳。第2次调试,找到并直接修改Magic Jump处为JMP,得到输入表,这时程序无法运行,但IAT可以修复。
2、在Magic Jump 处下硬件断点,每次改变标志位使其跳转,继续内存断点到达OEP,这样也是一次就脱壳、修复输入表,但是很慢。
这个程序判断软件过期代码在壳里面,脱壳后日期限制也不存在,过分依耐壳也是共享软件被破解的原因。
首先找Magic jmp
命令行下断点
BP GetModuleHandleA+5
注意,Win2000系统要下 BP GetModuleHandleA,然后将普通断点转换为硬件执行断点,不然Arm作者搞的飞机经常会对你说你在Dedbg!请报告错误给他,怒!
上一页 1 2 3 4 下一页 |