学院首页>安全防御>黑客工具>两款多媒体小工具的破解心得

两款多媒体小工具的破解心得

作者: 来源: 添加时间:2006-5-25 23:31:51
一般情况下共享软件破解的层次大概有三:爆破、穷追注册码和制作注册机。爆破由于它的简单性,不需要对软件注册算法有很好了解,所以很适合破解初学者练习,如果掌握好暴破的方法,我们一样可以搞定大部分的共享软件,下面介绍一下我自己在爆破方面的一点体会,仅作为自己学习之目的和供初学破解的朋友参考,如果大家觉得软件不错,可以购买正版。

我们今天要“开刀”的软件是:家庭卡拉OK 2.4中文版和全能音频转换通1.2,这两个小工具都是戴维的作品,可以在作者的主页下载得到:http://davidsoft.nease.net/。(特别声明,很对不起作者,不是我故意和您过不去,实在是因为我水平菜,您的软件很适合我练习,还请您原谅啊。)

首先介绍一下这两款小工具的功能:
1.家庭卡拉OK,从名字上我们就可以看出是用来唱卡拉OK的,用这款小工具加上麦克和MP3歌曲就能实现您的“歌星”梦想,还是相当方便的,并且它还是一款多媒体播放工具,支持常见的音频及视频格式,内置消原唱功能,可以把MP3等歌曲中的原唱剔除,也支持VCD的伴唱功能,同时支持麦克风演唱、音频录制与合成以及歌词同步显示,LRC歌词同步显示+MP3和VCD消原唱功能+麦克风演唱功能+录音功能+MP3合成功能=完美的家庭卡拉OK梦想!同时该软件还附送四个小工具:MP3换名器、LRC管理器、LRC编辑器和MP3到WMA转换器。当然没注册的用户功能是很受限制的,比如不能使用附加的这四个工具,每次启动软件都有扰人的提示注册框,还倒计时,而且不能保存伴奏合成处理过的MP3。

2.全能音频转换通是一款音视频文件格式转换软件。它支持目前所有流行的媒体文件格式(MP3/MP2/OGG/APE/WAV/WMA/AVI/RM/RMVB/ASF/MPEG/DAT),并能批量转换。更为强大的是,该软件能从视频文件中分离出音频流,转换成完整的音频文件。典型的应用如WAV转MP3,MP3转WMA,WAV转WMA,RM(RMVB)转MP3,AVI转MP3,RM(RMVB)转WMA等。并且可以从整个媒体中截取出部分时间段,转成一个音频文件,或者将几个不同格式的媒体转换并连接成一个音频文件。但是,没有注册只能使用五次!

好了,工具介绍完了,我们开始讨论如何破解,当然我们最终的目的就是去掉所有功能限制,在不穷追注册算法的前提下如果能达到和注册后相同的情况就算我们爆破成功了。我们先来复习一下爆破的思路,一般情况下,软件在注册码验证过程中会对我们输入的注册码和它本身注册算法得到的注册码进行比较(不管是不是明文),在比较之后会有一个关键性跳转,即如果两者相同就运行注册版部分的程序,如果不相同则跳到未注册版部分。我们常用的爆破手法就是找到这一关键性跳转,然后更改跳转指令,达到我们预期的目的。基本的跳转指令有哪些呢?看看论坛里可是有不少这样的教程呢。经典的比较注册码的关键部分大致如下:
CALL ******
TEST EAX,ECX
JNZ******(或JZ *****)
Call部分就是调用验证子程序,Test部分就是比较子程序返回值的,JNZ和JZ(包括JNE,JE)则是不相等(结果不为0)或者相等(结果为0)时进行跳转。 我们只要反向更改跳转部分,让它本来不跳的时候跳或者本来跳的时候不跳就可以达到暴力破解的目的,当然有时候我们还会用到JMP(不管是否相等都强制跳)和NOP(不管不问)。

原理先复习到这,我们请出破解必备三剑客开始破解之旅吧,它们就是:
OllyDbg——动(静)态跟踪“超级武器”
W32Dasm——静态反汇编“利刃”
WinHex——16进制文件编辑与磁盘编辑“小刀”
当然有时候,我们还需要检测壳软件以便判断程序是否加壳,今天我们的破解很幸运,这也是我为什么选它练习的原因之一,两款工具都未加壳,所以侦壳工具省了。

先拿家庭卡拉OK练习,安装好软件后,我们先自己注册一下,随便输入注册码:777888456,程序会提示注册码已经录入,下次启动后检测,注意了,看来程序不是在输入注册码时进行验证的,这就告诉我们在录入注册码时我们没办法下断截获,程序注册码比对是在启动时候完成的,某些“注册失败”的对话框也不会出现了,有些难度哦!不过,我们可以想出办法来,这种验证方法通常会有以下几种情况:一是从注册表中查询相关注册键值,二是从固定的文件中导入注册码(比如INI文件、KEY文件等)。那我们今天的目标是哪种情况呢?看看安装目录,有个DSMiniOK.ini文件,打开一看,
[App]
AppPath=C:\Program Files\家庭卡拉OK\
EverydayTip=0
AppWord=777888456
APPCode=

