




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Ollydbg破解教学之万能断点篇(图)安全中国 更新时间:2008-9-6 0:30:57责任编辑:流火热 点:终于有一点时间总结一下OD破解的经验,有许多大侠们都认为OD不能下万能断点,可是有些软件的破解需要用到万能断 点,以前一直没有这方面的资料,有的只是OD不能下万能断点的断言,一时心恢之极,可是我原来用TRW和SICE用的挺好,谁知 系统又跟我闹矛盾,一用TRW和SICE就死机,没办法我现在只能用OD,我写的一些破解文章都是用OD破的,反复试验,我终于发 现OD也能下万能断点,在我以前写的一些文章中好象有一篇简单提到过,但没有说的很详细,这次静下心,想写一点东西,送给 我心爱的组织DFCG吧,我的破解是从DFCG组织起步的,很感谢DFCG的高手们的帮助,在此说声谢谢!为了更明确,这次破解所使 用的调试器OD是从看雪论坛临时下载的OD1.09的汉化版,没有使用我自己手头经过改造的OD,在此也感谢看雪论坛,这里真的 有很多高手,在这个论坛我也学到了很多.这次破解的对象是超级XX王,为保护国产软件我隐去了软件相关信息,我不想给自己 带来麻烦,现在工作很忙,能少一点麻烦就尽量少一点吧. 破解作者 yzezDFCG 破解工具 ollydbg1.09汉化版,看雪论坛下载. 破解目的 本不为破解而破解,只因为技术而破解 破解环境 WINDOWS XP,这个我已经在98和XP下各做了两次,贴图和我这篇文章是在XP系统下完成的. 破解过程 1.检查了一下,该程序无壳,C+编译,用W32DSM反汇编一堆乱码,我倒!那就动态调试吧!用ollydbg1.09载入程序,这次我将教 你们如何用OD下万能断点,过程我尽可能详细一点,下面请看.载入程序选OD菜单栏上的插件-命令行(快捷键是ALT+F1), 在弹出的窗口中输入万能断点命令:bpx hmemcpy,按ENTER键,结果又出现一个对话框: Intermodular calls 00401164 CALL DWORD PTR DS: USER32.GetWindowRect 0040118F CALL DWORD PTR DS: USER32.GetClientRect 00401279 CALL DWORD PTR DS: USER32.GetClientRect 004013E1 CALL DWORD PTR DS: USER32.GetClientRect 0040190A CALL DWORD PTR DS: kernel32.GetThreadLocale 0040191C CALL DWORD PTR DS: kernel32.GetLocaleInfoA 还有很多,我就省略了,在这个框里右键单击,出现一个对话框,选中在每个命令中设置断点(热键是S),单击,你看每一行 都变成了红色吧,这表示全部设下断点了,后面的过程很烦燥,你要一边按F9,边按F2把一些无用的断点去掉,有一点耐心吧, 当然也可以不这样做,但遇到断点跳不过的时候,你就得按F2把这个断点去掉. 感觉在这一点上OD比不上TRW和SICE,到出现注册信息框后,你要输入注册信息,然后按确定,程序被断下来,我的序列号是: GK342QZ0C6RE03L,我输入试验码:123456789098765.程序中断在下面: 00471F71 CALL DWORD PTR DS:*按确定后回到OD程序中断在此,按F8走,在此还没有到关键处! *注意这里会循环两次,分别处理序列号和试验码,按F8走 00471F77 LEA ECX,DWORD PTR DS:EAX+1 00471F7A PUSH ECX 00471F7B MOV ECX,DWORD PTR SS:EBP+10 00471F7E PUSH EAX 00471F7F CALL SuperPIM.0043E15D 00471F84 PUSH EAX 00471F85 PUSH ESI 00471F86 CALL DWORD PTR DS: 00471F8C MOV ECX,DWORD PTR SS:EBP+10 00471F8F PUSH -1 00471F91 CALL SuperPIM.00401D6A 00471F96 JMP SHORT SuperPIM.00471FA3 00471F98 MOV EAX,DWORD PTR SS:EBP+10 00471F9B PUSH DWORD PTR DS:EAX 00471F9D PUSH ESI 00471F9E CALL SuperPIM.00470B61 00471FA4 POP ESI 00471FA5 POP EBP 00471FA6 RETN 0C*程序第二次循环后最后会返回到0040FE99下面看代码: - 0040FE99 LEA EAX,DWORD PTR SS:EBP-14*第二次循环后会返回到这里,注意这就是我们要找的关键地方,按F8往下! 0040FE9C PUSH EAX 0040FE9D CALL SuperPIM.00433D92*这就是关键CALL,按F7追进,一定要进,因为算法就在这里面! 0040FEA2 POP ECX 0040FEA3 AND DWORD PTR SS:EBP-4,0 0040FEA7 LEA ESI,DWORD PTR DS:EDI+74 0040FEAA MOV EAX,DWORD PTR DS:ESI*试验码入EAX 0040FEAC CMP DWORD PTR DS:EAX-C,0*比较试验码输入了吗? 0040FEB0 JE SHORT SuperPIM.0040FF2F*没有输入就跳走,一跳就失败! 0040FEB2 PUSH 28 0040FEB4 LEA EAX,DWORD PTR SS:EBP-18 0040FEB7 PUSH ESI 0040FEB8 PUSH EAX 0040FEB9 CALL SuperPIM.0042CEC8*此CALL对输入的注册码进行处理,得到一个40位的长字符串,有兴趣自己跟, *我已是头晕的很,不想跟进! 0040FEBE LEA ECX,DWORD PTR SS:EBP-14 0040FEC1 PUSH ECX 0040FEC2 PUSH EAX 0040FEC3 CALL SuperPIM.0040F9B7*此CALL对序列号处理,也是得到一个40位的长字符串 0040FEC8 MOV ECX,DWORD PTR SS:EBP-18 0040FECB ADD ESP,14 0040FECE ADD ECX,-10 0040FED1 MOV BYTE PTR SS:EBP-D,AL 0040FED4 CALL SuperPIM.00401B5D*此CALL进行比较,注册码不对,值为0 0040FED9 CMP BYTE PTR SS:EBP-D,0*比较是0吗? 0040FEDD JE SHORT SuperPIM.0040FF2F*相等就跳,跳就失败,所以一定不能跳! 0040FEDF PUSH 0*不跳往下你就成功了!下面代码省略! .省略若干代码!. = *关键CALL的代码!* 00433D92 MOV EAX, SuperPIM.0049844E*追进关键CALL后我们来到这里! 00433D97 CALL SuperPIM.00450900 00433D9C PUSH ECX 00433D9D PUSH ECX 00433D9E AND LOCAL.5, 0 00433DA2 LEA EAX, LOCAL.5 00433DA5 PUSH EAX 00433DA6 CALL SuperPIM.00433CA9*此CALL根据电脑硬件信息得到你的序列号,有兴趣跟吧!我是没有兴趣! 00433DAB AND LOCAL.1, 0 00433DAF PUSH 14 00433DB1 LEA EAX, LOCAL.5 00433DB4 PUSH EAX 00433DB5 LEA EAX, LOCAL.4 00433DB8 PUSH EAX 00433DB9 CALL SuperPIM.0042CEC8*算法CALL(1),按F7跟进! 00433DBE PUSH 28 00433DC0 LEA EAX, LOCAL.4 00433DC3 PUSH EAX 00433DC4 PUSH ARG.1 00433DC7 MOV BYTE PTR SS:EBP-4, 1 00433DCB CALL SuperPIM.0042CEC8 00433DD0 MOV ECX, LOCAL.4 00433DD3 ADD ESP, 1C 00433DD6 ADD ECX, -10 *省略N行代码!* 0043454B RETN = *算法CALL!* 0042CEC8 MOV EAX, SuperPIM.00497B52*追进算法CALL我们在这里! 0042CECD CALL SuperPIM.00450900 0042CED2 SUB ESP, 14 0042CED5 PUSH EBX 0042CED6 PUSH ESI 0042CED7 XOR EBX, EBX 0042CED9 PUSH EDI 0042CEDA MOV LOCAL.8, EBX 0042CEDD CALL SuperPIM.004639B5 0042CEE2 MOV EDX, DWORD PTR DS:EAX 0042CEE4 MOV ECX, EAX 0042CEE6 CALL DWORD PTR DS:EDX+C 0042CEE9 LEA EDI, DWORD PTR DS:EAX+10 0042CEEC MOV LOCAL.4, EDI 0042CEEF MOV EAX, ARG.2 0042CEF2 MOV EAX, DWORD PTR DS:EAX*序列号:GK342QZ0C6RE03L移入EAX 0042CEF4 MOV ESI, DWORD PTR DS:EAX-C*序列号的位数15(十六进制值是F)送入ESI 0042CEF7 CMP ESI, EBX*比较ESI和EBX,ESI的值是F即序列号位数,EBX的初始值是0 0042CEF9 MOV LOCAL.1, EBX 0042CEFC MOV LOCAL.8, ESI 0042CEFF JE SuperPIM.0042CFB2*相等就跳,这里当然不相等,所以就不会跳! 0042CF05 MOV EAX, ARG.3*常数14(十进制值是20)送入EAX 0042CF08 CMP EAX, ESI*比较EAX和ESI,即14和F比较! 0042CF0A MOV LOCAL.6, EAX 0042CF0D JG SHORT SuperPIM.0042CF12*大于就跳! 0042CF0F MOV LOCAL.6, ESI 0042CF12 CMP LOCAL.6, EBX*跳到这里!比较14和0 0042CF15 JLE SuperPIM.0042CFB2*小于就跳,这里当然不会小!所以不跳! 0042CF1B MOV EAX, EBX*0移入EAX 0042CF1D CDQ*EDX清0,准备计算! 0042CF1E IDIV ESI*除,EAX/ESI ,EAX的值是0,ESI的值存放序列号的位数F 0042CF20 MOV EAX, ARG.2*赋EAX地址值 0042CF23 MOV EAX, DWORD PTR DS:EAX*序列号:GK342QZ0C6RE03L移入EAX 0042CF25 PUSH EBX*EBX入栈 0042CF26 MOV AL, BYTE PTR DS:EDX+EAX*序列号的第一位G(ASCII码值47)入AL 0042CF29 MOV BYTE PTR SS:EBP-1C, AL*保存值47 0042CF2C PUSH LOCAL.7 0042CF2F CALL SuperPIM.0042CD8E*算法CALL(2)* 0042CD8E PUSH EBP 0042CD8F MOV EBP, ESP 0042CD91 PUSH ECX*G的ASCII码值47入ECX 0042CD92 MOVZX EAX, BYTE PTR SS:EBP+8*扩展成00000047 0042CD96 MOV ECX, ARG.2*赋ECX的初始值为0 0042CD99 MOV LOCAL.1, EAX 0042CD9C MOV EAX, ECX*ECX的值移入EAX 0042CD9E IMUL EAX, ECX*EAX=EAX*ECX=0*0 0042CDA1 LEA EAX, DWORD PTR DS:EAX+EAX*2+7*EAX+EAX*2+7的值7给EAX 0042CDA5 IMUL EAX, ECX*EAX=EAX*ECX=7*0 0042CDA8 ADD EAX, 0D*EAX=EAX+0D=D 0042CDAB IMUL EAX, ECX*EAX=EAX*ECX=D*0=0 0042CDAE PUSH ESI*序列号位数F入栈! 0042CDAF LEA ESI, DWORD PTR DS:ECX+5 0042CDB2 PUSH ESI 0042CDB3 MOV ARG.1, EAX 0042CDB6 LEA EAX, ARG.1 0042CDB9 PUSH 4 0042CDBB PUSH EAX 0042CDBC CALL SuperPIM.0042CD2E*这个CALL也在计算,我实在不想跟进! 0042CDC1 PUSH ESI 0042CDC2 LEA EAX, LOCAL.1 0042CDC5 PUSH 4 0042CDC7 PUSH EAX 0042CDC8 CALL SuperPIM.0042CD5E*这个CALL也是计算CALL,烦!不跟了! 0042CDCD MOV EAX, ARG.1 0042CDD0 ADD ESP, 18 0042CDD3 XOR EAX, LOCAL.1*这里赋EAX的值38000002 0042CDD6 POP ESI 0042CDD7 LEAVE 0042CDD8 RETN =算法CALL(2)结束= 0042CF34 POP ECX 0042CF35 POP ECX 0042CF36 PUSH 2B*常数2B入栈! 0042CF38 XOR EDX, EDX 0042CF3A POP ECX*把常数2B赋给ECX 0042CF3B DIV ECX*除,EAX/ECX=38000002/2B=014D6535,余数1B入EDX 0042CF3D MOV ECX, EDX*结果1B入ECX 0042CF3F ADD CL, 30*CL=CL+30=1B+30=4B(对应的字符串是K) 0042CF42 CMP CL, 39*比较是不是数字9 0042CF45 MOV BYTE PTR SS:EBP-14, CL*保存字符串K 0042CF48 JLE SHORT SuperPIM.0042CF55*小于就跳走! 0042CF4A CMP CL, 41*比较是不是A 0042CF4D JGE SHORT SuperPIM.0042CF55*大于就跳走 0042CF4F ADD CL, 0F6 0042CF52 MOV BYTE PTR SS:EBP-14, CL 0042CF55 CMP EBX, ARG.3*跳到这里!比较0和14 0042CF58 JGE SHORT SuperPIM.0042CF67*大于等于就跳走! 0042CF5A PUSH LOCAL.5 0042CF5D LEA ECX, LOCAL.4 0042CF60 CALL SuperPIM.00417EAF 0042CF65 JMP SHORT SuperPIM.0042CFA5*无条件跳 0042CF67 MOV EAX, EBX 0042CF69 CDQ 0042CF6A IDIV ARG.3 0042CF6D MOVSX ECX, CL 0042CF70 PUSH 2B 0042CF72 MOV ESI, EDX 0042CF74 MOVSX EAX, BYTE PTR DS:ESI+EDI 0042CF78 LEA EAX, DWORD PTR DS:EAX+ECX-60 0042CF7C CDQ 0042CF7D POP ECX 0042CF7E IDIV ECX 0042CF80 ADD DL, 30 0042CF83 CMP DL, 39 0042CF86 MOV BYTE PTR SS:EBP-14, DL 0042CF89 JLE SHORT SuperPIM.0042CF96 0042CF8B CMP DL, 41 0042CF8E JGE SHORT SuperPIM.0042CF96 0042CF90 ADD DL, 0F6 0042CF93 MOV BYTE PTR SS:EBP-14, DL 0042CF96 PUSH LOCAL.5 0042CF99 LEA ECX, LOCAL.4 0042CF9C PUSH ESI 0042CF9D CALL SuperPIM.0042CE4B 0042CFA2 MOV ESI, LOCAL.8 0042CFA5 MOV EDI, LOCAL.4*上面跳到这里! 0042CFA8 INC EBX*EBX加1 0042CFA9 CMP EBX, LOCAL.6*比较1和14 0042CFAC JL SuperPIM.0042CF1B*小于就跳,循环,序列号只有15位,这里循环20次,取完后又从第一位取出! *循环结束后得到的值是:K3L2LPBDW1F2H4B8S0UY这就是我们要的注册码! 0042CFB2 MOV ECX, ARG.1 0042CFB5 LEA EAX, LOCAL.4 0042CFB8 PUSH EAX 0042CFB9 CALL SuperPIM.00401F36 0042CFBE LEA ECX, DWORD PTR DS:EDI-10 0042CFC1 CALL SuperPIM.00401B5D 0042CFC6 MOV ECX, LOCAL.3 0042CFC9 MOV EAX, ARG.1 0042CFCC POP EDI 0042CFCD POP ESI 0042CFCE POP EBX 0042CFCF MOV DWORD PTR FS:0, ECX 0042CFD6 LEAVE 0042CFD7 RETN 写这篇文章的目的是想说明如何在OD下万能断点,算法过程太烦琐,就不想多跟了!希望能对大家有点启发,如果觉得这篇 破文还行帮我顶一下吧!也是希望有更多的人能看到,对更多的人有益,我也是一只菜鸟,请大家多多指点! 我的序列号:GK342QZ0C6RE03L 注册码:K3L2LPBDW1F2H4B8S0UYWinXP 关于POINT-H万能断点 的教程 _标 题: 【翻译】WinXP 关于POINT-H万能断点 的教程作 者: nba2005时 间: 2008-04-01,17:26:46链 接: /showthread.php?t=62346WinXP 关于POINT-H万能断点 的教程【文章标题】: WinXP 关于POINT-H万能断点 的教程【文章译者】: NBA2005【作者邮箱】: 【作者QQ号】: 382309369创作算法分析实战篇和应用篇之提高(一)我的常用断点系统 ,顺手对该文进行了翻译,前后共三个小时。原E文地址:by Ricardo Narvaja /immlep/doc/Punto_H_english.rar 作者 Ricardo Narvaja | 邮箱 .ar时间 :22.Dec.2oo2 内容:在Windows XP里用OllyDbg 学习使用与WIN98功效相似的万能断点法POINT H。附件:Crackme v1.0 de Cruehead http:/www.darmozjad.host.sk/import.php3 工具:OllyDbg 1.08b教程正文摘要WIN98的万能断点BPX Hmemcpy众所周知。在WinXP系统中,有没有方法在OllyDbg中再现破解巨星“BPX Hmemcpy”的独特魅力呢?通俗地说,就是:如何在被破解程序读取你输入的用户名或注册码时断下的方法。本文就是教你如何将上述梦想变成现实。XP万能断点(俗称point-h)对每台机器的系统是唯一的,可以在USER32.DLL里找到。这种断点法适用于C+, VB, Delphi, ASM,或其他语言编写的程序。在我的机器上如何找到这个神奇的point-h?为了方便解说,我选了一个可以跨系统正常运行且十分简单的CRACK ME 做讲解的例子。上面的附件里有下载。详细介绍如下:1.在OD中打开附件下载的CRACK ME。2.一般的方法:右键-查看模块-点USER32.DLL,右键-查找当前模块中的名称,相当于CTRL+N。3.寻找Translatemessage,右键-条件记录断点。相当于SHIFT+F4。译者注释:因文中工具OllyDbg 1.08b版本较老,我根据自己的理解和破解体会、试验,采取了意译。(示范图1)。具体的2.和3.步骤与原文有出入,但易于操作和理解。示范图2注释1:在一些系统中,在条件记录断点设置界面,条件项中填:MSG=201;201这个值有时会失效,到不了XP万能断点。这时我就填入:MSG=202。表达式填:MSG,解码表达式的值为:通过表达式假定。暂停程序选:按条件。记录表达数值和记录函数参数:都选从不(NEVER)。条件满足次数没提,取默认值零。4.运行程序。5.分别输入用户名和注册码:Name : narvajaSerial: 1A2B3C4D5E示范图3注释2.当然你可以输入别的用户名和注册码,但 1A2B3C4D5E几乎是唯一的,便于找到确定。6.按OK按钮。7.OD会停在条件记录断点处(示范图4)。示范图48.ALT+M打开内存镜像,在内存镜像内右键查找-在二进制查找中填序列号1A2B3C4D5E(示范图5)。示范图59.点确定开始在内存中搜索1A2B3C4D5E。断下,在找到的字符串上右键选内存访问断点。示范图610.运行(F9),哈哈,OD居然恰恰断在了POINT H处(示范图7)。示范图777D29303 F3:A5 REP MOVS DWORD PTR ES:EDI,DWORD PTR DS这个地方正是我机器上的POINT H。这个CRACK ME 仅仅用来介绍如何找到POINT H。在以下的例子中,我们将在XP系统中介绍POINT H的具体断法,再现WIN98下万能断点的神奇。POINT H的具体断法例子:例1.下面我先用CRACK ME 2举例。步骤如下:1.在OD中打开CRACK ME 2,输入用户名和序列号,如示范图11:示范图112.在WIN98中,我们会BPX HMEMCPY来设断。然而,在现在的XP中,我们设断:BPX POINT H的值。由于POINT H实际上位于USER32.DLL里,我们右键查看执行模块-选USER32(来到USER32区域),CTRL+G 填77D29303 (我的系统的POINT H) ,设内存访问断点(示范图12)。示范图123.回到CRACK ME 2注册界面,按CHECK。4.OD在POINT H处断下。(示范图13)。这种断法的原理和WIN98下的HMEMCPY是一样的。第一次的断下动作与用户名有关(观察寄存器窗口,我们注意到ESI=narjava,正是我们的用户名)。再接着运行(F9),这次的断下动作与序列号有关(寄存器窗口中,ESI=989898,正是我们的序列号,示范图14)。示范图14第一次断下时,很可能程序正在读取用户名;指令反汇编代码 REP MOV EDI,ESI 说明序列号在第二次断下时正赋值给EDI。因此,我们在EDI寄存器上右键,选数据窗口中跟随,随后一直按F8直到序列号载入内存换句话说,一直按F8直到 call USER32.77D28C15(或你机器上的POINT H值),图例见示范图15。在内存窗口中,在假序列
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 云南省晋宁县2025年上半年事业单位公开遴选试题含答案分析
- 河北省灵寿县2025年上半年公开招聘村务工作者试题含答案分析
- 2025年自愿离婚协议书子女抚养与财产分割及双方责任协议
- 2025代缴社保专业机构委托管理协议
- 2025版医院手术免责协议文本
- 2025版人工智能应用试用合作协议范本
- 2025版新型环保水泥沙石销售合作协议
- 2025年度创意园区招商代理业务合同范本
- 2025版医疗机构人力资源派遣合作协议
- 2025年度金融产品发行与销售法律支持合同书
- 泵站操作工安全操作规程
- 第一章-马克思主义的诞生-(《马克思主义发展史》课件)
- 山东科学技术出版社五年级上册《综合实践活动》教案
- 茶叶加工学试卷
- 专升本00107现代管理学历年试题题库(含答案)
- 部编四年级语文教材分析课件
- 农民用水户协会实施方案
- 班组长执行力管理培训
- 中药热熨敷技术(精品课件)
- 建筑工程施工转包违法分包等违法行为监督检查工作方案
- 《建筑材料与检测》教学课件(全)
评论
0/150
提交评论