OD设置断点函数
od 加密函数断点

od 加密函数断点
OD加密函数断点是指在使用OD(OllyDbg)调试工具时,针对
特定的加密函数设置断点以便分析其加密算法和过程。
在进行OD加
密函数断点时,我们通常需要考虑以下几个方面:
1. 加密函数的位置,首先需要在程序中定位到需要分析的加密
函数的位置,可以通过静态分析或动态调试的方式找到函数的入口点。
2. 加密算法分析,一旦设置了断点,当程序执行到加密函数时,我们可以逐步跟踪代码的执行过程,观察寄存器和内存的变化,以
便分析加密算法的具体实现方式。
3. 输入输出数据分析,通过断点可以观察到加密函数的输入和
输出数据,我们可以分析这些数据的结构和变化规律,以便理解加
密过程中数据的转换和变换。
4. 调试技巧,在设置加密函数断点时,需要灵活运用OD调试
工具提供的功能,比如条件断点、内存监视等,以便更好地分析加
密函数的执行过程。
总之,在进行OD加密函数断点时,我们需要综合运用静态分析和动态调试的方法,结合加密算法分析和输入输出数据分析,以便全面深入地理解加密函数的实现原理和运行过程。
这样能够帮助我们更好地理解程序的加密机制,为安全分析和逆向工程提供有力支持。
experiment 用OD下消息断点, 捕获按钮操作.

