【文章标题】: 寻找一个vb软件注册码之路
【文章作者】: hpxpj
【软件名称】: 挡土墙计算
【下载地址】: 自己搜索下载
【加壳方式】: 无
【编写语言】: vb6.0非p-code
【使用工具】: OD
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
【软件介绍】:可用于预算,避免重算,一次搞定!还可生成详细的步骤哦:)很好用的工具
--------------------------------------------------------------------------------
【详细过程】
1.查壳、编写语言
没有加客,哈哈。。。visual basic 6.0
2.寻找注册码
1)我们用od打开主程序按F9运行,跳出登入框,我们输入密码:123456
2)因为我们不知道,它是用什么方法进行验证的,所以我们要从最有可能的函数开始下断点,看是是否能断下,
看雪教程中有一章专门讲vb的,我们就试这些函数,我直接给出能断下的函数:
(1)rtcMsgBox // 显示一信息对话框
(2)__vbafreeobj
(3)rtcR8ValFromBstr //把字符串转换成浮点数
我们当然选择从rtcR8ValFromBstr函数开始分析。
对rtcR8ValFromBstr下断,程序在00471CCD停下来:
00471CBA . 6A 50 push 50
00471CBC . 68 88A14000 push 0040A188
00471CC1 . 51 push ecx
00471CC2 . 50 push eax
00471CC3 . FF15 58104000 call dword ptr [<&MSVBVM60.__vbaHresu>; MSVBVM60.__vbaHresultCheckObj
00471CC9 > 8B55 E4 mov edx, dword ptr [ebp-1C]
00471CCC . 52 push edx
00471CCD . FF15 BC114000 call dword ptr [<&MSVBVM60.#581>] ; MSVBVM60.rtcR8ValFromBstr
00471CD3 . 83EC 08 sub esp, 8
00471CD6 . DD1C24 fstp qword ptr [esp]
00471CD9 . FF15 DC104000 call dword ptr [<&MSVBVM60.__vbaStrR8>; MSVBVM60.__vbaStrR8
00471CDF . 8BD0 mov edx, eax
00471CE1 . 8D4D E8 lea ecx, dword ptr [ebp-18]
00471CE4 . FF15 98114000 call dword ptr [<&MSVBVM60.__vbaStrMo>; MSVBVM60.__vbaStrMove
00471CEA . 8B3D B8114000 mov edi, dword ptr [<&MSVBVM60.__vba>; MSVBVM60.__vbaFreeStr
00471CF0 . 8D4D E4 lea ecx, dword ptr [ebp-1C]
00471CF3 . FFD7 call edi ; <&MSVBVM60.__vbaFreeStr>
00471CF5 . 8D4D DC lea ecx, dword ptr [ebp-24]
00471CF8 . FF15 B4114000 call dword ptr [<&MSVBVM60.__vbaFreeO>; MSVBVM60.__vbaFreeObj
00471CFE . B8 02000000 mov eax, 2
00471D03 . 8D4D CC lea ecx, dword ptr [ebp-34]
00471D06 . 8945 D4 mov dword ptr [ebp-2C], eax
00471D09 . 8945 CC mov dword ptr [ebp-34], eax
00471D0C . 8D45 E8 lea eax, dword ptr [ebp-18]
我们注意一下00471CCD处上面几句,其中:
00471CC9 > 8B55 E4 mov edx, dword ptr [ebp-1C]
00471CCC . 52 push edx
我们可知edx是它的参数,它是一个指针
我们用命令d edx可以在数据窗口中看到:
0014D2DC 34 00 38 00 35 00 34 00 39 00 30 00 39 00 32 00 4.8.5.4.9.0.9.2.
0014D2EC 36 00 00 00 0D F0 AD BA 0D F0 AD BA AB AB AB AB 6....瓠?瓠韩
0014D2FC AB AB AB AB 00 00 00 00 00 00 00 00 07 00 07 00 ..........
这数字48549092正是本机序列号。
我们在按F9运行程序断在00471D85处:
00471D73 . FF15 70114000 call dword ptr [<&MSVBVM60.__vbaVarAd>; MSVBVM60.__vbaVarAdd
00471D79 . 50 push eax
00471D7A . 8D45 E4 lea eax, dword ptr [ebp-1C]
00471D7D . 50 push eax
00471D7E . FF15 20114000 call dword ptr [<&MSVBVM60.__vbaStrVa>; MSVBVM60.__vbaStrVarVal
00471D84 . 50 push eax
00471D85 . FF15 BC114000 call dword ptr [<&MSVBVM60.#581>] ; MSVBVM60.rtcR8ValFromBstr
00471D8B . D95E 34 fstp dword ptr [esi+34]
00471D8E . 8D4D E4 lea ecx, dword ptr [ebp-1C]
00471D91 . FFD7 call edi
00471D93 . 8D4D 9C lea ecx, dword ptr [ebp-64]
00471D96 . 8D55 BC lea edx, dword ptr [ebp-44]
00471D99 . 51 push ecx
00471D9A . 8D45 CC lea eax, dword ptr [ebp-34]
00471D9D . 52 push edx
00471D9E . 50 push eax
像上面一样步骤,我们查看eax处的数据:
0014D2DC 31 00 31 00 31 00 31 00 31 00 30 00 35 00 30 00 1.1.1.1.1.0.5.0.
0014D2EC 00 00 00 00 0D F0 AD BA 0D F0 AD BA AB AB AB AB .....瓠?瓠韩
0014D2FC AB AB AB AB 00 00 00 00 00 00 00 00 07 00 07 00 ..........
这11111050是什么,当然就是密码了,哈哈。。。
别停我们继续,再次F9,
00471F41 . 57 push edi
00471F42 . 50 push eax
00471F43 . FF15 58104000 call dword ptr [<&MSVBVM60.__vbaHresu>; MSVBVM60.__vbaHresultCheckObj
00471F49 > 8B55 E4 mov edx, dword ptr [ebp-1C]
00471F4C . 52 push edx
00471F4D . FF15 BC114000 call dword ptr [<&MSVBVM60.#581>] ; MSVBVM60.rtcR8ValFromBstr
00471F53 . DD9D 50FFFFFF fstp qword ptr [ebp-B0]
00471F59 . DD85 50FFFFFF fld qword ptr [ebp-B0]
00471F5F . D99D 34FFFFFF fstp dword ptr [ebp-CC]
00471F65 . D985 34FFFFFF fld dword ptr [ebp-CC]
00471F6B . FF15 90104000 call dword ptr [<&MSVBVM60.__vbaFpR4>>; MSVBVM60.__vbaFpR4
00471F71 . D85E 34 fcomp dword ptr [esi+34]
00471F74 . DFE0 fstsw ax
00471F76 . F6C4 40 test ah, 40
00471F79 . 74 07 je short 00471F82
这次我们查看edx出的数据:
00154D84 31 00 32 00 33 00 34 00 35 00 36 00 00 00 30 00 1.2.3.4.5.6...0.
00154D94 00 00 AD BA 0D F0 AD BA 0D F0 AD BA AB AB AB AB ...瓠?瓠韩
00154DA4 AB AB AB AB 00 00 00 00 00 00 00 00 0E 00 07 00 ..........
哈哈。。。123456正是我们输入的密码。再F9就弹出nag了。
3.编写keygen
略。。。以后再研究:)
--------------------------------------------------------------------------------
【经验总结】
这个软件的密码保护太弱了,作者缺乏安全意识。
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
2008年03月03日 21:29:15
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)