原来我们的注册码被保存到了这里。好了,我们利用W32Dasm载入该软件,点击菜单上的“参考”,选择“串式数据参考”,下拉滚动条,我们找一下关键字符串“DSMiniOK.ini”这个字符串,双击来到“00442E27”。好,接下来用OllyDbg载入家庭卡拉OK软件,在前往表达中,输入“00442E27”确定后在此处设置断点。接下来运行,自动中断在我们下断处了,嘿嘿,肯定它要在这以后进行注册码的比较的,我们先F8初跟踪一下,我们可以看到:

00442E2C. E8 E1690000CALL<JMP.&MFC42.#537_??0CString@@QAE>
00442E31. 8BCE MOVECX, ESI  ; |
00442E33. E8 A8010000CALL家庭卡拉.00442FE0 ; \家庭卡拉.00442FE0
00442E38. 8BCE MOVECX, ESI
00442E3A. E8 01030000CALL家庭卡拉.00443140
00442E3F. 85C0 TESTEAX, EAX
00442E41. 8986 C4000000 MOVDWORD PTR DS:[ESI+C4], EAX
00442E47. 0F85 8E000000 JNZ家庭卡拉.00442EDB
00442E4D. 50PUSHEAX

怎么样,发现最后一段的经典比较了吧,先不管00442E3A这个Call是不是注册码验证子程序,那个JNZ跳往何处我们得关心一下。我们发现来到这里时,程序并没有跳转,下面的代码中又有N个Call,而如果跳到后面的话,会来到这里:

00442EF5. E8 06080000CALL家庭卡拉.00443700
00442EFA. 6A 0A PUSH0A; /Arg4 = 0000000A
00442EFC. 6A 01 PUSH1; |Arg3 = 00000001
00442EFE. 68 84DF4700PUSH家庭卡拉.0047DF84 ; |Arg2 = 0047DF84 ASCII "EverydayTip"
00442F03. 68 88D64700PUSH家庭卡拉.0047D688 ; |Arg1 = 0047D688 ASCII "App"
00442F08. B9 B0F24700MOVECX, 家庭卡拉.0047F2B0  ; |
00442F0D. E8 AE93FFFFCALL家庭卡拉.0043C2C0 ; \家庭卡拉.0043C2C0

呵呵,有个每日提示,这说明已经进入主程序了,最起码开始出来的提示注册对话框没了。为了证实我们的猜测,我们先强行让它跳过去看看,不出所料,果然直接进去了,不跳就会出现提示对话框。。但进去后我们发现还是提示未注册,看来注册码比较应该在这一跳的前边。重新来过,这次F7跟进00442E3A这个Call,果然仔细研究正是注册码验证子程序,具体算法我们不管了,00443187 |. /0F85 F4000000 JNZ家庭卡拉.00443281这个跳我们先关心一下,程序来到这里是要跳的,我们的注册码肯定是假的,先让它别跳,一番跟下去,会来到这里:

00443274 |. DED9 FCOMPP
00443276 |. DFE0 FSTSWAX
00443278  F6C4 40  TESTAH, 40
0044327B |. 0F85 5A040000 JNZ家庭卡拉.004436DB

这个跳有很大的跨度性,前面部分既然是比较注册码部分,这里很可能是胜利之巅。暂且记下,如果不跳会来到这:

00443281 |> 68 44ED4700PUSH家庭卡拉.0047ED44
00443286 |. 68 8CD64700PUSH家庭卡拉.0047D68C ; ASCII "AppWord"
0044328B |. 8D4C24 18LEAECX, DWORD PTR SS:[ESP+18]
0044328F |. 68 88D64700PUSH家庭卡拉.0047D688 ; ASCII "App"
00443294 |. 51PUSHECX
00443295 |. B9 B0F24700MOVECX, 家庭卡拉.0047F2B0
0044329A |. E8 618CFFFFCALL家庭卡拉.0043BF00
0044329F |. 8B5424 10MOVEDX, DWORD PTR SS:[ESP+10]
004432A3 |. 8B35 081C4500 MOVESI, DWORD PTR DS:[<&MSVCRT._mbs>; msvcrt._mbscmp
004432A9 |. 68 44ED4700PUSH家庭卡拉.0047ED44 ; /s2 = ""
004432AE |. 52PUSHEDX; |s1
004432AF |. C78424 940000>MOVDWORD PTR SS:[ESP+94], 0 ; |
004432BA |. FFD6 CALLNEAR ESI  ; \_mbscmp
004432BC |. 83C4 08  ADDESP, 8
004432BF |. 85C0 TESTEAX, EAX
004432C1 |. 0F84 C1030000 JE  家庭卡拉.00443688
004432C7 |. 8B4424 10MOVEAX, DWORD PTR SS:[ESP+10]
004432CB |. 68 30EB4700PUSH家庭卡拉.0047EB30 ; ASCII "CrackersDead"
004432D0 |. 50PUSHEAX
004432D1 |. FFD6 CALLNEAR ESI
004432D3 |. 83C4 08  ADDESP, 8
004432D6 |. 85C0 TESTEAX, EAX
004432D8 |. 0F84 E9030000 JE  家庭卡拉.004436C7
004432DE |. 6A 02 PUSH2

站内搜索