experiment 用OD下消息断点, 捕获按钮操作.实验目的: 想直接拦截按钮操作的消息处理, 分析按钮操作的逻辑.实验程序: <<使用OllyDbg从零开始Cracking 第一章翻译>> 中附带的一个CrackMe.使用OD加载目标程序, 当程序运行起来后, 暂停OD经过实验, 点击菜单会触发主窗体WM_COMMAND消息. 如果直接捕获弹出的注册窗口的WM_COMMAND, 捕获不到.准备捕获主窗体的WM_COMMAND消息, 找到菜单生成注册窗体的处理.找到注册窗体的创建函数传入的注册窗口处理过程,从而找到注册窗体的所有消息处理实现逻辑.点击菜单属于WM_COMMAND, 按照消息名称排序, 好找一些.下完消息断电后, 确认一下是否消息断点已下.F9, 让程序跑起来. 点击注册菜单. 程序被断在WM_COMMAND消息断点处.[cpp] view plaincopy00401128 > $ C8 000000 ENTER 0,0 ; 主窗体消息断点WM_COMMAND 0040112C . 56 PUSH ESI 0040112D . 57 PUSH EDI 0040112E . 53 PUSH EBX0040112F . 837D 0C 02 CMP DWORD PTRSS:[EBP+C],2 00401133 . 74 5E JE SHORT CRACKME.00401193 00401135 . 817D 0C 040200>CMP DWORD PTR SS:[EBP+C],204 0040113C . 74 65 JE SHORT CRACKME.004011A3F8往下走,找到创建注册窗体的代码.[cpp] view plaincopy00401209 > 6A 00PUSH 0 ; /lParam = NULL 0040120B . 68 53124000 PUSH CRACKME.00401253 ; |DlgProc = CRACKME.00401253 00401210 . FF75 08PUSH DWORD PTR SS:[EBP+8] ;|hOwner 00401213 . 68 15214000 PUSH CRACKME.00402115 ; |pTemplate = "DLG_REGIS" 00401218 . FF35 CA204000 PUSH DWORD PTR DS:[4020CA] ; |hInst = 00400000 0040121E . E8 7D020000 CALL<JMP.&USER32.DialogBoxParamA> ;\DialogBoxParamA CRACKME.00401253 是注册窗体的消息处理过程. 转到那看看.[cpp] view plaincopy00401253/. C8 000000 ENTER0,0 ; 注册窗体消息处理过程00401257 |. 53 PUSH EBX 00401258 |. 56 PUSH ESI 00401259 |.57 PUSH EDI 0040125A |. 817D 0C 100100>CMP DWORD PTRSS:[EBP+C],110 ; WM_INITDIALOG 00401261 |. 74 34 JE SHORTCRACKME.00401297 00401263 |. 817D 0C110100>CMP DWORD PTRSS:[EBP+C],111 ; WM_COMMAND 0040126A |. 74 35 JE SHORT CRACKME.004012A1 0040126C |. 837D 0C 10CMP DWORD PTR SS:[EBP+C],10 ;WM_CLOSE 00401270 |. 0F84 81000000 JE CRACKME.004012F7 00401276 |. 817D 0C010200>CMP DWORD PTRSS:[EBP+C],201 ; WM_LBUTTONDOWN 0040127D |. 74 0C JE SHORT CRACKME.0040128B 0040127F |. B8 00000000 MOV EAX,0 00401284 |> 5F POP EDI 00401285 |. 5E POP ESI 00401286 |.5B POP EBX 00401287 |. C9LEAVE 00401288 |. C2 1000 RETN 10可以看到CRACKME.004012A1 是注册窗体WM_COMMAND命令处理函数.注册窗体一共处理了4种消息(窗体初始化, 退出, 确定, 命令处理)在地址0040126A 上回车, 去看看按钮处理逻辑. [cpp] view plaincopy004012A1 |> 33C0/XOR EAX,EAX ; 注册窗体: 按钮处理逻辑004012A3 |. 817D 10EB0300>|CMP DWORD PTR SS:[EBP+10],3EB 004012AA |. 74 4B |JE SHORT CRACKME.004012F7 004012AC |. 817D 10EA0300>|CMP DWORD PTR SS:[EBP+10],3EA 004012B3 |. 75 3B |JNZ SHORT CRACKME.004012F0 004012B5 |. 6A 0B|PUSH 0B ; /Count = B (11.) 004012B7 |. 68 8E214000 |PUSH CRACKME.0040218E ; |Buffer = CRACKME.0040218E 004012BC |. 68 E8030000|PUSH 3E8 ;|ControlID = 3E8 (1000.) 004012C1 |. FF75 08|PUSH DWORD PTR SS:[EBP+8] ; |hWnd 004012C4 |. E8 07020000 |CALL<JMP.&USER32.GetDlgItemTextA> ;\GetDlgItemTextA 004012C9 |. 83F8 01 |CMP EAX,1 004012CC |. C745 10 EB0300>|MOV DWORD PTR SS:[EBP+10],3EB 004012D3 |.^72 CC \JB SHORT CRACKME.004012A1 004012D5 |. 6A 0B PUSH 0B ; /Count = B (11.) 004012D7 |. 68 7E214000 PUSH CRACKME.0040217E ; |Buffer = CRACKME.0040217E 004012DC |. 68 E9030000 PUSH 3E9 ;|ControlID = 3E9 (1001.) 004012E1 |. FF75 08PUSH DWORD PTR SS:[EBP+8] ;|hWnd 004012E4 |. E8 E7010000 CALL<JMP.&USER32.GetDlgItemTextA> ;\GetDlgItemTextA 004012E9 |. B8 01000000 MOV EAX,1 004012EE |. EB 07 JMP SHORT CRACKME.004012F7 004012F0 |> B8 00000000 MOV EAX,0 004012F5 |.^EB 8D JMP SHORT CRACKME.00401284 004012F7 |> 50 PUSH EAX ; /Result004012F8 |. FF75 08 PUSH DWORD PTR SS:[EBP+8] ; |hWnd 004012FB |. E8 B2010000 CALL<JMP.&USER32.EndDialog> ;\EndDialog 00401300 |. B8 01000000 MOV EAX,1 00401305 \.^E9 7AFFFFFF JMPCRACKME.00401284 如果F2 在地址004012A1 上下普通代码断点, 已经断住了注册窗体的WM_COMMAND逻辑为了只断住按钮(OK, Quit)的处理, 将断点下在004012B5 F9, 让程序跑起来. 填入Name, SN, 按下确定按钮可以看出, 注册窗口消息处理只是得到用户输入[cpp] view plaincopy004012A1 |> 33C0/XOR EAX,EAX ; 注册窗体: 按钮处理逻辑004012A3 |. 817D 10EB0300>|CMP DWORD PTR SS:[EBP+10],3EB 004012AA |. 74 4B |JE SHORT CRACKME.004012F7 004012AC |. 817D 10EA0300>|CMP DWORD PTR SS:[EBP+10],3EA 004012B3 |. 75 3B |JNZ SHORT CRACKME.004012F0 004012B5 |. 6A 0B|PUSH 0B ; /Count =B (11.) 004012B7 |. 68 8E214000 |PUSH CRACKME.0040218E ; |name 004012BC |. 68 E8030000 |PUSH3E8 ; |ControlID = 3E8 (1000.) 004012C1 |. FF75 08 |PUSH DWORD PTR SS:[EBP+8] ; |hWnd 004012C4 |. E8 07020000 |CALL<JMP.&USER32.GetDlgItemTextA> ;\GetDlgItemTextA 004012C9 |. 83F8 01 |CMP EAX,1 004012CC |. C745 10 EB0300>|MOV DWORD PTR SS:[EBP+10],3EB 004012D3 |.^72 CC \JB SHORT CRACKME.004012A1 004012D5 |. 6A 0B PUSH 0B ; /Count = B (11.) 004012D7 |. 68 7E214000 PUSH CRACKME.0040217E ; |pwd 004012DC |. 68 E9030000 PUSH3E9 ; |ControlID =3E9 (1001.) 004012E1 |. FF75 08 PUSH DWORD PTR SS:[EBP+8] ; |hWnd 004012E4 |. E8 E7010000 CALL<JMP.&USER32.GetDlgItemTextA> ;\GetDlgItemTextA 004012E9 |. B8 01000000 MOVEAX,1 004012EE |. EB 07 JMP SHORT CRACKME.004012F7 004012F0 |> B8 00000000 MOV EAX,0 004012F5 |.^EB 8D JMP SHORT CRACKME.00401284 004012F7 |> 50 PUSH EAX ; /Result 004012F8 |. FF75 08 PUSH DWORD PTR SS:[EBP+8] ; |hWnd 004012FB |. E8 B2010000 CALL<JMP.&USER32.EndDialog> ;\EndDialog 00401300 |. B8 01000000 MOV EAX,1 00401305 \.^E9 7AFFFFFF JMPCRACKME.00401284 从00401305继续往下走, 进行数据有效性的校验.总结:通过消息断点, 可以从父窗口WMCOMMAND操作(菜单点击, 按钮点击)得到子窗体的消息处理过程.。
od反编译工具用法

