软件破解实战——Access Password Unlocker.exe

声明:
本文仅用于研究探索软件的漏洞和防御方法,从而开发出更安全可靠的正版软件,嘿嘿
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
废话不多说,开始吧,本次开刀的是Access数据库密码破解软件Access Password Unlocker.exe,可以从这里下载,这款软件价值$19.95,看看它的介绍吧:

Access Password Unlocker is a powerful Access password recovery which can recover Access passwords for Microsoft Access 95/97/2000/2003 database (*.mdb). It allows you to recover password of protected MDB files in a minute even if the Access password is long and complicated.

开刀工具:
PEiD.exe  用于检查软件是否加壳
Ollydbg.exe 用于调试运行程序
IDA Pro.exe 用于反汇编静态分析


第1步:安装运行软件
下载安装后运行APU, 打开加密过的data.mdb,让其破解,弹出需要注册的提示,软件界面如下:



第2步:获取注册信息
点击“Enter Registeration Code”,随便输入123,点确定,提示密码无效。


有了注册提示信息就好办了。

第3步:检查软件是否加壳
软件没有加壳,正合我意,否则还要脱壳,说不定还要手动脱壳就麻烦了。


第4步:用Ollydbg调试运行APU.exe
运行Ollydbg,打开Access Password Unlocker.exe,按F9运行,弹出APU界面:


在APU中打开加密过的数据库文件data.mdb,随便输入注册码123,点Ok,弹出密码无效框,此时先别点确定!


第5步:在Ollydbg中查找注册提示信息
在汇编代码区点鼠标右键,点“搜索”--“所有参考的文本字符串”


点击后弹出下面的窗口,再点击右键“搜索文本”,并输入注册提示信息“The code you've entered invalid”,定位到该字符串处,


双击该字符串,则回到Olleydbg的主界面,在机器码处双击鼠标左键下断点:


第6步:调试运行、分析程序
在地址0041002D处下断点,并进入函数调用,0040D680函数是比较输入字符串和密码是否一致,比较的结果存在EAX中。
00410026        |> 8D5424 10      LEA EDX,DWORD PTR SS:[ESP+10]
0041002A        |. 52             PUSH EDX
0041002B        |. 6A 00          PUSH 0
0041002D        |. E8 4ED6FFFF    CALL Access_P.0040D680              ; function call  to  compare input and password
00410032        |. 83C4 08        ADD ESP,8
00410035        |. 85C0           TEST EAX,EAX                                          ; test the comparison result
00410037        |. 75 0E          JNZ SHORT Access_P.00410047
00410039        |. 6A 30          PUSH 30
0041003B        |. 68 F0574500    PUSH Access_P.004557F0                   ;  UNICODE "Registration"
00410040        |. 68 48584500    PUSH Access_P.00455848                    ;  UNICODE "The code you've entered invalid!"
00410045        |.^EB B0          JMP SHORT Access_P.0040FFF7
00410047        |> 8D7C24 10      LEA EDI,DWORD PTR SS:[ESP+10]
0041004B        |. E8 90D7FFFF    CALL Access_P.0040D7E0
00410050        |. 83F8 01        CMP EAX,1
00410053        |. 75 0E          JNZ SHORT Access_P.00410063
00410055        |. 6A 40          PUSH 40
00410057        |. 68 F0574500    PUSH Access_P.004557F0                   ;  UNICODE "Registration"
0041005C        |. 68 8C584500    PUSH Access_P.0045588C                   ;  UNICODE "Register fail!"
00410061        |.^EB 94          JMP SHORT Access_P.0040FFF7
00410063        |> 8D7C24 10      LEA EDI,DWORD PTR SS:[ESP+10]
00410067        |. E8 74D7FFFF    CALL Access_P.0040D7E0


0040D680函数的汇编代码块结构如下所示(用IDA查看):


该函数具体使用什么算法进行检查不是很容易反编译出来,但是我们可以绕过检查的结果。具体做法是把jnz指令替换成jz指令,嘿嘿,偷梁换柱。
下图是根据输入的注册信息进行的各种处理,汇编程序流程如下:


修改完指令后重新在Olleydbg运行APU,随便输入注册码123,点Ok,此时提示注册成功!


此种瞒天过海的手法几乎可以对付所有的注册软件,缺点是最终还是不知道注册码是多少,似乎有些遗憾,不过本人已经调试跟踪出注册码为dcae9fbfb63fdeecc8c25f56cae87411 ,这款价值近20刀的软件就这样被蹂躏了,而出于职业道德考虑,我等软件开发人员应该抵制软件破解,维护正版软件,不过知道了如何破解软件才能写出更好的反破解软件,比如加壳,使用花指令,二进制加密等等手法。

posted on 2010-08-21 00:45 挑灯看剑 阅读(1659) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
<2010年8月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
2930311234

导航

公告

【自我介绍】 08年南开大学硕士毕业 最近关注:算法、Linux、c++、高并发 爱好:滑旱冰、打乒乓球、台球、保龄球

常用链接

随笔分类(139)

文章分类

我常去的网站

技术博客(都是大牛)

技术站点

搜索

积分与排名