金盘电子阅览室管理系统.docx

上传人:b****1 文档编号:972569 上传时间:2023-04-30 格式:DOCX 页数:20 大小:26.42KB
下载 相关 举报
金盘电子阅览室管理系统.docx_第1页
第1页 / 共20页
金盘电子阅览室管理系统.docx_第2页
第2页 / 共20页
金盘电子阅览室管理系统.docx_第3页
第3页 / 共20页
金盘电子阅览室管理系统.docx_第4页
第4页 / 共20页
金盘电子阅览室管理系统.docx_第5页
第5页 / 共20页
金盘电子阅览室管理系统.docx_第6页
第6页 / 共20页
金盘电子阅览室管理系统.docx_第7页
第7页 / 共20页
金盘电子阅览室管理系统.docx_第8页
第8页 / 共20页
金盘电子阅览室管理系统.docx_第9页
第9页 / 共20页
金盘电子阅览室管理系统.docx_第10页
第10页 / 共20页
金盘电子阅览室管理系统.docx_第11页
第11页 / 共20页
金盘电子阅览室管理系统.docx_第12页
第12页 / 共20页
金盘电子阅览室管理系统.docx_第13页
第13页 / 共20页
金盘电子阅览室管理系统.docx_第14页
第14页 / 共20页
金盘电子阅览室管理系统.docx_第15页
第15页 / 共20页
金盘电子阅览室管理系统.docx_第16页
第16页 / 共20页
金盘电子阅览室管理系统.docx_第17页
第17页 / 共20页
金盘电子阅览室管理系统.docx_第18页
第18页 / 共20页
金盘电子阅览室管理系统.docx_第19页
第19页 / 共20页
金盘电子阅览室管理系统.docx_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

金盘电子阅览室管理系统.docx

《金盘电子阅览室管理系统.docx》由会员分享,可在线阅读,更多相关《金盘电子阅览室管理系统.docx(20页珍藏版)》请在冰点文库上搜索。

金盘电子阅览室管理系统.docx

金盘电子阅览室管理系统

金盘电子阅览室管理系统破解流程+算法分析

金盘电子阅览室管理系统破解流程

作者:

笨虫虫

软件名称:

金盘电子阅览室管理系统

整理日期:

2006-12-3

最新版本:

V7.0

文件大小:

软件授权:

共享软件

使用平台:

win2000+SQL

发布公司:

荣天信息

第一节 查壳和脱壳

一、认识壳

在脱壳之前,我们得明白“壳”的概念。

在自然界中,我想大家对壳这东西应该都不会陌生了,植物用它来保护种子,动物用它来保护身体等等。

同样,在一些计算机软件里也有一段专门负责保护软件不被非法修改或反编译的程序。

它们一般都是先于程序运行,拿到控制权,然后完成它们保护软件的任务。

就像动植物的壳一般都是在身体外面一样理所当然(但后来也出现了所谓的“壳中带籽”的壳)。

由于这段程序和自然界的壳在功能上有很多相同的地方,基于命名的规则,大家就把这样的程序称为壳了[1]。

就像计算机病毒和自然界的病毒一样,其实都是命名上的方法罢了。

二、查壳

我们首先用PEID工具软件来查看,该软件的Gders.exe主程序有没有加载壳。

图3.1 PEID查壳

PEID显示该主程序加壳ASPack2.11->AlexeySolodovnikov的壳。

