好友
阅读权限10
听众
最后登录1970-1-1
|
本帖最后由 wgz001 于 2009-5-9 03:33 编辑
菜鸟偶得心得,高手莫笑
注册码保存在:HKEY_CURRENT_USER\Software\VB and VBA Program Settings\wgjx\wgjx
=======================================
软件加了壳tElock 0.98b1 -> tE!,我们就先脱壳后破解
入口特征: 使用最后一次异常法
0042EBD6 >^\E9 25E4FFFF jmp wgjc.0042D000
0042EBDB 0000 add byte ptr ds:[eax],al
0042EBDD 0090 542DD91E add byte ptr ds:[eax+1ED92D54],dl
f8单步一下(不单步也行),OD调试选项(忽略kernel32内存访问),其他的
都去掉勾
shift+f9走一下,17次跑起来了,那么我们重新来过在16次:
0042E7FB 60 pushad
0042E7FC E8 06000000 call wgjc.0042E807
0042E801 8B6424 08 mov esp,dword ptr ss:[esp+8]
0042E805 EB 1A jmp short wgjc.0042E821
0042E807 64:67:FF36 0000 push dword ptr fs:[0]
0042E80D 64:67:8926 0000 mov dword ptr fs:[0],esp
0042E813 9C pushfd
0042E814 810C24 00010000 or dword ptr ss:[esp],100
0042E81B 9D popfd
0042E81C F8 clc
0042E81D ^ 73 DC jnb short wgjc.0042E7FB 【OD停在这】
0042E81F CD20 64678F06 vxdcall 68F6764
0042E825 0000 add byte ptr ds:[eax],al
0042E827 58 pop eax
观察堆栈窗口:
0012FF58 0012FFE0 指针到下一个 SEH 记录
0012FF5C 0042E801 SE 句柄
ctrl+G来到42E801
0042E7FB 60 pushad
0042E7FC E8 06000000 call wgjc.0042E807
0042E801 8B6424 08 mov esp,dword ptr ss:[esp+8] 【这个地方】
0042E805 EB 1A jmp short wgjc.0042E821
f2下断,shift+f9,然后f8单步走(较长的时间)在:
0042E7B5 61 popad
0042E7B6 - FF6424 D0 jmp dword ptr ss:[esp-30] ; wgjc.004021E0
0042E7BA 0200 add al,byte ptr ds:[eax]
到达oep:
004021E0 68 EC224000 push wgjc.004022EC ; ASCII "VB5!6&vb6chs.dll"
004021E5 E8 F0FFFFFF call wgjc.004021DA ; jmp 到
004021EA 0000 add byte ptr ds:[eax],al
004021EC 0000 add byte ptr ds:[eax],al
004021EE 0000 add byte ptr ds:[eax],al
直接dumped,然后修复
-----------------------------------------------------------
接下来进行我们的破解工作
OD载入,f9运行,输入假的注册码例如:I LOVE YOU
提示“注册码错误,请与作者联系……”
我们暂停程序,f12暂停,然后alt+f9(执行到用户代码),这时在点击
提示错误的对话框的“确定”按钮来到:
6606F72A |. /74 07 je short msvbvm60.6606F733
6606F72C |. |C745 F8 98F60>mov dword ptr ss:[ebp-8],msvbvm60.6606F698
6606F733 |> \8B35 E8120066 mov esi,dword ptr ds:[<&USER32.MessageBoxIndirectA>; USER32.MessageBoxIndirectA
6606F739 |. 8D45 D8 lea eax,dword ptr ss:[ebp-28]
6606F73C |. 50 push eax ; /pMsgBoxParams
6606F73D |. FFD6 call esi ; \MessageBoxIndirectA 【很明显是这个函数提示错误的】
6606F73F |. 8BD8 mov ebx,eax
6606F741 |. 3BDF cmp ebx,edi
6606F743 |. 75 2F jnz short msvbvm60.6606F774
6606F745 |. 8B45 EC mov eax,dword ptr ss:[ebp-14]
我们观察一下OD的标题栏“CPU -主线程,模块—msvbvm60”
呵呵~~说明了什么?说明软件还在错误的提示所对应的函数中,我们f8一直单步
直到OD窗口标题栏返回到程序的领空来到:
00425FD5 51 push ecx
00425FD6 52 push edx
00425FD7 8D45 C8 lea eax,dword ptr ss:[ebp-38]
00425FDA 6A 40 push 40
00425FDC 50 push eax
00425FDD FF15 9C104000 call dword ptr ds:[<&msvbvm60.#595>] ; msvbvm60.rtcMsgBox【这个call提示错误的】
00425FE3 8D4D 98 lea ecx,dword ptr ss:[ebp-68]
00425FE6 8D55 A8 lea edx,dword ptr ss:[ebp-58]
00425FE9 51 push ecx
我们上翻代码,找到段首:
00425E0A 52 push edx
00425E0B 50 push eax
00425E0C FF15 E4104000 call dword ptr ds:[<&msvbvm60.#406>] ; msvbvm60.__vbaStrCmp
00425E14 /0F85 5F010000 jnz dumped_.00425F79【如果不相等跳到错误】
这个地方比较可疑,因为两个压栈一个比较,很明显是比较注册码额
在00425E0A 下断,同时在中间代码处你会发现下面的call,呵呵,是提示注册正确的
00425E9A FF15 9C104000 call dword ptr ds:[<&msvbvm60.#595>] ; msvbvm60.rtcMsgBox
f9运行,点击注册,观察寄存器:
EAX 00160C34 UNICODE "XHYL;^VFWJ9\TDUH7ZRBSF5XP@QD3VN>O"
ECX 0014B6B8
EDX 0016094C UNICODE "I LOVE YOU"
看到没有,很明显,eax压真注册码,edx是我们的假注册码
破解完成------------------由于用的无线网,附件不好上传,嘿嘿,敬请原谅
网上有破解补丁,只是把这篇破文给大家分享一下 |
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|