加密狗软件破解复制T-GOU工作室
RSS
当前位置 : 加密狗破解 > 破解方法 >

学习软件解密的8个要点

来源:未知 作者:admin 时间:2011-04-22 17:12 浏览:

自己依据本人软件破解的经历简单给大家谈一谈。这些问题关于初学者来说常常是很需求搞明白的,依据我本人的学习阅历,假如你直接照着很多软件破解教程去学习的话,多半都会把本人搞得满头的雾水,由于有很多的概念要么本人不是很分明,要么基本就不晓得是怎样一回事,所以希望经过下面的讨论给大家一定的协助:

1. 关于破解教程中程序代码地址问题:破解教程中都会放上一局部程序代码以协助解说程序的剖析办法,例如下面的一段程序代码:
......
0167:00408033 PUSH 00
0167:00408035 PUSH EBX
0167:00408036 CALL [USER32!EndDialog]
0167:0040803C JMP 0040812C
......
在这里程序中的代码地址如0167:00408033,其代码段的值(即0167)有可能依据不同的电脑会有区别,不一定一模一样,但偏移值应该是固定的(即00408033不变),所以假如看到破解文章里的程序代码的地址值和本人的电脑里不一样,不要以为搞错中央了,只需你的程序代码正确就不会有问题。
2. 关于如何设置断点的问题:正确恰当的设置好断点关于快速有效的解密十分重要,好的断点设置能够使我们疾速找到关键的程序段,而不恰当的断点则会对解密形成不用要的精神耗费,以至基本就不能拦截到程序的运转。但是详细什么时分用什么断点比拟适宜很难说,这需求本人用经历去累积,总的说来bpx hmemcpy这个万能断点对大多数注册码方式的软件都有用,初学者无妨多试试这个断点(通常我也是用这个断点设置,懒嘛^_^,哈哈。。。)。关于那些需求暴力破解的非注册码方式的软件,通常我们应该拦截对话框(如bpx DialogBox)和音讯框(如bpx MessageBox(A))等。不管关于哪一类软件,当我们设置的断点均没有效果时,可是试一下bpx lockmytask,这个断点的作用是拦截任何一个按键的动作,详细常用的一些断点设置请参考\"破解常用断点设置\"一文。另外,在注册码的破解中通常需求输入用户名和注册码,普通说来用户名和密码都能够随意输入,但是依据我本人的经历,很多软件关于注册码都会逐位的停止处置,假设输入\"78787878\"这串数字,那么在跟踪程序的时分我们就无法晓得我们当时所看到的\"78\"倒底是哪一个\"78\",所以我比拟喜欢用\"12345678\"这样的注册码输入方式,这样的话就就能晓得程序是在对注册码的哪一位停止运算,同样的关于那些需求输入较长序列号的软件,输入相似\"12345-67890-ABCDEF\"这样的序列号较好。 不过有一点大家需求特别的留意:上面讲的注册码输入方式\"12345678\"是针对拦截WIN32 API函数来说的,假设有些时分直接拦截WIN32 API函数难以找到程序的打破口,而要借助于\"S\"指令在内存中寻觅我们输入的用户名或注册码时,就最好不要采用\"12345678\"作为注册码,由于内存中很可能有许多的\"12345678\"字符串,这样我们没有方法晓得倒底我们要破解的程序运用的是哪一个\"12345678\",所以我们应该选择一个不易和内存数据相同的注册码,比方:74747474(自己喜欢用,意义嘛:****。。。哈哈哈^_^),对应的搜索指令为: S 30:0 L FFFFFFFF \'74747474\' 。当然,以上只是我个人的习气而已,详细用什么样的输入方式能够依据自己的喜好、习气来定,不用拘泥于某一固定的形式。
3. 关于如何跟踪程序的问题:初学者在开端学习解密的时分常常不晓得怎样样去跟踪程序,怎样样找到注册码比拟的中央,当面对长长的一堆程序代码时显得手足无措。通常软件的程序内部都会应用一个子程序(即 CALL ********)去考证我们输入的注册码正确与否,关于注册码显式存在的程序,普通都会将所输入的注册码和正确的注册码放进存放器,然后调用考证子程序停止判别,将结果返回,应用程序依据子程序返回的结果断定能否注册胜利,这样的程序经常具有如下的方式:
****:******** MOV EAX,[********] (或 PUSH EAX等方式)
****:******** MOV EDX,[********] (或 PUSH EDX等方式)
****:******** CALL ********
****:******** TEST EAX,EAX (或 TEST AL,AL,或是没有这一句等方式)
****:******** JNZ ******** (或 JZ ********等方式)
其中EAX和EDX指向的内存区域就是我们输入的注册码和正确的注册码,这里的存放器EAX和EDX是随意写的,也能够是ECX,EBX,EDI,ESI等等。关于注册码隐式存在的程序,固然不能直接看到正确的注册码,但是通常也是先将所输入的注册码地址放进某个存放器,然后调用子程序去考证,破解时就需求进入子程序去剖析注册算法。总之,看到子程序(call ********)后面跟着跳转指令(JNZ ********或JZ ********)的中央我们就应该进步警觉,多用 D EAX(或EBX、ECX、EDX、EDI、ESI...等)去看看存放器指向的内存区域藏着什么东西。有一点大家要提示大家:看见程序中运用下面这个函数是要留意,即GetDlgItenInt,这个API函数的作用是将输入的文本转化为整数,所以这类程序中是不会有显现存在的注册码的,由于注册码被转换为整数了,程序通常会用CMP ECX,EDX 这品种型的指令去考证注册码的正确性,这里ECX和EDX中存的就是所输入注册码和正确注册码的整数方式,此时能够用 ? edx 和 ? ecx 看到其十进制方式,即我们输入的方式。
4. 断点:所谓断点就是程序被中缀的中央,这个词关于解密者来说是再熟习不过了。那么什么又是中缀呢?中缀就是由于有特殊事情(中缀事情)发作,计算机暂停当前的任务(即程序),转而去执行另外的任务(中缀效劳程序),然后再返回原先的任务继续执行。打个比如:你正在上班,忽然有同窗打电话通知你他从外地坐火车过来,要你去火车站接他。然后你就向老板暂时请假,赶往火车站去接同窗,接着将他安排好,随后你又返回公司继续上班,这就是一个中缀过程。我们解密的过程就是等到程序去获取我们输入的注册码并准备和正确的注册码相比拟的时分将它中缀下来,然后我们经过剖析程序,找到正确的注册码。所以我们需求为被解密的程序设置断点,在恰当的时分切入程序内部,追踪到程序的注册码,从而到达crack的目的。
5. 领空:这是个十分重要的概念,但是也初学者是常常不明白的中央。我们在各种各样的破解文章里都能看到领空这个词,假如你搞不分明到底程序的领空在哪里,那么你就不可能进入破解的大门。或许你也曾破解过某些软件,但那只是瞎猫碰到死老鼠而已(以前我就是这样的^_^,如今说起来都不好意义喔!)。所谓程序的领空,说白了就是程序本人的中央,也就是我们要破解的程序本人程序码所处的位置。或许你马上会问:我是在程序运转的时分设置的断点,为什么中缀后不是在程序本人的空间呢?由于每个程序的编写都没有固定的形式,所以我们要在想要切入程序的时分中缀程序,就必需不依赖详细的程序设置断点,也就是我们设置的断点应该是每个程序都会用到的东西。在DOS时期,根本上一切的程序都是工作在中缀程序之上的,即简直一切的DOS程序都会去调用各种中缀来完成任务。但是到了WINDOWS时期,程序没有权利直接调用中缀,WINDOWS系统提供了一个系统功用调用平台(API),就向DOS程序以中缀程序为根底一样,WINDOWS程序以API为根底来完成和系统打交道,从而各种功用,所以WINDWOS下的软件破解其断点设置是以API函数为根底的,即当程序调用某个API函数时中缀其正常运转,然后停止解密。例如在SOFTICE中设置下面的断点:bpx GetDlgItemText(获取对话框文本),当我们要破解的程序要读取输入的数据而调用GetDlgItemText时,立刻被SOFTICE拦截到,从而被破解的程序停留在GetDlgItemText的程序区,而GetDlgItemText是处于WINDWOS本人管理的系统区域,假如我们擅自改掉这局部的程序代码,那就大祸临头了^_^!所以我们要从系统区域返回到被破解程序本人的中央(即程序的领空),才干对程序停止破解,至于怎样看程序的领空请看前面的SOFTICE图解。试想一下:关于每个程序都会调用的程序段,我们可能从那里找到什么有用的东西吗?(怎样样去加密是程序本人决议的,而不是调用系统功用完成的!)
6. API:即Application Programming Interface的简写,中文叫应用程序编程接口,是一个系统定义函数的大汇合,它提供了访问*作系统特征的办法。 API包含了几百个应用程序调用的函数,这些函数执行一切必需的与*作系统相关的*作,如内存分配、向屏幕输出和创立窗口等,用户的程序经过调用API接口同WINDOWS打交道,无论什么样的应用程序,其底层最终都是经过调用各种API函数来完成各种功用的。通常API有两中根本方式:Win16和Win32。 Win16是原来的、API的16位版本,用于Windows 3.1;Win32是如今的、API的32位版本,用于Windows 95/98/NT/ME/2000。Win32包括了Win16,是Win16的超集,大多数函数的名字、用法都是相同的。16位的API函数和32位的API函数的区别在于最后的一个字母,例如我们设置这样的断点:bpx GetDlgItemText、bpx GetDlgItemTextA和bpx GetDlgItemTextW,其中 GetDlgItemText是16位API函数,GetDlgItemTextA和GetDlgItemTextW是32位API函数,而GetDlgItemTextA表示函数运用单字节,GetDlgItemTextW表示函数运用双字节。如今我们破解中常用到的是Win32单字节API函数,就是和GetDlgItemTextA相似的函数,其它的两种(Win16 API和Win32双字节API函数)则比拟少见。 Win32 API函数包含在动态链接库(Dynamic Link Libraries,简称DLLs)中,即包含在kernel32.dll、user32.dll、gdi32.dll和comctl32.dll中,这就是为什么我们要在softice中用exp=C:\\windows\\system\\kernel32.dll等命令行将这些动态链接库导入softice中的缘由。由于不这样做的话,我们就无法拦截到系统Win32 API函数调用了。
7. 关于程序中注册码的存在方式:破解过程中我们都会去找程序中将输入的注册码和正确的注册码相比拟的中央,然后经过对程序的跟踪、剖析找到正确的注册码。但是正确的注册码通常在程序中以两种形态存在:显式的和隐式的,关于显式存在的注册码,我们能够直接在程序所处的内存中看到它,例如你能够直接在SOFTICE的数据窗口中看到相似\"297500523\"这样存在的注册码(这里是随意写的),关于注册码显式存在的软件破解起来比拟容易;但是有些软件的程序中并不会直接将我们输入的注册码和正确的注册码停止比拟,比方有可能将注册码换算成整数、或是将注册码拆开,然后将每一位注册码分开在不同的中央逐一停止比拟,或者是将我们输入的注册码停止某种变换,再用某个特殊的程序停止考证等等。总之,应用程序会采取各种不同的复杂运算方式来逃避直接的注册码比拟,关于这类程序,我们通常要下功夫去认真跟踪、剖析每个程序功用,找到加密算法,然后才干破解它,当然这需求一定的8086汇编编程功底和很大的耐烦与精神。
8. 关于软件的破解方式:自己将破解方式分为两大类,即完整破解和暴力破解。所谓完整破解主要是针对那些需求输入注册码或密码等软件来说的,假如我们能经过对程序的跟踪找到正确的注册码,经过软件自身的注册功用正常注册了软件,这样的破解称之为完整破解;但假如有些软件自身没有提供注册功用,只是提供试用(DEMO),或是注册不能经过软件自身停止(例如需求获取另外一个专用的注册程序,经过INTERNET的注册等等),或者是软件自身的加密技术比拟复杂,软件破解者的才能、精神、时间有限,不能直接得到正确的注册码,此时我们需求去修正软件自身的程序码,即人为改动软件的运转方向,这样的破解称之为暴力破解。


Tags:加密狗复制加密狗破解加密狗解密破解加密狗
最新评论共有 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名评论
立即注册账号