od反编译工具用法反编译是指将已经编译过的程序文件转换为高级源代码的过程。
反编译工具可以帮助开发者了解和学习其他人编写的程序,对于调试和修复软件错误也很有帮助。
OD (OllyDbg) 是一种广泛使用的反汇编调试工具,本文将介绍如何使用OD进行反编译。
OD的基本使用方法如下:2.打开需要反编译的程序:在OD主界面上点击“文件”菜单,然后选择“打开”选项,浏览并选择需要反编译的程序文件,并点击“打开”按钮。
3.反汇编代码窗口:OD会在主界面上打开一个反汇编代码窗口,这个窗口将显示程序的机器码和相应的汇编指令。
4.反编译代码:可以通过“右键单击”汇编指令,然后选择“跟随”选项来进行反编译。
OD会尝试寻找并显示反编译后的代码。
5.查看变量和数据:在OD的主界面上,有一个“数据窗口”,可以显示程序中的变量和内存数据。
在反汇编代码窗口中选择一些指令,然后在数据窗口中查看它所使用的变量和数据的值。
6.设置断点:在OD中设置断点可以帮助我们在特定指令上暂停执行程序,以便查看程序状态和调试错误。
在反汇编代码窗口中选择一些指令,然后点击“上方”菜单中的“条件断点”选项,OD会弹出一个对话框,可以在其中设置断点条件。
7.运行程序:在OD的主界面上,有一个“执行”菜单,可以用于运行程序。
可以通过点击“执行”菜单中的“运行”选项来启动程序的执行。
当程序遇到断点时,会停止执行并进入调试模式。
8.调试程序:在OD的调试模式下,可以通过一些常用的调试功能来调试程序。
例如,可以通过“单步执行”菜单选项逐行执行程序代码,通过“寄存器窗口”查看和修改寄存器值,通过“内存窗口”查看和修改内存数据等。
需要注意的是,使用OD进行反编译需要一定的汇编和调试知识。
同时,反编译软件可能涉及违法行为,如未获得程序开发者的许可而进行反编译。
请确保遵守法律规定,并只在合法和正当的情况下使用反编译工具。
在使用OD进行反编译时,可以参考以下一些技巧和注意事项:1.了解汇编语言与机器码的对应关系:汇编语言是将机器码转换为可读性更高的指令的语言,因此了解汇编语言的基本语法和常见指令有助于理解和分析程序。
OD条件与消息断点的设置方法

