OD破解常用方法
OD破壳
但愿大家互相进修进修,大家对于破解都不是很了解,人们想学破解,可是去无从入手,所以决议为大家写1个破解初级读物的教程,但愿能大家了解破解有一些帮忙,但愿能有更多的人踏入破解的大门1.低级,修改步伐,用ultraedit等东西修改exe文件,称暴力破解,略称爆破中级,追出软体的注册码高级,开具注册机2.经常使用破解东西(1)侦壳东西:PEiD(2)消息联合的OllyDbg引领破解东西的新潮水一,此刻咱们起首来进修下破解的开端,爆破~1.侦壳要破解1个软体起主要做的就是侦壳,要侦壳就要对壳有绝对似的了解,家喻户晓,软体作者用编程语言编著好软体后,是将它编译成扩展名为EXE的可执行文件编译为EXE的目的有两点:(1)有一些版权信息需要掩护起来,不克不及让别人随心改动,如作者的姓名、软体名称等;(2)需要给步伐"瘦身",从而利便存储、使用以及网上传道输送为了编译,会用到一些软体它们能将可执行文件压缩以及对信息加密(图1),实现上面所说的两个功效,这些个软体称为加壳软体为软体加上的东东就称为"壳"加壳软体差别于一般的WinZIP、WinRAR等打包类压缩软体加壳软体是压缩可执行文件的,压缩后的文件可以直接运行最多见的加壳软体有3个:ASPACK 、UPX、PEcompact终究它们是主流,据计数,用它们加壳的软体约占市面所有软体的90%!其它不经常使用的加壳软体有ASPROTECT、PETITE 、NEOLITE、TELOCK等软体最多见的编程语言是Delphello,Visual Basic(略称VB),Visual C++(略称VC)了解些编程的常识,会让破解更加轻车熟道底下来讲侦壳,此刻比力经常使用侦壳软体就PeiD,他具备华美的图形界面外壳整合(新增到鼠标右键)功效令使用更加利便,撑持拖放操作配置时,务请将"扩展到鼠标右键"打上对号其使用要领是,鼠标点住XX.exe,按鼠标右键,选"使用PEid扫描"便可;"壳"的信息就显示在底部2.破解东西OD有关OD的先容我把他放到附件里了,这个是看雪论坛的先容,是比力周全的,至少我感觉比我写的要好,所以大家根据他可以大好的了解OD3.爆破实例爆破是破解的开端,所说的爆破,就是指路程经过过程修改可执行文件的源文件,降临达相应的目的你半大白?呵呵,举个例子好了,好比说某同享软体,它比力用户输入的注册码,要是用户输入的,跟它路程经过过程用户名(或其它)算出来的注册码相等的话(也就是说用户输入的注册码不错了),那末它就会跳到注册乐成的处所去,不然就跳到堕落的处所去大白过来了吧,咱们只要找到这个跳转指令,把它修改成咱们需要的"造型",如许,咱们是否就可认随心所欲了?一,破解时经常使用的汇编指令如下,汇编较弱者可先强行违住,以后就可逐步理解了cmp a,b //比力a与bmov a,b //把b的值送给a,使a=bret //归回主步伐nop //无效用,英文"no operation"的简写,意思是"do nothellong"(呆板码90) (解释:ultraedit打开编辑exe文件时瞅见90,等同于汇编语句nop)call //挪用子步伐,子步伐以ret末端je 或jz //若相等则跳(呆板码74 或0F84)jne或jnz //若不相等则跳(呆板码75或0F85)jmp //无前提跳(呆板码EB)jb //若小于则跳ja //若大于则跳jg //若大于则跳jge //若大于等于则跳jl //若小于则跳jle //若小于等于则跳pop xx //xx出栈push xx //xx压栈更为具体的指令请查阅汇编册本4.破解常见修改,参看表1汇编指令修改相应的呆板码修改(路程经过过程16进制编辑器实现)jnz/jne->nop 75->90jnz/jne -> jmp 75-> EBjz/je->nop 74->90jz/je -> jmp 74-> EBjnz -> jz 75->74 或0F 85 -> 0F 84jz -> jnz 74->75 或0F 84 -> 0F 85jnz -> jz 75->74 或0F 85 -> 0F 84je-> jne 74->75 或0F 84 -> 0F 85表1 破解常见修改(1)修改成jmp(其示意向见图6)je(jne,jz,jnz) =>jmp相应的呆板码为EB (意思是堕落信息向上找到的熬头个跳转),jmp的效用是绝对跳,无前提跳,从而跳过底下的堕落信息例如:xxxxxxxxxxxx 堕落信息,如注册码不对,sorry,未注册版不乐成,"Function Not Avaible in Demo","Command Not Avaible"或"Can't save in Shareware/Demo"等,咱们但愿把它跳过,不让它浮现……xxxxxxxxxxxx 不错线路地点,直接跳转到这搭(图6)(2)修改成nop(其示意向见图7)je(jne,jz,jnz) =>nop相应的呆板码90 (不错信息向上找到的熬头个跳转),nop的效用是抹掉这个跳转,使这个跳转失效,掉去效用,从而使步伐顺利降临紧跟其后的不错信息处例如:xxxxxxxxxxxx 不错信息,如注册乐成,谢谢您的撑持等,咱们但愿它不被跳过,让它浮现,所以步伐绝对是要顺利降临这搭,不克不及跳转在OD中,咱们一般是把不需要设置NOP,只是把JE或JNZ改成JNZ或JE便可,也就是把相等则跳改成不相等则跳,或不相等则跳改成相等则跳,把跳转过程相反,到达更改步伐流程的目的……xxxxxxxxxxxx 堕落信息,咱们但愿不要跳到这搭,不让它浮现!(图7)二,怎样迅速确定暴破物1,确定目标有无加壳没有最好了,有的话看是否常见壳,可不成以用现存脱壳软体迅速脱掉弄不稳定的话,权时放弃它"我吃定你了!",不要如许,老兄不就是一壳么,不要以及他一般见地记取,你今日的重点是爆破不要主次不分、舍本逐末,这也是刚开始学者最易犯的纰缪这方面,我用PEID它可以整合到资源菜谱,很是利便2,确定用啥子语言编著我的经验是,DELPHI的步伐布局清楚、紧凑密切,最好阐发其次是VC,BC,ASM,比力难的是VB,要有绝对似的经验才可弄定一两个2,在反汇编文件中找到可疑点经典语句自不消说,好比,"恭喜","注册乐成","注册码纰缪""失效的注册码","Thank You","Sorry"...找到后,一般向上不远方就可瞅见前提转移语句JZ、JNZ、JLE啥子的究竟上,只有少少少少的软体只修改注册判断就OK的所以咱们要把更多的注意力转到其它的可疑点如未注册标识,逾期正告,次数标识,NAG会话框...,谙练使用各类东西的搜刮功效是基本功之一找到后再向上不远方找前提转移语句三,怎样暴破当你找准爆破点后,你会发明有许多种爆破的要领均可以达目的1,修改转移语句我一般如许改:不需要跳,我就把JNE改成JE或把JE改成JNZ需要跳,我就把JE或JNZ改成JMP底下的附件我做了1个有关爆破的视频文件教程,但愿对大家理解爆破有帮忙4.动态追踪破解技巧-破解经典句式以下是经典的比力组合,常常是注册码的浮现处,所以被称为破解经典句式⑴mov eax,[ ] //这搭可所以地址,也可所以其它寄放器或mov eax [ ]mov edx,[ ] //同上,凡是这两个地址就储存着意要信息或可所以pop edxcall XXXXXXXX //要害calltest eax,eax //eax为标记位jz(jnz)或jne(je) //要害跳转⑵mov eax,[ ] //这搭可所以地址,也可所以其它寄放器mov edx,[ ] //或是pop edx,凡是该地址就储存着意要信息call XXXXXXXX //要害calljne(je) //要害跳转⑶mov eax,[ ] //这搭可所以地址,也可所以其它寄放器mov edx,[ ] //同上,凡是储存着意要信息cmp eax,edx //要害比力jnz(jz) //要害跳转。
OD入门系列图文详细教程、破解做辅助起步
二)-字串参考上一篇是使用入门,现在我们开始正式进入破解。
今天的目标程序是看雪兄《加密与解密》第一版附带光盘中的镜像打包中的 CFF Crackme #3,采用用户名/序列号保护方式。
原版加了个 UPX 的壳。
刚开始学破解先不涉及壳的问题,我们主要是熟悉用 OllyDBG 来破解的一般方法。
我这里把壳脱掉来分析,附件是脱壳后的文件,直接就可以拿来用。
先说一下一般软件破解的流程:拿到一个软件先别接着马上用 OllyDBG 调试,先运行一下,有帮助文档的最好先看一下帮助,熟悉一下软件的使用方法,再看看注册的方式。
如果是序列号方式可以先输个假的来试一下,看看有什么反应,也给我们破解留下一些有用的线索。
如果没有输入注册码的地方,要考虑一下是不是读取注册表或 Key 文件(一般称 keyfile,就是程序读取一个文件中的内容来判断是否注册),这些可以用其它工具来辅助分析。
如果这些都不是,原程序只是一个功能不全的试用版,那要注册为正式版本就要自己来写代码完善了。
有点跑题了,呵呵。
获得程序的一些基本信息后,还要用查壳的工具来查一下程序是否加了壳,若没壳的话看看程序是什么编译器编的,如 VC、Delphi、VB 等。
这样的查壳工具有 PEiD 和 FI。
有壳的话我们要尽量脱了壳后再来用 OllyDBG 调试,特殊情况下也可带壳调试。
下面进入正题:我们先来运行一下这个 crackme(用 PEiD 检测显示是 Delphi 编的),界面如图:这个 crackme 已经把用户名和注册码都输好了,省得我们动手^_^。
我们在那个“Register now !”按钮上点击一下,将会跳出一个对话框:好了,今天我们就从这个错误对话框中显示的“Wrong Serial, try again!”来入手。
启动OllyDBG,选择菜单文件->打开载入文件,我们会停在这里:我们在反汇编窗口中右击,出来一个菜单,我们在查找->所有参考文本字串上左键点击:当然如果用上面那个超级字串参考+插件会更方便。
几种用OD脱壳方法
几种用OD脱壳方法OD是反编译软件的一种,可以将可执行文件转换为可读的源代码。
脱壳是指从已经加密或保护的软件中提取出原始的未加密或未保护的代码。
下面是几种常见的OD脱壳方法:1.静态分析法:静态分析是指对二进制文件进行分析,了解其结构、函数调用和控制流程等信息。
通过对逆向工程的分析,可以分析出加密算法和解密函数的位置。
使用静态分析法脱壳的主要步骤如下:-打开OD软件,将加密的可执行文件加载到OD中。
- 使用各种OD工具,如IDA Pro,OllyDbg等,显示可执行文件的汇编代码。
-通过分析代码和调试程序,找到加密算法和解密函数的位置。
-根据找到的位置,修改程序的执行流程,跳过解密函数,使得程序直接执行解密后的代码。
2.动态调试法:动态调试是指在运行时对程序进行调试和分析。
使用动态调试法脱壳的主要步骤如下:-打开OD软件,将加密的可执行文件加载到OD中。
- 使用动态调试工具,如OllyDbg或GDB等,在程序执行期间跟踪和记录函数调用和内存访问。
-通过分析函数调用和内存访问,找到加密算法和解密函数的位置。
-在找到的位置上下断点,执行程序并使用OD工具查看解密后的代码。
3.内存镜像法:内存镜像法是指通过将程序加载到内存中,并对内存进行镜像和分析来脱壳。
使用内存镜像法脱壳的主要步骤如下:-运行加密的可执行文件。
- 使用内存镜像工具,如DumpBin或WinDBG等,将程序的内存镜像保存到磁盘上。
-使用OD软件加载内存镜像文件。
-通过分析内存镜像文件,找到加密算法和解密函数的位置。
-修改程序的执行流程,跳过解密函数,使得程序直接执行解密后的代码。
这些方法都可以用于将加密的可执行文件转换为可读的源代码,从而进行进一步的分析和修改。
脱壳过程需要进行深入的逆向工程和对程序的理解,因此需要具备一定的技术和知识。
此外,需要注意的是,脱壳过程可能涉及到破解和侵犯版权的行为,应遵守法律规定,并仅限于安全研究和个人学习的目的使用。
OD使用教程 -
调试技巧总结
• 7.一般我们要结合经验通过猜测的方式多尝试几遍设 陷阱,找出相关的函数。 • 8.按“Ctrl+G”键打开跟随表达式的窗口。 • 9.也可以通过“Ctrl+N”键打开应用程序的导入表( 输入表),然后查看应用程序总共导入了哪些函数来 以此推断需要在哪里挖坑下陷阱! • 10.关于返回值,汇编代码的返回值约定是存放在eax 这个寄存器里边的,如果32位的eax不够存放返回值 ,系统会将返回值放在内存某个位置并把该位置的地 址放在eax返回。
调试技巧总结
• 4.所谓领空,实际上就是指在某一时刻,CPU执 行的指令所在的某段代码的所有者。 • 5.如004013F7这类地址一般是可执行文件领空, 7C8114AB这类大地址一般是系统DLL所在的地 址空间。 • 6.程序通常读取文本框内容的字符串用的是以下 两个函数:
– GetDlgItemTextA(GetDlgItemTextW) – GetWindowTextA(GetWindowTextW)
OD使用教程
• 今天小甲鱼给大家演示使用OD破解《解密系列》 里边的小程序的过程。 • 《解密系列》里固然破解过程说明,但是看过此 书的朋友无不说太简单带过了,书中仅提到破解 该程序的简要步骤。 • 但是我们强调一定要知其然且知其所以然!所以 在今天的演示中,小甲鱼会用一样的程序讲出更 全面的内容! • 鸡冻吧?那上课就别睡觉了哦~
• 演示中… …
调试技巧总结
• 1.F2下断点,Alt+b打开断点编辑器,可编辑所 有下过的断点,空格键可快速切换断点状态。 • 2.当位于某个CALL中,这时想返回到调用这个 CALL的地方时,可以按“Ctrl+F9”快捷键执行 返回功能。这样OD就会停在遇到的第一个返回命 令(如RET、RETF或IRET)。 • 3.如果跟进系统DLL提供的API函数中,此时想返 回到应用程序领空里,可以按快捷键“Alt+F9” 执行返回到用户代码命令。
【8A版】OD入门系列图文详细教程、破解做辅助起步
一、OllyDBG的安装与配置二、OllyDBG1.10版的发布版本是个ZIP压缩包,只要解压到一个目录下,运行OllyDBG.eGe就可以了。
汉化版的发布版本是个RAR压缩包,同样只需解压到一个目录下运行OllyDBG.eGe即可:三、OllyDBG中各个窗口的功能如上图。
简单解释一下各个窗口的功能,更详细的内容可以参考TT小组翻译的中文帮助:四、反汇编窗口:显示被调试程序的反汇编代码,标题栏上的地址、HEG数据、反汇编、注释可以通过在窗口中右击出现的菜单界面选项->隐藏标题或显示标题来进行切换是否显示。
用鼠标左键点击注释标签可以切换注释显示的方式。
五、寄存器窗口:显示当前所选线程的CPU寄存器内容。
同样点击标签寄存器(FPU)可以切换显示寄存器的方式。
六、信息窗口:显示反汇编窗口中选中的第一个命令的参数及一些跳转目标地址、字串等。
七、数据窗口:显示内存或文件的内容。
右键菜单可用于切换显示方式。
八、堆栈窗口:显示当前线程的堆栈。
九、要调整上面各个窗口的大小的话,只需左键按住边框拖动,等调整好了,重新启动一下OllyDBG就可以生效了。
十、启动后我们要把插件及UDD的目录配置为绝对路径,点击菜单上的选项->界面,将会出来一个界面选项的对话框,我们点击其中的目录标签:因为我这里是把OllyDBG解压在F:\OllyDBG目录下,所以相应的UDD目录及插件目录按图上配置。
还有一个常用到的标签就是上图后面那个字体,在这里你可以更改OllyDBG 中显示的字体。
上图中其它的选项可以保留为默认,若有需要也可以自己修改。
修改完以后点击确定,弹出一个对话框,说我们更改了插件路径,要重新启动OllyDBG。
在这个对话框上点确定,重新启动一下OllyDBG,我们再到界面选项中看一下,会发现我们原先设置好的路径都已保存了。
有人可能知道插件的作用,但对那个UDD目录不清楚。
我这简单解释一下:这个UDD目录的作用是保存你调试的工作。
OD使用教程2 - 解密系列【调试篇】
调试技巧总结
• 4.所谓领空,实际上就是指在某一时刻,CPU执行 的指令所在的某段代码的所有者。
• 5.如004013F7这类地址一般是可执行文件领空, 7C8114AB这类大地址一般是系统DLL所在的地址空 间。
• 6.程序通常读取文本框内容的字符串用的是以下 两个函数:
– GetDlgItemTextA(GetDlgItemTextW) – GetWindowTextA(GetWindowTextW)
调试技巧总结
• 7.一般我们要结合经验通过猜测的方式多尝试几遍设 陷阱,找出相关的函数。
• 8.按“Ctrl+G”键打开跟随表达式的窗口。 • 9.也可以通过“Ctrl+N”键打开应用程序的导入表(
准备工作
• 拆解一个Windows程序要比拆解一个DOS程序容易 得多,因为在Windows中,只要API函数被使用, 想对寻找蛛丝马迹的人隐藏一些东西是比较困难 的。
• 因此分析一个程序,用什么API函数作为切入点就 显得比较关键了。这也正是小甲鱼常跟大家说破 解靠的是耐心和经验的道理!
• 为了便于大家理解,我们先把TraceMe这个序列号 验证程序流程图给大家展示出来:
OD使用教程
• 今天小甲鱼给大家演示使用OD破解《解密系列》 里边的小程序的过程。
• 《解密系列》里固然破解过程说明,但是看过此 书的朋友无不说太简单带过了,书中仅提到破解 该程序的简要步骤。
• 但是我们强调一定要知其然且知其所以然!所以 在今天的演示中,小甲鱼会用一样的程序讲出更 全面的内容!
OD破解常用方法
一、概论壳出于程序作者想对程序资源压缩、注册保护的目的,把壳分为压缩壳和加密壳两种顾名思义,压缩壳只是为了减小程序体积对资源进行压缩,加密壳是程序输入表等等进行加密保护。
当然加密壳的保护能力要强得多!二、常见脱壳方法预备知识1.PUSHAD (压栈)代表程序的入口点,2.POPAD (出栈)代表程序的出口点,与PUSHAD想对应,一般找到这个OEP就在附近3.OEP:程序的入口点,软件加壳就是隐藏了OEP(或者用了假的OEP/FOEP),只要我们找到程序真正的OEP,就可以立刻脱壳。
方法一:单步跟踪法1.用OD载入,点“不分析代码!”2.单步向下跟踪F8,实现向下的跳。
也就是说向上的跳不让其实现!(通过F4)3.遇到程序往回跳的(包括循环),我们在下一句代码处按F4(或者右健单击代码,选择断点——>运行到所选)4.绿色线条表示跳转没实现,不用理会,红色线条表示跳转已经实现!5.如果刚载入程序,在附近就有一个CALL的,我们就F7跟进去,不然程序很容易跑飞,这样很快就能到程序的OEP6.在跟踪的时候,如果运行到某个CALL程序就运行的,就在这个CALL中F7进入7.一般有很大的跳转(大跨段),比如jmp XXXXXX 或者JE XXXXXX 或者有RETN的一般很快就会到程序的OEP。
Btw:在有些壳无法向下跟踪的时候,我们可以在附近找到没有实现的大跳转,右键-->“跟随”,然后F2下断,Shift+F9运行停在“跟随”的位置,再取消断点,继续F8单步跟踪。
一般情况下可以轻松到达OEP!方法二:ESP定律法ESP定理脱壳(ESP在OD的寄存器中,我们只要在命令行下ESP的硬件访问断点,就会一下来到程序的OEP了!)1.开始就点F8,注意观察OD右上角的寄存器中ESP有没突现(变成红色)。
(这只是一般情况下,更确切的说我们选择的ESP值是关键句之后的第一个ESP值)2.在命令行下:dd XXXXXXXX(指在当前代码中的ESP地址,或者是hr XXXXXXXX),按回车!3.选中下断的地址,断点--->硬件访--->WORD断点。
OD使用完全教程
教你如何破解软件,OD破解软件,OD使用教程教你如何破解软件,OD破解软件,OD使用教程大家好,这几天我上网大概看了一下,ITyouth论坛的内容真的应有尽有,不知道应该写什么了,所以我想了一晚上终于想到了还是教你们些破解知识吧!我想对大家来说都很有用吧!我将会一直坚持下去保证课堂质量,有不会的可以提出来问我,尽量解答(呵呵!我也是鸟嘛!)废话不多说!支持我的就往下看吧!先教大家一些基础知识,学习破解其实是要和程序打交道的,汇编是破解程序的必备知识,但有可能部分朋友都没有学习过汇编语言,所以我就在这里叫大家一些简单实用的破解语句吧!----------------------------------------------------------------------------------------------------------------语句:cmp a,b//cmp是比较的意思!在这里假如a=1,b=2 那么就是a与b比较大小.mov a,b//mov是赋值语句,把b的值赋给a.je/jz//就是相等就到指定位置(也叫跳转).jne/jnz//不相等就到指定位置.jmp//无条件跳转.jl/jb//若小于就跳.ja/jg//若大于就跳.jge//若大于等于就跳.----------------------------------------------------------------------------------------------------------------------这些都是我们在以后的课程中会经常遇到的语句,应该记住它们,接下来我们在讲讲破解工具的使用:我们破解或给软件脱壳最常用的软件就是OD全名叫ODbyDYK界面如图1它是一个功能很强大的工具,左上角是cpu窗口,分别是地址,机器码,汇编代码,注释;注释添加方便,而且还能即时显示函数的调用结果,返回值.右上角是寄存器窗口,但不仅仅反映寄存器的状况,还有好多东东;双击即可改变Eflag的值,对于寄存器,指令执行后发生改变的寄存器会用红色突出显示.cpu窗口下面还有一个小窗口,显示当前操作改变的寄存器状态.左下角是内存窗口.可以ascii或者unicode两种方式显示内存信息.右下角的是当前堆栈情况,还有注释啊.恩,今天的课程就上到这了,大家可以在自己的电脑下试试OD,了解了解OD,下堂课我将破解一款软件给大家看,我们就用今天讲的语句和OD来破解,在以后的课程里我还会教大家脱壳,因为现在的软件为了维护版权多数都加了壳的,所以要破解就必须脱壳!好了!下节课见!88OD下载地址:百度一下吧破解工具------ODbyDYK v1.10 12.06.rar 5.1MB【原创】"白拿"软件破解班(二)呵呵!大家好!我是散人,我们又见面了!恩,按照上节课说的那样今天来破解个软件给大家看看!大家只要认真看我的操作一定会!假如还是不明白的话提出难点帮你解决,还不行的话加我QQ!有时间给你补节课!呵呵!好!孔子曰:“废话不可多说也”OK!!!~!!!先讲下预备知识:JZ/JE//相等则跳转JNE/JNZ//不相等则跳转JMP //无条件跳转目标柏林:LRC傻瓜编辑器杀杀杀~~~~~~~~~简介:本软件可以让你听完一首MP3歌曲,便可编辑完成一首LRC歌词。
最新OD破解威纶触摸屏XOB程序方法
O D破解威纶触摸屏X O B程序方法威纶触摸屏XOB程序破解方法当前介绍的方法是通过OD工具来实现的。
有一定的汇编基础,C++基础,一定的WINDOW编程基础,熟悉OD工具,熟悉触摸屏编程软件。
此方法会更好理解。
具体思路是1.通过OD加载威纶通触摸屏编辑软件,2.操作编辑软件反编译XOB文件。
3.点击反编译按钮后,在OD工具上触发相关事件。
粗略定位CALL.4.OD中跟踪代码,找到关键CALL,修改并保存程序。
步骤为:1.载入程序:将威纶通触摸屏编辑软件easybuilder8000拖入OD工具。
2.粗略定义:伟伦通触摸屏编辑软件easybuilder8000是通过delphi编写。
点击反编译按钮,编程软件会事先获取密码编辑框内容,对于编辑框内容的获取不是通过getdlgitemtexta,或getdlgitemtextw.在delphi中可通过sendmessage获取,在OD中ctrl+n查找相关类似函数,并全部添加断点。
之后按F9运行编程软件,进行反编译操作,按下编译按钮,粗略定位CALL.在程序所有出现SendMessageW处添加断点,F9运行程序。
编辑软件运行后,按正常操作打开XOB文件,输入任意XOB密码123456789,点击反编译。
3.精定位CALL:F8单步跟进,可看到按钮所执行的一系列代码。
找到关键字UNICODE "password error !!"。
往前找到第一个Jz,修改Jz代码跳过"password error !!"所在的代码段便可。
出自:工控编程吧作者:编程吧站长。
几种用OD脱壳方法
几种用OD脱壳方法OD(Object Dump)即对象转储,是指将内存中的对象转化为文件或其他形式的过程。
脱壳是指从被加壳/保护的程序中提取可执行代码的过程。
以下是几种常见的用OD脱壳方法:1.静态脱壳:静态脱壳是指在未运行程序的情况下进行脱壳。
这种方法适用于一些简单的壳或保护机制。
静态脱壳一般包括以下步骤:-分析被加壳程序的文件结构,确定壳的类型和解密算法。
-定位加密/保护的代码段和目标程序的入口点。
-提取加密的代码段并进行解密。
-删除或替换壳代码,将解密的代码插入到目标程序的入口点。
2.动态脱壳:动态脱壳是指在运行被加壳程序的过程中进行脱壳。
这种方法更加复杂,但可以应对一些更强大的保护机制。
动态脱壳的步骤如下:- 使用调试器(如OllyDbg、IDA Pro等)加载被加壳程序,并设置断点。
-运行程序并观察其行为。
一般可以通过跟踪内存或执行流来确定代码解密、动态链接等操作。
-当程序执行到解密/动态链接等关键点时,暂停程序并检查相关内存中的加密数据。
-通过观察内存数据的变化和算法的操作,找出解密算法、关键数据等。
-使用调试器的功能(如修改内存、暂停/恢复执行等)来修改和恢复解密的数据,最终达到脱壳的目的。
3.虚拟机检测:有时候,加壳程序会在运行时检测是否在虚拟机中执行。
如果发现运行在虚拟机中,则不会执行解密操作。
因此,一种常见的脱壳方法是绕过虚拟机检测。
这可以通过修改虚拟机检测函数的返回值来实现。
通过调试器可以定位到虚拟机检测的相关代码,并修改相应的变量或寄存器值。
4.内存脱壳:部分加壳程序并不是一次性将整个程序都解密并运行,而是采用内存加载的方式,将加密的代码段逐步解密到内存中执行。
这种情况下,可以使用内存脱壳来获取完整的可执行文件。
内存脱壳的步骤如下:-使用调试器加载被加壳程序。
-执行程序,观察其行为并找到解密/加载代码的操作。
-在解密/加载代码执行前暂停程序,此时可使用调试器的内存修改功能,在内存中找到加密的代码段,并修改为解密后的代码。
OD常用断点及破解总结
黑鹰基地破解提高班破解总结课一些常规断点拦截窗口:bp CreateWindow 创建窗口bp CreateWindowEx(A/W) 创建窗口bp ShowWindow 显示窗口bp UpdateWindow 更新窗口bp GetWindowText(A/W) 获取窗口文本拦截消息框:bp MessageBox(A/W) 创建消息框bp MessageBoxExA 创建消息框bp MessageBoxIndirect(A/W) 创建定制消息框拦截警告声:bp MessageBeep 发出系统警告声(如果没有声卡就直接驱动系统喇叭发声)拦截对话框:bp DialogBox 创建模态对话框bp DialogBoxParam(A/W) 创建模态对话框bp DialogBoxIndirect 创建模态对话框bp DialogBoxIndirectParam(A/W) 创建模态对话框bp CreateDialog 创建非模态对话框bp CreateDialogParam(A) 创建非模态对话框bp CreateDialogIndirect 创建非模态对话框bp CreateDialogIndirectParam(A/W) 创建非模态对话框bp GetDlgItemText(A) 获取对话框文本bp GetDlgItemInt 获取对话框整数值拦截剪贴板:bp GetClipboardData 获取剪贴板数据拦截注册表:bp RegOpenKey(A/W) 打开子健bp RegOpenKeyEx(A/W) 打开子健bp RegQueryValue(A/W) 查找子健bp RegQueryValueEx(A/W) 查找子健bp RegSetValue(A/W) 设置子健bp RegSetValueEx(A/W) 设置子健功能限制拦截断点: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字符串各分类语言程序的破解思路C类Point-H法bp GetDlgItem/GetWindowText(A/W)/GetWindowTextLength(A/W) (断输入框)bp MessageBox(A/W)(断对话框)字符串法B、D类DEDE、PE Explorer作为强有力的辅助工具关键还是找按妞事件Point-H法bp GetDlgItem/GetWindowText(A/W)/GetWindowTextLength(A/W) (断输入框)bp MessageBoxA(断对话框)字符串法FormCreateV类VBExplorer、GetVBRes、SmatCheck作为强有力的辅助工具关键还是找按妞事件bp rtcMsgBox(断对话框)E类有E-Code Explorer作为辅助工具查找按钮事件ECode法需要注意的:1、时刻不要忘记经典组合2、对于有注册错误/正确提示、未注册一启动或者关闭就跳出个注册框或者提示框、未注册一启动或者关闭就打开网页链接、未注册就功能使用限制、未注册就日期限制、未注册标题上有未注册或者试用字样的等等程序,大家就要想到可以通过找到这一类判断,然后转存跟踪!3、要警惕使用自带DLL/DLL函数来判断是否注册的程序,如38课4、要警惕CrC型的比较追码5、要警惕两类IceLicense保护的破解6、要警惕使用壳的注册机制的软件的破解,比如:使用了Armadillo、ASProtect注册机制的软件重启验证时代在变,技术在发展,可以说,现在80%-90%的软件基本都是重启验证类型的1、注册表类型Bpx RegOpenKeyA(W)Bpx RegOpenKeyExA(W)2、INI文件类型(*.reg/*.ini)Bpx GetPrivateProfileStringA3、其他文件类型(*.dat/*.lic…)Bpx CreateFileA(W)Bpx ReadFile4、DLL文件操作类型没有什么有效的拦截函数。
od破解软件教程破解教程
od破解软件教程破解教程希望大家互相学习学习,发现现在大家对于破解都不是很了解,很多人想学破解,但是去无从入手,所以在BCG小组大家的商议下,决定为大家写一个破解入门的教程,希望能大家了解破解有一些帮助,希望能有更多的人踏入破解的大门。
1.初级,修改程序,用ultraedit等工具修改exe文件,称暴力破解,简称爆破中级,追出软件的注册码高级,写出注册机2.常用破解工具(1)侦壳工具:PEiD(2)动静结合的OllyDbg引领破解工具的新潮流。
一,现在我们首先来学习下破解的初步,爆破~1.侦壳要破解一个软件首先要做的就是侦壳,要侦壳就要对壳有一定的了解,众所周知,软件作者用编程语言编写好软件后,是将它编译成扩展名为EXE的可执行文件。
编译为EXE 的目的有两点:(1)有一些版权信息需要保护起来,不能让别人随意改动,如作者的姓名、软件名称等;(2)需要给程序“减肥”,从而方便存储、使用和网上传输。
为了编译,会用到一些软件。
它们能将可执行文件压缩和对信息加密(图1),实现上述两个功能,这些软件称为加壳软件。
为软件加上的东东就称为“壳”。
加壳软件不同于一般的WinZIP、WinRAR等打包类压缩软件。
加壳软件是压缩可执行文件的,压缩后的文件可以直接运行。
最常见的加壳软件有3个:ASPACK 、UPX、PEcompact。
毕竟它们是主流,据统计,用它们加壳的软件约占市面所有软件的90%!其他不常用的加壳软件有ASPROTECT、PETITE 、NEOLITE、TELOCK等。
软件最常见的编程语言是Delphi,Visual Basic(简称VB),Visual C++(简称VC)。
了解些编程的知识,会让破解更加轻车熟路。
下面来说侦壳,现在比较常用侦壳软件就PeiD,他具有华丽的图形界面。
外壳整合(添加到鼠标右键)功能令使用更加方便,支持拖放操作。
配置时,务请将“扩展到鼠标右键”打上对号。
其使用方法是,鼠标点住,按鼠标右键,选"使用PEid扫描"即可;“壳”的信息就显示在底部。
OD入门系列图文详细教程-破解做辅助起步(一)
OD⼊门系列图⽂详细教程-破解做辅助起步(⼀)OllyDBG的安装与配置OllyDBG1.10版的发布版本是个ZIP压缩包,只要解压到⼀个⽬录下,运⾏OllyDBG.exe就可以了。
汉化版的发布版本是个RAR压缩包,同样只需解压到⼀个⽬录下运⾏OllyDBG.exe即可:学习各种外挂制作技术,马上去百度搜索"魔⿁作坊"点击第⼀个站进⼊、快速成为做挂达⼈。
OllyDBG中各个窗⼝的功能如上图。
简单解释⼀下各个窗⼝的功能,更详细的内容可以参考TT⼩组翻译的中⽂帮助:反汇编窗⼝:显⽰被调试程序的反汇编代码,标题栏上的地址、HEX数据、反汇编、注释可以通过在窗⼝中右击出现的菜单界⾯选项->隐藏标题或显⽰标题来进⾏切换是否显⽰。
⽤⿏标左键点击注释标签可以切换注释显⽰的⽅式。
寄存器窗⼝:显⽰当前所选线程的CPU寄存器内容。
同样点击标签寄存器(FPU)可以切换显⽰寄存器的⽅式。
信息窗⼝:显⽰反汇编窗⼝中选中的第⼀个命令的参数及⼀些跳转⽬标地址、字串等。
数据窗⼝:显⽰内存或⽂件的内容。
右键菜单可⽤于切换显⽰⽅式。
堆栈窗⼝:显⽰当前线程的堆栈。
要调整上⾯各个窗⼝的⼤⼩的话,只需左键按住边框拖动,等调整好了,重新启动⼀下OllyDBG就可以⽣效了。
启动后我们要把插件及UDD的⽬录配置为绝对路径,点击菜单上的选项->界⾯,将会出来⼀个界⾯选项的对话框,我们点击其中的⽬录标签:因为我这⾥是把OllyDBG解压在F:\OllyDBG⽬录下,所以相应的UDD⽬录及插件⽬录按图上配置。
还有⼀个常⽤到的标签就是上图后⾯那个字体,在这⾥你可以更改OllyDBG中显⽰的字体。
上图中其它的选项可以保留为默认,若有需要也可以⾃⼰修改。
修改完以后点击确定,弹出⼀个对话框,说我们更改了插件路径,要重新启动OllyDBG。
在这个对话框上点确定,重新启动⼀下OllyDBG,我们再到界⾯选项中看⼀下,会发现我们原先设置好的路径都已保存了。
OD入门系列图文详细教程、破解做辅助起步精编版
一、OllyDBG 的安装与配置OllyDBG 1.10 版的发布版本是个ZIP 压缩包,只要解压到一个目录下,运行OllyDBG.exe 就可以了。
汉化版的发布版本是个RAR 压缩包,同样只需解压到一个目录下运行OllyDBG.exe 即可:OllyDBG 中各个窗口的功能如上图。
简单解释一下各个窗口的功能,更详细的内容可以参考TT 小组翻译的中文帮助:反汇编窗口:显示被调试程序的反汇编代码,标题栏上的地址、HEX 数据、反汇编、注释可以通过在窗口中右击出现的菜单界面选项->隐藏标题或显示标题来进行切换是否显示。
用鼠标左键点击注释标签可以切换注释显示的方式。
寄存器窗口:显示当前所选线程的CPU 寄存器内容。
同样点击标签寄存器(FPU) 可以切换显示寄存器的方式。
信息窗口:显示反汇编窗口中选中的第一个命令的参数及一些跳转目标地址、字串等。
数据窗口:显示内存或文件的内容。
右键菜单可用于切换显示方式。
堆栈窗口:显示当前线程的堆栈。
要调整上面各个窗口的大小的话,只需左键按住边框拖动,等调整好了,重新启动一下OllyDBG 就可以生效了。
启动后我们要把插件及UDD 的目录配置为绝对路径,点击菜单上的选项->界面,将会出来一个界面选项的对话框,我们点击其中的目录标签:因为我这里是把OllyDBG 解压在F:\OllyDBG 目录下,所以相应的UDD 目录及插件目录按图上配置。
还有一个常用到的标签就是上图后面那个字体,在这里你可以更改OllyDBG 中显示的字体。
上图中其它的选项可以保留为默认,若有需要也可以自己修改。
修改完以后点击确定,弹出一个对话框,说我们更改了插件路径,要重新启动OllyDBG。
在这个对话框上点确定,重新启动一下OllyDBG,我们再到界面选项中看一下,会发现我们原先设置好的路径都已保存了。
有人可能知道插件的作用,但对那个UDD 目录不清楚。
我这简单解释一下:这个UDD 目录的作用是保存你调试的工作。
OD工具破解VB程序的常用断点
OD工具破解VB程序的常用断点OD工具破解VB程序的常用断点(转)-现在也流行破解常用断点设置-- 收集的精华(编缉分类好装入PYG记事本)bpx hmemcpy 破解万能断点,拦截内存拷贝动作 (注意:Win9x 专用断点,XP无效)bpx Lockmytask 当你用其它断点都无效时可以试一下,这个断点拦截按键的动作实在找不到断点可以试下面的方法:bmsg handle wm_gettext 拦截注册码(handle为对应窗口的句柄)bmsg handle wm_command 拦截OK按钮(handle为对应窗口的句柄)拦截窗口:bpx CreateWindow 创建窗口bpx CreateWindowEx(A/W) 创建窗口bpx ShowWindow 显示窗口bpx UpdateWindow 更新窗口bpx GetWindowText(A/W) 获取窗口文本拦截消息框:bpx MessageBox(A) 创建消息框bpx MessageBoxExA 创建消息框bpx MessageBoxIndirect(A) 创建定制消息框拦截警告声:bpx MessageBeep 发出系统警告声(如果没有声卡就直接驱动系统喇叭发声)拦截对话框:bpx DialogBox 创建模态对话框bpx DialogBoxParam(A/W) 创建模态对话框bpx DialogBoxIndirect 创建模态对话框bpx DialogBoxIndirectParam(A/W) 创建模态对话框bpx CreateDialog 创建非模态对话框bpx CreateDialogParam(A) 创建非模态对话框bpx CreateDialogIndirect 创建非模态对话框bpx CreateDialogIndirectParam(A/W) 创建非模态对话框bpx GetDlgItemText(A/W) 获取对话框文本bpx GetDlgItemInt 获取对话框整数值拦截剪贴板:bpx GetClipboardData 获取剪贴板数据拦截注册表:bpx RegOpenKey(A) 打开子健( 例:bpx RegOpenKey(A) if *(esp+8)=='****' )bpx RegOpenKeyEx 打开子健( 例:bpx RegOpenKeyEx if *(esp+8)=='****' )bpx RegQueryValue(A) 查找子健 ( 例:bpx RegQueryValue(A) if *(esp+8)=='****' )bpx RegQueryValueEx 查找子健 ( 例:bpx RegQueryValueEx if *(esp+8)=='****' )bpx RegSetValue(A) 设置子健( 例:bpx RegSetValue(A) if *(esp+8)=='****' )bpx RegSetValueEx(A) 设置子健 ( 例:bpx RegSetValueEx(A) if *(esp+8)=='****' )注意:“****”为指定子键名的前4个字符,如子键为“Regcode”,则“****”= “Regc”==================功能限制拦截断点:bpx EnableMenuItem 禁止或允许菜单项bpx EnableWindow 禁止或允许窗口bmsg hMenu wm_command 拦截菜单按键事件,其中hMenu 为菜单句柄bpx K32Thk1632Prolog 配合bmsg hMenu wm_command使用,可以通过这个断点进入菜单处理程序应用示例:CALL [KERNEL32!K32Thk1632Prolog]CALL [......] <-- 由此跟踪进入菜单处理程序CALL [KERNEL32!K32Thk1632Epilog]======================拦截时间:bpx GetLocalTime 获取本地时间bpx GetSystemTime 获取系统时间bpx GetFileTime 获取文件时间bpx GetTickCount 获得自系统成功启动以来所经历的毫秒数bpx GetCurrentTime 获取当前时间(16位)bpx SetTimer 创建定时器bpx TimerProc 定时器超时回调函数拦截文件:bpx CreateFileA 创建或打开文件 (32位)bpx OpenFile 打开文件 (32位)bpx ReadFile 读文件 (32位)bpx WriteFile 写文件 (32位)bpx _lcreat 创建或打开文件 (16位)bpx _lopen 打开文件 (16位)bpx _lread 读文件 (16位)bpx _lwrite 写文件 (16位)bpx _hread 读文件 (16位)bpx _hwrite 写文件 (16位)拦截驱动器:bpx GetDrivetype(A/W) 获取磁盘驱动器类型bpx GetLogicalDrives 获取逻辑驱动器符号bpx GetLogicalDriveStringsA(W) 获取当前所有逻辑驱动器的根驱动器路径拦截狗:bpio -h 378(或278、3BC) R 378、278、3BC是并行打印端口bpio -h 3F8(或2F8、3E8、2E8) R 3F8、2F8、3E8、2E8是串行端口+++++++++++VB程序专用断点:++++++++++bp__vbaFreeStr 偶发现了VB杀手断点.不管是重起验证.还是有错误提示的VB..下这个断点通杀bpx msvbvm50!__vbaStrCmp 比较字符串是否相等bpx msvbvm50!__vbaStrComp 比较字符串是否相等bpx msvbvm50!__vbaVarTstNe 比较变量是否不相等bpx msvbvm50!__vbaVarTstEq 比较变量是否相等bpx msvbvm50!__vbaStrCopy 复制字符串bpx msvbvm50!__vbaStrMove 移动字符串bpx MultiByteT oWideChar ANSI字符串转换成Unicode字符串bpx WideCharToMultiByte Unicode字符串转换成ANSI字符串上面的断点对应VB5程序,如果是VB6程序则将msvbvm50改成msvbvm60即可VB程序的破解VB程序使很多朋友感到头痛,主要是VB程序反编译时产生大量的顶!代码,而且也找不到有用的信息,在动态调试过程中,顶!代码太多,往往迷失于冗余的代码中,找不到方向。
OD爆破
一、机械码,又称机器码.ultraedit打开,编辑exe文件时你会看到许许多多的由0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F组成的数码,这些数码就是机器码.修改程序时必须通过修改机器码来修改exe文件.二、需要熟练掌握的全部汇编知识(只有这么多)不大容易理解,可先强行背住,混个脸儿熟,以后慢慢的就理解了cmp a,b 比较a与bmov a,b 把b的值送给aret 返回主程序nop 无作用,英文“no operation”的简写,意思是“do nothing”(机器码90)***机器码的含义参看上面(解释:ultraedit打开编辑exe文件时你看到90,等同于汇编语句nop)call 调用子程序je 或jz 若相等则跳(机器码74 或0F84)jne或jnz 若不相等则跳(机器码75或0F85)jmp 无条件跳(机器码EB)jb 若小于则跳ja 若大于则跳jg 若大于则跳jge 若大于等于则跳jl 若小于则跳jle 若小于等于则跳pop 出栈push 压栈三、常见修改(机器码)74=>75 74=>90 74=>EB75=>74 75=>90 75=>EBjnz->nop75->90(相应的机器码修改)jnz -> jmp75 -> EB(相应的机器码修改)jnz -> jz75->74 (正常) 0F 85 -> 0F 84(特殊情况下,有时,相应的机器码修改)四、两种不同情况的不同修改方法1.修改为jmpje(jne,jz,jnz) =>jmp相应的机器码EB (出错信息向上找到的第一个跳转)jmp的作用是绝对跳,无条件跳,从而跳过下面的出错信息xxxxxxxxxxxx 出错信息,例如:注册码不对,sorry,未注册版不能...,"Function Not Avaible in Demo" 或"Command Not Avaible" 或"Can't save in Shareware/Demo"等(我们希望把它跳过,不让它出现)xxxxxxxxxxxx 正确路线所在2.修改为nopje(jne,jz,jnz) =>nop相应的机器码90 (正确信息向上找到的第一个跳转)nop的作用是抹掉这个跳转,使这个跳转无效,失去作用,从而使程序顺利来到紧跟其后的正确信息处xxxxxxxxxxxx 正确信息,例如:注册成功,谢谢您的支持等(我们希望它不被跳过,让它出现,程序一定要顺利来到这里)xxxxxxxxxxxx 出错信息(我们希望不要跳到这里,不让它出现)五、爆破无敌口诀背会此口诀,天下无敌,以后慢慢琢磨,仔细体会,收益多多。
OD使用教程18 - 解密系列【调试篇】
OD使用教程18
• 十八,是一个神奇的数字。每每提起,总让人心 旷神怡。例如十八精神,例如十八岁的天空,例 如有鱼油提出OD使用教程出到第十八讲就支持小 甲鱼。所以,咱这讲必须精彩!
• 小甲鱼认为,天网恢恢疏而不漏一直是句狗屁, 无孔不入才是逆向破解的基本精神!
• 创建模态对话框是由调话框是调用 CreateDialogParam函数实现。
• 它们的原型分别是:
– HWND DialogBoxParam (HINSTANCE hlnstance, LPCTSTR IpTemplateName, HWND hWndParent, DLGPROC IPDialogFunc, LPARAM dwlnitParam);
– HWND CreateDialogParam (HINSTANCE hlnstancem, LPCTSTR IpTemplateName, HWND hWndParent, DLGPROCIpDialogFunc, LPARAM dwlniParam);
• 它们之间的区别在于是否允许用户在不同窗口间进 行切换:模态对话框不允许,非模态对话框允许。
• 两者形成区别的原理是模态对话框由windows为它 内建一个消息循环,而非模态对话框的消息则是通 过用户程序中的消息循环派送的。具体可以参考下 小甲鱼的《Win32汇编语言程序设计》系列视频教 程。
OD使用教程18
• 正如天下无贼一直是空中楼阁般的愿望一样,加 密和破解是一个永恒的话题,有无孔不入的破解 存在,才能推动加密技术的更新和发展!
OD使用教程18
• 一直以来,小甲鱼总坚持以各种手段对软件进行 剖析力求突破,对的,今天我们还换个方法搞。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
[分享] OD破解常用方法[复制链接]
一、概论
壳出于程序作者想对程序资源压缩、注册保护的目的,把壳分为压缩壳和加密壳两种
顾名思义,压缩壳只是为了减小程序体积对资源进行压缩,加密壳是程序输入表等等进行加密保护。
当然加密壳的保护能力要强得多!
二、常见脱壳方法
预备知识
1.PUSHAD (压栈)代表程序的入口点,
2.POPAD (出栈)代表程序的出口点,与PUSHAD想对应,一般找到这个OEP就在附近
3.OEP:程序的入口点,软件加壳就是隐藏了OEP(或者用了假的OEP/FOEP),只要我们找到程序真正的OEP,就可以立刻脱壳。
方法一:单步跟踪法
1.用OD载入,点“不分析代码!”
2.单步向下跟踪F8,实现向下的跳。
也就是说向上的跳不让其实现!(通过F4)
3.遇到程序往回跳的(包括循环),我们在下一句代码处按F4(或者右健单击代码,选择断点——>运行到所选)
4.绿色线条表示跳转没实现,不用理会,红色线条表示跳转已经实现!
5.如果刚载入程序,在附近就有一个CALL的,我们就F7跟进去,不然程序很容易跑飞,这样很快就能到程序的OEP
6.在跟踪的时候,如果运行到某个CALL程序就运行的,就在这个CALL中F7进入
7.一般有很大的跳转(大跨段),比如jmp XXXXXX 或者JE XXXXXX 或者有RETN的一般很快就会到程序的OEP。
Btw:在有些壳无法向下跟踪的时候,我们可以在附近找到没有实现的大跳转,右键-->“跟随”,然后F2下断,Shift+F9运行停在“跟随”的位置,再取消断点,继续F8单步跟踪。
一般情况下可以轻松到达OEP!
方法二:ESP定律法
ESP定理脱壳(ESP在OD的寄存器中,我们只要在命令行下ESP的硬件访问断点,就会一下来到程序的OEP了!)
1.开始就点F8,注意观察OD右上角的寄存器中ESP有没突现(变成红色)。
(这只是一般情况下,更确切的说我们选择的ESP值是关键句之后的第一个ESP值)
2.在命令行下:dd XXXXXXXX(指在当前代码中的ESP地址,或者是hr XXXXXXXX),按回车!
3.选中下断的地址,断点--->硬件访--->WORD断点。
4.按一下F9运行程序,直接来到了跳转处,按下F8,到达程序OEP。
方法三:内存镜像法
1:用OD打开软件!
2:点击选项——调试选项——异常,把里面的忽略全部√上!CTRL+F2重载下程序! 3:按ALT+M,打开内存镜象,找到程序的第一个.rsrc.按F2下断点,然后按SHIFT+F9运行到断点,接着再按ALT+M,打开内存镜象,找到程序的第一个.rsrc.上面的.CODE(也就是00401000处),按F2下断点!然后按SHIFT+F9(或者是在没异常情况下按F9),直接到达程序OEP!
方法四:一步到达OEP
1.开始按Ctrl+F,输入:popad(只适合少数壳,包括UPX,ASpack壳),然后按下F2,F9运行到此处
2.来到大跳转处,点下F8,到达OEP!
方法五:最后一次异常法
1:用OD打开软件
2:点击选项——调试选项——异常,把里面的√全部去掉!CTRL+F2重载下程序
3:一开始程序就是一个跳转,在这里我们按SHIFT+F9,直到程序运行,记下从开始按SHIFT+F9到程序运行的次数m!
4:CTRL+F2重载程序,按SHIFT+F9(这次按的次数为程序运行的次数m-1次)
5:在OD的右下角我们看见有一个"SE 句柄",这时我们按CTRL+G,输入SE 句柄前的地址!
6:按F2下断点!然后按SHIFT+F9来到断点处!
7:去掉断点,按F8慢慢向下走!
8:到达程序的OEP!
比如说第一次是按10下SHIFT+F9..然后程序就跑起来了..
接着呢..我们从载入程序然后按9下SHIFT+F9
大家都知道按10下程序就跑起来了..所以说9下程序是不可能跑的..
方法六:模拟跟踪法
1:先试运行,跟踪一下程序,看有没有SEH暗桩之类
2:ALT+M打开内存镜像,找到(包含=SFX,imports,relocations)
内存镜像,项目30
地址=0054B000
大小=00002000 (8192.)
Owner=check 00400000
区段=.aspack
包含=SFX,imports,relocations
类型=Imag 01001002
访问=R
初始访问=RWE
3:地址为0054B000,如是我们在命令行输入tc eip<0054B000,回车,正在跟踪ing。
Btw:大家在使用这个方法的时候,要理解他是要在怎么样的情况下才可以使用
方法七:“SFX”法
1:设置OD,忽略所有异常,也就是说异常选项卡里面都打上勾
2:切换到SFX选项卡,选择“字节模式跟踪实际入口(速度非常慢)”,确定。
3:重载程序(如果跳出是否“压缩代码?”选择“否”,OD直接到达OEP)
cmp a,b 比较a与b
mov a,b 把b的值送给a
ret 返回主程序
nop 无作用,英文“no operation”的简写,意思是“do nothing”(机器码90)***机器码的含义参看上面
(解释:ultraedit打开编辑exe文件时你看到90,等同于汇编语句nop)
call 调用子程序
je 或jz 若相等则跳(机器码74 或0F84)
jne或jnz 若不相等则跳(机器码75或0F85)
jmp 无条件跳(机器码EB)
jb 若小于则跳
ja 若大于则跳
jg 若大于则跳
jge 若大于等于则跳
jl 若小于则跳
jle 若小于等于则跳
pop 出栈
push 压栈
74=>75 74=>90 74=>EB
75=>74 75=>90 75=>EB
jnz->nop
75->90(相应的机器码修改)
jnz -> jmp
75 -> EB(相应的机器码修改)
jnz -> jz
75->74 (正常) 0F 85 -> 0F 84(特殊情况下,有时,相应的机器码修改)
一条(跳)就死,九筒(90)就胡 (对应上面的2.修改为nop)
一条(跳)就胡,一饼(EB)伺候 (对应上面的1.修改为jmp)妻死(74)便妻无(75)
爸死(84)便爸无(85)。