下载
加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 破解软件教程

破解软件教程.doc

破解软件教程

yang海通
2017-10-10 0人阅读 举报 0 0 暂无简介

简介:本文档为《破解软件教程doc》,可适用于IT/计算机领域

破解软件教程下面谈到了一些在学习解密过程中经常遇到的问题本人根据自己的经验简单给大家谈一谈。这些问题对于初学者来说常常是很需要搞明白的根据我自己的学习经历如果你直接照着很多破解教程去学习的话多半都会把自己搞得满头的雾水因为有很多的概念要么自己不是很清楚要么根本就不知道是怎么一回事所以希望通过下面的讨论给大家一定的帮助:断点:所谓断点就是程序被中断的地方这个词对于解密者来说是再熟悉不过了。那么什么又是中断呢?中断就是由于有特殊事件(中断事件)发生计算机暂停当前的任务(即程序)转而去执行另外的任务(中断服务程序)然后再返回原先的任务继续执行。打个比方:你正在上班突然有同学打电话告诉你他从外地坐火车过来要你去火车站接他。然后你就向老板临时请假赶往火车站去接同学接着将他安顿好随后你又返回公司继续上班这就是一个中断过程。我们解密的过程就是等到程序去获取我们输入的注册码并准备和正确的注册码相比较的时候将它中断下来然后我们通过分析程序找到正确的注册码。所以我们需要为被解密的程序设置断点在适当的时候切入程序内部追踪到程序的注册码从而达到crack的目的。领空:这是个非常重要的概念但是也初学者是常常不明白的地方。我们在各种各样的破解文章里都能看到领空这个词如果你搞不清楚到底程序的领空在哪里那么你就不可能进入破解的大门。或许你也曾破解过某些软件但那只是瞎猫碰到死老鼠而已(以前我就是这样的^^现在说起来都不好意思喔!)。所谓程序的领空说白了就是程序自己的地方也就是我们要破解的程序自己程序码所处的位置。也许你马上会问:我是在程序运行的时候设置的断点为什么中断后不是在程序自己的空间呢?因为每个程序的编写都没有固定的模式所以我们要在想要切入程序的时候中断程序就必须不依赖具体的程序设置断点也就是我们设置的断点应该是每个程序都会用到的东西。在DOS时代基本上所有的程序都是工作在中断程序之上的即几乎所有的DOS程序都会去调用各种中断来完成任务。但是到了WINDOWS时代程序没有权力直接调用中断WINDOWS系统提供了一个系统功能调用平台(API)就向DOS程序以中断程序为基础一样WINDOWS程序以API为基础来实现和系统打交道从而各种功能所以WINDWOS下的软件破解其断点设置是以API函数为基础的即当程序调用某个API函数时中断其正常运行然后进行解密。例如在SOFTICE中设置下面的断点:bpxGetDlgItemText(获取对话框文本)当我们要破解的程序要读取输入的数据而调用GetDlgItemText时立即被SOFTICE拦截到从而被破解的程序停留在GetDlgItemText的程序区而GetDlgItemText是处于WINDWOS自己管理的系统区域如果我们擅自改掉这部分的程序代码那就大祸临头了^^!所以我们要从系统区域返回到被破解程序自己的地方(即程序的领空)才能对程序进行破解至于怎样看程序的领空请看前面的SOFTICE图解。试想一下:对于每个程序都会调用的程序段我们可能从那里找到什么有用的东西吗?(怎么样去加密是程序自己决定的而不是调用系统功能实现的!)API:即ApplicationProgrammingInterface的简写中文叫应用程序编程接口是一个系统定义函数的大集合它提供了访问操作系统特征的方法。API包含了几百个应用程序调用的函数这些函数执行所有必须的与操作系统相关的操作如内存分配、向屏幕输出和创建窗口等用户的程序通过调用API接口同WINDOWS打交道无论什么样的应用程序其底层最终都是通过调用各种API函数来实现各种功能的。通常API有两中基本形式:Win和Win。Win是原来的、API的位版本用于WindowsWin是现在的、API的位版本用于WindowsNTME。Win包括了Win是Win的超集大多数函数的名字、用法都是相同的。位的API函数和位的API函数的区别在于最后的一个字母例如我们设置这样的断点:bpxGetDlgItemText、bpxGetDlgItemTextA和bpxGetDlgItemTextW其中GetDlgItemText是位API函数GetDlgItemTextA和GetDlgItemTextW是位API函数而GetDlgItemTextA表示函数使用单字节GetDlgItemTextW表示函数使用双字节。现在我们破解中常用到的是Win单字节API函数就是和GetDlgItemTextA类似的函数其它的两种(WinAPI和Win双字节API函数)则比较少见。WinAPI函数包含在动态链接库(DynamicLinkLibraries简称DLLs)中即包含在kerneldll、userdll、gdidll和comctldll中这就是为什么我们要在softice中用exp=C:windowssystemkerneldll等命令行将这些动态链接库导入softice中的原因。因为不这样做的话我们就无法拦截到系统WinAPI函数调用了。关于程序中注册码的存在方式:破解过程中我们都会去找程序中将输入的注册码和正确的注册码相比较的地方然后通过对程序的跟踪、分析找到正确的注册码。但是正确的注册码通常在程序中以两种形态存在:显式的和隐式的对于显式存在的注册码我们可以直接在程序所处的内存中看到它例如你可以直接在SOFTICE的数据窗口中看到类似""这样存在的注册码(这里是随意写的)对于注册码显式存在的软件破解起来比较容易但是有些软件的程序中并不会直接将我们输入的注册码和正确的注册码进行比较比如有可能将注册码换算成整数、或是将注册码拆开然后将每一位注册码分开在不同的地方逐一进行比较或者是将我们输入的注册码进行某种变换再用某个特殊的程序进行验证等等。总之应用程序会采取各种不同的复杂运算方式来回避直接的注册码比较对于这类程序我们通常要下功夫去仔细跟踪、分析每个程序功能找到加密算法然后才能破解它当然这需要一定的汇编编程功底和很大的耐心与精力。关于软件的破解方式:本人将破解方式分为两大类即完全破解和暴力破解。所谓完全破解主要是针对那些需要输入注册码或密码等软件来说的如果我们能通过对程序的跟踪找到正确的注册码通过软件本身的注册功能正常注册了软件这样的破解称之为完全破解但如果有些软件本身没有提供注册功能只是提供试用(DEMO)或是注册不能通过软件本身进行(例如需要获取另外一个专用的注册程序通过INTERNET的注册等等)或者是软件本身的加密技术比较复杂软件破解者的能力、精力、时间有限不能直接得到正确的注册码此时我们需要去修改软件本身的程序码即人为改变软件的运行方向这样的破解称之为暴力破解。关于破解教程中程序代码地址问题:破解教程中都会放上一部分程序代码以帮助讲解程序的分析方法例如下面的一段程序代码::PUSH:PUSHEBX:CALLUSER!EndDialog:CJMPC在这里程序中的代码地址如:其代码段的值(即)有可能根据不同的电脑会有区别不一定一模一样但偏移值应该是固定的(即不变)所以如果看到破解文章里的程序代码的地址值和自己的电脑里不一样不要以为搞错地方了只要你的程序代码正确就不会有问题。关于如何设置断点的问题:正确恰当的设置好断点对于快速有效的解密非常重要好的断点设置可以使我们迅速找到关键的程序段而不恰当的断点则会对解密造成不必要的精力消耗甚至根本就不能拦截到程序的运行。但是具体什么时候用什么断点比较合适很难说这需要自己用经验去累积总的说来bpxhmemcpy这个万能断点对大多数注册码方式的软件都有用初学者不妨多试试这个断点(通常我也是用这个断点设置懒嘛^^哈哈。。。)。对于那些需要暴力破解的非注册码方式的软件通常我们应该拦截对话框(如bpxDialogBox)和消息框(如bpxMessageBox(A))等。不论对于哪一类软件当我们设置的断点均没有效果时可是试一下bpxlockmytask这个断点的作用是拦截任何一个按键的动作具体常用的一些断点设置请参考"破解常用断点设置"一文。另外在注册码的破解中通常需要输入用户名和注册码一般说来用户名和密码都可以随意输入但是根据我自己的经验很多软件对于注册码都会逐位的进行处理假如输入""这串数字那么在跟踪程序的时候我们就无法知道我们当时所看到的""倒底是哪一个""所以我比较喜欢用""这样的注册码输入方式这样的话就就能知道程序是在对注册码的哪一位进行运算同样的对于那些需要输入较长序列号的软件输入类似"ABCDEF"这样的序列号较好。不过有一点大家需要特别的注意:上面讲的注册码输入方式""是针对拦截WINAPI函数来说的假如有些时候直接拦截WINAPI函数难以找到程序的突破口而要借助于"S"指令在内存中寻找我们输入的用户名或注册码时就最好不要采用""作为注册码因为内存中很可能有许多的""字符串这样我们没有办法知道倒底我们要破解的程序使用的是哪一个""所以我们应该选择一个不易和内存数据相同的注册码比如:(本人喜欢用意思嘛:去死去死。。。哈哈哈^^)对应的搜索指令为:S:LFFFFFFFF''。当然以上只是我个人的习惯而已具体用什么样的输入形式可以根据本人的爱好、习惯来定不必拘泥于某一固定的模式。关于如何跟踪程序的问题:初学者在开始学习解密的时候往往不知道怎么样去跟踪程序怎么样找到注册码比较的地方当面对长长的一堆程序代码时显得不知所措。通常软件的程序内部都会利用一个子程序(即CALL********)去验证我们输入的注册码正确与否对于注册码显式存在的程序一般都会将所输入的注册码和正确的注册码放进寄存器然后调用验证子程序进行判断将结果返回应用程序根据子程序返回的结果决定是否注册成功这样的程序经常具有如下的形式:****:********MOVEAX********(或PUSHEAX等形式)****:********MOVEDX********(或PUSHEDX等形式)****:********CALL************:********TESTEAXEAX(或TESTALAL或是没有这一句等形式)****:********JNZ********(或JZ********等形式)其中EAX和EDX指向的内存区域就是我们输入的注册码和正确的注册码这里的寄存器EAX和EDX是随意写的也可以是ECXEBXEDIESI等等。对于注册码隐式存在的程序虽然不能直接看到正确的注册码但是通常也是先将所输入的注册码地址放进某个寄存器然后调用子程序去验证破解时就需要进入子程序去分析注册算法。总之看到子程序(call********)后面跟着跳转指令(JNZ********或JZ********)的地方我们就应该提高警惕多用DEAX(或EBX、ECX、EDX、EDI、ESI等)去看看寄存器指向的内存区域藏着什么东西。有一点大家要提醒大家:看见程序中使用下面这个函数是要注意即GetDlgItenInt这个API函数的作用是将输入的文本转化为整数所以这类程序中是不会有显示存在的注册码的因为注册码被转换为整数了程序通常会用CMPECXEDX这种类型的指令去验证注册码的正确性这里ECX和EDX中存的就是所输入注册码和正确注册码的整数形式此时可以用edx和ecx看到其十进制形式即我们输入的形式。关于软件的反安装问题:经常我们使用某些软件时都会遇到一个问题就是共享软件过期之后即使删掉原程序重新安装程序依然不能用还是一样提醒你试用期已过请注册或者是你已经破解了某个软件但是还想继续研究它但是因为软件已经注册好没有了注册选项这时你即使彻底删掉程序再重新安装软件结果程序运行后还是注册过的。遇到这样的情况其实原因很简单因为程序将注册或过期信息存在了系统注册表里所以简单的重新安装软件是无济于事的。解决的办法就是自己删掉注册表中有关的信息但是因为注册表是WINDOWS系统工作的基础如果不小心就很可能会损坏它而引起系统异常所以如果你对注册表不是很熟的话应该在修改之前备份一下注册表。不论是修改还是备份注册表都可以使用WINDOWS下的注册表管理工具"REGEDIT"来进行一种办法是在"开始>运行"下输入"regedit"启动它也可以直接点击"C:WINDOWSregeditexe"来运行。大部分的应用软件都会将自己的信息存在如下的路径中:HKEYLOCALMACHINESoftware、HKEYLOCALMACHINESoftwareMicrosoft、HKEYCURRENTUSERSoftware、HKEYCURRENTUSERSoftwareMicrosoft或HKEYUSERSDEFAULTSoftware下具体是哪个地方依据不同的程序而有所不同只要按上面的顺序肯定能找到有关应用程序的键然后将和用户名及注册码有关的键值删掉就搞定了。关于破解练习的问题:学习破解需要大量的练习对于破解目标的选择初学者不宜以大型的、著名的软件为目标因为这些软件通常加密较为复杂破解不易应该选择一些比较不出名的、小型的和早些时候的共享软件来练习因为加密相对简单的软件有利于初学者快速掌握破解思想和技能。至于习题的来源则很广泛可以从网上下载也可以去市面上购买一些共享软件光盘。(e)

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/8

破解软件教程

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利