OD条件与消息断点的设置方法一、条件断点:使用方法(如):在当前行按[Shift+F2]键->条件断点(这个不太好用,因为程序BUG偶尔失效)。
在当前行按[Shift+F4]键->条件记录断点(只要设置上条件语句和按什么条件生效就可以了)。
条件语句(如):EAX == 00401000 ; 当EAX的值为00401000时。
[EAX] == 05201314 ; 比如EAX的值为00401000,而地址00401000处所指向的值等于5201314时,即EAX的值表示为指针。
[[EAX]] == 05201314 ; 比如EAX的值为00401000,地址00401000处所指向的值为00402000,而地址00402000处所指向的值等于5201314时,即EAX的值表示为指针的指针。
EAX == 05201314 && EBX == 0x05201314 ; 当EAX的值等于5201314(十进制),并且EBX的值等于5201314(十六进制)时。
[EBP+8] == WM_COMMAND ;[[EBP+8]] == 05201314 ;byte ptr[EAX] == 'y' ;[EAX] == "coderui" ; 比如EAX的值为00401000,而地址00401000处所指向的字符串为“coderui”时,即EAX的值表示为指针。
[[EAX+4]+4] == WM_LBUTTONUP ;以上写法的意思就是命令行里面直接输入,下面我写下具体的范例,还傻乎乎的用[Shift+F2]键,上面是网上的说的模糊。
比如要断点0x3565656 这个代码地址。
那么他的条件可以写在后面。
如下所示。
bp 0x3565656 [EBP+8] == WM_COMMAND// 当 [EBP+8] 等于 WM_COMMAND的时候断下来bp 0x3565656 [[EAX+4]+4] == WM_LBUTTONUP//当[[EAX+4]+4] == WM_LBUTTONUP的时候断下来bp 0x3565656 [[EBP+8]] == 05201314//当 [[EBP+8]] == 05201314 的时候断下来所谓心跳包的过滤液是如此。
OD(OllyDbg)使用教程

