OllyDbg常用断点
- 格式:doc
- 大小:17.08 KB
- 文档页数:17
附个断点表:常用断点(OD中)拦截窗口:bp CreateWindow 创建窗口bp CreateWindowEx(A) 创建窗口bp ShowWindow 显示窗口bp UpdateWindow 更新窗口bp GetWindowT ext(A) 获取窗口文本拦截消息框:bp MessageBox(A) 创建消息框bp MessageBoxExA 创建消息框bp MessageBoxIndirect(A) 创建定制消息框bp IsDialogMessageW拦截警告声: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 定时器超时回调函数GetDlgItemInt 得指定输入框整数值GetDlgItemText 得指定输入框输入字符串GetDlgItemTextA 得指定输入框输入字符串拦截文件:bp CreateFileA 创建或打开文件(32位)bp OpenFile 打开文件(32位)bp ReadFile 读文件(32位)bp WriteFile 写文件(32位)GetModuleFileNameAGetFileSizeSetfilepointerfileopenFindFirstFileAReadFile拦截驱动器:bp GetDriveTypeA 获取磁盘驱动器类型bp GetLogicalDrives 获取逻辑驱动器符号bp GetLogicalDriveStringsA 获取当前所有逻辑驱动器的根驱动器路径★★VB程序专用断点★★文件长度:RtcFileLenbp __vbaFreeStr 对付VB程序重启验证bp __vbaStrCmp 比较字符串是否相等bp __vbaStrComp 比较字符串是否相等bp __vbaVarT stNe 比较变量是否不相等bp __vbaVarT stEq 比较变量是否相等bp __vbaStrCopy 复制字符串bp __vbaStrMove 移动字符串bp MultiByteToWideChar ANSI字符串转换成Unicode字符串bp WideCharToMultiByte Unicode字符串转换成ANSI字符串=============== ================密码常用中断Hmemcpy (win9x专用)GetDlgItemTextAGetDlgItemIntvb:getvolumeinformationavbastrcomp (trw)Bpx __vbaStrComp (记得是两个'_')MSVBVM60!_vbastrcomp|soficeMSVBVM50! |VBAI4STRCtrl+Dbpx msvbvm60!__vbastrcomp do "d *(esp+0c)"(softice)按几次F5出册码出来了。
OllyDBG 新手使用说明书OLLYDBG完全教程(一)一、什么是 OllyDbg ?OllyDbg 是一种具有可视化界面的 32 位汇编 - 分析调试器。
它的特别之处在于可以在没有源代码时解决问题,并且可以处理其它编译器无法解决的难题。
Version 1.10 是最终的发布版本。
这个工程已经停止,我不再继续支持这个软件了。
但不用担心:全新打造的OllyDbg 2.00 不久就会面世!运行环境: OllyDbg 可以以在任何采用奔腾处理器的Windows 95、98、ME、NT或是 XP(未经完全测试)操作系统中工作,但我们强烈建议您采用 300-MHz以上的奔腾处理器以达到最佳效果。
还有, OllyDbg 是极占内存的,因此如果您需要使用诸如追踪调试[ Trace ]之类的扩展功能话,建议您最好使用 128MB以上的内存。
支持的处理器:OllyD 的数据格式,但是不支持SSE2 指令集。
bg 支持所有80x86、奔腾、 MMX、3DNOW!、 Athlon 扩展指令集、 SSE指令集以及相关配置:有多达百余个(天呀!)选项用来设置OllyDbg 的外观和运行。
数据格式: OllyDbg 的数据窗口能够显示的所有数据格式: HEX、ASCII 、UNICODE、 16/32 位有 / 无符号 /HEX 整数、32/64/80 位浮点数、地址、反汇编( MASM、IDEAL或是 HLA)、PE文件头或线程数据块。
帮助:此文件中包含了关于理解和使用 OllyDbg 的必要的信息。
如果您还有 Windows API帮助文件的话(由于版权的问题 win32.hlp 没有包括在内),您可以将它挂在 OllyDbg 中,这样就可以快速获得系统函数的相关帮助。
启动:您可以采用命令行的形式指定可执行文件、也可以从菜单中选择,或直接拖放到 OllyDbg 中,或者重新启动上一个被调试程序,或是挂接[ Attach ]一个正在运行的程序。
标题:【原创】OllyDBG分析报告系列(1)---Int3断点作者:driverox时间: 2008-05-19,16:45:43链接: /showthread.php?t=65094最近学习逆向,对OD本身做了个逆向,也算是一个小小的锻炼吧。
呵呵,在这里以分析报告的形式贴出来,请大家批评指正。
谢谢。
Ollydbg(以下均简称为OD)中的Int3断点的主要功能是:在需要下断点的执行代码处将原来的代码改成0xCC,程序执行到此处后会报一个Int3异常,由OD捕获并处理。
当要执行该行代码时,将原来的代码改回来并执行,然后再恢复断点,这样就不会影响程序的正常运行了。
这里仅描述最常见的功能,其它的有兴趣的话可以分析一把。
先说明一下OD中的两个结构体,在IDA中,声明为如下格式:t_bpoint用来保存Int断点的相关信息00000000 t_bpoint struc ; (sizeof=0x11)00000000 addr dd ? ; // Address of breakpoint00000004 dummy dd ? ; // Always 100000008 type dd ? ; // Type of breakpoint, TY_xxx0000000C cmd db ? ; // Old value of command0000000D passcount dd ? ; // Actual pass count00000011 t_bpoint ends其中:addr为断点的地址,dummy始终为1,type为断点的类型,cmd为要用0xCC替换的指令码,passcount为需要断下的次数,0表示每次都断下。
t_sorted结构体保存了一种有序的数据:00000000 ; Descriptor of sorted table00000000 t_sorted struc ; (sizeof=0x138)00000000 name[MAXPATH] db 260 dup(?) ; char Name of table, as appears in error messages00000104 n dd ? ; int Actual number of entries00000108 nmax dd ? ; int Maximal number of entries0000010C selected dd ? ; int Index of selected entry or -100000110 seladdr dd ? ; ulong Base address of selected entry00000114 itemsize dd ? ; int Size of single entry00000118 version dd ? ; ulong Unique version of table0000011C data dd ? ; void* Elements, sorted by address00000120 sortfunc dd ? ; SORTFUNC Function which sorts data or NULL00000124 destfunc dd ? ; DESTFUNC Destructor function or NULL00000128 sort dd ? ; int Sorting criterium (column)0000012C sorted dd ? ; int Whether indexes are sorted00000130 index dd ? ; int Indexes, sorted by criterium00000134 suppresserr dd ? ; int Suppress multiple overflow errors00000138 t_sorted endsname是结构体的名称,用来区别不同类型的结构体n是数组元素的个数itemsize是数组元素的大小data 是指向各种数据结构数组的指针,这里使用的是int3断点,所以现在保存的是int3断点数据结构体数组的指针---------------------------------------------------------------------------------------------------------------------------------1)Int3断点的设置int3断点的设置是通过消息来处理的,对应右键点击菜单中的切换,其对应的消息为1E;此外还有热键F2、双击反汇编窗口等也能切换int3断点,转入的函数虽然不同,但是调用设置int3断点的函数都是同一个,就不再举例了。
第13天OllyDbg的常见问题学的今天,OllyDbg的⼀些基础知识也学的差不多。
下⾯是常见问题的处理⽅法。
1.乱码问题004010CC 55 db 55004010CD 8B db 8B004010CE EC db EC004010CF 83 db 83004010D0 56 db 56OD将这段代码当成了数据,使⽤分析→分析代码功能强制OD去重新分析,还是不⾏可以分析→从模块中删除分析或在UDD⽬录删除相对于的UDD⽂件。
2.快速回到当前程序领空双击寄存器⾯板的EIP或者单击C按钮3.OllyDbg修改EIP光标移到到修改的地址上,在此处新建EIP4.UDD此⽬录中保存着⽂件的信息,⽅便下次调试,包括表情、注释、断点、监视、分析数据、条件等5.已经删除了断点,OD重新加载时⼜出现了配置⽂件中 Backup UDD file=1 修改下即可。
6.输⼊ push E000 提⽰未知表⽰符反汇编引擎不能识别E是字母还是数字,解决⽅法:push 0E000 前⾯加07.OllyDbg出现假死现象调试⼀些加壳程序,运⾏到断点(包括硬件断点),会出现假死。
解决⽅法:配置⽂件中如果“Restore windows” 是⼀个很⼤的值就设置 “Restore windows 0”8.微调窗⼝显⽰Ctrl+↑或者 Ctrl+↓9.执⾏复制到可执⾏⽂件时,提⽰错误“Unable to locate data in excutable file”修改的地⽅不在RawSize范围内。
修改PE⽂件。
10.把call调⽤改成函数名的形式shift + ; 输⼊函数名,其实就是设置⼀个标签11.设置OllyDbg为即时调试器管理员⾝份运⾏OD,选项→实时调试设置→设置为是实时调试器12.右键快捷菜单增加 “⽤OllyDbg打开”管理员⾝份运⾏OD,选项→添加到资源菜单右键打开。
第18课内存断点法特点:脱壳常用方法之一,常被用于加密性质的壳〔例1〕UnPackMe_Armadillo4.10.b(Armadillo4.10加壳,标准方式加壳)史上最为恐怖的armadillo大鳄鱼壳,曾吓倒无数人,其实几秒即可找到它的oep。
Ollydbg调试设置如下:选项全部打上勾,即全部忽略,如下图:Ollydbg载入程序后来到这里点菜单“查看”中的“内存”,如下图:对目标文件的.Text段“设置访问中断F2”,如下图:也可以“设置内存访问断点(A)”,结果是一样的。
如下图:设好后变红,如下图所示:点按钮或按F9后,程序即停在oep处:其修复较复杂,此处不讲述。
〔例2〕EXE Stealth2.72加壳的98记事本。
Ollydbg调试设置如下:Ollydbg选项除了“忽略在kernel32中发生的内存访问异常”打勾外,其余全部不打勾,即全部不忽略,如下图:Ollydbg载入程序后来到这里用IsDebuggerPresent插件隐藏OllyDbg,点按钮或按F9后,程序即停在这里:其下方显示,即发生int3中断,也就是CC指令,如上图。
点按钮或按F9后,程序即停在这里:下方显示出现int68中断触发的异常,需要shift+F9跳过;否则,点F9无反应。
一次shift+F9后,来到这里:需要接着按shift+F9以跳过异常,可是再按一次shift+F9后程序运行,就是传说中所谓的“跑飞”。
没办法,重新来过吧!重复上面的步骤,再来到上面的画面。
不能再按shift+F9了。
点菜单“查看”中的“内存”,如下图:对目标文件的.Text段“设置访问中断F2”,如下图:设好后变红,如下图所示:这时,可以按shift+F9了,来到这里下方显示Ok!oep到站了。
Ollydump插件脱壳后,输入表修复选方式1即能运行。
如下图:。
教程三:OllyDbg的使用(上)本章中我将会介绍OllyDbg的使用。
Olly有许多的功能,唯一学好它们的方式是实践和练习。
也就是说,本教程也只是给你一个简单的概述。
此教程不会涉及额外的内容,后面会进行重点讨论。
到最后,你应该会比较好的掌握Olly。
本章包含了一些文件。
你能够下载那些文件,以及可以在这里下载到次教程的PDF版本。
它们包括一个我们将在Olly中用到的二进制文件、一个Olly备忘单、我使用的外观上有些不同的Olly以及一个新的ini文件。
你可以用这个ini文件替换掉Olly默认的ini,可以给新人提供一些帮助(感谢伟大的Lena151做的这些)。
你可以从这里直接下载或者从教程页面下载。
如果你更愿意用原版的Olly,你可以从这里下载。
一、载入应用第一步是将目的二进制文件载入Olly。
你可以将二进制文件拖放到Olly的反汇编窗口,或者点击顶部工具栏中的载入图标选择目的文件。
我们这里载入“FirstProgram.exe”,可以从本网站下载。
Olly会进行分析(Olly的底部状态栏会显示分析进程)然后停在程序的入口点(EP):需要注意的第一件事是EP的地址是401000,就是图片中的第一列。
这是可执行文件的一个相当标准的起点(该可执行文件至少没有加过壳或混淆过)。
如果你的看起来不太一样,并且Olly没有停在401000,你可以尝试点击Appearance菜单,然后选择debugging options,点击“Events”标签,并且确保“WinMain(if location is known)”被勾选上。
然后重启应用。
让我们给“FirstProgram.exe”的内存空间占用情况来张快照。
点击“Me”图标(如果你使用的是不同版本的Olly的话应该是“M”):如果你看地址那一列,你会看到401000那行包含有大小1000、名称“FirstPro”(FirstProgram的简写形式)、区块名“.text”、包含里是“SFX,code”。
ollydbg使用方法ollydbg是一款用于逆向工程和调试程序的强大工具。
它可以帮助我们分析和修改二进制文件,以理解程序的内部工作原理。
在本文中,我们将介绍ollydbg的使用方法,以帮助读者快速上手使用该工具。
一、ollydbg的安装和配置我们需要下载ollydbg的安装文件,并按照向导完成安装过程。
安装完成后,我们可以在程序菜单中找到ollydbg的快捷方式。
二、打开目标程序在ollydbg中打开目标程序的方法有两种:直接拖拽到ollydbg窗口中或通过菜单中的“文件”选项来打开程序。
无论使用哪种方法,我们都需要找到目标程序所在的路径,并选择打开。
三、调试程序1. 设置断点:在ollydbg中,断点是一种被设置在程序中的暂停执行的标记点。
我们可以通过双击程序中的某一行代码或者在该行代码上点击右键,然后选择“Toggle Breakpoint”来设置断点。
设置断点后,当程序执行到该行代码时,会自动停止执行,方便我们进行调试。
2. 单步执行:在调试过程中,我们可以使用单步执行功能来逐行执行程序。
我们可以通过菜单中的“调试”选项,或者使用快捷键F7来进行单步执行。
单步执行可以帮助我们逐行分析程序的执行流程,以及观察变量的值的变化。
3. 查看寄存器和内存:在调试过程中,我们经常需要查看程序中的寄存器和内存的值。
ollydbg提供了寄存器窗口和内存窗口,可以方便地查看这些信息。
我们可以通过菜单中的“窗口”选项,选择“寄存器”或者“内存”来打开相应的窗口。
4. 分析代码:在调试过程中,我们可以使用ollydbg的反汇编窗口来查看程序的汇编代码。
我们可以通过菜单中的“窗口”选项,选择“反汇编”来打开反汇编窗口。
反汇编窗口可以帮助我们分析程序的执行流程,以及理解代码的逻辑。
5. 修改变量值:在调试过程中,我们可以通过ollydbg来修改程序中的变量的值。
我们可以在变量所在的内存地址上点击右键,然后选择“修改”,来修改变量的值。
OllyDbg的基本使⽤注:内容整理⾃《逆向⼯程核⼼原理》,结合我的OllyDbg版本修改了⼀些内容1. OllyDbg常⽤命令及其快捷键指令快捷键含义Restart Ctrl+F2重新开始调试Step Into F7执⾏⼀句OP code,若遇到CALL,进⼊函数代码内部Step Over F8执⾏⼀句OP code,若遇到CALL,仅执⾏函数⾃⾝,不跟随进⼊Run F9运⾏(遇到断点时暂停)Execute till return Ctrl+F9 执⾏函数代码内的命令,直到遇到RETN命令,⽤于跳出函数体Execute till cursor F4 执⾏到光标所在位置Comment; 添加注释User-defined comment⿏标右键菜单Search for-User defined comment查看⽤户输⼊的注释⽬录Label:添加标签User-defined label⿏标右键菜单Search for-User defined Label查看⽤户输⼊的标签⽬录Breakpoint F2设置或取消断点All referenced text strings ⿏标右键菜单Search for-All referenced textstrings查看代码中引⽤的字符串All intermodular calls⿏标右键菜单Search for-All intermodular calls查看代码中调⽤的所有API函数Name in all modules⿏标右键菜单Search for-Name in all modules查看所有API函数Edit data Ctrl+E编辑数据Assemble空格键编写汇编代码Copy to executable file⿏标右键菜单Copy to executable file创建⽂本副本(修改的项⽬被保留)2. 设置点的⽅法(这⾥我们假设⼤本营的地址为004010ED)①Goto命令执⾏Goto命令(Ctrl+G),在打开的对话框中输⼊004010ED,然后单击OK按钮,这样光标就会⾃动定位到004010ED处然后执⾏Execute till cursor(F4)命令,让调试流运⾏到该处②设置断点选中004010ED这⼀⾏(可以⼿动找,也可以使⽤上述Goto命令中的第⼀步),设置BreakPoint(F2),调试运⾏到断点处会暂停然后执⾏Run debugged application(F9)即可让调试直接运⾏到断点处暂停注:在OllyDbg菜单栏中选择View-Breakpoints(Alt+B),可以打开Breakpoints对话框,列出代码中设置的断点。
od 硬件条件断点
OD (OllyDbg) 是一款用于调试二进制应用程序的工具,它可
以在执行程序时设置断点并检查程序的状态。
要在OD中设置硬件条件断点,你需要遵循以下步骤:
1. 打开OllyDbg,并加载要调试的二进制程序。
2. 找到你想要设置断点的位置。
这可以是一个特定的内存地址,也可以是程序中的某个函数。
3. 在OllyDbg的菜单栏上选择 "Breakpoints" > "Hardware breakpoints"。
4. 在 "Hardware breakpoints" 窗口中,点击 "New" 按钮。
5. 在弹出的窗口中,选择 "Condition" 选项卡。
6. 在 "Condition" 选项卡中,输入你想要设置的条件,例如要
求寄存器的值等于某个特定值。
7. 点击 "OK" 按钮保存设置。
8. 回到主OllyDbg窗口,你将看到硬件条件断点已添加到"Browse breakpoints" 窗口中。
9. 启动程序,并当程序执行到设置的断点位置时,程序会停止执行并等待你进一步调试。
请注意,硬件条件断点只在特定条件满足时触发断点,因此你需要确保设置的条件是合适的,并且可以满足在期望的情况下触发断点。
此外,硬件断点通常会影响程序的执行速度,因此在调试大型程序时,设置过多的硬件条件断点可能会导致性能下降。
OllyDBG 常用快捷键和命令快捷键说明F8单步步过单步步过。
每按一次这个键执行一条反汇编窗口中的一条指令,遇到CALL 等子程序不进入其代码F7单步步入单步步入。
功能同单步步过(F8)类似,区别是遇到CALL 等子程序时会进入其中,进入后首先会停留在子程序的第一条指令上。
F4运行到选定位置运行到选定位置。
作用就是直接运行到光标所在位置处暂停。
F9运行运行。
被调试的程序直接开始运行。
CTR+F9执行到返回执行到返回。
此命令在执行到一个ret (返回指令)指令时暂停,常用于从系统领空返回到我们调试的程序领空。
ALT+F9执行到用户代码执行到用户代码。
从系统领空快速返回到我们调试的程序领空。
Ctrl+F2重启程序重启程序,即重新启动被调试程序。
如果当前没有调试的程序,OllyDbg 会运行历史列表[history list]中的第一个程序。
程序重启后,将会删除所有内存断点和硬件断点。
Ctrl+N 查看API 调用引用调用引用。
可以快速设定断点/查看调用位置等Ctrl+G 跳转到地址跳转到地址。
使用RVA 地址Alt+F2关闭被调试程序关闭被调试程序。
如果程序仍在运行,会弹出提示是否要关闭程序。
[Space]修改命令修改命令。
您可在显示对话框中以汇编语言修改实际指令或输入新指令,这些指令将替换实际代码,等同双击鼠标。
命令说明命令说明命令说明WATCH 添加监视表达式BC 清除断点TC 跟踪进入直到满足条件AT 在指定地址进行反汇编MR 内存断点于访问时TOC 跟踪步过直到满足条件FOLLOW 跟随命令MW 内存断点于写入时TR 运行直到返回ORIG 反汇编于EIP MD 清除内存断点TU 运行直到用户代码DUMP 在指定地址进行转存HR 访问时进行硬件中断LOG 查看记录窗口DA 转存为反汇编代码HW 写入时进行硬件中断MOD 查看模块窗口DB 使用十六进制字节格式转存HE 执行时进行硬件中断MEM 查看内存窗口DC 使用ASCII 格式转存HD 清除硬件断点CPU 查看CPU 窗口DD转存在堆栈格式STOP停止运行程序调试CS查看Call 堆栈DU 转存在UNICODE 格式PAUSE 暂停执行程序调试BRK查看断点窗口DW 使用十六进制字词格式转存RUN 运行程序进行调试OPT 打开选项设置窗口STK 前往堆栈中的地址GE 运行和通过例外EXIT 退出OllyDbg AS (AS +地址+字符串)SI 单步进入Call 中QUIT 退出OllyDbg BP 进行条件中断SO 步过Call OPEN 打开一个可执行文件BPX 中断在全部调用(Call )TI跟踪进入直到地址CLOSE 关闭可执行文件。
几个快捷键的作用:1、Ctrl+F2 重新开始2、F7 单步调试,遇到函数调用便进入该函数3、F8 单步调试,遇到函数调用不进入该函数4、Ctrl+F7 自动运行直到碰到断点,遇到函数调用便进入该函数5、Ctrl+F8 自动运行直到碰到断点,无断点的函数不进入OllyDbg的help-怎样开始调试(翻译)最简单的方法是启动OllyDbg,点击File|Open,然后选择你想调试的程序。
程序需要命令行参数输入对话框下方的文本栏。
重新开始调试最后一个程序的快捷键是Ctrl+F2,并且OllyDbg使用相同的参数。
你也可以点选历史记录。
把程序拖入OllyDbg也可以开始调试。
当然,当启动OllyDbg时,你在命令行中也能指定被调试的程序名和参数。
比如:你可以创建桌面快捷方式指向OllyDbg,选择属性,到快捷方式,把程序名加入目标栏。
每次你双击这个快捷图标,OllyDbg自动装载被调试程序。
你可以attach OllyDbg到某个正在运行的进程。
点击File|Attach,从列表中选择该进程。
注意:当你关闭OllyDbg,这个进程也会终止。
不要试图attach系统进程,这很可能使系统完全SI机。
(事实上,大多数情况下,OS不允许attach敏感进程)OllyDbg能作为just-in-time debugger。
这需要在注册表中登记。
点击Options|Just-in-time debugging,在对话框中按“Make OllyDbg just-in-time debugger”。
现在,当一些程序崩溃,你会被询问是否调试它。
这样,操作系统可以启动OllyDbg并直接停在异常发生处。
如果你选择attaching without confirmation,OllyDbg不会询问直接启动。
要恢复原来的just-in-time debugger,在出现的对话框中按相应的按纽就行了。
其它方法还有,把OllyDbg加入可执行文件的弹出式菜单。
ollydbg中快速定位各种语言关键代码的方法 快速定位vc vs的OnInitDialog函数 bp SendMessageW MSG == WM_SETICON 或 bp SendMessageA MSG == WM_SETICON 然后执行代码到返回,整个Call就是OnInitDialog函数了。VB 定位按钮 先F9运行,然后查看按钮的窗口句柄
下断点 bp CallWindowProcA [esp+8]==00110BF0 && [esp+0c]==202 点击按钮, Alt + M 查看内存映射,在.text区段下访问断点,F9运行 断在72991F0C FF3418 push dword ptr [eax+ebx] ; VB.004077CD VB.004077CD按钮的地址。 VC按钮事件的定位 //关于vc搜索二进制确定按钮处理代码的特征,目前都只测试了一个。 vc6 Release版本 动态就在mfc42.dll中搜索"sub eax, 0a" 静态就在主模块中搜索"sub eax, 0a" 00416625 |. 83E8 0A sub eax, 0xA 00416628 |. 74 46 je XTestBtn.00416670 ... 00416670 |> \\8B4D 08 mov ecx, dword ptr ss:[ebp+0x8] ; Case C of switch 0041661A 00416673 |. FF55 14 call dword ptr ss:[ebp+0x14] call dword ptr ss:[ebp+0x14] //此函数就是Button的处理函数。 VC6 Debug 动态在MFC75D.dll中二进制搜索 75 E3 8B 4D 08 FF 55 FC 静态在主模块中二进制搜索75 E3 8B 4D 08 FF 55 FC VS2003 Release 动态:在mfc71.dll中搜索 5E C2 ?? ?? 8B 4D ?? FF 55 ?? E9 静态在主模块中搜索FF 24 85 ?? ?? ?? ?? 8B 4D ?? FF 55 14 VS2003 Debug 共享 MFC71d.dll中搜索 静态主模块中搜索 85 C0 74 01 CC 8B 4D 08 FF 55 ?? E9 VS2008 Release 共享:在mfc90u.dll中搜索FF 24 95 ?? ?? ?? ?? FF D0 静态:在主模块中搜索二进制FF 24 85 ?? ?? ?? ?? FF 55 14 VS2008 Debug 共享在MFC90ud.dll中搜索 静态在主模块中搜索 85 C0 74 01 CC 8B 4D 08 FF 55 ?? E9 VS2010 Release 动态:在mfc100*.dll中搜索二进制FF 24 95 ?? ?? ?? ?? FF D0 静态:在主模块中搜索二进制FF 24 85 ?? ?? ?? ?? FF 55 14 VS2010 Debug 动态:在mfc100*.dll中搜索二进制:74 01 CC 8B 4D 08 FF 55 F8静态:在主模块中搜索二进制:74 01 CC 8B 4D 08 FF 55 F8 在call dword ptr ss:[ebp-0x8] 下断点。 delphi 一、查找二进制 740E8BD38B83FF93
大多数壳都有一个共同的特点。
在壳准备开始解压时都要执行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用法OllyDbg是一款非常强大的调试器,可以帮助程序员进行调试和反汇编操作。
以下是一些OllyDbg的基本用法:1. 打开调试文件:在OllyDbg中,可以通过“文件”菜单打开需要调试的文件。
如果需要调试的是一个可执行文件,可以直接输入文件名并打开。
如果需要调试的是一个动态链接库或共享库,可以选择“文件”菜单中的“打开DLL”或“打开共享库”选项,并输入需要调试的文件的路径。
2. 设置断点:在OllyDbg中,可以通过单击行号或者在行号区域右键单击来设置断点。
当程序运行到这个位置时,调试器会自动暂停程序的执行,以便用户可以进行调试和分析。
3. 单步执行:在OllyDbg中,可以使用F8键进行单步执行。
如果需要进入函数内部,可以使用F7键。
如果需要跳过函数调用,可以使用F9键。
4. 查看变量:在OllyDbg中,可以通过“视图”菜单中的“局部变量”和“全局变量”选项卡来查看当前函数的局部变量和全局变量。
此外,还可以通过右键单击变量名称来修改变量的值。
5. 反汇编:在OllyDbg中,可以通过“视图”菜单中的“反汇编”选项卡来查看当前函数的反汇编代码。
可以通过单击反汇编代码中的任意位置来设置断点。
6. 跟踪函数调用:在OllyDbg中,可以使用“跟踪”菜单中的选项来跟踪函数的调用过程。
可以通过选择“跟踪到调用者”或“跟踪到被调用者”选项来查看函数调用的上下文。
7. 保存调试信息:在OllyDbg中,可以通过“文件”菜单中的“保存调试信息”选项来保存调试过程中的信息。
这可以有助于后续的分析和排查问题。
总之,OllyDbg是一款功能强大的调试器,可以帮助程序员进行调试和反汇编操作。
通过掌握OllyDbg的基本用法,可以更好地理解和分析程序的行为,从而更好地排查和解决程序中的问题。
1。
OllyDbg命令以下命令适用于OllyDbg 的命令行插件Cmdline.dll(显示于程序的插件菜单中)=============================================================== 命令行插件支持的命令CALC判断表达式WATCH添加监视表达式AT在指定地址进行反汇编FOLLOW跟随命令ORIG反汇编于EIPDUMP在指定地址进行转存DA转存为反汇编代码DB使用十六进制字节格式转存DC使用ASCII 格式转存DD转存在堆栈格式DU转存在UNICODE 格式DW使用十六进制字词格式转存STK前往堆栈中的地址AS(AS 地址字符串)在指定地址进行汇编BP进行条件中断(有条件的断点)BPX中断在全部调用(Call)BPD清除全部调用中的断点BC清除断点MR内存断点于访问时MW内存断点于写入时MD清除内存断点HR访问时进行硬件中断HW写入时进行硬件中断HE执行时进行硬件中断HD清除硬件断点STOP停止运行程序调试PAUSE暂停执行程序调试RUN运行程序进行调试GE运行和通过例外SI单步进入Call 中SO步过CallTI跟踪进入直到地址TO跟踪步过直到地址TC跟踪进入直到满足条件TOC跟踪步过直到满足条件TR运行直到返回TU运行直到用户代码LOG查看记录窗口MOD查看模块窗口MEM查看内存窗口CPU查看CPU 窗口CS查看Call 堆栈BRK查看断点窗口OPT打开选项设置窗口EXIT退出OllyDbgQUIT退出OllyDbgOPEN打开一个可执行文件CLOSE关闭可执行文件RST重新运行当前程序HELP查看API 函数的帮助以下命令适用于OllyDbg 的快捷命令栏插件(显示于程序的状态栏上方)======================================================== CALC判断表达式WATCH添加监视表达式AT / FOLLOWDisassemble 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在地址进行注释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直到返回Till 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关闭程序Restart 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扫描项目文件当CPU与其他处理机协同工作时,该指令可避免破坏有用信息.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)封包断点命令(据说选用哪个命令是取决于—网络协议)sendsendtoWSAsendWSAendto。
OllyDBG简单爆破小记OllyDBG简单爆破小记一假期东逛逛西逛逛……逛荡了好几天。
总算是抽空干了点正事,看着教程试着用OllyDBG爆破了一个极简单的TraceMe小程序。
东西不难,算是个基础吧。
004013A0 <模块入口点> PUSH EBP程序入口在004013A0处。
按F9让程序跑起来:很清晰的看到这是一个验证用户名和序列号的小程序,那么我们要跟踪的当然是USER32.GetDlgItemText或者类似的API函数。
我这里占个便宜,联系程序已经给出是32位ANSI版的,那很自然的我们要锁定USER32.GetDlgItemTextA这时,我们可以按Ctrl+N来获取应用程序输入表,很容易我们就能找到我们要的东东~之后按ENTER转入即可。
当然,也可以用Ctrl+G来跟随这个函数总之我们的目的就是找到这个USER32.GetDlgItemT extA的入口,现在我们的目的达到了:76632AE1 GetDlgItemTextA MOV EDI,EDI入口位置在76632AE1。
当然这个位置不同系统是不一样的,不必在意。
在这里用F2设置一个断点,再用Alt+F9返回TraceMe程序领空。
按F9将程序跑起来。
用户名和序列号我们随便输入一个即可:点击Check之后当然会卡在刚才设置的断点处,再用Alt+F9回到程序领空,我们很容易的就找到了调用USER32.GetDlgItemTextA 函数的位置。
我们用Alt+B打开断点列表,禁用掉76632AE1处的断点,然后在程序调用API函数的地方设置一个新的断点:004011AE PUSH 51 ; /Count = 51 (81.)004011B0 PUSH EAX ; |Buffer004011B1 PUSH 6E ; |ControlID = 6E (110.) 004011B3 PUSH ESI ; |hWnd004011B4 CALL EDI ; \GetDlgItemTextA004011B6 LEA ECX,DWORD PTR SS:[ESP+9C]004011BD PUSH 65 ; /Count = 65 (101.)004011BF PUSH ECX ; |Buffer004011C0 PUSH 3E8 ; |ControlID = 3E8 (1000.)004011C5 PUSH ESI ; |hWnd004011C6 MOV EBX,EAX ; |004011C8 CALL EDI ; \GetDlgItemTextA我们就在这个004011AE处设置一个新的断点,然后再重新来过,把程序再跑一遍。
Ollydbgx32dbgx64dbg贴⼼伴侣Version6.48使⽤详解Ollydbg/x32dbg/x64dbg贴⼼伴侣 Version 6.48使⽤详解和开发历程:2020.7.24号是个不幸的⽇⼦,我⼈⽣当中第⼀次体验到了⼼碎的感觉。
这天晚上,我正在继续忙着整理汇编破解总结资料时,我的⼀块希捷硬盘(2000G)突然间硬盘分区不显⽰了(实际上是两个分区)⾥边有⼤量⾃制的软件,破解资料总结,破解流程图,⼤⽩使⽤视频总结与思维导图,各种⽹上优秀的共享软件,各种视频学习笔记总结资料等。
有太多太多的回忆的东西和情感在⾥边,⼀下⼦全都没有了,那种撕⼼裂肺,那种希望⼀下⼦被磨灭了。
我⾟苦汉化的IDE for python也有其中,⽽我⾃编的《信⼿拈来按键帮你来》Delphi源码也在虚拟机⽂件中。
还好我最近⾃编的《Ollydbg/x32dbg/x64dbg贴⼼伴侣》不在其中,费了好⼤劲汉化的RegexBuddy不在⾥边。
DDMS汉化也没有了,⾟苦汉化的wind ide for python也没有了,开发了两年多的《信⼿拈来按键帮你来AHK》也没有了(⽽且程序的源码在VMDK虚拟机⾥。
还有太多太多的东西也没能幸免。
在⽹上创业是⾮常不容易的,尤其在中国。
我也在想,这些年都⼲了什么?对得起逝去的时间么?为什么没给硬盘多⼀份备份?为什么这东西突然就挂了?好容易最近编的软件,做的视频取得了⼀些⼩收⼊。
⼜有不幸传来,真是欲哭⽆泪啊。
所以眼下最重要的是把⼿⾥的这个《Ollydbg/x32dbg/x64dbg贴⼼伴侣》卖出去,好买块⼤硬盘(没有⼤硬盘的⽇⼦是极其悲催的,没有更多的地⽅下载,安装⼀个Delphi10.3原来的两块硬盘剩余空间就没有多少了)接下来还要攒⾜很多钱去维修这块硬盘。
因为这⾥边有很多有意义,费了⼤劲整理出来的资料。
《Ollydbg/x32dbg/x64dbg贴⼼伴侣》是⼀款汇编破解辅助⼯具,易在让逆向过程变得轻松简单,让x32dbg中⼤量的命令⾏变得简单化操作;同时也是部海量整理的汇编总结数据库。
OllyDbg常用断点 查找子健 bp RegSetValue(A) 设置子健 bp RegSetValueEx(A) 设置子健
程序专用断点: BP __vbaObjSet (功能限制----灰色按钮 中断) bp __vbaFreeObjList
bp __vbaVarDup bp MessageBoxA 窗口断点 bp __vbaStrMove BP __vbaFreeVarList
bpx hmemcpy bp ShellExecuteA (弹出网页窗口 断点)
bp rtcMsgBox (杀窗专用) bp __vbaStrCmp bp __vbaVarMove bp VarBstrCmp(字符串比较 真码!!) bp __vbaStrCmp 字符串比较 文件长度:RtcFileLen bp __vbaFreeStr 对付VB程序重启验证 bp __vbaStrCmp 比较字符串是否相等 bp __vbaStrComp 比较字符串是否相等 bp __vbaVarTstNe 比较变量是否不相等 bp __vbaVarTstEq 比较变量是否相等 bp __vbaStrCopy 复制字符串 bp __vbaStrMove 移动字符串 bp MultiByteToWideChar ANSI字符串转换成Unicode字符串 bp WideCharToMultiByte Unicode字符串转换成ANSI字符串 bp __vbaStrComp bp __vbaStrCompVar bp __vbaStrTextCmp bp __vbaFileOpen bp __vbaInputFile bp __vbaFileSeek bp __vbaWriteFile bp __vbaFileClose bp rtcFileAttributes bp rtcFileDateTime bp rtcFileLen bp rtcFileLength bp __vbaVarInt bp __vbaVarCmpGe bp __vbaVarCmpGt bp __vbaVarCmpLe bp __vbaVarCmpLt bp __vbaVarCmpNe bp __vbaVarTextCmpEq bp __vbaVarTextCmpGe bp __vbaVarTextCmpGt bp __vbaVarTextCmpLe bp __vbaVarTextCmpLt bp __vbaVarTextCmpNe bp __vbaVarTextTstEq bp __vbaVarTextTstGe bp __vbaVarTextTstGt bp __vbaVarTextTstLe bp __vbaVarTextTstLt bp __vbaVarTextTstNe bp __vbaVarTstEq (字符串比较) bp __vbaVarTstGe bp __vbaVarTstGt bp __vbaVarTstLe bp __vbaVarTstLt bp __vbaVarTstNe
注意:VB程序仍然可以使用普通API函数,只要函数“最终”CALL了这个函数 上面的断点对应VB6程序,如果是VB5程序则将msvbvm60改成msvbvm50即可
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 发出系统警告声(如果没有声卡就直接驱动系统喇叭发声)
vbaStrMove 移动字符串 __vbaVarCat 连接字符串 rtcMidCharVar 在字符串中取字符或者字符串! __vbaLenBstr 取字符串的长度 vbaVarT
stNe 变量比较 vbaVarTstEq 变量比较 rtcMsgBox 显示对话框 VarBstrCmp 比较字符串 VarCyCmp 比较字符串
用OD载入脱壳后的程序,在命令行输入:bpx hmemcpy,然后回车,会弹出程序运行调用的所有的函数,在每个
函数上设置好断点!说明:我破VB程序喜欢用这个断点设置方法,通过一步步跟踪,基本可以把握程序保护的
思路,所以我破VB程序基本用这个断点,当然你可以用其它的断点,只要能找到关键,任何断点都是用意义的
。 关于VB的程序,注册没有提示的二个办法: 第一(提示错误):用GetVBRes来替换里面的提示串,一般是以‘111111’,‘222222’之类的替换 因为:VB,用的字来存放提示还有加了点东东,我们用的工具一般是字节分析。换成‘22222’之类的就是字节
了,用静态分析,就有你该的串了。GetVBRes(网上很多,自己下吧) 第二(没有提示):用vbde这个工具(不知道,有没有用过DEDE,是一样思路),主要是找出破解的按钮窗口
的位置,来进行跟踪。 先给出修改能正确反编译VB程序的W32DASM的地址: ====================== offsets 0x16B6C-0x16B6D
修改机器码为: 98 F4 ======================
VB程序的跟踪断点: ============ MultiByteToWideChar, rtcR8ValFromBstr, WideCharToMultiByte, __vbaStrCmp __vbaStrComp __vbaStrCopy __vbaStrMove __vbaVarTstNe rtcBeep rtcGetPresentDate (时间API) rtcMsgBox =========
时间限制断点: ================ CompareFileTime GetLocalTime GetSystemTime GetTimeZoneInformation msvcrt.diffTime() msvcrt.Time() ================ VB断点查找方法
1,VB6.0编写,OD载入程序调出注册窗口,alt+e调出可执行模块窗口找到X:\WINDOWS\system32\MSVBVM60.DLL 双击,在ctrl+n调出窗口找到,名称XXXXXXE区段=ENGINE 导出__vbaVarMove双击来到下面地址(可以直接在命
令行 bp __vbaVarMove) 回到程序注册窗口点注册被拦断在刚才下断的地址,断后在ctrl+F9,F8回 2,OD载入程序,命令行下断点。 bp rtcMsgBox 堆栈友好提示 确定注册失败按钮返回。接着向上找出点注册按钮执行的代码第一句,可以吗?当然行,根据我们知道程序员
写一个事件执行的代码是如这种, 各种语言都差不多。 3,OD载入程序,命令行下断点。 bp rtcMsgBox 任意填入伪注册码 9999999999999999999 确定后中断 堆栈友好提示 确定注册失败按钮返回。 W32Dasm反汇编程序,Shiht+F12 4,VB中的messagebox是一个消息框,汇编中用rtcMsgBox下断点.用olldbg载入程序,Alt+e,在可执行文件模块中
找到Msvbvm60.dll,双击它, 在代码窗
口点右键-搜索-当前模块中的名称中的rtcMsgBox函数,双击它,在6A362F29 55 PUSH EBP这一句双击下
断点,关掉多余的窗口,只留下 cpu调试主窗口,F9运行程序,点?号按钮,随便输入987654321后,回车后立即中断,然后Ctrt+f9执行到返回地址,
因为这是msvbvm60的领空, 我们要回到程序领空.秘密记事本弹出message错误提示信息,点确定,向上看 ,再按F8就回到 5,为Microsoft Visual Basic 6.0。先用SmartCheck找到程序比较注册码点, 6,用vb常用比较断点 vbastrcmp vbastrcomp vbavartsteq 在od中设断点找注册码 7,用Od载入程序,运行,填入上面的注册码和顺序号。在Od中下断点,Alt+E,双击Msvbvm60运行库,右键-搜
索当前模块中的名称,找到Vbastrcmp,双击下断点。 -------------------------- 注意:VB程序仍然可以使用普通API函数,只要函数“最终”CALL了这个函数 上面的断点对应VB6程序,如果是VB5程序则将msvbvm60改成msvbvm50即可
★注意:上面所列函数末尾有带“A”的,有带“W”的,有不带后缀的;一般说来,如果函数同时可以有后缀
也可以没有后缀(形如:MessageBox(A/W)), 则不带后缀的表示16位的函数(MessageBox),带后缀的
(MessageBoxA、MessageBoxW)表示32位的函数;通常优先使用带后缀(A或W)的断点,带A后缀的一般用于
WIN9X系统, 而带W后缀的一般用于NT系统;如果函数没有任何后缀,则表示这是个通用的跨平台的API函数。
功能限制拦截断点: bp EnableMenuItem 禁止或允许菜单项 bp EnableWindow 禁止或允许窗口
拦截时间: bp GetLocalTime 获取本地时间 bp GetSystemTime 获取系统时间 bp GetFileTime 获取文件时间 bp GetTickCount 获得自系统成功启动以来所经历的毫秒数 bp GetCurrentTime 获取当前时间(16位) bp SetTimer 创建定时器 bp TimerProc 定时器超时回调函数 GetDlgItemInt 得指定输入框整数值 GetDlgItemText 得指定输入框输入字符串 GetDlgItemTextA 得指定输入框输入字符串