好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

几招常用破解付费软件的方法.doc

6页
  • 卖家[上传人]:M****1
  • 文档编号:482410869
  • 上传时间:2023-04-05
  • 文档格式:DOC
  • 文档大小:95.50KB
  • / 6 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 下面谈到了一些在学习解密过程中经常遇到的问题,本人根据自己的经验简单给大家谈一 谈这些问题对于初学者来说常常是很需要搞明白的, 根据我自己的学习经历, 如果你直接照着很多破解教程去学习的话, 多半都会把自己搞得满头的雾水, 因为有很多的概念要么自己不是很清楚,要么根本就不知道是怎么一回事, 所以希望通过下面的讨论给大家一定的帮助:1. 断点:所谓断点就是程序被中断的地方,这个词对于解密者来说是再熟悉不过了那么什么又是中断呢?中断就是由于有特殊事件 (中断事件)发生,计算机暂停当前的任务(即程序),转而去执行另外的任务(中断服务程序) ,然后再返回原先的任务继续执行 打个比方:你正在上班,突然有同学打告诉你他从外地坐火车过来,要你去火车站接他 然后你就向老板临时请假,赶往火车站去接同学,接着将他安顿好,随后你又返回公司继续 上班,这就是一个中断过程我们解密的过程就是等到程序去获取我们输入的注册码并准备 和正确的注册码相比较的时候将它中断下来,然后我们通过分析程序,找到正确的注册码 所以我们需要为被解密的程序设置断点, 在适当的时候切入程序内部,追踪到程序的注册码,从而达到crack的目的。

      2. 领空:这是个非常重要的概念,但是也初学者是常常不明白的地方我们在各种各样的破解文章里都能看到领空这个词, 如果你搞不清楚到底程序的领空在哪里, 那么你就不可能进入破解的大门或许你也曾破解过某些软件,但那只是瞎猫碰到死老鼠而已(以前我 就是这样的A_A,现在说起来都不好意思喔!)所谓程序的领空,说白了就是程序自己的地方, 也就是我们要破解的程序自己程序码所处的位置 也许你马上会问:我是在程序运行的时候设置的断点,为什么中断后不是在程序自己的空间呢?因为每个程序的编写都没有固定的模 式,所以我们要在想要切入程序的时候中断程序, 就必须不依赖具体的程序设置断点, 也就是我们设置的断点应该是每个程序都会用到的东西在 DOS时代,基本上所有的程序都是工作在中断程序之上的,即几乎所有的 DOS程序都会去调用各种中断来完成任务但是到了 WINDOWS时代,程序没有权力直接调用中断, WINDOWS系统提供了一个系统功能调用平台(API),就向DOS程序以中断程序为基础一样, WINDOWS程序以API为基础来实现和系统打交道,从而各种功能,所以 WINDWOS下的软件破解其断点设置是以 API函数为基础的,即当程序调用某个 API函数时中断其正常运行,然后进行解密。

      例如在SOFTICE 中设置下面的断点:bpx GetDIgltemText (获取对话框文本),当我们要破解的程序要读取输 入的数据而调用 GetDlgItemText时,立即被 SOFTICE拦截到,从而被破解的程序停留在 GetDlgItemText的程序区,而 GetDlgItemText是处于 WINDWOS自己管理的系统区域,女口 果我们擅自改掉这部分的程序代码,那就大祸临头了 a_a !所以我们要从系统区域返回到被破解程序自己的地方(即程序的领空) ,才能对程序进行破解,至于怎样看程序的领空请看前面的SOFTICE图解试想一下:对于每个程序都会调用的程序段,我们可能从那里找到 什么有用的东西吗?(怎么样去加密是程序自己决定的,而不是调用系统功能实现的! )3. API :即Application Programmi ng In terface 的简写,中文叫应用程序编程接口,是一个系统定义函数的大集合,它提供了访问操作系统特征的方法 API包含了几百个应用程序调用的函数,这些函数执行所有必须的与操作系统相关的操作, 如内存分配、向屏幕输出和创建窗口等,用户的程序通过调用 API接口同 WINDOWS打交道,无论什么样的应用程序,其底层最终都是通过调用各种 API函数来实现各种功能的。

      通常 API有两中基本形式:Win 16和 Win32 Win16是原来的、API的16位版本,用于 Windows 3.1 ; Win32是现在 的、API 的 32 位版本,用于 Windows 95/98/NT/ME/2000Win32 包括了 Win 16,是 Win16的超集,大多数函数的名字、 用法都是相同的16位的API函数和32位的API函数的区别在于最后的一个字母, 例如我们设置这样的断点: bpx GetDIgltemText、bpx GetDIgltemTextA和 bpx GetDIgltemTextW,其中 GetDIgltemText 是 16 位 API 函数,GetDIgltemTextA 和 GetDIgltemTextW 是32位 APl函数,而 GetDIgltemTextA 表示函数使用单字节, GetDIgltemTextW表示函数使用双字节现在我们破解中常用到的是 Win32单字节APl函数,就是和GetDIgltemTextA 类似的函数,其它的两种( Win16 API和Win32双字节API函数) 则比较少见 Win32 API函数包含在动态链接库( Dynamic Link Libraries,简称DLLs )中,即包含在 kerneI32.dll、user32.dll、gdi32.dll 和 comctI32.dll 中,这就是为什么我们要在 softice中用exp=C:windowssystemkernel32.dll等命令行将这些动态链接库导入 softice中的原因。

      因为不这样做的话,我们就无法拦截到系统 Win32 API函数调用了4. 关于程序中注册码的存在方式:破解过程中我们都会去找程序中将输入的注册码和 正确的注册码相比较的地方, 然后通过对程序的跟踪、 分析找到正确的注册码 但是正确的注册码通常在程序中以两种形态存在: 显式的和隐式的, 对于显式存在的注册码, 我们可以直接在程序所处的内存中看到它,例如你可以直接在 SOFTICE的数据窗口中看到类似"297500523"这样存在的注册码(这里是随意写的),对于注册码显式存在的软件破解起来比 较容易;但是有些软件的程序中并不会直接将我们输入的注册码和正确的注册码进行比较, 比如有可能将注册码换算成整数、 或是将注册码拆开, 然后将每一位注册码分开在不同的地方逐一进行比较,或者是将我们输入的注册码进行某种变换, 再用某个特殊的程序进行验证等等总之,应用程序会采取各种不同的复杂运算方式来回避直接的注册码比较, 对于这类程序,我们通常要下功夫去仔细跟踪、 分析每个程序功能,找到加密算法,然后才能破解它,当然这需要一定的 8086汇编编程功底和很大的耐心与精力5. 关于软件的破解方式:本人将破解方式分为两大类,即完全破解和暴力破解。

      所谓完全破解主要是针对那些需要输入注册码或密码等软件来说的, 如果我们能通过对程序的跟踪找到正确的注册码,通过软件本身的注册功能正常注册了软件, 这样的破解称之为完全破解;但如果有些软件本身没有提供注册功能,只是提供试用( DEMO),或是注册不能通过软件本身进行(例如需要获取另外一个专用的注册程序, 通过INTERNET的注册等等),或者是软件本身的加密技术比较复杂, 软件破解者的能力、 精力、时间有限,不能直接得到正确的注册码,此时我们需要去修改软件本身的程序码6. 关于破解教程中程序代码地址问题:破解教程中都会放上一部分程序代码以帮助讲 解程序的分析方法,例如下面的一段程序代码:0167:00408033PUSH000167:00408035PUSHEBX0167:00408036CALL[USER32!E ndDialog]0167:0040803C JMP 0040812C在这里程序中的代码地址如 0167:00408033,其代码段的值(即 0167)有可能根据不同的电脑会有区别,不一定一模一样, 但偏移值应该是固定的(即 00408033不变),所以如果看到破解文章里的程序代码的地址值和自己的电脑里不一样, 不要以为搞错地方了, 只要你的程序代码正确就不会有问题。

      7. 关于如何设置断点的问题:正确恰当的设置好断点对于快速有效的解密非常重要, 好的断点设置可以使我们迅速找到关键的程序段, 而不恰当的断点则会对解密造成不必要的精力消耗,甚至根本就不能拦截到程序的运行但是具体什么时候用什么断点比较合适很难说,这需要自己用经验去累积,总的说来bpx hmemcpy这个万能断点对大多数注册码方式的软件都有用, 初学者不妨多试试这个断点(通常我也是用这个断点设置,懒嘛 哈哈对于那些需要暴力破解的非注册码方式的软件,通常我们应该拦截对话框(如 bpxDialogBox )和消息框(如bpx MessageBox(A))等不论对于哪一类软件,当我们设置的断 点均没有效果时,可是试一下bpx lockmytask,这个断点的作用是拦截任何一个按键的动作, 具体常用的一些断点设置请参考 ”破解常用断点设置"一文另外,在注册码的破解中通常需要输入用户名和注册码, 一般说来用户名和密码都可以随意输入,但是根据我自己的经验,很多软件对于注册码都会逐位的进行处理,假如输入 "78787878"这串数字,那么在跟踪程序的时候我们就无法知道我们当时所看到的 "78"倒底是哪一个"78",所以我比较喜欢用"12345678"这样的注册码输入方式,这样的话就就能知道程 序是在对注册码的哪一位进行运算, 同样的对于那些需要输入较长序列号的软件, 输入类似"12345-67890-ABCDEF"这样的序列号较好。

      不过有一点大家需要特别的注意:上面讲的注册码输入方式 "12345678"是针对拦截WIN32 API函数来说的,假如有些时候直接拦截 WIN32 API函数难以找到程序的突破口,而要借助于"S"指令在内存中寻找我们输入的用户名或注册码时,就最好不要采用 "12345678"作为注册码,因为内存中很可能有许多的 "12345678"字符串,这样我们没有办法知道倒底我们要破解的程序使用的是哪一个 "12345678",所以我们应该选择一个不易和内存数据相同的注册码,比如: 74747474 (本人喜欢用,意思嘛:去死去死哈哈哈A_A),对应的搜索指令为: S 30:0 L FFFFFFFF ‘74747474’当然,以上只是我个人的习惯而已,具体用什么样的输入形式可以根据本人的爱好、习惯来定,不必拘泥于某一固定的模式8. 关于如何跟踪程序的问题:初学者在开始学习解密的时候往往不知道怎么样去跟踪 程序,怎么样找到注册码比较的地方, 当面对长长的一堆程序代码时显得不知所措 通常软件的程序内部都会利用一个子程序(即 CALL ******** )去验证我们输入的注册码正确与否,对于注册码显式存在的程序,一般都会将所输入的注册码和正确的注册码放进寄存器, 然后调用验证子程序进行判断, 将结果返回,应用程序根据子程序返回的结果决定是否注册成功,这样的程序经常具有如下的形式:**** ・ ********MOV eAX,[********](或PUSH EAX等形式)**** ・ ********MOV eDX,[********](或PUSH EDX等形式)**** ・ ********TEST EAX,EAX(或TEST AL,AL,或是没有这一句等形式)**** ・ ********JNZ ********(或JZ ******** 等形式)**** ・ ********CAL。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.