程序运行之后,在系统 空间里会触发一个INT3
文件入口点
程序的Winmain()函数入口点, 但一般都是在文件入口点
设置完成之后,载入文件,出现如图所示:
虚拟地址
机器码:
CPU执行的机器 代码
汇编指令: 和机器码对应的
程序代码
3、单步跟踪
调试器一个最基本功能就是动态跟踪,OllyDbg单步跟踪功能键:
目的:可以让软件运行的时候停在设断点的地方,以方便 反复跟踪调试
当关闭程序时,OllyDbg会将设置好的断点保存在UDD文件 中,下次运行时还有效。
5、调试分析:
调试分析其实就是分析程序代码的意义,如图:
阅读这些代码时,首先要搞清楚各API函数的定义,还弄明白 那些汇编程序代码的具体含义
6、保存修改后的文件
这里又回到traceme的领空了我们可以按altb调出断点窗口然后将getdlgitemtexta的断点改为已禁止202137chenli18接下来就在004011ae下一个断点因为这里有调用到getdlgitemtexta这个函数然后就要开始分析这些汇编代码的意义所以我们在使用这个软件的时候一定要明白这些代码的含义现在我们只是先认识一下这个软件的作用所以就不为大家做出分析接下来就是修改代码了
注意:此时的领空是模块USER32,领空就是在
某一时刻,CPU的CS:EIP所指向代码的所有者
领空
接着,在USER32的领空中,在77D6B05E代码行按下F2, 下断点,然后按F9运行,然后键入下图所示:
点check,可以看到程序被OD截停在下断点的地方,如图所示: 接着,按Alt+F9,返回到用户代码,可以回到:
图中红色的就是我们修改的地方,然后就点右键,复制到 文件,就可以保存当前的修改
od常用短点大全

