- UID
- 50115
注册时间2008-5-1
阅读权限10
最后登录1970-1-1
周游历练
该用户从未签到
|
楼主 |
发表于 2008-5-9 21:59:08
|
显示全部楼层
首先运行:丝路飞人.exe,然后DUMP出来,再用PEID核心扫描为:Microsoft Visual C++ 6.0
知道是什么语言的就好办了,现在我们就开始脱壳
OD 载入 ,忽略所有异常,用Hideod 插件隐藏OD!
运行牛人们的脚本:Themida&WinLicenScript_1[1].91+.txt
当脚本提示:“程序发现被VM oeP,脚本patch了入口,现在可以在这里dump下程序补区段,修复代码!,你也可以选择[否]到普通方式修复!"
时,点取消,这里程序停在这里:
00986E04 68 D0DF1F5E push 5E1FDFD0
00986E09 E9 65C70000 jmp 00993573
00986E0E 0000 add byte ptr [eax], al
00986E10 0000 add byte ptr [eax], al
00986E12 0000 add byte ptr [eax], al
00986E14 0000 add byte ptr [eax], al
现在Alt+M,在代码段下F2断点 到这里了
00F1A03B FF33 push dword ptr [ebx] ; kernel32.GetVersion //停在这里 (3)
00F1A03D E9 53280B00 jmp 00FCC895
00F1A042 55 push ebp
00F1A043 812C24 F150692B sub dword ptr [esp], 2B6950F>
00F1A04A 8B1424 mov edx, dword ptr [esp]
00F1A04D 55 push ebp
00F1A04E 89E5 mov ebp, esp
00F1A050 81C5 04000000 add ebp, 4
00F1A056 83C5 04 add ebp, 4
00F1A059 872C24 xchg dword ptr [esp], ebp
此时 ds:[006BE924]=7C8111DA (kernel32.GetVersion),记住这个值
好了,继续F8一次,再在代码段下F2断点,来到这里:
0048B59C A3 709D6B00 mov dword ptr [6B9D70], eax ///停在这里 这里就是OEP了
0048B5A1 A1 709D6B00 mov eax, dword ptr [6B9D70]
0048B5A6 C1E8 08 shr eax, 8
0048B5A9 25 FF000000 and eax, 0FF
0048B5AE A3 7C9D6B00 mov dword ptr [6B9D7C], eax
0048B5B3 8B0D 709D6B00 mov ecx, dword ptr [6B9D70]
0048B5B9 81E1 FF000000 and ecx, 0FF
0048B5BF 890D 789D6B00 mov dword ptr [6B9D78], ecx
0048B5C5 8B15 789D6B00 mov edx, dword ptr [6B9D78]
0048B5CB C1E2 08 shl edx, 8
0048B5CE 0315 7C9D6B00 add edx, dword ptr [6B9D7C]
0048B5D4 8915 749D6B00 mov dword ptr [6B9D74], edx
0048B5DA A1 709D6B00 mov eax, dword ptr [6B9D70]
0048B5DF C1E8 10 shr eax, 10
0048B5E2 25 FFFF0000 and eax, 0FFFF
0048B5E7 A3 709D6B00 mov dword ptr [6B9D70], eax
0048B5EC 6A 01 push 1
0048B5EE E8 DDCE0000 call 004984D0
0048B5F3 83C4 04 add esp, 4
0048B5F6 85C0 test eax, eax
0048B5F8 75 0A jnz short 0048B604
0048B5FA 6A 1C push 1C
这里就是OEP了 不过要补代码
这时在堆栈里找这个位置:
0012FF84 0012FFE0 指向下一个 SEH 记录的指针
0012FF88 0048FAFC SE处理程序 (1)记这两个地址
0012FF8C 00684870 丝路飞人.00684870 (2)
我们已经知道是Microsoft Visual C++ 6.0,好就一个Microsoft Visual C++ 6.0的OEP来补代码
push ebp
mov ebp, esp
push -1
push ????? ; (1)
push ????? ; (2)
mov eax, dword ptr fs:[0]
push eax
mov dword ptr fs:[0], esp
sub esp, 58
push ebx
push esi
push edi
mov dword ptr [ebp-18], esp
call ????? ; (3)
xor edx, edx
mov dl, ah
mov dword ptr [6B9D70], eax
好了补代码的位置如下:
0048B56D >/$ 55 push ebp
0048B56E |. 8BEC mov ebp, esp
0048B570 |. 6A FF push -1
0048B572 |. 68 FCFA4800 push 0048FAFC ; 入口地址
0048B577 |. 68 70486800 push 00684870 ; SE 处理程序安装
0048B57C |. 64:A1 0000000>mov eax, dword ptr fs:[0]
0048B582 |. 50 push eax
0048B583 |. 64:8925 00000>mov dword ptr fs:[0], esp
0048B58A |. 83EC 58 sub esp, 58
0048B58D |. 53 push ebx
0048B58E |. 56 push esi
0048B58F |. 57 push edi
0048B590 |. 8965 E8 mov dword ptr [ebp-18], esp
0048B593 |. E8 425C387C call kernel32.GetVersion
0048B598 |. 33D2 xor edx, edx
0048B59A |. 8AD4 mov dl, ah
在0048B56D新建EIP,DUMP,然后修复,只能手动找了,呵呵
还记得这个地址吗?ds:[006BE924]=7C8111DA (kernel32.GetVersion),在数据窗口中Ctrl+G 到006BE924
然后上下翻,找到IAT的起地址:006BE7A4 终地址:006BEA84 大小:2E0
修复时发现好些无效,直接剪掉就可以了,然后转存,可以运行!!!
程序 http://gggg6269.googlepages.com/slfr.rar
哪个朋友帮忙看下。。。。。。 |
|