od内存od窗口介绍 里面的 “类型”的这个选项的 映像和私有 有什么不同

[原创]OD修改内存数据
对于逆向开发来说OD、IDA的使用必须很熟练。之前看过各种病毒脱壳的视频,觉得搞病毒脱壳比较无趣,现在迫于内核逆向调试,才需要深入学习一下。小弟刚入门,各路大神请勿扔砖。
no picture you say a j8!首先,我们需要来熟悉一下OD的界面。
基本指令介绍:
F3 加载可执行文件
F4 程序执行到光标处
F9 运行到中断处
Ctrl+F2 重新载入
Ctrl+F9 执行到函数返回处
Ctrl+g &输入16进制地址。快速定位。
OK。基本介绍到这里。小弟一直觉得学习这东西,逢山开路,用到的时候再来学习,一下子灌输太多,接受不了。写个小例子来玩玩。
#include&Windows.h&
void main()
MessageBox(NULL,"hello World!","abc",MB_OK);
上面的程序运行的时候会弹出一个对话框:
现在我们要通过OD来将标题abc修改为crack
1.打开OD f3载入exe文件
2.一路F8步过,找到真正的入口call.从下图可以看出,程序在013A177A弹出对话框,
013A177A & &E8
test212.__tmainCRTStartup
由函数名称也可以看出来,此时是C运行时启动函数调用我们的程序代码。这些细节不是这里要讲的。
3。在013A177A
处F2下断点,Ctrl+F2重新载入。F9执行到断点处。F7步入。又是一路F8步过。在013A194A处,再次弹出对话框。
4.在013A194A处F2下断,Ctrl+F2重新载入exe.F9到该地方,F7步入。F8步过,就可以发现MessageBox函数的调用了。
5.看到abc的地址 为013A574C.在数据窗口ctrl+g,输入该地址,找到abc
6.双击hex数据中 61项,即可修改数据。注意取消“保持大小”选项,同时在ASCII输入crack 在HEX输入框要补充00
表示字符串的结束。这里暂不考虑发生溢出的情况。
7.OK搞定。点击,即可以看到标题已经被修改,表示内存数据修改成功。如下图所示。
8.当然,我们这么修改只是修改了内存中的数据。实际的可执行文件还没有发生修改。像脱壳一样,我们需要把内存中的文件给dump出来,然后修正映像大小,修正指针偏移。这在接下来小弟再整理成文档。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。【求助】一个关于内存映像的小问题 - 看雪安全论坛
『软件调试逆向』 [综合性论坛]本版讨论的主题包括:调试逆向、系统底层、商业保护、虚拟机保护、.NET平台等安全相关的话题。
该主题: "【求助】一个关于内存映像的小问题" 因在一定的时间里没有任何回复而自动关闭。如果您还对该主题感兴趣或者想参与对此主题的讨论,请您重新发表一篇相关的新主题。
注册日期: May 2014
现金: 150 Kx
获感谢文章数:0获会员感谢数:0
, 23:15:36
已解答: 【求助】一个关于内存映像的小问题
请问在OD中查看到内存映像的一个区段无属主,类型为Priv&,但是程序会往里面写数据,也有跳转跳入去执行代码,这是一个什么样的区段呢?
最佳答案 - 作者:
无属主仅表示该区域不是映像文件或文件映射的段,这种段一般是堆、VirtualAlloc申请的、线程栈的区域。
注册日期: Apr 2011
现金: 155 Kx
致谢数: 71
获感谢文章数:30获会员感谢数:97
, 00:08:32
无属主仅表示该区域不是映像文件或文件映射的段,这种段一般是堆、VirtualAlloc申请的、线程栈的区域。
注册日期: May 2014
现金: 150 Kx
获感谢文章数:0获会员感谢数:0
, 00:39:42
最初由 bxc发布
无属主仅表示该区域不是映像文件或文件映射的段,这种段一般是堆、VirtualAlloc申请的、线程栈的区域。...
那么请问有可能在堆中执行一段代码么?前几天也碰到了这样一个问题,是一个call之后才出现的区段,按您这么说的话确实就很可能是堆栈区段了,那么这样的程序有没有可能是在call里面将一段原本加密或者存放成了数据的代码放在了堆中然后跳转过去执行呢?现在想想这种可能蛮大的。但是这个程序的关键call就在这个堆的可执行代码中,没法进行直接的爆破,这样的程序是不是只能找到存放代码数据的地方直接二进制修改、或者追码或注册机了呢?
还有就是想问一下同样是上面提到的那个程序,有人提出的破解方法是将线程内的代码提取到线程外去执行,请问这是什么意思?
注册日期: Feb 2005
现金: 111 Kx
获感谢文章数:0获会员感谢数:0
, 00:52:27
VirtualAlloc一块可以读写可以执行的内存块,是很常见的
注册日期: Apr 2011
现金: 155 Kx
致谢数: 71
获感谢文章数:30获会员感谢数:97
, 01:25:45
最初由 debaucher发布
那么请问有可能在堆中执行一段代码么?前几天也碰到了这样一个问题,是一个call之后才出现的区段,按您这么说的话确实就很可能是堆栈区段了,那么这样的程序有没有可能是在call里面将一段原本加密或者存放成了数据的代码放在了堆中然后跳转过去执行呢?现在想想这种可能蛮大的。但是这个程序的关键call就在这个...
如果在创建堆(HeapCreate)时启用了HEAP_CREATE_ENABLE_EXECUTE标志,则可以在堆中执行代码。
另外堆是堆,栈是栈,两者不是一个东西。一般说的堆栈是指的栈。
但是就算该区域不能执行代码的话,也可以使用VirtualProtect函数修改内存页的属性。
注册日期: Jul 2007
现金: 203 Kx
获感谢文章数:0获会员感谢数:0
, 14:52:41
最初由 bxc发布
参考MSDN:/en-us/library/aa366599(VS.85).aspx&(&/en-us/library/aa366599(VS.85).aspx&)
如果在创建堆(HeapCreate...
遇到了和楼主一样的问题,关键代码在一个无属主区段,想把这段代码提取出来在自己的程序中调用,bxc大神给个思路
注册日期: Apr 2011
现金: 155 Kx
致谢数: 71
获感谢文章数:30获会员感谢数:97
, 14:57:32
最初由 fands发布
遇到了和楼主一样的问题,关键代码在一个无属主区段,想把这段代码提取出来在自己的程序中调用,bxc大神给个思路
一般无属主的内存块里的代码都不会有重定位的,直接copy出来即可。
但是需要处理一些call和jmp,因为这种地方的代码很有可能是shellcode(不知道这样说合不合适)。
call(E8)的偏移都是临时计算的。毕竟call&dword&ptr需要一个绝对地址,而绝对地址一般又需要一个重定位。
注册日期: Jul 2007
现金: 203 Kx
获感谢文章数:0获会员感谢数:0
, 10:54:49
最初由 bxc发布
一般无属主的内存块里的代码都不会有重定位的,直接copy出来即可。
但是需要处理一些call和jmp,因为这种地方的代码很有可能是shellcode(不知道这样说合不合适)。
call(E8)的偏移都是临时计算的。毕竟call&dword&ptr需要一个绝对地址,而绝对地址一般又需要一个重定位。
不是shellcode,是一段加密算法
这段代码本身没有重定位功能,call、jump地址大部分都是直接地址(如)
我猜测执行流程应该是这样:读取EXE中加密压缩存放的数据,经过解压解密重定位,放入新申请的堆中,最后跳过去执行
提取的常规方法是copy,只是具体到这个例子有个小问题:od不能正确反汇编,也就是说代码中加入了花指令(猜的,我对花指令不了解)这种情况下直接copy有没有问题?
注册日期: Apr 2011
现金: 155 Kx
致谢数: 71
获感谢文章数:30获会员感谢数:97
, 12:36:29
最初由 fands发布
不是shellcode,是一段加密算法
这段代码本身没有重定位功能,call、jump地址大部分都是直接地址(如)
我猜测执行流程应该是这样:读取EXE中加密压缩存放的数据,经过解压解密重定位,放入新申请的堆中,最后跳过去执行
提取的常规方法是copy,只是具体到这个例子有个小...
OD的复制就是2进制复制,跟花指令无关。花指令是干扰反汇编器的。
注册日期: May 2014
现金: 150 Kx
获感谢文章数:0获会员感谢数:0
, 14:52:57
最初由 bxc发布
OD的复制就是2进制复制,跟花指令无关。花指令是干扰反汇编器的。...
刚刚成功搞定了这个程序,但是还是碰到了一个不懂的问题,请问下这样分配出来的堆区域属性为RW,是不是只是对这一个分配函数以及后面紧跟着往里面释放代码的地方可写呢?因为我开始尝试着在最后一个关键call之前用SMC补丁,但是提示的是od无法处理的异常,应该是无法写入的问题,所以最后我是在这块堆区刚刚分配好并且让程序往里面添加了代码之后还没返回之前就使用SMC最后才成功的。请问这块堆是不是并非全局可写的?
注册日期: Apr 2011
现金: 155 Kx
致谢数: 71
获感谢文章数:30获会员感谢数:97
, 14:55:50
最初由 debaucher发布
刚刚成功搞定了这个程序,但是还是碰到了一个不懂的问题,请问下这样分配出来的堆区域属性为RW,是不是只是对这一个分配函数以及后面紧跟着往里面释放代码的地方可写呢?因为我开始尝试着在最后一个关键call之前用SMC补丁,但是提示的是od无法处理的异常,应该是无法写入的问题,所以最后我是在这块堆区刚刚分配...
虚拟地址空间是进程私有的,你不管在哪里申请的内存块。
就算是在别的进程里用VirtualAllocEx申请。如果是可写的,那在哪里都是可以写入的。
注册日期: Jul 2007
现金: 203 Kx
获感谢文章数:0获会员感谢数:0
, 09:36:31
最初由 bxc发布
OD的复制就是2进制复制,跟花指令无关。花指令是干扰反汇编器的。
我以前的做法是复制反汇编代码,然后masm重新汇编
直接复制二进制,重定位问题怎么解决?
注册日期: Apr 2011
现金: 155 Kx
致谢数: 71
获感谢文章数:30获会员感谢数:97
, 11:46:58
最初由 fands发布
我以前的做法是复制反汇编代码,然后masm重新汇编
直接复制二进制,重定位问题怎么解决?
一般重定位只会在映像文件里出现。其他地方不会有的。。
注册日期: Jul 2007
现金: 203 Kx
获感谢文章数:0获会员感谢数:0
, 15:10:43
最初由 bxc发布
一般重定位只会在映像文件里出现。其他地方不会有的。。
你说的映像是指内存还是磁盘
内存映像必然存在重定位问题
磁盘映像无法直接复制,要经过一堆处理,因为最终运行的代码是动态生成的,更麻烦了
注册日期: Apr 2011
现金: 155 Kx
致谢数: 71
获感谢文章数:30获会员感谢数:97
, 15:18:41
最初由 fands发布
你说的映像是指内存还是磁盘
内存映像必然存在重定位问题
磁盘映像无法直接复制,要经过一堆处理,因为最终运行的代码是动态生成的,更麻烦了
我说的映像就是指一段内存是从PE文件里映射来的。。。
就是说内存属性是MEM_IMAGE。
该主题: "【求助】一个关于内存映像的小问题" 因在一定的时间里没有任何回复而自动关闭。如果您还对该主题感兴趣或者想参与对此主题的讨论,请您重新发表一篇相关的新主题。
您不可以发表主题
您不可以回复帖子
您不可以上传附件
您不可以编辑自己的帖子
论坛论坛启用
用户控制面板
会员在线状态
『看雪众测/众包』
『Android 安全』
『Android 开发』
『iOS安全』
『求助问答』
『经典问答』
『资料导航』
『软件调试逆向』
『密码学』
『编程技术』
『C32Asm』
『MDebug』
『安全工具开发』
『加壳与脱壳』
『CrackMe&ReverseMe』
『资源下载』
『WEB安全』
『漏洞分析』
『外文翻译』
『招聘专区』
『职业生涯』
『15PB培训』
『麦洛克菲培训』
『茶余饭后』
『安全资讯』
『论坛活动』
6)PEDIY Crackme竞赛2009
7)看雪十周年专版
8)腾讯公司2010软件安全竞赛
9)2011 Exploit Me竞赛
『图书项目版』
《加密与解密(第三版)》
《C++反汇编与逆向分析技术揭秘》
《Android软件安全与逆向分析》
『论坛版务』
所有时间均为北京时间, 现在的时间是 .
&&& 看雪学院()
| 提供带宽资源
|&微信公众帐号:od内存窗口 里面的 “类型”的这个选项的 映像和私有
有什么不同,该如何处理 - Windows当前位置:& &&&od内存窗口 里面的 “类型”的这个选项的 映像和私od内存窗口 里面的 “类型”的这个选项的 映像和私有
有什么不同,该如何处理&&网友分享于:&&浏览:0次od内存窗口 里面的 “类型”的这个选项的 映像和私有
有什么不同
od内存窗口&里面的&“类型”的这个选项的&映像和私有&&有什么不同&
私有&是什么意思??
[img=/forum.php?mod=attachment&aid=MTU0OTM4fDRlNDkzZTUyfDEzNTQ1OTczMjh8MjI1MzgzfDE3NTA1Mw%3D%3D&noupdate=yes][/img]------解决方案--------------------映像,是对应文件里的内容在内存里的吧。
私有,这块内存不能被其它进程访问。
下面是&Sysinternal&组件里&VMMap&帮助里的解释,OD&的帮助里应该也有吧。
[bold]Image[/bold]
The&memory&represents&an&executable&file&such&as&a&.exe&or&.dll&and&has&been&loaded&into&a&process&by&the&image&loader.&It&does&not&include&images&mapped&as&data&files,&which&would&be&included&in&teh&Mapped&File&memory&type.&Image&mappings&can&include&shareable&memory&like&code.&When&data&regions,&like&initialized&data,&is&modified,&additional&private&memory&is&created&in&the&process.&The&Details&column&shows&the&file's&path.
[bold]Private[/bold]
Private&memory&is&memory&allocated&by&VirtualAlloc&and&not&suballocated&either&by&the&Heap&Manager&or&the&.NET&run&time.&It&cannot&be&shared&with&other&processes,&is&charged&against&the&system&commit&limit,&and&typically&contains&application&data.&------解决方案--------------------映射是部分的内存应该是有文件对应的,也就是将文件映射到内存中,比如CreateFile-&CreateFileMapping-&MapViewOfFile,这只是一个举例不一定贴切。文件装载到内存中,装载器会按照PE文件的节区将文件装载映射到内存中。
而私有部分应该是进程在运行过程中动态申请的内存,比如VirtualAllocEx之类的函数,这部分是申请单堆空间,而这部分是进程动态申请的,没有文件与之对应。
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有【求助】一个关于内存映像的小问题 - 看雪安全论坛
『软件调试逆向』 [综合性论坛]本版讨论的主题包括:调试逆向、系统底层、商业保护、虚拟机保护、.NET平台等安全相关的话题。
该主题: "【求助】一个关于内存映像的小问题" 因在一定的时间里没有任何回复而自动关闭。如果您还对该主题感兴趣或者想参与对此主题的讨论,请您重新发表一篇相关的新主题。
注册日期: May 2014
现金: 150 Kx
获感谢文章数:0获会员感谢数:0
, 23:15:36
已解答: 【求助】一个关于内存映像的小问题
请问在OD中查看到内存映像的一个区段无属主,类型为Priv&,但是程序会往里面写数据,也有跳转跳入去执行代码,这是一个什么样的区段呢?
最佳答案 - 作者:
无属主仅表示该区域不是映像文件或文件映射的段,这种段一般是堆、VirtualAlloc申请的、线程栈的区域。
注册日期: Apr 2011
现金: 155 Kx
致谢数: 71
获感谢文章数:30获会员感谢数:97
, 00:08:32
无属主仅表示该区域不是映像文件或文件映射的段,这种段一般是堆、VirtualAlloc申请的、线程栈的区域。
注册日期: May 2014
现金: 150 Kx
获感谢文章数:0获会员感谢数:0
, 00:39:42
最初由 bxc发布
无属主仅表示该区域不是映像文件或文件映射的段,这种段一般是堆、VirtualAlloc申请的、线程栈的区域。...
那么请问有可能在堆中执行一段代码么?前几天也碰到了这样一个问题,是一个call之后才出现的区段,按您这么说的话确实就很可能是堆栈区段了,那么这样的程序有没有可能是在call里面将一段原本加密或者存放成了数据的代码放在了堆中然后跳转过去执行呢?现在想想这种可能蛮大的。但是这个程序的关键call就在这个堆的可执行代码中,没法进行直接的爆破,这样的程序是不是只能找到存放代码数据的地方直接二进制修改、或者追码或注册机了呢?
还有就是想问一下同样是上面提到的那个程序,有人提出的破解方法是将线程内的代码提取到线程外去执行,请问这是什么意思?
注册日期: Feb 2005
现金: 111 Kx
获感谢文章数:0获会员感谢数:0
, 00:52:27
VirtualAlloc一块可以读写可以执行的内存块,是很常见的
注册日期: Apr 2011
现金: 155 Kx
致谢数: 71
获感谢文章数:30获会员感谢数:97
, 01:25:45
最初由 debaucher发布
那么请问有可能在堆中执行一段代码么?前几天也碰到了这样一个问题,是一个call之后才出现的区段,按您这么说的话确实就很可能是堆栈区段了,那么这样的程序有没有可能是在call里面将一段原本加密或者存放成了数据的代码放在了堆中然后跳转过去执行呢?现在想想这种可能蛮大的。但是这个程序的关键call就在这个...
如果在创建堆(HeapCreate)时启用了HEAP_CREATE_ENABLE_EXECUTE标志,则可以在堆中执行代码。
另外堆是堆,栈是栈,两者不是一个东西。一般说的堆栈是指的栈。
但是就算该区域不能执行代码的话,也可以使用VirtualProtect函数修改内存页的属性。
注册日期: Jul 2007
现金: 203 Kx
获感谢文章数:0获会员感谢数:0
, 14:52:41
最初由 bxc发布
参考MSDN:/en-us/library/aa366599(VS.85).aspx&(&/en-us/library/aa366599(VS.85).aspx&)
如果在创建堆(HeapCreate...
遇到了和楼主一样的问题,关键代码在一个无属主区段,想把这段代码提取出来在自己的程序中调用,bxc大神给个思路
注册日期: Apr 2011
现金: 155 Kx
致谢数: 71
获感谢文章数:30获会员感谢数:97
, 14:57:32
最初由 fands发布
遇到了和楼主一样的问题,关键代码在一个无属主区段,想把这段代码提取出来在自己的程序中调用,bxc大神给个思路
一般无属主的内存块里的代码都不会有重定位的,直接copy出来即可。
但是需要处理一些call和jmp,因为这种地方的代码很有可能是shellcode(不知道这样说合不合适)。
call(E8)的偏移都是临时计算的。毕竟call&dword&ptr需要一个绝对地址,而绝对地址一般又需要一个重定位。
注册日期: Jul 2007
现金: 203 Kx
获感谢文章数:0获会员感谢数:0
, 10:54:49
最初由 bxc发布
一般无属主的内存块里的代码都不会有重定位的,直接copy出来即可。
但是需要处理一些call和jmp,因为这种地方的代码很有可能是shellcode(不知道这样说合不合适)。
call(E8)的偏移都是临时计算的。毕竟call&dword&ptr需要一个绝对地址,而绝对地址一般又需要一个重定位。
不是shellcode,是一段加密算法
这段代码本身没有重定位功能,call、jump地址大部分都是直接地址(如)
我猜测执行流程应该是这样:读取EXE中加密压缩存放的数据,经过解压解密重定位,放入新申请的堆中,最后跳过去执行
提取的常规方法是copy,只是具体到这个例子有个小问题:od不能正确反汇编,也就是说代码中加入了花指令(猜的,我对花指令不了解)这种情况下直接copy有没有问题?
注册日期: Apr 2011
现金: 155 Kx
致谢数: 71
获感谢文章数:30获会员感谢数:97
, 12:36:29
最初由 fands发布
不是shellcode,是一段加密算法
这段代码本身没有重定位功能,call、jump地址大部分都是直接地址(如)
我猜测执行流程应该是这样:读取EXE中加密压缩存放的数据,经过解压解密重定位,放入新申请的堆中,最后跳过去执行
提取的常规方法是copy,只是具体到这个例子有个小...
OD的复制就是2进制复制,跟花指令无关。花指令是干扰反汇编器的。
注册日期: May 2014
现金: 150 Kx
获感谢文章数:0获会员感谢数:0
, 14:52:57
最初由 bxc发布
OD的复制就是2进制复制,跟花指令无关。花指令是干扰反汇编器的。...
刚刚成功搞定了这个程序,但是还是碰到了一个不懂的问题,请问下这样分配出来的堆区域属性为RW,是不是只是对这一个分配函数以及后面紧跟着往里面释放代码的地方可写呢?因为我开始尝试着在最后一个关键call之前用SMC补丁,但是提示的是od无法处理的异常,应该是无法写入的问题,所以最后我是在这块堆区刚刚分配好并且让程序往里面添加了代码之后还没返回之前就使用SMC最后才成功的。请问这块堆是不是并非全局可写的?
注册日期: Apr 2011
现金: 155 Kx
致谢数: 71
获感谢文章数:30获会员感谢数:97
, 14:55:50
最初由 debaucher发布
刚刚成功搞定了这个程序,但是还是碰到了一个不懂的问题,请问下这样分配出来的堆区域属性为RW,是不是只是对这一个分配函数以及后面紧跟着往里面释放代码的地方可写呢?因为我开始尝试着在最后一个关键call之前用SMC补丁,但是提示的是od无法处理的异常,应该是无法写入的问题,所以最后我是在这块堆区刚刚分配...
虚拟地址空间是进程私有的,你不管在哪里申请的内存块。
就算是在别的进程里用VirtualAllocEx申请。如果是可写的,那在哪里都是可以写入的。
注册日期: Jul 2007
现金: 203 Kx
获感谢文章数:0获会员感谢数:0
, 09:36:31
最初由 bxc发布
OD的复制就是2进制复制,跟花指令无关。花指令是干扰反汇编器的。
我以前的做法是复制反汇编代码,然后masm重新汇编
直接复制二进制,重定位问题怎么解决?
注册日期: Apr 2011
现金: 155 Kx
致谢数: 71
获感谢文章数:30获会员感谢数:97
, 11:46:58
最初由 fands发布
我以前的做法是复制反汇编代码,然后masm重新汇编
直接复制二进制,重定位问题怎么解决?
一般重定位只会在映像文件里出现。其他地方不会有的。。
注册日期: Jul 2007
现金: 203 Kx
获感谢文章数:0获会员感谢数:0
, 15:10:43
最初由 bxc发布
一般重定位只会在映像文件里出现。其他地方不会有的。。
你说的映像是指内存还是磁盘
内存映像必然存在重定位问题
磁盘映像无法直接复制,要经过一堆处理,因为最终运行的代码是动态生成的,更麻烦了
注册日期: Apr 2011
现金: 155 Kx
致谢数: 71
获感谢文章数:30获会员感谢数:97
, 15:18:41
最初由 fands发布
你说的映像是指内存还是磁盘
内存映像必然存在重定位问题
磁盘映像无法直接复制,要经过一堆处理,因为最终运行的代码是动态生成的,更麻烦了
我说的映像就是指一段内存是从PE文件里映射来的。。。
就是说内存属性是MEM_IMAGE。
该主题: "【求助】一个关于内存映像的小问题" 因在一定的时间里没有任何回复而自动关闭。如果您还对该主题感兴趣或者想参与对此主题的讨论,请您重新发表一篇相关的新主题。
您不可以发表主题
您不可以回复帖子
您不可以上传附件
您不可以编辑自己的帖子
论坛论坛启用
用户控制面板
会员在线状态
『看雪众测/众包』
『Android 安全』
『Android 开发』
『iOS安全』
『求助问答』
『经典问答』
『资料导航』
『软件调试逆向』
『密码学』
『编程技术』
『C32Asm』
『MDebug』
『安全工具开发』
『加壳与脱壳』
『CrackMe&ReverseMe』
『资源下载』
『WEB安全』
『漏洞分析』
『外文翻译』
『招聘专区』
『职业生涯』
『15PB培训』
『麦洛克菲培训』
『茶余饭后』
『安全资讯』
『论坛活动』
6)PEDIY Crackme竞赛2009
7)看雪十周年专版
8)腾讯公司2010软件安全竞赛
9)2011 Exploit Me竞赛
『图书项目版』
《加密与解密(第三版)》
《C++反汇编与逆向分析技术揭秘》
《Android软件安全与逆向分析》
『论坛版务』
所有时间均为北京时间, 现在的时间是 .
&&& 看雪学院()
| 提供带宽资源
|&微信公众帐号:OD文字详解
OD文字详解
OD文字详解&Draren总结的ollydbg&v1.09d&中文版使用说明&一点一滴的积累,也就会了.&&之所以选择ollydbg&&1.我的os是winXP,无法使用trw2000,而softice装了多次均未成功,还蓝屏死机多次.郁闷.&&2.友好的gui界面,不像softice.可以边干活边听歌,不像softice,把整个os都挂起了.多用两次,连时间都不知道了.&&3.强大的内存查看功能,再不用什么-d了,而且跳转方便,爽!一目了然.&&4.强大的右键菜单功能&&ollydbg的界面:&&菜单:&&文件:&&1.其中包括该菜单的下部有上次打开的纪录,该纪录保存有上次未清除的断点.&&2.附加.对付那些Anti-Debug程序.先运行程序,再运行od,文件--&附加.&&查看:&&1.执行模块(Alt+E),查看程序使用的动态链接库&&2.查看断点.Alt+B&&调试:&&1.运行(F9)加载程序后,运行!&&2.暂停(F12)&&3.单步进入(F7)遇见CALL进入!进入该子程序.&&4.单步跳过(F8)遇见CALL不进去!&&5.执行到返回(ALT+F9)就是执行到该子程的返回语句&&ollydbg的16进制编辑功能.类似与hiew,hex&workshop&&查看--&文件&&二进制文件编辑功能.查看--&文件,打开的文件是二进制显示.选中要改变的机器指令,空格,修改,右击--&保存.&&ollydbg的四个区域&&左上角是cpu窗口,分别是地址,机器码,汇编代码,注释;注释添加方便,而且还能即时显示函数的调用结果,返回值.&&右上角是寄存器窗口,但不仅仅反映寄存器的状况,还有好多东东;双击即可改变Eflag的值,对于寄存器,指令执行后发生改变的寄存器会用红色显示.&&cpu窗口下面还有一个小窗口,显示当前操作改变的寄存器状态.&不错;&&左下角是内存窗口.可以ascii或者unicode两种方式显示内存信息;&&右下角的是当前堆栈情况,还有注释啊.&&F3选择打开程序.&&使用&&F9执行程序.&&下断点:&&1.对函数下下断点&&在代码区右击--&搜索--&当前模块中的名称(ctrl+N),在跳出来的对话框中选择需要下的断点函数.-&右击-&查找导入参考(enter),按F2下断点.如果有多个地方调用了该函数就这样操作。&&2.在需要的地方下断点&F2&&添加注释:&&在代码区第四列,右击--&注释&&查看内存地址&&右击内存地址列--&前往--&输入要查看的内存地址&&在函数lstrlen的注释的上方,有一个变量string,当执行到该函数的时候,string后面会出现lstrlen函数的参数字符串.在实际使用中一般是输入的字符串.(很好用哦)&&类似的还有lstrcmp,上面有string1,string2能够显示将要比较的两个字符串.&&另外,一般在执行getwindowtext等函数后,右边寄存器列,eax会显示函数的返回值,即取到的内容.同时内存中也会有显示.&&在反汇编中选中一条命令,如果其中有用到内存中的地址,右击--&在转存中跟随--&直接常数&&此时内存地址会显示指令中引用到的内存字符&&拷贝功能十分强大.直接选择要拷贝的内容.右击--&复制--&文件or剪贴板&&ollydbg的条件断点可以按寄存器,存储器,消息(必须是消息的数字,如wm_command就是111)等等设断,非常强大,一旦设了之后记录到文件中,下次restart程序还能用,不用拿笔记,很方便。&&显示跳转路进:&&选项--&调试设置--&cpu页--&显示跳转的方向,显示跳转的路径,如果跳转没有实现则显示灰色路径。在cpu窗口中,机器码的前面显示"&"符号.同时,在cpu窗口下的小缝中会显示跳转路径,从何跳转而来.右击--&前往...一般都是条件跳转,上面的内容就是比较的地方啦。:)&&跟踪功能:&&选项--&调试跟踪--&跟踪:设置运行跟踪的缓存大小.越大越好.&&调试--&打开或清除运行跟踪&&然后我们就可以用CTRL+F11或CTRL+F12开启“跟踪进入”和“&跟踪跳过”了。当我们暂停程序的时候,可以用小键盘上的“+”,“-”,“*”来控制跟踪功能了。&&其中,“跟踪进入”和运行类似,但是记录所有指令以及寄存器变化。并且会自动进入所有的CALL中。&&“&跟踪跳过”和“跟踪进入”类似,但是不进入CALL&&“+”用来显示跟踪缓冲区中的下一条指令&&“-”用来显示跟踪缓冲区中的上一条指令&&“*”用来发返回当前指令&&让OD显示MFC42.DLL中的函数&&打开调试--&选择导入库--&添加--&选择MFC43.LIB加入.重新载入MFC程序,就可以看到call后面的api函数了.&&动态暂停以messagebox为例)&&先运行目标程序,再运行od,选择文件--&附加.在目标程序运行出现对话框时,切换至od,F12暂停.&&字符串参考:&&在汇编代码区,右击--&搜索--&字符参考&&更改二进制文件:&&方法1.查看--&文件,打开文件,找到欲修改的偏移,使用机器码修改,然后右击保存文件.缺点是需要使用其他软件来获取偏移地址.&&方法2.直接在反汇编代码区更改,这时可以使用汇编代码更改,不用记机器码.完了.右击--&复制到可执行文件--&保存文件.很是方便哪!&&关于虚拟地址和偏移地址:&&ollydbg果然强大,太强大了,在欲修改的指令处右击--&复制到可执行文件,弹出窗口中光标所在行即是欲修改的指令所在的偏移地址,右击--&汇编,直接修改汇编指令,不用记机器码,又不用虚拟地址到偏移地址的转换.改完后保存文件.爽丫!&olldbg&下怎么下消息断点?&如在softice&中下&BMSG&0084&WM_DESTROY,在olldbg下该怎么做?&不如下断&SendMessage,PostMessage,程序中的消息不一定都经过消息循环。&Ollydbg下消息断点的一个方法&原文:&SoftIce&can&trace&application&messages.&And&Olly?&&by&FuZzYBiT&SoftIce&can&trace&application&messages.&And&Olly?&And&so&does&OllyDbg.&That’s&a&very&“hidden&feature”.&I&guess&it&is&sooo&useful.&1.&Open&program&2.&Names&window&[CTRL+N&in&CPU&Window]&3.&Find&User32.TranslateMessage&API&4.&right&click/FindReferences&5.&conditional&breakpoint&[SHIFT+F4]&6.&expression:&MSG&7.&Log&function&arguments:&Always&If&you&cannot&find&it,&try&right&click&SEARCH&FOR-&&ALL&INTERMODULAR&CALLS.&But&if&I&want&to&trap&a&specific&message&like&WM_COMMAND?&To&Log&Only&WM_COMMAND&Do&it&in&this&fashion:&1.&Open&program&2.&Names&window&[CTRL+N&in&CPU&Window]&3.&Find&User32.TranslateMessage&API&4.&right&click/FindReferences&5.&conditional&breakpoint&[SHIFT+F4]&6.&Condtion&box:&MSG==WM_COMMAND&7.&Log&function&arguments:&On&Condition&If&you&can’t&find&User32.TranslateMessage&API,&do&the&same&as&above.&翻译:&SoftIce&能够跟踪应用程序的消息,那么OllyDbg呢?&by&FuZzYBiT&OllyDbg也是可以的,那是一个非常"隐蔽的功能"。它是如此的有用。&1.&打开程序&2.&名字窗口[&在CPU窗口中按CTRL+N&]&3.&查找&User32.TranslateMessage&API&4.&右击/FindReferences(查找参考)&5.&下条件断点&[SHIFT+F4]&6.&表达式:&MSG&7.&记录函数参数:永远&如果你不能找到它,试试右击鼠标,然后搜索全部模块中的名称。&但是如果我想要捕捉一个特定的消息如WM_COMMAND呢?&只对WM_COMMAND记录&用这个方法做:&1.&打开一个程序&2.&名字窗口[&在CPU窗口中按CTRL+N&]&3.&查找&User32.TranslateMessage&API&4.&右击/FindReferences(查找参考)&5.&下条件断点&[SHIFT+F4]&6.&条件框:MSG==WM_COMMAND&7.&记录函数参数:&条件满足时&如果你不能找到User32.TranslateMessage&API,象上面那样做。&以下命令适用于&OllyDbg&的命令行插件&Cmdline.dll(显示于程序的插件菜单中)&聆风听雨整理&===============================================================&命令行插件支持的命令&CALC&判断表达式&WATCH&添加监视表达式&AT&在指定地址进行反汇编&FOLLOW&跟随命令&ORIG&反汇编于&EIP&DUMP&在指定地址进行转存&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&步过&Call&TI&跟踪进入直到地址&TO&跟踪步过直到地址&TC&跟踪进入直到满足条件&TOC&跟踪步过直到满足条件&TR&运行直到返回&TU&运行直到用户代码&LOG&查看记录窗口&MOD&查看模块窗口&MEM&查看内存窗口&CPU&查看&CPU&窗口&CS&查看&Call&堆栈&BRK&查看断点窗口&OPT&打开选项设置窗口&EXIT&退出&OllyDbg&QUIT&退出&OllyDbg&OPEN&打开一个可执行文件&CLOSE&关闭可执行文件&RST&重新运行当前程序&HELP&查看&API&函数的帮助&OllyDbg应用方法大全--请补充!&所有文章均为散落在DFCG论坛各处或其他网络文集的经典。&雪很冷搜集整理于学习笔记或与朋友讨论之中&Ollydbg&中断方法&Originally&posted&by&dong&at&&10:29&PM:&我问个问题&在od中怎么下断点呢??&现在有的程序一点注册就没反映了&这样的怎么下断点呢??&能介绍下什么情况下什么断点吗?&&在转存中下硬件访问-&Word"断点,下断之后,怎么取消!&&9398944(老菜鸟)&11:09:59&alt+D&按H&然后删除&&这个没有万能的方法,只能视具体情况而定,就我的经验而言:&第一步,反汇编找有用信息,有时候虽然点击注册按钮后,没有任何反映,但软件也许包含了可用的信息,比如“未注册”,“已注册”等等之类的,都可用做断点的。&第二步,如果反汇编也找不到有用信息,如果用OD可以下HMEMECPY断点,在每个调用的函数上下断,虽然这个法子太笨,但我试过,几乎有70%以上的机会可找到断点,找到断点后再慢慢跟吧!这只是个人的看法,关键只要找到断点,有什么办法都无所谓。&在命令行下bpx&hmemcpy断点,然后回车,在每个调用的函数上下断。&有的程序甚至无法用API中断,可以在OD载入程序后上下翻动反汇编窗口查看字符串参考下断,在反汇编窗口里直接找到的,右键查找那里找不到&转发Ollydbg&中断方法浅探-各种断点常识知识&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+N&&2.&在命令行窗口中输入BPX&API函数名或者BP&API函数名&后回车。这时出现了所有调用这个函数的地址的窗口,在这个窗口中可以看到调用这个API函数的地址已改变了颜色。说明下好了断点。&&说明一下:BPX一般中断在程序调用API的地址处。BP会中断在API的写入地址处。二这有所不同,根据需要选择。&&优点:这种方法下的断点是针对每一个API函数的,所以具有明确的目的。&&缺点:关键的API函数不容易找到。所以有时下的断点没有作用。&&第三&内存断点(跟踪关键数据的断点)&&Ollydbg中的内存断点相当于TRW中的bpm&断点。&&下断点的方法是:在程序运行中断时选择界面中的转存窗口,用光标选择内存中的一段关键数据(颜色会改变),然后右击鼠标出现功能菜单。选择〔断点〕项,其中有二个选择〔内存访问〕和〔内存写入〕。&&〔内存访问〕断点是程序运行时要调用被选择的内存数据时就会被Ollydbg中断,根据这个特点在破解跟踪时只要在关键数据内存中下中断就可以知道程序在什么地方和什么时候用到了跟踪的数据。对于一些复杂算法和流程变态的算法跟踪有很大的帮助。从破解上讲,一个注册码的生成一定是由一些关键数据或者原始数据计算来的。所以在内存中一定要用到这些关键数据。那么〔内存访问〕断点就是最好的中断方法。&&〔内存写入〕断点是程序运行时向被选择的内存地址写入数据时就会被Ollydbg中断。根据这个特点在破解时可以跟踪一个关键数据是什么时候生成的,生成的代码段在那个地方。所以一个关键的数据如果不知道他的由来就可以用〔内存访问〕断点查找计算的核心。&&内存中断的下断点还有另外的一种方法:程序运行时如果知道关键的数据,比如我们输入的试验码、程序生成的序列号等。这时在内存中一定存在这些数据。用Alt+M打开内存窗口,在这个窗口中搜索知道的关键数据。用光标选择这些数据同样下内存中断,这种方法更容易找的关键的数据。&&优点:断点是直接面向关键数据的,所以比较容易到核心部分。&&缺点:内存断点重新运行后会消失,干扰比较多。&&第四&硬件断点(跟踪关键标志的断点)&&硬件断点是Olldbg所特有的断点,他不会因为重新运行就销毁,只要不删除。跟踪这个程序时就有效。但他在98系统下会不起作用。&&硬件断点是根据关键标志回逆到关键代码的好方法。下中断的方法和内存断点的方法相同,有三个方式〔硬件访问〕、〔硬件写入〕、〔硬件执行〕。一般用前2个。他也同样有内存断点的特性,所以可以用内存断点的地方也可以用硬件断点。这里介绍利用他来跟踪注册标志的使用方法,一般软件的注册都用到了标志比较。即在内存地址中有一个标志,在判断是不是注册时比较标志的值。不同的值表示不同的注册状态。这个标志的地址一般比较固定。根据这个特点可以下硬件断点来跟踪标志位是什么地方被标志的。&&方法:在转存窗口中选择到标志存放的内存地址处,然后选择标志值。下〔硬件写入〕中断(根据标志的字节下不同的长度)。重新运行程序你会发现Ollydbg会不断的中断在这个标志的内存地址处。在功能菜单的〔调试〕选项下选择〔硬件断点〕就打开了硬件断点的窗口,在这个窗口中选择〔跟踪〕,这时转存窗口就会来到被下中断的内存地址处。运行程序跟踪内存地址中的值就会知道被赋标志的代码,跟踪到计算的核心。〔硬件访问〕的使用可以知道程序在运行时多少地方用到了这个注册标志。对于破解复杂效验的程序十分的有效。&&直接在命令栏里下bh&****硬件断
发表评论:
TA的最新馆藏

我要回帖

更多关于 od绕过验证窗口 的文章

 

随机推荐