od常用短点大全拦截窗口: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 WideCharT oMultiByte 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/GetWindowT extA(W)/GetWindowTextLengthA(W) (断输入框)4、字符串法—插件/搜索所有参考文本Delphi/BC++语言破解1、DEDE结合PE Explorer找按妞事件2、Point-H法3、bp GetDlgItem/GetWindowT extA(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、猜。
OD使用说明书

一、下边是几个通用的按钮1、:重新运行程序(重复上次运行的程序,快捷键:ctrl+F2)。
2、:关闭当前正在运行的程序。
(快捷键:Alt+F2)3、:运行程序,(快捷键:F9)4、:暂停执行,(快捷键:F12)5、:单步步入,意思就是:当遇到call时,就进入call的内部(快捷键:F7)6、:单步步过,意思就是:当遇到call时,就跳过call得内部,直接运行完call,然后执行下条语句。
(快捷键:F8)7、:跟踪步入,意思跟F9基本一样,步过就是遇到call就进入,这个按钮几乎不用(快捷键:ctrl+f11)8、:跟踪步过,同上,区别是遇到call就跳过了,同样也几乎不用(快捷键:ctrl+f12)9、:执行到返回,意思是执行某段代码后返回执行前的位置,(是在设置断点后才用的,)(快捷键:ctrl+f9)10、:是跳转到某一内存地址,在弹出的对话框里输入地址,然后就跳到你想要看的地址,但程序没有被执行,只是用来查看的功能。
二、后便的蓝色按钮(功能不是很经常用)1、:是用来查看记录的,(程序被载入后,调用的系统DLL和一些函数)2、:是用来显示模块窗口,告诉我们有多少个模块,和模块在机器的位置3、:是用来显示内存窗口的,一般是在脱壳的时候用到的内存脱壳方法,在这里设断点,4、:是用来显示线程的,5、:是用来显示句柄的,6、:是用来显示当前程序运行的位置的,点击后就会跑到程序当前的位置,(功能就是:当你查看其他模块的代码,然后点一下,就会跑回原来的地方,)前边的黑色就代表了程序已经运行到0100645C了,每次点击就会跑到当前运行的位置。
这个按钮主要为了提供用户方便,快速的回到当前位置。
7、:这个是用来查看当前有多少个断点,在这里也可以取消断点。
(这个按钮和C经常会用到)三、在反汇编窗口的右键功能经常用到的功能有(一级目录):二进制、汇编、断点、数据窗口跟随、查找、复制到可执行文件、ultra string reference.1、二进制:主要用来复制语句的,同时也可以清空选中的语句(即在2级目录里的NOP)2、汇编:主要用来修改语句的3、断点:主要用来设置断点,一般情况都是在比较有用的信息上设断点,(如:发现某个关键的ascii值时,一般都是在后边的注释里,能够看到的)4、数据窗口跟随:一般情况都是在2级目录里选第二个,然后你就会发现在数据窗口发现你想要的数据了。
OD使用方法简单说明

Ollydbg中断方法浅探Ollydbg是一个新的32位的汇编层调试软件。
适应于windows98、me、2000、xp和2003操作系统。
由于他具有图形窗口界面,所以操作方便、直观,是cracker的好工具。
由于Ollydbg没有了TRW2000的万能断点,所以许多的新手感觉到用Ollydbg断点不好找。
现在我来的说说Ollydbg下中断的几种方法。
本人是个菜鸟,水平有限,可能不能完整的写出来,也可能存在错误。
请大家指正。
我所表述的是Ollydbg v1.09d中文版,其他版本和英文版下自己参考。
第一寻常断点Ollydbg中一般下中断的方法,就是在程序的地址处用鼠标选择这一行。
然后按F2键,这时被选择的那一行的地址会变成别的颜色,就表示这个地址处下了中断。
然后运行程序时只有到这个地址处就会被Ollydbg 中断。
这个方法用的比较多,所以把他称作寻常断点。
如果有命令行插件,就可以在命令窗口中输入BPX xxxxxxxx 下断点。
优点:只要自己怀疑是重要的代码处都可以下这种下断点,不受条件的限制,所以方便实用。
缺点:如果不知道代码功能下断点具有盲目性。
第二 API断点Ollydbg中一般下API中断的方法,有二种。
1. 在代码窗口中点鼠标右键,出现功能菜单。
在[搜索]选择项下有〔当前模块的名称〕和〔全部模块的名称〕俩项,选择其中的一项就打开了程序调用API的窗口,在这个窗口中选择你要跟踪的API函数名。
双击这个函数就能到程序的调用地址处。
然后用F2下中断。
也可以在API窗口中选择需要跟踪的函数点鼠标右键出现功能菜单,选择〔在每个参考设置断点〕。
同样下了断点。
快捷方式:Ctrl+N2. 在命令行窗口中输入BPX API函数名或者BP API函数名后回车。
这时出现了所有调用这个函数的地址的窗口,在这个窗口中可以看到调用这个API函数的地址已改变了颜色。
说明下好了断点。
说明一下:BPX一般中断在程序调用API的地址处。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
常用断点拦截窗口:bp CreateWindow 创建窗口bp CreateWindowEx(A) 创建窗口bp ShowWindow 显示窗口bp UpdateWindow 更新窗口bp GetWindowText(A) 获取窗口文本bp ShellExecuteA获取网站转向地址拦截消息框: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 __vbaVarTstNe 比较变量是否不相等bp __vbaVarTstEq 比较变量是否相等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出册码出来了。
bpx regqueryvalueexa do "d esp->8"(trw)vbaVarTstEq 判断是否注册的函数(0042932F 66898580FEFFFF mov word ptr [ebp+FFFFFE80], ax改为0042932F 66898580FEFFFF mov word ptr [ebp+FFFFFE80], bx)时间常用中断GetSystemTimeGetLocalTimeGetTickCountvb:rtcGetPresentDate //取得当前日期杀窗常用中断Lockmytask (win9x专用)bp ExitProcess 退出进程DestroyWindowmouse_event (鼠标中断)postquitmessage (Cracking足彩xp,很有用^_^)vb:_rtcMsgBoxini文件内容常用中断GetPrivateProfileStringAGetPrivateProfileProfileIntkey文件:getprivateprofileintReadFileCreateFileA注册表常用中断RegQueryvalueARegQueryvalueExA狗加密中断BPIO -h 278 RBPIO -h 378 R其它常用函数断点CreateFileA (读狗驱动程序),DeviceIOControl,FreeEnvironmentStringsA (对付HASP非常有效).Prestochangoselector (16-bit HASP's), '7242' 查找字符串(对付圣天诺).具体含义参考下面的范例。
光盘破解中断16:getvolumeinformationgetdrivetypeint 2fh (dos)32:GetDriveTypeAGetFullPathNameAGetWindowsDirectoryA读磁盘中断GETLASTERROR 返回扩充出错代码限制中断EnableMenuItem 允许、禁止或变灰指定的菜单条目EnableWindow 允许或禁止鼠标和键盘控制指定窗口和条目(禁止时菜单变灰)不知道软盘中断是什么了?还有其它特殊中断,不知道其他朋友可否说一下了?如ockmytask and mouse_event,这些就不是api32函数?win9x 与win2k进行破解,以上中断有部分已经不能用了?不知道在win2k上,以上常用中断函数是什么了?也就是问密码、时间、窗口、ini、key、注册表、加密狗、光盘、软盘、限制等!了解常用的中断,对破解分析可以做到事半功倍!请大家说一下!还有如何破解了某个软件时,一重启就打回原形?不知道下什么中断了?可以分为三种情况:1.比较可能在注册表中2.比较在特殊文件(*.key *.ini *.dat等)3.比较在程序中,没有任何错误提示或者反译也找不到明显字符(这个就是我想问的)还有一个是最难的,就是去掉水印!也可以三种情况:A.水印是位图文件(bitblt,creatBITMAP等位图函数)B.水印是明显字符(反译分析)C.水印不是明显字符(如:This a demo!它只是显示在另一个制作文件上,可是*.htm *.exe等) C.才是最难搞,也是很多人想知道的!包括我在内。
不知道高手们有何提示了?广告条:可以分两种情况:A.从创建窗口进手,可以用到movewindow或者其它窗口函数!B.从位图进手,也可以用到bitblt或者其它位图函数!最后可以借助一些现有工具(如:api27,vwindset,freespy之类的工具)那要看是在哪作的标记,通常是在注册表中留下信息!在softice中就要用bpx regqueryvalueexa do "d esp->8"来中断看看,在trw中要用bpx regqueryvalueexa do "d*(esp+8)"来中断看看。
还有的是在本目录下留下注册信息,常见的有.dat .ini .dll等等,我是用bpx readfile来中断的,还有的是在windows目录下留下注册信息。
你可以借助专用的工具帮助你查看,入filemon等!vb:1、__vbaV arTstNe //比较两个变量是否不相等2、rtcR8ValFromBstr //把字符串转换成浮点数3、rtcMsgBox 显示一信息对话框4、rtcBeep //让扬声器叫唤5、rtcGetPresentDate //取得当前日期针对字串:__vbaStrComp__vbaStrCmp__vbaStrCompVar__vbaStrLike__vbaStrTextComp__vbaStrTextLike针对变量:__vbaVarCompEq__vbaVarCompLe__vbaVarCompLt__vbaVarCompGe__vbaVarCompGt__vbaVarCompNe常用断点(2)THROWVB DLL还调用了oleauto32.dll中的部分函数。
oleauto32.dll是个通用的proxy/stub DLL,其每个函数的原型在<oleauto.h>中定义,并在MSDN中有详细描述。
这也有助于理解VB DLL 中的函数的作用。
举例:LEA EAX, [EBP-58]PUSH EAXCALL [MSVBVM60!__vbaI4Var]执行call之前敲dd eax+8,得到的值为3;执行完call之后,eax = 3从而可知__vbaI4Var的作用是将一个VARIANT转换为I4(即一个长整数)。
__vbaVarTstNe似乎是用来进行自校验的,正常情况下返回值为0。
已知适用的软件有:网络三国智能机器人、音乐贺卡厂。
当这两个软件被脱壳后都回出错,网络三国智能机器人会产生非法*作,而音乐贺卡厂会告诉你是非法拷贝,通过修改__vbaVarTstNe的返回值都可让它们正常运行。