破解时常用断点按钮事件和OEP查找
- 格式:doc
- 大小:78.00 KB
- 文档页数:25
新手入门学习——脱壳破解练习第一期新手入门学习——脱壳破解练习第一期拿到一个软件,先看看是加的什么壳。
用PEiD查得【Upack V0.37-V0.39 -> Dwing *】接着拿出破解第一要物OD进行脱壳(注意选好点的版本,由于Upack壳做了变形,有些版本的OD打开时会出错,最好是用英文版的)OD载入……我使用简单一点的ESP定律。
00401018 > BE B0114000 MOV ESI,脱壳破解.004011B00040101D AD LODS DWORD PTR DS:[ESI]0040101E 50 PUSH EAX0040101F FF76 34 PUSH DWORD PTR DS:[ESI+34]00401022 EB 7C JMP SHORT 脱壳破解.004010A0F8前进到【0040101F】,在寄存器窗口ESP处点右键,在数据窗口跟随【0012FFC0】如下图://数据窗口点右键,下硬件断点。
shift+F9运行0012FFC0 004011B8 脱壳破解.004011B80012FFC4 7C82F23B 返回到 kernel32.7C82F23B0012FFC8 00000000//来到OEP,通过观察可以发现,这是一个典型的VB入口。
这里记得要删除硬件断点!004011B8 68 24184000 PUSH 脱壳破解.00401824 //OEP004011BD E8 EEFFFFFF CALL 脱壳破解.004011B0004011C2 0000 ADD BYTE PTR DS:[EAX],AL004011C4 0000 ADD BYTE PTR DS:[EAX],AL 004011C6 0000 ADD BYTE PTR DS:[EAX],AL 004011C8 3000 XOR BYTE PTR DS:[EAX],AL记录新入口地址【11B8】接着打开LoadPE进行脱壳然后使用Import Fix 1.6 进行修复修复完成后即得到脱壳后的文件,用PeiD查询,果然是VB。
常见脱壳知识:1.PUSHAD (压栈)代表程序的入口点2.POPAD (出栈)代表程序的出口点,与PUSHAD想对应,一般找到这个OEP 就在附近拉!3.OEP:程序的入口点,软件加壳就是隐藏了OEP(或者用了假的OEP),只要我们找到程序真正的OEP,就可以立刻脱壳。
开始正式介绍方法啦!!方法一:1.用OD载入,不分析代码!2.单步向下跟踪F8,是向下跳的让它实现3.遇到程序往回跳的(包括循环),我们在下一句代码处按F4(或者右健单击代码,选择断点——运行到所选)4.绿色线条表示跳转没实现,不用理会,红色线条表示跳转已经实现!5.如果刚载入程序,在附近就有一个CALL的,我们就F7跟进去,这样很快就能到程序的OEP6.在跟踪的时候,如果运行到某个CALL程序就运行的,就在这个CALL中F7进入7.一般有很大的跳转,比如 jmp XXXXXX 或者 JE XXXXXX 或者有RETE的一般很快就会到程序的OEP。
方法二:ESP定理脱壳(ESP在OD的寄存器中,我们只要在命令行下ESP的硬件访问断点,就会一下来到程序的OEP了!)1.开始就点F8,注意观察OD右上角的寄存器中ESP有没出现。
2.在命令行下:dd 0012FFA4(指在当前代码中的ESP地址),按回车!3.选种下断的地址,下硬件访问WORD断点。
4.按一下F9运行程序,直接来到了跳转处,按下F8,到达程序OEP,脱壳方法三:内存跟踪:1:用OD打开软件!2:点击选项——调试选项——异常,把里面的忽略全部√上!CTRL+F2重载下程序!3:按ALT+M,DA打开内存镜象,找到第一个.rsrc.按F2下断点,然后按SHIFT+F9运行到断点,接着再按ALT+M,DA打开内存镜象,找到.RSRC上面的CODE,按F2下断点!然后按SHIFT+F9,直接到达程序OEP,脱壳!方法四:一步到达OEP(前辈们总结的经验)1.开始按Ctrl+F,输入:popad(只适合少数壳,包括ASPACK壳),然后按下F2,F9运行到此处2.来到大跳转处,点下F8,脱壳之!方法五:1:用OD打开软件!2:点击选项——调试选项——异常,把里面的√全部去掉!CTRL+F2重载下程序!3:一开是程序就是一个跳转,在这里我们按SHIFT+F9,直到程序运行,记下从开始按F9到程序运行的次数!4:CTRL+F2重载程序,按SHIFT+F9(次数为程序运行的次数-1次5:在OD的右下角我们看见有一个SE 句柄,这时我们按CTRL+G,输入SE 句柄前的地址!6:按F2下断点!然后按SHIFT+F9来到断点处!7:去掉断点,按F8慢慢向下走!8:到达程序的OEP,脱壳!前言细细回忆,学习Crack技术已经快2个月了,期间我学会的东西远比我以前任何一年内学的东西都多(专指计算机程序及系统了解情况)说到学脱壳也是最近一个月的时间,开始总是到处询问学习脱壳的方法,大多的答案就是看雪老大的书,谁也没有正面回答过.于是就自己摸索,略有一点思路,老大们估计是认为理所当然,对于我们小菜来说还是说白了比较合适.在这里我就班门弄斧一回,其实主要也是帮助一些朋友能更快的摸到门,不至于对只会照猫画虎,这些也是我当初我想问的那些问题的答案,都是些很基础的东西,说得不好还请高手指正.在此感谢看雪老大提供了如此之好论坛供大家学习交流,还写了一本很好的书指导像我这样的菜鸟,也感谢网上众多高手贡献出自己的脱壳手记,特别感谢heXer老大对本菜鸟的细心指点!顺便说一句,脱壳特别需要的是兴趣和耐心,如果没有耐心就......;)废话了一堆,我们下面进入正题:)结合娃娃Wom的新KG说说一般面对一个壳的简单分析方法一、找OEP脱壳的一般流程是:查壳->寻找OEP->Dump->修复查壳没什么好说的,FI和PEiD,不幸的是FI和PEiD都不能识别出这个壳:)我找OEP的一般思路如下:先看壳是加密壳还是压缩壳,压缩壳相对来说容易些,一般是没有异常,找到对应的popad后就能到入口,跳到入口的方式一般为1、jmp OEP2、push OEPret3、call OEP当然也有其他的,如je OEP等等,一般都是段之间的大跳转,OD的反汇编窗口里都是同一个段的内容,所以更好区别是否是段间跳转『这里我说说关于F8(Step Over)和F7(Step in)的一般方法,粗跟的时候一般都是常用F8走,但是有些call是变形的Jmp,此时就需要F7代过,区别是否是变形Jmp的一个简单方法是比较call的目标地址和当前地址,如果两者离的很近,一般就是变形Jmp了,用F7走』对于加密壳,我的方法一般是用OD载入,钩掉所有异常(不忽略任何异常,有时由于异常过多可以适当忽略一些异常),运行,数着用了多少次Shift+F9程序运行,显然最后一次异常后,程序会从壳跳到OEP开始执行,这就是我们寻找OEP的一个关键,而对于这个壳可知是加密壳,Shift+F9 16次后运行,重来,Shift+F1 15次后到这0042CBD3 ^\73 DC jnb short kill_luj.0042CBB10042CBD5 CD 20 int 200042CBD7 64:67:8F06 0000 pop dword ptr fs:[0] <---这里一般的处理方法是找到pop fs:[0]处下断点或者是[esp+4]处下断点,如果学习一下SEH 的处理会更好些0012FF58 0012FFE0 Pointer to next SEH record0012FF5C 0042CBB7 SE handler <---这里一般包含Anti-Debug的代码0012FF60 0042CB8A RETURN to kill_luj.0042CB8A from kill_luj.0042CB90我首选第一种,在0042CBD7处下断之后,耐心的用F7走,因为变形call太多了...,关键注意一下往回跳的跳转,寻找合适的位置跳出循环,有耐心的话你就能这样走到OEP了;) 当然你也可以用另一个好东西——Trace,在Command里来个tc eip<42b000 (42b000是当前段的起始位置,滚动条拖到最上面就能看到了,一般程序编译的基地址为400000),OK,稍等一会我们就会停在这了(如果是ASPr可能要几分钟了)00419F68 55 push ebp <----停在这00419F69 8BEC mov ebp, esp00419F6B 83C4 F0 add esp, -10呵呵,OEP找到了;)当然,这个用PEiD就能找到OEP,比较一下,是不是一样:D,对于用PEiD找到的OEP 可以直接G到OEP此时就可以Dump了,用LordPE来Dump吧,由于有Anti-Dump,所以要先Correct Imagesize一下再Dump二、修复IAT由于加密壳对输入表进行了重定位,所以现在的文件还不能正常使用,我们的目标就是恢复它,先用ImportREC,填入正确的OEP, IA T AutoSearch, Get Import,无效的不少,Show Invalid, 右键->Trace Level1(Disasm),失败!!看来是只有自己恢复了。
Ollydbg破解教学之万能断点篇(共5篇)第一篇:Ollydbg破解教学之万能断点篇Ollydbg破解教学之万能断点篇(图)安全中国*********************************.ar时间:22.Dec.2oo2 内容: 在Windows XP里用OllyDbg 学习使用与WIN98功效相似的万能断点法POINT H。
附件:感谢Crackslatinos List的所有成员。
第二篇:破解习作教学之“难”破解习作教学之“难”在有些小学语文教师眼中,习作教学之“难”,堪称“难于上青天”。
一是拿到一篇习作教材,不知道该教什么,更不明白该从什么地方教起;二是每次教学唯恐不够,“教”了很多,但是儿童却“无动于衷”;三是难以把握“教”的尺度,如果指导过细便千篇一律,如果不指导,不少学生又会无从下笔。
习作教学到底难不难?作为写作教学的起步阶段,由国家提供优质的课程教材来实施,有丰富的教学资源来支持,答案应当是肯定的――不难!可是为什么会变“难”呢?通过一次校本教研习作教学活动,可以透视出藏在“难”背后的深层原因。
这次活动的主题是“习作教学内容‘阶梯型’建构”,主要从苏教版教材中选定习作内容――“我的发现”,在三年级、四年级、五年级分别进行教学内容的建构和设计。
执教前,我和执教的三位教师,通过研读教材共同确定了一个拾级而上的教学内容:在专题活动操作过程中,我们越来越清楚地感觉到,解决习作教学之“难”其实就在教学过程本身的操作细节上。
一、教学内容做到“步步为营”习作教学要走“小步子”,要保持一种“慢慢走,欣赏啊”的姿态,切不可贪多求全。
关于“观察”的教学内容,可以切分成许多前后勾连、全程贯通的小“格子”:方位观察、时间观察、动静观察、联想观察、整体与局部观察、体验式观察等等,将每一项内容排成一个循序渐进的阶梯,逐层分布在几个年级里“教”,步步为营,可能效果会更好。
推而广之,将各类文体写作知识进行梳理,结合教材,精心细分,每一次教学“弱水三千只取一瓢饮”,这样才会教得深入、透彻,让每个儿童得到扎实的训练。
OD下断点的方法寻常断点O llydb g中一般下中断的方法,就是在程序的地址处用鼠标选择这一行。
然后按F2键,这时被选择的那一行的地址会变成别的颜色,就表示这个地址处下了中断。
然后运行程序时只有到这个地址处就会被Oll ydbg中断。
这个方法用的比较多,所以把他称作寻常断点。
如果有命令行插件,就可以在命令窗口中输入BPX xxxx xxxx下断点。
优点:只要自己怀疑是重要的代码处都可以下这种下断点,不受条件的限制,所以方便实用。
缺点:如果不知道代码功能下断点具有盲目性。
AP I断点O llydb g中一般下API中断的方法,有二种。
1. 在代码窗口中点鼠标右键,出现功能菜单。
在[搜索]选择项下有〔当前模块的名称〕和〔全部模块的名称〕俩项,选择其中的一项就打开了程序调用 API的窗口,在这个窗口中选择你要跟踪的API函数名。
双击这个函数就能到程序的调用地址处。
然后用F2下中断。
也可以在A PI窗口中选择需要跟踪的函数点鼠标右键出现功能菜单,选择〔在每个参考设置断点〕。
同样下了断点。
快捷方式:Ctr l+N 2. 在命令行窗口中输入BP X AP I函数名或者BP API函数名后回车。
这时出现了所有调用这个函数的地址的窗口,在这个窗口中可以看到调用这个API函数的地址已改变了颜色。
说明下好了断点。
说明一下:BPX一般中断在程序调用API的地址处。
BP会中断在API的写入地址处。
二这有所不同,根据需要选择。
优点:这种方法下的断点是针对每一个API函数的,所以具有明确的目的。
缺点:关键的API函数不容易找到。
所以有时下的断点没有作用。
设置断点F9然后工程-组建-GO开始调试,如果有多个断点,程序会在最早运行到的断点停下来这时有分几种1. step into(F11):按照代码一步步执行,如果遇到函数调用,会跟进去函数内部如果这个函数是系统函数,会变成汇编指令,按下工具栏的Disassembly 就变成普通代码了或者弹出一个查找资源的对话框,取消,按step out就回到普通界面了2. step over(F10):越过去,遇到函数会跨过去,除非这是一个自定义函数,而且你在自定义函数体里面下了断点3. step out:跳出当前所在函数,上面已经有了4.Run to cursor(ctrl+F10):在某一行代码,点一下,右击鼠标,选择Run To Cursor程序就会执行到鼠标的地方,当然,应该符合程序流程的5.break 调试时因各种原因有时会卡住,这时按break一般可以恢复要查看变量的值在下面的watch栏输入变量名既可,如果变量比较大,还可以查看memory(内存)点工具栏的memory,输入变量的地址,可以直接查看内存--------------------------------------------------------------------------------------------------------------------------vc++断点的使用:按F9(设置断点),F5调试,F10单步调试,shift+F5退出调试F10单语句执行,F11单指令执行,Ctrl+F10执行至光标处;F9按行设置/取消断点, Alt+F9可按行,按数据或按消息设置断点;调试时,按Alt+3打开跟踪窗口,Alt+4打开变量窗口,Alt+5打开寄存器窗口,Alt+6打开内存窗口,Alt+7打开堆栈窗口,Alt+8打开汇编指令窗口;1:概述调试是一个程序员最基本的技能,其重要性甚至超过学习一门语言。
不会调试的程序员就意味着他即使会一门语言,却不能编制出任何好的软件。
第三课- 手把手教你学破解2012年1月23日星期一13:18大家好!我是散人,呵呵!我们又见面了,看过我课的朋友今天就继续往下看了!没看过的朋友假如有兴趣的话就请先把前两节课看完!好,按照惯例,今天应该讲脱壳了!好,我们先看一下“壳”的定义:我认为一个软件为什么加壳,主要原因还是利益问题,加了壳的软件一般是不能够编译破解使用的,就达不到我们免费的目的,只有我们先把他的皮剥下去,才能达到我们的破解目的。
这也就是我们为什么要学习脱壳的原因。
壳有千万种,但常用的就那几种,我们只要把常用的几种壳的脱法学会,那别的什么壳也就自然会了,这是一个过程,是要慢慢积累的!在这里我尽量教大家快捷简单的脱壳方法,尽量让大家一看就懂。
现在我们先讲一下给一个软件脱壳我们要用到的软件:----------------------------------------------------------------------------------------------------------------- 1、查壳工具PEID--功能强大的侦壳工具,自带脱壳插件(但是,效果不怎么样,所以我们就用它查壳就够了!)工作原理:核心是userdb.txt(呵何!大家可以看看)[通过壳的入口特征码进行辨认]使用方法:可以拖放、也可以把PEID添加到右键菜单里面去(如图)下载地址:PEid0.94汉化版.rar2、手动脱壳工具(为什么不用自动的呢?因为没有手动来的干净,好使!)ODbyDYK(OD)--第一节课有讲过的,我就不多说了!常用快捷键:F2:在需要的地方下断点(INT3型断点)F3:选择打开程序F4:运行到所选择的那一行F7:单步进入F8:单步跟踪F9:执行程序(运行程序)3、修复工具Import REConstructor 1.6—非常强大的修复工具哦~!~!~(如图)下载地址:Import_Fix_1.6.rar------------------------------------------------------------------------------------------------------------------------------好!现在我们讲一下我们破解软件的工作原理:查壳(使用工具PEID)--->寻找OEP(OEP就是脱壳的关键地点)(使用工具OD)--->脱壳--->修复(使用工具Import REConstructor)好!工作原理知道了吧·那我们今天就脱个带有ASPack壳的笔记本,让他脱下狼的伪装,漏出真面目!ASPack是现在比较流行的一种壳!进入正题!带有ASPack壳的笔记本下载地址:NotePad.98.E(ASPack_2.12).exe脱壳步骤1。
OllyDBG断点INT3 断点INT3 断点是在汇编指中向下断地址写⼊0xCC指令,当被调试进程执⾏INT3指令时产⽣异常,调试器就会捕获这个异常,从⽽停在断点处。
在OllyDBG中使⽤快捷键F2来设置或取消断点。
硬件断点硬件断点和DRx调试寄存器有关。
DRx调试寄存器共有8个(DR0-DR7),硬件断点的原理是使⽤DR0-DR7设置地址,并使⽤DR7设置状态,所以最多设置4个断点。
设置硬件断点的快捷键是F4内存断点OD可以设置内存访问或写⼊断点,原理是对所设置的地址赋予不可访问/不可写属性,这样当访问/写⼊的时候就会产⽣异常。
OD捕获异常后,⽐较异常地址是不是断点地址,如果是中断。
OllyDBG设置内存断点的⽅式:点击View -> Memory调出内存窗⼝,在需要下断点的地⽅右击选择set memory breakpoint on write内存访问⼀次性断点windows对内存使⽤段页式的管理⽅式。
在OD⾥按“Alt+M”快捷键显⽰内存,可以看到许多个段,每个段都有不可访问、读、写、执⾏属性。
在相应的段上点击右键,会在快捷菜单中发现⼀个命令“set memory breakpoint on access”,⽤于对整个内存块设置断点。
这个断点是⼀次性的,当所在段被读取或执⾏时就会中断。
如果想捕获调⽤或返回某个模块,该类断点就⾮常有⽤。
消息断点Windows本⾝是由消息驱动的,如果调试时没有合适的断点,可以尝试使⽤消息断点,当某个特定窗⼝函数接受到某个指定消息时,消息断点将使程序中断。
消息断点与INT 3断点的区别在于:INT 3断点可以在程序启动之前设置,消息断点只有在窗⼝被创建之后才能被设置并拦截消息的断点设置⽅法:View -> Windows列出窗⼝中相关参数OD⽆法反汇编代码逆向脱ASPack壳找OEP时发现程序在跳转到OEP后OD⽆法分析出代码,如下图。
按Ctrl+A或者右键删除分析即可。
大多数壳都有一个共同的特点。
在壳准备开始解压时都要执行PUSHAD,当壳解压完时都要调用POPAD。
到底PUSHAD和POPAD 是什么干什么用的呢?其实PUSHAD是用来将所有普通寄存器顺序进栈的指令,POPAD 是所有普通寄存器顺序出栈指令。
POPAD 的出栈顺序和PUSHAD相反。
壳为了保护寄存器,便在解压前将所有寄存器进栈保护起来,当解压完成后又将寄存器出栈,恢复其原貌,并将IP设置为原程序的OEP。
这样我们就可以通过这个特点快速脱掉多种软件的壳。
32位程序级的调试器--ollyDbg,这个东东操作简便,提示信息量大,介绍一些简单的操作快捷键:F3,装入程序F8,单步执行,不进入callF9 (运行)F7,单步执行,进入callCTRL+F9,相当于trw2000的F12ALT+F9,相关于trw2000的pmodule F2,设置断点(相当于trw2000的F9)CTRL+N(当前模块中的名称)F12(暂定)CTRL+F12(重新运行)CTRL+F11(跟踪进入)CTRL+T(设置条件)CTRL+F7(自动步入)CTRL+F8(自动步过)CTRL+F9(执行到返回)另转的快捷键使用方法如下OllyDbg 常用快捷热键聆风听雨整理==================================== ===========================打开一个新的可执行程序 (F3)重新运行当前调试的程序 (Ctrl+F2)当前调试的程序 (Alt+F2)运行选定的程序进行调试 (F9)暂时停止被调试程序的执行 (F12)单步进入被调试程序的 Call 中 (F7) 步过被调试程序的 Call (F8)跟入被调试程序的 Call 中 (Ctrl+F11) 跟踪时跳过被调试程序的 Call(Ctrl+F12)执行直到返回 (Ctrl+F9) 显示记录窗口 (Alt+L)显示模块窗口 (Alt+E)显示内存窗口 (Alt+M)显示 CPU 窗口 (Alt+C)显示补丁窗口 (Ctrl+P)显示呼叫堆栈 (Alt+K)显示断点窗口 (Alt+B)打开调试选项窗口 (Alt+O)窗口:左上:代码区左下:内存数据右上:寄存器右下:stack区以下命令适用于 OllyDbg 的快捷命令栏插件(显示于程序的状态栏上方)==================================== ====================CALC判断表达式WATCH添加监视表达式AT / FOLLOW Disassemble at address 在地址进行反汇编orIGDisassemble at EIP反汇编于 EIPDUMPDump at address在地址转存DADump as disassembly转存为反汇编代码DBDump in hex byte format 转存在十六进制字节格式DCDump in ASCII format转存在 ASCII 格式DDDump in stack format转存在堆栈格式DUDump in UNICODE format 转存在 UNICODE 格式DWDump in hex word format 转存在十六进制字词格式STKGo to address in stack 前往堆栈中的地址AS + 地址 + 字符串Assemble at address 在地址进行汇编L + 地址 + 字符串Label at address在地址进行标号C + 地址 + 字符串Comment at address 在地址进行注释BPBreak with condition 使用条件中断BPXBreak on all calls 中断在全部调用Delete break on all calls 清除位于全部调用的断点BCDelete breakpoint清除断点MRMemory breakpt on access 内存断点于访问时MWMemory breakpt on write 内存断点于写入时MDRemove memory breakpoint 清除内存断点HW break on access硬件中断在访问HWHW break on write硬件中断在写入HEHW break on execution 硬件中断在执行HDRemove HW breakpoint 清除硬件断点STOPPause execution暂停执行PAUSEPAUSERUNRun program运行程序Run till address运行到地址GERun and pass exception 运行和通过例外SIStep into步入SOStep over步过TITrace in till address跟踪进入直到地址TOTrace over till address 跟踪步过直到地址TCTrace in till condition 跟踪进入直到条件TOCTrace over till condition 跟踪步过直到条件TRTill return直到返回TUTill user code直到用户代码LOGView Log window查看记录窗口MODView Modules window 查看模块窗口MEMView Memory window 查看内存窗口CPUView CPU window查看 CPU 窗口CSView Call Stack查看 Call 堆栈BRKView Breakpoints window 查看断点窗口OPTOpen Options打开选项EXIT / QUITQuit OllyDbg退出 OllyDbgOPENOpen executable file打开可执行文件CLOSEClose executable关闭程序RSTRestart current program恢复当前程序HELPHelp on API functionAPI 函数的帮助ASMAssemble (if command needs it's own addres, \"ASM COMMAND;ADDRESS\") 汇编 (如果命令需要自身的地址 \"ASM COMMAND;ADDRESS\")DASMDisassemble immediate opcode反汇编直接的机器码FRFind reference to selected command/address查找参考到选定的命令/地址ACAnalyse code分析代码SNSearch for Name(label) in current module在当前模块中搜索名称(标号)SOBScan object files扫描项目文件Name: ollydbg 命令行帮助文件.rar Size: 6071 B此文件的引用地址为:up/1141912360.rarName: OllyDbg-script v1.081命令中文解说.rar Size: 219473 B此文件的引用地址为:up/1141912390.rar一、Ollydbg 中断方法Quote:originally posted by dong at 2004-6-1 10:29 PM:我问个问题在od中怎么下断点呢??现在有的程序一点注册就没反映了这样的怎么下断点呢??能介绍下什么情况下什么断点吗?在转存中下硬件访问->Word"断点,下断之后,怎么取消!9398944(老菜鸟) 11:09:59alt+D 按H 然后删除这个没有万能的方法,只能视具体情况而定,就我的经验而言:第一步,反汇编找有用信息,有时候虽然点击注册按钮后,没有任何反映,但软件也许包含了可用的信息,比如“未注册”,“已注册”等等之类的,都可用做断点的。
OllyDbg 常用断点完全教程断点[Breakpoints]OllyDbg支持数种不同类型的断点:- 一般断点[Ordinary breakpoint], 将您想中断的命令的第一个字节,用一个特殊命令INT3(调试器陷阱)来替代。
您可以在反汇编窗口中选中要设断点的指令行并按下F2 键就可以设定一个此类型的断点。
也可以在快捷菜单中设置。
再次按下F2 键时,断点将被删除。
注意,程序将在设断指令被执行之前中断下来。
INT3断点的设置数量是没有限制的。
当您关闭被调试程序或者调试器的时候,OllyDbg将自动把这些断点保存到硬盘中,永远不要试图在数据段或者指令的中间设置这种断点,如果您试图在代码段以外设置断点,OllyDbg将会警告。
您可以在安全选项[Security options]中永远关闭这个提示,在某些情况下调试器会插入自带的临时INT3断点。
- 条件断点[Conditional breakpoint](快捷键Shift+F2)是一个带有条件表达式的普通INT3断点。
当调试器遇到这类断点时,它将计算表达式的值,如果结果非零或者表达式无效,将暂停被调试程序,当然,由条件为假的断点引起的开销是非常高的(主要归因于操作系统的反应时间)。
在Windows NT、奔腾Ⅱ/450处理器环境下OllyDbg每秒最多处理2500个条件为假的断点。
条件断点的一个典型使用情况就是在Windows消息上设置断点(比如WM_PAINT)。
为此,您可以将伪变量MSG 同适当的参数说明联合使用。
如果窗口被激活,参考一下后面的消息断点描述。
- 条件记录断点[Conditional logging breakpoint](Shift+F4)是一种条件断点,每当遇到此类断点或者满足条件时,它将记录已知函数表达式或参数的值。
例如,您可以在一些窗口过程函数上设置记录断点并列出对该函数的所有调用。
或者只对接收到的WM_COMMAND消息标识符设断,或者对创建文件的函数(CreateFile)设断,并且记录以只读方式打开的文件名等,记录断点和条件断点速度相当,并且从记录窗口中浏览上百条消息要比按上百次F9轻松的多,您可以为表达式选择一个预先定义好的解释说明。
常用断点(OD中)拦截窗口:bpCreateWindow创建窗口bpCreateWindowEx(A) 创建窗口bpShowWindow显示窗口bpUpdateWindow更新窗口bpGetWindowText(A) 获取窗口文本拦截消息框:bpMessageBox(A) 创建消息框bpMessageBoxExA创建消息框bpMessageBoxIndirect(A) 创建定制消息框拦截警告声:bpMessageBeep发出系统警告声(如果没有声卡就直接驱动系统喇叭发声)拦截对话框:bpDialogBox创建模态对话框bpDialogBoxParam(A) 创建模态对话框bpDialogBoxIndirect创建模态对话框bpDialogBoxIndirectParam(A) 创建模态对话框bpCreateDialog创建非模态对话框bpCreateDialogParam(A) 创建非模态对话框bpCreateDialogIndirect创建非模态对话框bpCreateDialogIndirectParam(A) 创建非模态对话框bpGetDlgItemText(A) 获取对话框文本bpGetDlgItemInt获取对话框整数值拦截剪贴板:bpGetClipboardData获取剪贴板数据拦截注册表:bpRegOpenKey(A) 打开子健bpRegOpenKeyEx打开子健bpRegQueryValue(A) 查找子健bpRegQueryValueEx查找子健bpRegSetValue(A) 设置子健bpRegSetValueEx(A) 设置子健功能限制拦截断点:bpEnableMenuItem禁止或允许菜单项bpEnableWindow禁止或允许窗口拦截时间:bpGetLocalTime获取本地时间bpGetSystemTime获取系统时间bpGetFileTime获取文件时间bpGetTickCount获得自系统成功启动以来所经历的毫秒数bpGetCurrentTime获取当前时间(16位)bpSetTimer创建定时器bpTimerProc定时器超时回调函数拦截文件:bpCreateFileA创建或打开文件(32位)bpOpenFile打开文件(32位)bpReadFile读文件 (32位)bpWriteFile写文件 (32位)拦截驱动器:bpGetDriveTypeA获取磁盘驱动器类型bpGetLogicalDrives获取逻辑驱动器符号bpGetLogicalDriveStringsA获取当前所有逻辑驱动器的根驱动器路径★★VB程序专用断点★★bp __vbaStrCmp比较字符串是否相等bp __vbaStrComp比较字符串是否相等bp __vbaVarTstNe比较变量是否不相等bp __vbaVarTstEq比较变量是否相等bp __vbaStrCopy复制字符串bp __vbaStrMove移动字符串bpMultiByteToWideChar ANSI字符串转换成Unicode字符串bpWideCharToMultiByte Unicode字符串转换成ANSI字符串。
破解时常用断点、按钮事件和OEP查找!拦截窗口:bp CreateWindow 创建窗口bp CreateWindowEx(A) 创建窗口bp ShowWindow 显示窗口bp UpdateWindow 更新窗口bp GetWindowText(A) 获取窗口文本拦截消息框:bp MessageBox(A) 创建消息框bp MessageBoxExA 创建消息框bp MessageBoxIndirect(A) 创建定制消息框拦截警告声:bp MessageBeep 发出系统警告声(如果没有声卡就直接驱动系统喇叭发声)拦截对话框:bp DialogBox 创建模态对话框bp DialogBoxParam(A) 创建模态对话框bp DialogBoxIndirect 创建模态对话框bp DialogBoxIndirectParam(A) 创建模态对话框bp CreateDialog 创建非模态对话框bp CreateDialogParam(A) 创建非模态对话框bp CreateDialogIndirect 创建非模态对话框bp CreateDialogIndirectParam(A) 创建非模态对话框bp GetDlgItemText(A) 获取对话框文本bp GetDlgItemInt 获取对话框整数值拦截剪贴板:bp GetClipboardData 获取剪贴板数据拦截注册表:bp RegOpenKey(A) 打开子健bp RegOpenKeyEx 打开子健bp RegQueryValue(A) 查找子健bp RegQueryValueEx 查找子健bp RegSetValue(A) 设置子健bp RegSetValueEx(A) 设置子健功能限制拦截断点:bp EnableMenuItem 禁止或允许菜单项bp EnableWindow 禁止或允许窗口拦截时间:bp GetLocalTime 获取本地时间bp GetSystemTime 获取系统时间bp GetFileTime 获取文件时间bp GetTickCount 获得自系统成功启动以来所经历的毫秒数bp GetCurrentTime 获取当前时间(16位)bp SetTimer 创建定时器bp TimerProc 定时器超时回调函数拦截文件:bp CreateFileA 创建或打开文件 (32位)bp OpenFile 打开文件 (32位)bp ReadFile 读文件 (32位)bp WriteFile 写文件 (32位)bp GetPrivateProfileStringA (ini文件)拦截驱动器:bp GetDriveTypeA 获取磁盘驱动器类型bp GetLogicalDrives 获取逻辑驱动器符号bp GetLogicalDriveStringsA 获取当前所有逻辑驱动器的根驱动器路径★★VB程序专用断点★★bp __vbaStrCmp 比较字符串是否相等bp __vbaStrComp 比较字符串是否相等bp __vbaVarTstNe 比较变量是否不相等bp __vbaVarTstEq 比较变量是否相等bp __vbaStrCopy 复制字符串bp __vbaStrMove 移动字符串bp MultiByteToWideChar ANSI字符串转换成Unicode字符串bp WideCharToMultiByte Unicode字符串转换成ANSI字符串解自校验bpx CreateFileAbpx GetFileSizebpx SetFilePointerbpx ExitProcessF12堆栈调用破解思路C类Point-H法bp GetDlgItem(断输入框)bp MessageBoxA(断对话框)字符串法F12堆栈调用B、D类DEDE、PE Explorer作为强有力的辅助工具关键还是找按妞事件Point-H法bp GetDlgItem(断输入框)bp MessageBoxA(断对话框)字符串法F12堆栈调用V类VBExplorer、GetVBRes、SmatCheck作为强有力的辅助工具关键还是找按妞事件bp rtcMsgBox(断对话框)*********************************如果是重启验证就使用最开始的那些断点C类语言破解1、bp MessageBoxA(W)(断对话框)---Ctrl+N2、Point-H法3、bp GetDlgItem/GetWindowTextA(W)/GetWindowTextLengthA(W) (断输入框)4、字符串法---插件/搜索所有参考文本Delphi/BC++语言破解1、DEDE结合PE Explorer找按妞事件2、Point-H法3、bp GetDlgItem/GetWindowTextA(W)/GetWindowTextLengthA(W) (断输入框)4、bp MessageBoxA(W)(断对话框)---Ctrl+N5、字符串法---插件/搜索所有参考文本6、如果程序界面标题有[未注册/注册/VIP版/标准版/钻石版] 之类字样,可以通过DEDE查找FormCreate/FormShow,找到关键标志位VB语言破解1、VBExplorer查找按钮事件2、有提示框则 bp rtcMsgBox(断对话框)3、通过bp __vbaStrCmp/__vbaStrComp/__vbaVarTstEq4、万能断点法(816C24法)5、字符串法---插件/搜索所有参考文本易语言破解1、借助E-Code Explorer查找按钮事件2、下消息断点,查看堆栈再返回3、eCode法--断按钮事件4、字符串法---插件/搜索所有参考文本按钮事件固定模式:0040EC78 837D F4 00 cmp dword ptr ss:[ebp-C],0 ;关键判断0040EC7C 0F84 3B000000 je dcse.0040ECBD ;关键跳0040EC82 68 04000080 push 800000040040EC87 6A 00 push 00040EC89 68 EC904000 push dcse.004090EC0040EC8E 68 01030080 push 800003010040EC93 6A 00 push 000 40EC95 68 00000000 push 00040EC9A 68 04000080 push 800000040040EC9F 6A 00 push 00040ECA1 68 F1904000 push dcse.004090F10040ECA6 68 03000000 push 30040ECAB BB 00030000 mov ebx,3000040ECB0 E8 92000000 call dcse.0040ED470040ECB5 83C4 28 add esp,280040ECB8 E9 36000000 jmp dcse.0040ECF30040ECBD 68 04000080 push 800000040040ECC2 6A 00 push 00040ECC4 68 CC904000 push dcse.004090CC0040ECC9 68 01030080 push 800003010040ECCE 6A 00 push 00040ECD0 68 00000000 push 00040ECD5 68 04000080 push 800000040040ECDA 6A 00 push 00040ECDC 68 02914000 push dcse.004091020040ECE1 68 03000000 push 30040ECE6 BB 00030000 mov ebx,3000040ECEB E8 57000000 call dcse.0040ED470040ECF0 83C4 28 add esp,280040ECF3 8BE5 mov esp,ebp0040ECF5 5D pop ebp0040ECF6 C3 retn******************************************************************************************** **********************************************按钮事件1、有注册错误/正确提示bp MessageBoxAbp rtcMsgBox如果事先找不到按钮事件,可以通过下消息断点,返回后回溯即可找到按钮事件起始位置2、无任何提示bp GetDlgItem可以通过bp GetDlgItem获取按钮事件代码3、未注册一启动或者关闭就跳出个注册框或者提示框bp RegOpenKey(A)bp CreateFileAbp GetPrivateProfileStringA文件: reg/ini/dll/其他至于保存到什么文件,可以使用以下方法1、查找字符串,看是否有可疑文件名或者注册表键名2、猜。
下断点观察3、按钮事件跟踪4、未注册一启动或者关闭就打开网页链接bp ShellExecuteA类似的组合Cmp/test/其他判断Je/jne/jne/jz XXXXXXXX软件启动--->判断是否注册--->是否Open断下后回溯代码即可找到关键点,常用的方法,转存跟踪法5、未注册就功能使用限制判断是否注册--->某种功能是否让你使用,如果不能够用,一定会有提示的,或是错误提示或是弹出注册框等,那么从提示入手即可找到解除限制的关键不完美破解:解除功能限制6、未注册就日期限制bp GetLocalTime 获取本地时间bp GetSystemTime 获取系统时间bp GetFileTime 获取文件时间一般下这几个断点比较难分析关键捷径:查找字符串--找可疑文件--一般以DLL多见只要不让它读取到这个DLL即可解除限制7、Demo(演示试用版)--功能残缺这个和上面的功能限制不一样功能限制是软件本身就有这个功能,对程序而言,相对应的功能代码也存在Demo即是没这个功能,空架子一个而已一句话:破解也无用!8、网络验证无法登陆有错误提示者:下消息断点回溯代码,找按钮事件,从头来过,从按钮事件开始跟踪,找网络验证CALL(所需要登陆的地址在这个CALL里面),接下来就是分析返回值或者改登陆地址为本地(127.0.0.1),再后面就需要改某些跳转了无法登陆自动退出者:下bp ExitProcess断下(一般可以断下)回溯代码,找按钮事件,从来来过,从按钮事件开始跟踪,找网络验证CALL(所需要登陆的地址在这个CALL里面),接下来就是分析返回值或者改登陆地址为本地(127.0.0.1),再后面就需要改某些跳转了9、狗加密一般狗加密软件,一启动就会检测所需要的狗文件,若没有狗文件,提示错误这里我们有两个入手点1、“一启动就会检测所需要的狗文件”,下bp CreateFileA等断点,断下后,回溯2、“若没有狗文件,提示错误”,下bp MessageBoxA,断下后,回溯总结:从上面的介绍说明可以看出,有这么一个共同点---按钮事件,可以这么说,按钮事件是我们的思路之门按钮事件可以这样得来:1、通过下相应断点,回溯代码2、通过辅助工具快捷的得到(VBExplorer、DEDE)******************************************************************************************** **********************************************重启验证80%-90%的软件基本都是重启验证类型1、注册表类型Bpx RegOpenKeyA(W)Bpx RegOpenKeyExA(W)2、ini文件类型(*.reg/*.ini)Bpx GetPrivateProfileStringA3、其他文件类型(*.dat/*.lic…)Bpx CreateFileA(W)Bpx ReadFile4、DLL文件操作类型如果没有什么有效的拦截函数,不妨试一下Bpx CreateFileA(W).余下的就是通过你的经验去判断了(例如:35课)注意:建议使用Bpx断点,这样,比较快捷、准确。