软件破解全程大揭密

页码,1/8(W)

软件破解全程大揭密

风飘雪

在很多人的眼中,软件破解是一直很神秘。其实,你也可以做到软件破解的,下面笔者用通俗的语言介绍软件破解。不过,笔者只是希望你步入破解的殿堂,了解奇妙无比的破解天地。利用下面的知识做坏事,出了事笔者可不负责哟。

软件的“壳”和编程语言的识别

众所周知,软件作者用编程语言编写好软件后,是将它编译成扩展名为EXE的可执行文件。编译为EXE的目的有两点:(1)有一些版权信息需要保护起来,不能让别人随意改动,如作者的姓名、软件名称等;(2)需要给程序“减肥”,从而方便存储、使用和网上传输。

为了编译,会用到一些软件。它们能将可执行文件压缩和对信息加密(图1),实现上述两个功能,这些软件称为加壳软件。为软件加上的东东就称为“壳”。加壳软件不同于一般的WinZIP、WinRAR等打包类压缩软件。加壳软件是压缩可执行文件的,压缩后的文件可以直接运行。

(图1)

最常见的加壳软件有3个:ASPACK 、UPX、PEcompact。毕竟它们是主流,据统计,用它们加壳的软件约占市面所有软件的90%!其他不常用的加壳软件有ASPROTECT、PETITE 、NEOLITE、TELOCK等,因为使用较少,本文不作介绍。

软件最常见的编程语言是Delphi,Visual Basic(简称VB),Visual C++(简称VC)。了解些编程的知识,会让破解更加轻车熟路。

好了,让我们来进行破解的第一步——侦测出软件的“壳”和软件所用的编程语言。具备这种“慧眼”的软件主要有以下4个:fileinfo、language2000、Peid、pe-scan。下面详细介绍一下它们的使用方法,希望大家能够熟练掌握,并利用它们拨开壳的层层迷雾,揭开壳的神秘面纱。