(如图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定律的一个应用罢了。

四、脱壳

既然知道软件加的壳是ASPack2.11压缩壳,那么我们就可以用ESP定律[3]来快速的脱掉这个壳了。

首先,用OD来加载主程序Gders.exe,加载好后我们选按F8运行一步,看到ESP的值是0012FFA4(图3.2)

 图3.2 ESP的值

我们在命令行里打入DD0012FFA4,我们在数据窗口在地址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显示该程序是由BorlandDelphi6.0-7.0编写的,这说明我们已经把程序的外壳给去掉了。

第二节 找出注册码的算法

一、API

因为在破解软件的过程用,经常要使用到API的调用,所以我们必须要了解到API是什么。

Win32程序是构筑在Win32API基础上的[4]。

在Win32API中,包括了大量的的函数、结构和消息等,它不公为应用程序所调用,也是Windows自身的一部分,Windows自身的运行也调用这些API函数。

二、寻找算法的详细过程

脱完壳后,我们首先要找找看该软件有什么好的提示我们怎么破解该程序的提示。

我们运行程序来到执行它的注册码模块(如图3.8):

图3.8 程序的注册框

我们也不是知道产品序列号是多少,我们先随便填一个注册码。

我们填一个123456789看看软件有什么提示。

点注册后,系统提示我们要重启起程序检查是否注册成功(如图3.9):

图3.9 注册后的提示

既然有提示窗口出现,我们首先可以试试API函数MessageBox下断点[5],看能不能让程序断下来。

用OD加载脱壳程序Unpack.exe,在OD的命令行窗口输入bpMessageBoxA,然后按F9,OD运行程序,在产品序号输入123456789,点注册按钮。

OK程序在MessageBox函数上断下来了,我们看到堆栈窗口,上面显示,MessageBoxA来自Unpack.00580617,这说明该程序在00580617地址调用了MessageBoxA函数。

(如图3.10)

图3.10 程序调用MeesagBoxA

按Ctrl+G,我们在OD的输入需要的跟随表达语句窗口输入地址00580617(如图3.11)。

图3.11 OD的输入需要的跟随表达语句窗口

调式器就返回到程序的领空了。

(如图3.12)

图3.12 返回程序领空

MessageBoxA是已经执行完成的语句提示,所以我们得看向上看代码,看有什么可以利用的信息。

以下是金盘电子阅览室管理系统注册按钮代码:

***************************************************************************

00580490  .  55        pushebp

00580491  .  8BEC        movebp,esp

00580493  .  33C9        xorecx,ecx

00580495  .  51        pushecx

00580496  .  51        pushecx

00580497  .  51        pushecx

00580498  .  51        pushecx

00580499  .  51        pushecx

0058049A  .  53        pushebx

0058049B  .  56        pushesi

0058049C  .  57        pushedi

0058049D  .  8945FC      movdwordptrss:

[ebp-4],eax

005804A0  .  33C0        xoreax,eax

005804A2  .  55        pushebp

005804A3  .  6843065800  pushUnpack.00580643

005804A8  .  64:

FF30      pushdwordptrfs:

[eax]

005804AB  .  64:

8920      movdwordptrfs:

[eax],esp

005804AE  .  33C0        xoreax,eax

005804B0  .  55        pushebp

005804B1  .  68DF045800  pushUnpack.005804DF

005804B6  .  64:

FF30      pushdwordptrfs:

[eax]

005804B9  .  64:

8920      movdwordptrfs:

[eax],esp

005804BC  .  8D55F8      leaedx,dwordptrss:

[ebp-8]

005804BF  .  8B45FC      moveax,dwordptrss:

[ebp-4]

005804C2  .  8B8010030000  moveax,dwordptrds:

[eax+310]

005804C8  .  E8FB28EDFF  callUnpack.00452DC8

005804CD  .  8B45F8      moveax,dwordptrss:

[ebp-8]

005804D0  .  E81793E8FF  callUnpack.004097EC

005804D5  .  33C0        xoreax,eax

005804D7  .  5A        popedx

005804D8  .  59        popecx

005804D9  .  59        popecx

005804DA  .  64:

8910      movdwordptrfs:

[eax],edx

005804DD  .  EB1B      jmpshortUnpack.005804FA

005804DF  .^E9E43BE8FF  jmpUnpack.004040C8

005804E4  .  8B45FC      moveax,dwordptrss:

[ebp-4]

005804E7  .  8B8010030000  moveax,dwordptrds:

[eax+310]

005804ED  .  8B10        movedx,dwordptrds:

[eax]

005804EF  .  FF92C0000000  calldwordptrds:

[edx+C0]

005804F5  .  E8FA3FE8FF  callUnpack.004044F4

005804FA  >  8D55F4      leaedx,dwordptrss:

[ebp-C]

005804FD  .  8B45FC      moveax,dwordptrss:

[ebp-4]

00580500  .  8B8010030000  moveax,dwordptrds:

[eax+310]

00580506  .  E8BD28EDFF  callUnpack.00452DC8

0058050B  .  8B45F4      moveax,dwordptrss:

[ebp-C]

0058050E  .  E8D992E8FF  callUnpack.004097EC

00580513  .  3DFFFF0000  cmpeax,0FFFF

00580518  .  7E30      jleshortUnpack.0058054A

0058051A  .  6A10      push10

0058051C  .  6854065800  pushUnpack.00580654

00580521  .  685C065800  pushUnpack.0058065C

00580526  .  8B45FC      moveax,dwordptrss:

[ebp-4]

00580529  .  E8CA91EDFF  callUnpack.004596F8

0058052E  .  50        pusheax                    ;|hOwner

0058052F  .  E85078E8FF  call      ;\MessageBoxA

00580534  .  8B45FC      moveax,dwordptrss:

[ebp-4]

00580537  .  8B8010030000  moveax,dwordptrds:

[eax+310]

0058053D  .  8B10        movedx,dwordptrds:

[eax]

0058053F  .  FF92C0000000  calldwordptrds:

[edx+C0]

00580545  .  E9DE000000  jmpUnpack.00580628

0058054A  >  8D55F0      leaedx,dwordptrss:

[ebp-10]

0058054D  .  8B45FC      moveax,dwordptrss:

[ebp-4]

00580550  .  8B8010030000  moveax,dwordptrds:

[eax+310]

00580556  .  E86D28EDFF  callUnpack.00452DC8

0058055B  .  8B45F0      moveax,dwordptrss:

[ebp-10]

0058055E  .  E88992E8FF  callUnpack.004097EC

00580563  .  8B15F8365900  movedx,dwordptrds:

[5936F8]      ;  Unpack.005954FC

00580569  .  8902        movdwordptrds:

[edx],eax

0058056B  .  8D55EC      leaedx,dwordptrss:

[ebp-14]

0058056E  .  8B45FC      moveax,dwordptrss:

[ebp-4]

00580571  .  8B80FC020000  moveax,dwordptrds:

[eax+2FC]

00580577  .  E84C28EDFF  callUnpack.00452DC8

0058057C  .  8B55EC      movedx,dwordptrss:

[ebp-14]

0058057F  .  A19C3A5900  moveax,dwordptrds:

[593A9C]

00580584  .  E88345E8FF  callUnpack.00404B0C

00580589  .  A1D03E5900  moveax,dwordptrds:

[593ED0]

0058058E  .  8B00        moveax,dwordptrds:

[eax]

00580590  .  33C9        xorecx,ecx

00580592  .  BA80065800  movedx,Unpack.00580680          //  ASCII"\SOFTWARE\GoldSoft\Server"

00580597  .  E80C4FEFFF  callUnpack.004754A8

0058059C  .  84C0        testal,al

0058059E  .  7456      jeshortUnpack.005805F6

005805A0  .  8B45FC      moveax,dwordptrss:

[ebp-4]

005805A3  .  8B8018030000  moveax,dwordptrds:

[eax+318]

005805A9  .  8B10        movedx,dwordptrds:

[eax]

005805AB  .  FF92C8000000  calldwordptrds:

[edx+C8]

005805B1  .  8BC8        movecx,eax

005805B3  .  A1D03E5900  moveax,dwordptrds:

[593ED0]

005805B8  .  8B00        moveax,dwordptrds:

[eax]

005805BA  .  BAA4065800  movedx,Unpack.005806A4          //  ASCII"VersionFlag"

005805BF  .  E87051EFFF  callUnpack.00475734

005805C4  .  8B0DF8365900  movecx,dwordptrds:

[5936F8]      //  Unpack.005954FC

005805CA  .  8B09        movecx,dwordptrds:

[ecx]

005805CC  .  A1D03E5900  moveax,dwordptrds:

[593ED0]

005805D1  .  8B00        moveax,dwordptrds:

[eax]

005805D3  .  BAB8065800  movedx,Unpack.005806B8          //  ASCII"MaxUsers"

005805D8  .  E85751EFFF  callUnpack.00475734

005805DD  .  8B0D9C3A5900  movecx,dwordptrds:

[593A9C]      //  Unpack.005954F8

005805E3  .  8B09        movecx,dwordptrds:

[ecx]

005805E5  .  A1D03E5900  moveax,dwordptrds:

[593ED0]

005805EA  .  8B00        moveax,dwordptrds:

[eax]

005805EC  .  BACC065800  movedx,Unpack.005806CC          //  ASCII"YourSerial"

005805F1  .  E86E50EFFF  callUnpack.00475664

005805F6  >  A1D03E5900  moveax,dwordptrds:

[593ED0]

005805FB  .  8B00        moveax,dwordptrds:

[eax]

005805FD  .  E8124EEFFF  callUnpack.00475414

00580602  .  6A40      push40

00580604  .  68D8065800  pushUnpack.005806D8

00580609  .  68E0065800  pushUnpack.005806E0

0058060E  .  8B45FC      moveax,dwordptrss:

[ebp-4]

00580611  .  E8E290EDFF  callUnpack.004596F8

00580616  .  50        pusheax                    //|hOwner

00580617  .  E86877E8FF  call      //\MessageBoxA

*************************************************************************

一般软件注册后要重启验证,注册码一般保存在注册表,或一个专门的文件里,以上代码已经提示我们,这个软件的注册码是保存在注册表的。

为什么呢,很简单,我们先看到代码的这个地方:

00580592 BA80065800movedx,Unpack.00580680//ASCII"\SOFTWARE\GoldSoft\Server"上面的注释很清楚的说明,注册码存放在\SOFTWARE\GoldSoft\Server里。

再看这段代码005805D3.BAB8065800 movedx,Unpack.005806B8//ASCII"MaxUsers"这段是存放最大用户数有多少。

然后再看这段代码005805ECBACC065800movedx,Unpack.005806CC//ASCII"YourSerial"而这段存放注册码。

我们打开一下注册码表来验证一下我们判断是不是正确的,打开注册表找到\SOFTWARE\GoldSoft\Server,里看到YourSerial的值就是123456789。

(如图3.13)

图3.13 注册表存放注册码的位置

既然他重启要验证注册码,那启动程序肯定要调用YourSerial字符串值。

所以我们用OD的Ultar字符串参考插件,来查找YourSerial字符串,看能不能找出有用的相关信息。

在OD的插件菜单里我们选择Ultar字符串参考的查找ASCII,然后按Ctrl+F键,输入YourSerial。

我们一共找出005805EC、005860B7、00586125、0058642E、0058645C五个地址,我们在这个5个地址全部按F2下断点。

看程序在验证注册码时调用的是地址。

因为程序要重启验证,我们下完断点后,给OD重新加载程序运行。

调试器会在0058642E BADC9D5800 movedx,Unpack.00589DDC //ASCII"YourSerial"停下,我们在信息窗口上面看到:

00589DDC=Unpack.00589DDC(ASCII"YourSerial")

edx=00B92538,(ASC

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 初中教育 > 数学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2