金盘电子阅览室管理系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
金盘电子阅览室管理系统破解流程+算法分析
金盘电子阅览室管理系统破解流程
作者:笨虫虫
软件名称:金盘电子阅览室管理系统
整理日期:2006-12-3
最新版本:V7.0
文件大小:
软件授权:共享软件
使用平台:win2000+SQL
发布公司:荣天信息
第一节查壳和脱壳
一、认识壳
在脱壳之前,我们得明白“壳”的概念。在自然界中,我想大家对壳这东西应该都不会陌生了,植物用它来保护种子,动物用它来保护身体等等。同样,在一些计算机软件里也有一段专门负责保护软件不被非法修改或反编译的程序。它们一般都是先于程序运行,拿到控制权,然后完成它们保护软件的任务。就像动植物的壳一般都是在身体外面一样理所当然(但后来也出现了所谓的“壳中带籽”的壳)。由于这段程序和自然界的壳在功能上有很多相同的地方,基于命名的规则,大家就把这样的程序称为壳了[1]。就像计算机病毒和自然界的病毒一样,其实都是命名上的方法罢了。
二、查壳
我们首先用PEID工具软件来查看,该软件的Gders.exe主程序有没有加载壳。
图 3.1 PEID查壳
PEID显示该主程序加壳ASPack 2.11 -> Alexey Solodovnikov的壳。(如图 3.1)
ASPack是一款压缩壳,不是加密壳,相当于WinRar、Winzip之类的压缩软件,但不同于WinRar、Winzip 工具,他只能压缩EXE、和DLL文件。而且在使用EXE时,不需要再用工具解压,他会在内存中自动解压
自动使用文件。所以脱掉这些壳,不需要很花功夫。
三、ESP定律
如果我们要返回父程序,则当我们在堆栈中进行堆栈的操作的时候,一定要保证在RET这条指令之前,ESP 指向的是我们压入栈中的地址。这也就是著名的“堆栈平衡”原理。ESP定律的原理就是“堆栈平衡”原理[2]。我们可以把壳假设为一个子程序,当壳把代码解压前和解压后,他必须要做的是遵循堆栈平衡的原理,让ESP执行到OEP的时候,使ESP=0012FFC4。它可以使用在大部分的压缩壳,部分加密壳。只要是在JMP到OEP后,ESP=0012FFC4的壳,理论上我们都可以使用。是不是只能下断12FFA4的访问断点?那只是ESP定律的一个体现,我们运用的是ESP定律的原理,而不应该是他的具体数值,不能说12FFA4,或者12FFC0
就是ESP定律,他们只是ESP定律的一个应用罢了。
四、脱壳
既然知道软件加的壳是ASPack 2.11压缩壳,那么我们就可以用ESP定律[3]来快速的脱掉这个壳了。首先,用OD来加载主程序Gders.exe,加载好后我们选按F8运行一步,看到ESP的值是0012FFA4(图 3.2)
图3.2 ESP的值
我们在命令行里打入DD 0012FFA4,我们在数据窗口在地址0012ffa4上右键菜单上选择断点,选择设置硬件断点访问,再选择Word来设置硬件一个断点。(如图 3.3)
图 3.3 设置硬件断点
我们按F9运行程序。然后调试器会将程序自动停下到我们设置的硬件断点地址006803AB(如图3.4)
图 3.4 硬件断点位置
按着我们按几下F8,让调试器运行程序到Retn后返回程序的领空,(如图3.5)
图3.5 返回程序领空
地址0058F36C就是该程序的真正入口点了,我们使用OD的OllyDump来把程序Dump出来。在0058F36C使用右键菜单我们选择OllyDump脱壳调试进程。把入口点修正改为18F36C,(如图3.6)
图3.6 修正程序OPE
然后点脱壳按钮,选择一个文件名,我填的是UnPack。让软件自动保存后,Unpack.exe就是Gders.exe脱壳后的文件了。我们再用PEID检查一下是不是已经脱壳了(如图3.7)所示。
图 3.7 PEID查壳
PEid显示该程序是由Borland Delphi 6.0 - 7.0编写的,这说明我们已经把程序的外壳给去掉了。
第二节找出注册码的算法
一、API
因为在破解软件的过程用,经常要使用到API的调用,所以我们必须要了解到API是什么。
Win32程序是构筑在Win32 API基础上的[4]。在Win32 API中,包括了大量的的函数、结构和消息等,它不公为应用程序所调用,也是Windows自身的一部分,Windows自身的运行也调用这些API函数。
二、寻找算法的详细过程
脱完壳后,我们首先要找找看该软件有什么好的提示我们怎么破解该程序的提示。我们运行程序来到执行它
的注册码模块(如图3.8):
图 3.8 程序的注册框
我们也不是知道产品序列号是多少,我们先随便填一个注册码。我们填一个123456789看看软件有什么提
示。点注册后,系统提示我们要重启起程序检查是否注册成功(如图3.9):
图3.9 注册后的提示
既然有提示窗口出现,我们首先可以试试API函数MessageBox下断点[5],看能不能让程序断下来。用OD 加载脱壳程序Unpack.exe,在OD的命令行窗口输入bp MessageBoxA,然后按F9,OD运行程序,在产品序号输入123456789,点注册按钮。OK程序在MessageBox函数上断下来了,我们看到堆栈窗口,上面显示,
(如图3.10)MessageBoxA来自Unpack.00580617,这说明该程序在00580617地址调用了MessageBoxA函数。
图 3.10 程序调用MeesagBoxA
按Ctrl+G,我们在OD的输入需要的跟随表达语句窗口输入地址00580617(如图3.11)。
图 3.11 OD的输入需要的跟随表达语句窗口
调式器就返回到程序的领空了。(如图3.12)
图 3.12 返回程序领空
MessageBoxA是已经执行完成的语句提示,所以我们得看向上看代码,看有什么可以利用的信息。
以下是金盘电子阅览室管理系统注册按钮代码:
***************************************************************************
00580490 . 55 push ebp
00580491 . 8BEC mov ebp,esp
00580493 . 33C9 xor ecx,ecx
00580495 . 51 push ecx
00580496 . 51 push ecx
00580497 . 51 push ecx
00580498 . 51 push ecx
00580499 . 51 push ecx
0058049A . 53 push ebx
0058049B . 56 push esi
0058049C . 57 push edi
0058049D . 8945 FC mov dword ptr ss:[ebp-4],eax
005804A0 . 33C0 xor eax,eax
005804A2 . 55 push ebp
005804A3 . 68 43065800 push Unpack.00580643
005804A8 . 64:FF30 push dword ptr fs:[eax]
005804AB . 64:8920 mov dword ptr fs:[eax],esp
005804AE . 33C0 xor eax,eax