1.侦测“壳”的软件fileinfo(https://www.360docs.net/doc/846122239.html,/fi25.zip),简称fi,侦壳能力极强。它有两种使用方法,采用其中一种即可。届时,壳的信息为绿色字,显示在左上角。

第一种使用方法:把待侦测“壳”的软件(如xx.exe)和fi.exe位于同一目录下,执行Windows开始菜单的“运行”,键入“fi aa”即可。

第二种:让待侦测壳的软件(如xx.exe)和fi.exe位于同一目录下,将xx的图标拖到fi的图标上。

图2

结果,如图2所示,软件crackme7.exe是用UPX v0.94软件加的“壳”,其中0.94为UPX的版本号。

2.同时侦测“壳”和编写语言的软件language2000(两个功能合为一体,太酷了)。笔者特别推荐使用language2000中文版

(https://www.360docs.net/doc/846122239.html,/1/HA_language2k451144_YY.zip),它完全是傻瓜式软件,上手很容易,运行后选取待侦测“壳”的软件即可,图3为运行界面。

图3

由图3所示,软件cr-xxzs.exe是用Visual Basic6.0编写的,并由UPX软件加的“壳”。

3.侦壳新秀PEid中文版(https://www.360docs.net/doc/846122239.html,/peid8ch.rar)具有华丽的图形界面。外壳整合(添加到鼠标右键)功能令使用更加方便,支持拖放操作。配置时,务请将“扩展到鼠标右键”打上对号。

其使用方法是,鼠标点住XX.exe,按鼠标右键,选"使用PEid扫描"即可;“壳”的信息就显示在底部。

图4

如图4所示,软件W32Dasm.exe是用ASPack 2.11加“壳”,2.11为ASPack的版本号

4.侦壳新霸主pe-scan(https://www.360docs.net/doc/846122239.html,/pe-scan.zip)增添了自动去“壳”功能,开拓了侦“壳”软件新的发展方向,从而奠定了其新霸主地位。如图5,运行后把左下角的shell打上对号就整合到了右键菜单。

图5

如图5所示,软件SmallLocker.exe是用telock 0.60加“壳”,0.60为telock软件的版本号。

用工具软件为软件脱“壳”

根据前面的内容侦测了一个软件的“壳”后,接下来我们就需要把它的“壳”脱去了,以便还原软件的本来面目。注意:若侦测出它根本没加“壳”,可省掉这步。不过,现在没加“壳”的软件已经很少了。

根据“壳”的流行程度,常用的脱“壳”软件主要有3个:AspackDie、UPX、unpecompact,分别针对前面提到的3个加壳软件。下面介绍它们的使用方法:

1. AspackDie(https://www.360docs.net/doc/846122239.html,/aspackdie-c.zip)能脱ASPack的“壳”,是

傻瓜式软件, 使用方法类似language2000,运行后选取待脱壳的软件即可轻松完成。

2.UPX (https://www.360docs.net/doc/846122239.html,/upx123w.zip)脱UPX“壳”,UPX自身具备加壳、脱壳功能。其方法为:让待脱“壳”的软件(如xx.exe)和upx.exe位于同一目录下,执行Windows开始菜单的“运行”,键入“upx -d xx.exe”即可。

3.unpecompact(https://www.360docs.net/doc/846122239.html,/unpec132.zip) 脱的是Pecompact的“壳”。

傻瓜式软件,使用方法类似AspackDie,运行后选取待脱壳的软件即可。

破解基础知识和16进制编辑器

1.机器码,又称机械码。当你用16进制编辑器打开、编辑EXE等可执行文件时,你会看到许许多多的由0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F组成的数码,这些数码就是机器码。修改程序时必须通过修改机器码来修改EXE等可执行文件。

2. 16进制编辑器。16进制编辑器是编辑、修改EXE等可执行文件的软件。常用的有UltraEdit、WinHex等(它们的中文版可到笔者主页

https://www.360docs.net/doc/846122239.html,下载)。由于这两款软件非常有名,网上有很多介绍它们使用的文章,限于篇幅,不再赘述(注:10期《网迷》有WinHex的使用实例)。

3. 破解时常用的汇编指令如下,汇编较弱者可先强行背住,以后就可慢慢理解了。

cmp a,b //比较a与b

mov a,b //把b的值送给a,使a=b

ret //返回主程序

nop //无作用,英文"no operation"的简写,意思是"do nothing"(机器码90) (解释:ultraedit打开编辑exe文件时看到90,等同于汇编语句nop) call //调用子程序,子程序以ret结尾

je 或jz //若相等则跳(机器码74 或0F84)

jne或jnz //若不相等则跳(机器码75或0F85)

jmp //无条件跳(机器码EB)

jb //若小于则跳

ja //若大于则跳

jg //若大于则跳

jge //若大于等于则跳

jl //若小于则跳

jle //若小于等于则跳

pop xx //xx出栈

push xx //xx压栈

更为详细的指令请查阅汇编书籍。

4.破解常见修改,参看表1。

汇编指令修改 相应的机器码修改(通过16进制编辑器实现)

jnz/jne->nop 75->90

jnz/jne -> jmp 75-> EB

jz/je->nop 74->90

jz/je -> jmp 74-> EB

jnz -> jz 75->74 或 0F 85 -> 0F 84

jz -> jnz 74->75 或 0F 84 -> 0F 85

jnz -> jz 75->74 或 0F 85 -> 0F 84

je-> jne 74->75 或 0F 84 -> 0F 85

表1 破解常见修改

5.两种不同情况的不同修改方法

为了破解软件的注册和功能限制,归根结底其方法就是在两种不同情况下对程序所进行的修改,具体总结如下。

(1)修改为jmp(其示意图见图6)

je(jne,jz,jnz) =>jmp相应的机器码为EB (意思是出错信息向上找到的第一个跳转),jmp的作用是绝对跳,无条件跳,从而跳过下面的出错信息。例如:

xxxxxxxxxxxx 出错信息,如注册码不对,sorry,未注册版不成功,“Function Not Avaible in Demo”,“Command Not Avaible” 或 “Can't save in Shareware/Demo”等,我们希望把它跳过,不让它出现。

……

xxxxxxxxxxxx 正确路线所在,直接跳转到这里。

(图6)

(2)修改为nop(其示意图见图7)

je(jne,jz,jnz) =>nop相应的机器码90 (正确信息向上找到的第一个跳转),nop的作用是抹掉这个跳转,使这个跳转无效,失去作用,从而使程序顺利来到紧跟其后的正确信息处。例如:

xxxxxxxxxxxx 正确信息,如注册成功,谢谢您的支持等,我们希望它不被跳过,让它出现,所以程序一定要顺利来到这里,不能跳转。

……

xxxxxxxxxxxx 出错信息,我们希望不要跳到这里,不让它出现!

(图7)

针对上面两点,笔者总结了个爆破无敌口诀 背会此口诀,你将天下无敌,以后慢慢琢磨,仔细体会,收益多多,千万不要错过哦!

一条(跳)就死,九筒(90)就胡 (对应上面的(2)――修改为nop)

一条(跳)就胡,一饼(EB)伺候 (对应上面的(1)――修改为jmp)

妻死(74)便妻无(75)

爸死(84)便爸无(85)

破解级别与常备工具

1.破解级别

初级,修改程序,用ultraedit等16进制编辑器修改EXE文件,称暴力破解,简称爆破。

中级,用动态破解工具追出软件的注册码。

高级,用一种编程语言写出软件的注册机。

2.常用破解工具

(1) 静态反汇编工具:W32Dasm,常被比作破解人的屠龙刀。

(2) 动态追踪工具:TRW2000,常被比作破解人的倚天剑。SoftICE则是更为强大的动态工具。

(3) 新式破解工具(静动合一):OllyDbg,引领破解工具的新潮流。

静态分析与实例

1.静态分析

1.欲破解一软件,首先应该先用用想破解的这个软件,了解一下功能是否有限制,最好阅读一下软件的说明书或手册,特别是自己所关心的注册部分的使用说明,这样能够找到些线索。

所谓静态分析是从反汇编出来的程序清单上分析。从提示信息入手进行分析。

目前,大多数软件在设计时,都采用了人机对话方式。所谓人机对话,即在软件运行过程中,需要由用户选择的地方,软件则显示相应的提示信息,并等待用户按键选择。而后软件执行完某一段程序后,便显示一串提示信息,以反映该段程序运行后的状态,是正常运行,还是出现错误,或者提示用户进行下一步工作的帮助信息。为此,如果我们对静态反汇编出来的程序清单进行阅读,可了解软件的编程思路,以便顺利破解。人机对话方式给破解带来了方便。

2.W32Dasm介绍

破解时常用的静态分析工具是W32Dasm。大家可使用经中国破解人多此修改过的W32Dasm黄金版中文版(https://www.360docs.net/doc/846122239.html,/pw32dasmgold.zip),它功能强大,能完美显示中文和处理VB程序。

W32Dasm能很方便地反汇编程序,其使用也很简单,请读者参照后面的范例掌握。

3.实际修改地址(偏移地址)和行地址(虚拟地址)

W32Dasm反汇编出来的代码由三列组成:

第一列 行地址(虚拟地址)

第二列 机器码(最终修改时用ultraedit修改)

第三列 汇编指令

第一列 第二列 第三列

:0041BE38 2B45F0 sub eax, dword ptr [ebp-10]

:0041BE3B 6A42 push 00000042

在W32Dasm下将绿色的光条移到某一行代码上,在窗口底部可以看到一些字符。

例如:@:00461456 @:Offset 00060856h

第一个@指示行地址(虚拟地址),@00461456 与W32Dasm光条所在行的第一列相同;

第二个@指示实际修改地址(偏移地址) ,@Offset 00060856h中,h表示十六进制,offset的英文意思是偏移。

4.EXE可执行文件的修改方法

这是破解程序的最后一步(注意:修改程序时已经确保程序脱“壳”)。用ultraedit找到实际修改地址(偏移地址),修改机器码,从而完成exe文件的修改

方法:打开欲修改的文件,敲入Ctrl+g,0x偏移地址(如上面的敲入0x60856),即可到达实际修改地址。

5. W32Dasm的使用

(1)打开文件。选“反汇编”菜单下的“打开文件”打开可执行文件,如aa.exe(图8)。

图8

再次提示:可执行文件不能有壳,切记!!若有壳,请先脱壳!

(2)串式参考。如图9,选“参考”菜单中的“串式参考”,出现一个新的窗口,使其变小,刚好位于W32Dasm主窗口的前面。找到其中的某一条目,双击鼠标左键,会看到主窗口的绿色光条会移到某一行代码上。这就是在根据串式参考的信息定位到相应的汇编代码,在点击串式参考菜单后出现的小窗口中,有许多提示信息。找到某条我们感兴趣的信息双击,主窗口中的光条就会移动到相应的汇编代码处。注意:多次反复双击,可以发现绿色光条都移到哪几行(有时只有1行,有时会有很多行)。

图9

6.用W32Dasm进行静态破解的一般步骤:

(1)看软件的说明书,软件注册与不注册在功能上有什么区别,如何注册。

(2)运行此软件,试着输入你的姓名和任意注册码去注册,有什么错误提示信息,将错误提示信息记下来。

(3)侦测有无加壳,若加壳,用相应的工具软件为其脱壳。

(4)W32Dasm对软件进行反汇编。

(5)在串式参考中找到错误提示信息或可能是正确的提示信息后双击鼠标左键。

(6)W32Dasm主窗口中分析相应汇编,找出关键跳转和关键call。

(7)绿色光条停在关键跳转,在pw32dasmgold主窗口底部找到关键跳转的偏移地址(实际修改地址)。

(8)用ultraedit等16进制编辑器找到偏移地址(实际修改地址)修改机器码,保存。

(9)用W32Dasm破解成功。

7.静态破解实例

静态破解实例

破解目标WinRescue XP(https://www.360docs.net/doc/846122239.html,/down/wnrsqxpz.exe),版本号V1.07.20,软件大小为864K,是一款国外的系统备份软件。下载后安装软件,试运行它,会弹出要求注册的窗口,让你输入注册码(Enter Registration Key),随便填个数,回车,弹出出错信息“WARNING - Incorrect Key Entered”,记下这个信息。WinRescue XP软件的主运行文件为 RESCUEXP.EXE,用前面提到的4种侦壳软件侦测,发现程序没有加“壳”。用W32Dasm的“反汇编/打开文件”菜单打开RESCUEXP.EXE,用“参考/串式参考”菜单查看我们感兴趣的信息,看到这条“WARNING -

Incorrect Key Entered”,这不就是我们想要的吗?!不要犹豫,快双击它吧,主窗口的光条会来到这里:

:004B3ED7 8B55F0 mov edx, dword ptr [ebp-10]

* Possible StringData Ref from Code Obj ->"jabeZ4:9-10"

:004B3EDA B8C03F4B00 mov eax, 004B3FC0

:004B3EDF E86C11F5FF call 00405050

:004B3EE4 85C0 test eax, eax

:004B3EE6 742D je 004B3F15 //这里是关键跳转

:004B3EE8 33D2 xor edx, edx

:004B3EEA 8B8304030000 mov eax, dword ptr [ebx+00000304]

:004B3EF0 E8F325F9FF call 004464E8

* Possible StringData Ref from Code Obj ->"Registration Key AcceptedThank you for purchasing WinRescue. " //正确提示信息

:004B3EF5 B8D43F4B00 mov eax, 004B3FD4

:004B3EFA E88DBAF8FF call 0043F98C

:004B3EFF A1BC7A4F00 mov eax, dword ptr [004F7ABC]

:004B3F04 8B00 mov eax, dword ptr [eax]

:004B3F06 8B8014030000 mov eax, dword ptr [eax+00000314]

:004B3F0C C7400C64000000 mov [eax+0C], 00000064

:004B3F13 EB16 jmp 004B3F2B

* Referenced by a (U)nconditional or (C)onditional Jump at Address:

|:004B3EE6(C)

* Possible StringData Ref from Code Obj ->"WARNING - Incorrect Key EnteredWinRescue may be used without entering a Key WinRescue Terminating. " //错误提示信息:004B3F15 B81C404B00 mov eax, 004B401C

由错误提示信息向上查找第一个条件跳转(除jmp以外的跳转),就来到了004B3EE6行。你说你找不到,我晕!紧挨错误提示信息的左上面看到“|:004B3EE6(C)”没有,不是告诉你了吗,大写的C是英文Condition(条件)的缩写。将绿色光条移动到004B3EE6行,如图10。

在边框的最下面一行的右边,你看到@offset 000B32E6h没有,根据前面讲的,B32E6就是实际修改地址。运行UltraEdit,Ctrl+g,输入0xB32E6,看到742D没有,它就代表je 004B3F15。根据常见修改第(2)条,正确信息在前,修改为nop,即90。为保持字节大小相同,需要2个90,故把742D 改为9090,保存。保存后的程序输入任意的注册码,都会注册成功。再次运行程序,发现已经是注册版了。破解完成,收工喽!

图10

有兄弟要问了,jabeZ4:9-10这个字符串很好生奇怪,它究竟是个什么东东呢?你看它长得是不是很像软件的注册码呢?哈哈!!的确如此,不修改原程序,输入jabeZ4:9-10就会注册成功。意外的收获,各位看官,您不觉得兴奋吗??破解真有趣。

动态分析与实例

1.Trw2000的使用 (https://www.360docs.net/doc/846122239.html,/trw2000.zip)

运行Trw2000.exe程序即可启动Trw2000,其启动界面如图11,点OK按钮则Trw2000驻留在桌面右下角。按Ctrl+N键可以激活Trw2000,弹出其界面(图12)。

图11

2.几个概念

(1) 断点:所谓断点就是程序被中断的地方,这个词对于破解者来说是再熟悉不过了。那么什么又是中断呢?中断就是由于有特殊事件(中断事件)发生,计算机暂停当前的任务(即程序),转而去执行另外的任务(中断服务程序),然后再返回原先的任务继续执行。打个比方:你正在上班,突然有同学打电话告诉你他从外地坐火车过来,要你去火车站接他。然后你就向老板临时请假,赶往火车站去接同学,接着将他安顿好,随后你又返回公司继续上班,这就好比是一个中断过程。我们破解的过程就是等到程序去获取我们输入的注册码并准备和正确的注册码相比较的时候将它中断下来,然后我们通过分析程序,找到正确的注册码。所以我们需要为被破解的程序设置断点,在适当的时候切入程序内部,追踪到程序的注册码,从而达到破解的目的。

(2)领空:这也是个非常重要的概念,但是也初学者是常常不明白的地方。我们在各种各样的破解文章里都能看到领空这个词,如果你搞不清楚到底程序的领空在哪里,那么你就不可能进入破解的大门。或许你也曾破解过某些软件,但那只是瞎猫碰到死老鼠而已(以前我就是这样的

^_^)。所谓程序的领空,说白了就是程序自己的地方,也就是我们要破解的程序自己程序码所处的位置。也许你马上会问:我是在程序运行的时候设置的断点,为什么中断后不是在程序自己的空间呢?因为每个程序的编写都没有固定的模式,所以我们在想要切入程序的时候中断程序,就必须不依赖具体的程序设置断点,也就是我们设置的断点应该是每个程序都会用到的东西。敲入pmodule可到达程序自己的领空.

(3)关于破解练习的问题:学习破解需要大量的练习,对于破解目标的选择,初学者不宜以大型的、著名的软件为目标,因为这些软件通常加密较为复杂,破解不易,应该选择一些比较不出名的、小型的和早些时候的共享软件来练习,因为加密相对简单的软件有利于初学者快速掌握破解思想和技能。至于习题的来源则很广泛,可以从网上下载,也可以去市面上购买一些共享软件光盘。推荐使用crackme进行练习。

2.Trw2000常用快捷键

F5键:退出Trw2000窗口(等价于输入go简打g命令)

F8键: 遇到call时追进call

F9键:在光标所在位置设断点

F10键:单步执行

F12键:一个循环圈一个循环圈的走(程序执行到RET指令处,即从子程序CALL中返回,

从CALL到RET为一个循环圈)

3.Trw2000常用命令

bpx *** //在***处下断点(断点的解释见下),最常用的 bpx hmemcpy万能中断。

bd* //清除所有断点。

bc* //清除一个断点。

go //简打g,暂时退出Trw2000窗口。

code on(code off) //显示三列,出现机器码,和w32dasm看到的一样(code off关闭)。

pmodule //到程序领空(领空的解释前面已说明)。

x //彻底退出Trw2000

更为详细的指令请查阅Trw2000用户手册。

4.用Trw2000追踪注册码的步骤

(1)将程序的注册对话框打开,输入你的姓名和任意的注册码(推荐用87654321,因为有顺序的数字符号会减少你的花费时间)。

(2)Ctrl+n呼叫出Trw2000,然后按下万能中断(键入bpx hmemcpy),回车,键入g,回车。

(3)弹回到注册程序,按下注册窗中的“确定”按钮。

(4)键入bc*,回车,键入pmodule,回车,猛按F12键,等到出现“注册失败”的画面时,记下刚才按F12键的次数。

(5)第二次重复第(1)~(4)步,这次按下的按数是刚才第4步记下的按数减去1,停下来。

(6)开始按F10键单步追寻,找到关键call和关键跳转,在这个关键call处用键盘敲入指令d eax 和 d edx等,查看eax和edx寄存器中所装的数值,多看看,有时就会看到注册码。注册码出现在TRW的右上方(找关键call和关键跳转有技巧,见下面的破解经典句式) 。

(7)如果没找到,当然要按F8键进去关键call观察了,继续追踪可疑call和可疑跳转。当然如果要进入此call,必须得再次重复第一步的行动。不要嫌麻烦, 破解就是这样,要有耐心,才会成功。注册码出现位置参看图12。

图12

5. 动态追踪破解技巧-破解经典句式

以下是经典的比较组合,常常是注册码的出现处,所以被称为破解经典句式。

(1)

mov eax,[ ] //这里可以是地址,也可以是其他寄存器或mov eax [ ]。

mov edx,[ ] //同上,通常这两个地址就储存着重要信息 或者可以是pop edx。

call XXXXXXXX //关键call。

test eax,eax //eax为标志位。

jz(jnz)或 jne(je) //关键跳转。

(2)

mov eax,[ ] //这里可以是地址,也可以是其他寄存器。

mov edx,[ ] //或是pop edx,通常该地址就储存着重要信息。

call XXXXXXXX //关键call。

jne(je) //关键跳转。

(3)

mov eax,[ ] //这里可以是地址,也可以是其他寄存器

mov edx,[ ] //同上,通常储存着重要信息

cmp eax,edx //关键比较。

jnz(jz) //关键跳转。

6.动态破解实例

限于篇幅,给出下载地址https://www.360docs.net/doc/846122239.html,/ex2.zip,请读者自行查阅。

学好破解的补充

真正要深入地学好破解,是必须熟练掌握几十种破解工具的使用方法,熟悉API的相关知识,熟悉Windows编程,熟悉汇编知识。如此这般,才能如疱丁解牛,破解起软件来游刃有余^_^。

相关文档
最新文档