- 浏览: 5173606 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
silence19841230:
先拿走看看
SpringBoot2.0开发WebSocket应用完整示例 -
wallimn:
masuweng 写道发下源码下载地址吧!三个相关文件打了个包 ...
SpringBoot2.0开发WebSocket应用完整示例 -
masuweng:
发下源码下载地址吧!
SpringBoot2.0开发WebSocket应用完整示例 -
masuweng:
SpringBoot2.0开发WebSocket应用完整示例 -
wallimn:
水淼火 写道你好,我使用以后,图标不显示,应该怎么引用呢,谢谢 ...
前端框架iviewui使用示例之菜单+多Tab页布局
<title></title>
/***********本人原创,保留所有权利,欢迎转载,转载请保留本人信息*************/
作者:wallimn
电邮:wallimn@sohu.com
博客:http://blog.csdn.net/wallimn
网络硬盘:http://wallimn.ys168.com
作者:wallimn
电邮:wallimn@sohu.com
博客:http://blog.csdn.net/wallimn
时间:2008-11-18
/***********本人原创,保留所有权利,欢迎转载,转载请保留本人信息*************/
引言
本文主要讲解使用OllyDBG(也有叫OllyICE,本文以下简称OD),启用(使能、Enable)应用程序中不可用(禁用、Disable)的菜单。以一个自已编写的例子(VC6.0)为主线,详细讲解OD的功能、用法,使您快速掌握强大的时下最为流行的逆向工程工具---OD。我尽量把过程写得详细一点,希望能给学习OD或者逆向工程的人以帮助。
逆向工程是几种知识的综合运用,包括Windows高级编程知识(最好能会一种高级语言,如VC)、Windows系统API函数、Windows32位汇编知识、PE文件结构,以及逆向工程工具:OllyDBG。阅读本文不要求您具备以上全部知识,但具备以上知识,才可以真正会用逆向工程技术解决实际问题;不然可能只会照搬照抄。
学习逆向工程,最好的资料就是看雪论坛出的《加密与解密》了,看雪论坛的离线知识库也非常的好。查API函数,可以使用微软的MSDN。如果有兴趣和精力,最好再看一下《Windows环境下32位汇编程序设计》,这本书对于汇编、Windows程序设计相关知识的讲解非常精彩,即使不打算学习汇编,看看也会有帮助。
一、基础知识及例子
在VC中,禁止应用程序的菜单有三种方式,一是直接使用API函数:EnableMenuItem;二是使用ON_UPDATE_COMMAND_UI消息映射(MFC经过一系列的封装,最后还是调用的API函数EnableMenuItem);三是在资源中直接对菜单的属性进行设置。本文的例子程序中包括了使用上述三种方法禁用的三个菜单。程序运行界面如图1所示。前两种技术,因为都会调用EnableMenuItem,所以我们就在这个函数上做文章。对于第三种情况,一般可以用exeScope或者ResHacker制定,实际应用中,这种情况也不是很多,就不介绍了。
在VC中,禁止应用程序的菜单有三种方式,一是直接使用API函数:EnableMenuItem;二是使用ON_UPDATE_COMMAND_UI消息映射(MFC经过一系列的封装,最后还是调用的API函数EnableMenuItem);三是在资源中直接对菜单的属性进行设置。本文的例子程序中包括了使用上述三种方法禁用的三个菜单。程序运行界面如图1所示。前两种技术,因为都会调用EnableMenuItem,所以我们就在这个函数上做文章。对于第三种情况,一般可以用exeScope或者ResHacker制定,实际应用中,这种情况也不是很多,就不介绍了。
在实际逆向工程中,对于VC两种连接MFC库的模式:动态链接及静态连接,处理起来有些不一样,下面依次为大家讲解。
另:
VC有两种编译模式,Release为发行模式,生成应用程序小,效率高;而Debug模式为调试模式,包括很多用于调试的代码。使用OD,可以比较一下VC使用Debug模式、Release模式生成的应用程序的反汇编代码,你会发现Debug模式生成的程序有许多用于调试跟踪的垃圾代码,因此应用程序发布一定要使用Release模式。我见过有些软件交付时使用了Debug模式的,相当多的情况是因为作者写了一大堆的代码,最终发布的时候发现Release模式无法正常运行(当然也不排除有些菜鸟不知Release模式),只好使用Debug模式。
另:
Debug模式对于逆向工程操作的时候,由于垃圾代码的存在,无形中会增加一点儿难度。
图1
二、破解
1 静态连接MFC库模式的VC应用程序
先来处理这种热热身,这种是比较容易的。有人把这种容易形容为“秒杀”。运行OD,打开例子程序,界面如图2所示。请注意其中的黄色区域,本文统一称为“命令查看窗口”,此时可以注意到,程序自动定位的例子程序的入口处。窗口内部的右侧,为注释区域,对一些API函数及一些高级程序的运行库函数进行注释。
小技巧:
如何你的程序中没有显示出相应的注释,或者注释显示为序号,可以选择“调试”菜单->“选择导入库”,将对应的动态库的导入库导入(.lib文件)
图2
在“命令提示窗口”,点击鼠标右键,在弹出的上下文菜单中选择“查找”->“当前模块中的名称”,会弹出“名称窗口”,在“名称窗口”中键入“EnableMenuItem”,键入前几个字母就会定位到USER32.EnableMenuItem这个函数,USER32表示动态库的名称,即系统的核心库之一USER32.dll。用鼠标高亮度选中这一行,按“回车”键。会出现图3所示窗口。
图3
该窗口提示程序中有两处引用EnableMenuItem开禁用菜单项。使用鼠标双击第一处(另一处即为另一种禁止菜单方式的执行代码,这里略过不讲),会切换到“命令查看窗口”,代码如下图4所示。
图4
小技巧:
可以使用Ctrl+Tab键,迅速切换到上一个窗口。
可以使用Exescope或者Rescrack等工具查看一下应用程序中菜单的ID,发现看到的ItemID=32774,正好是对应着使用直接使用API函数对应的菜单项,而Flags
=
MF_BYCOMMAND|3|MF_STRING这句呢,可以直观的看出这命令的作用,其中3,是MF_DISABLED与MF_GRAYED的结合,也就是不可用并且灰化。再查一下API的文档,MF_ENABLE对应着数值0,所示只要把push
3这句改成push
0就可以了,也可以把这四句改成相应字节数的nop命令(使用也不做的汇编命令,对应的汇编代码为90,这是个很有用很有用的命令)。我们以第一种方法来修改,在push 3(在这个命令文字区域上,不同位置双击会有不同的效果),上双击鼠标左键在弹出的对话框中,将3改为0。选择主菜单“调试”->“运行”(或者直接使用F9功能键),看一下应用程序的菜单是不是已经可用了。
此时的修改,仅是在内存中的修改,退出OD后,应用程序的菜单依然是不可用的,那么如何保存到应用程序中呢?方法很简单,高亮度选中等修改的代码,在“命令查看窗口”中点右键,在弹出菜单中选择“复制到可执行文件”,在子菜单中选“选择”或者“所有修改”都可以,意思大家应该猜得出吧。在弹出的窗口中点右键,在弹出菜单中选择“保存文件”,就将修改保存到了应用程序中,以后运行程序,菜单总是可用的了。
2、动态链接MFC库模式发布的VC应用程序
在这种情况下,使用上面的方法,“查找”->“当前模块中的名称”,你在惊奇的发现,没有EnableMenuItem。这是因为此时EnableMenuItem函数被封装在MFC的动态连接库中(mfc42.dll或者mfc42d.dll),也就是说,当前应用程序没有直接调用,所以在“当前模块中的名称”中找不到。
这时就要用到“命令窗口”了,使用方法,在如图5所示的“命令窗口”(位于主程序的左下角)中输入:“bp
EnableMenuItem”(不带引号),然后回车。这个意思就是说,当应用程序调用EnableEmnuItem这个函数的时候中断程序。
图5
提示:“
命令窗口”很有用,可以在帮助中看看。破解注册码时会用到bp
GetWindowText或bp GetDlgItemText等,也可以使用命令窗口来下消息断点。。。。。
点击工具栏上的运行按钮(或者主菜单“调试”->“运行”),启动程序,程序会中断在程序入口处(也即应用程序代码的最开始执行处),再点一次运行,会发程序停在USER32模块,如下图6所示(注意看标题)。
图6
这时怎么办呢?注意看,主菜单“调试”菜单中有个“执行到返回”子菜单,热键是Ctrl+F9,这时多按几次这个组合热键,注意观察主程序的标题栏,当出现Test.exe模块(主程序模块)的时候停止(此时地址偏移量一般为00开头),如下图7所示高量度行所示。查看上面一句call语句,可以发现,在应用程序主模块中,调用的是CMenu::EnableMenuItem,最终这个函数调用API函数:EnableMenuItem。
提示: 由此我们推断,静态链接MFC的应用程序,执行效率应该好一点,但会大一点,当应用程序只有一个或很少的模块的时候,可以选用静态链接的方式;当应用程序模块很多,即有很多动态库,若使用静态链接,同样的MFC动态库中的代码会被重复多次复制到每个模块中,因此选用动态链接的方式为佳。
提示: 由此我们推断,静态链接MFC的应用程序,执行效率应该好一点,但会大一点,当应用程序只有一个或很少的模块的时候,可以选用静态链接的方式;当应用程序模块很多,即有很多动态库,若使用静态链接,同样的MFC动态库中的代码会被重复多次复制到每个模块中,因此选用动态链接的方式为佳。
图7
向上找一点,又会发现push 3,向前面讲的一样,改成push 0就可以了,然后复制到可执行程序,就可以了。
对于使用ON_UPDATE_COMMAND_UI消息映射禁止菜单的情况,修改办法大致类似,运行应用程序,出现主界面后,点击一下“禁用的菜单”主菜单,OD会中断,然后按几次Ctrl+F9热键,回到主程序模块,此时程序中断处的代码与上面有所不同,如图8所示。
图8
这时注意那个标识的call语句,实际上调用的是:CCmdUI::Enable(FALSE),(可以通过运行程序(按F9),然后在这一行设断点,发现这个函数名字,然后查MSDN看到函数介绍)。前面的那个push
0,就是传递的Enable的参数,所以我们只要把push 0改成push 1就可以了。
三、结束语
这不是一篇高深的文章,只是供爱者学习OD入门之用,希望对朋友们有所帮助。
第一次写教程,不当之处敬请批评指证。由于先抓了图,后来又修改了测试用例,可实际操作的时候,地址偏移量不一定与图中相同。
练习程序请到我的网络硬盘下载:http://wallimn.ys168.com
,交流请到访问我的博客:http://blog.csdn.ne
/wallimn
。
时间:2008-11-18
/***********本人原创,保留所有权利,欢迎转载,转载请保留本人信息*************/
/***********本人原创,保留所有权利,欢迎转载,转载请保留本人信息*************/
作者:wallimn
电邮:wallimn@sohu.com
博客:http://blog.csdn.net/wallimn
网络硬盘:http://wallimn.ys168.com
作者:wallimn
电邮:wallimn@sohu.com
博客:http://blog.csdn.net/wallimn
时间:2008-11-18
/***********本人原创,保留所有权利,欢迎转载,转载请保留本人信息*************/
发表评论
-
Delphi中编程实现TWebBrowser查找及上一个、下一个功能
2016-08-18 13:58 1362代码比较简单,全部内容如下: //1:向下搜索;-1:向上 ... -
OLEDB的Excel的IMEX和HDR是什么意思
2013-11-23 21:15 2129转自:http://blog.csdn.net/baple/a ... -
c#获取应用程序目录
2013-10-23 22:35 1733string str1 =Process.GetCurrent ... -
Visual C# 方案 -> 文本操作快捷键
2013-10-07 22:34 2065转自:http://technet.microsoft.com ... -
Visual Studio 2005快捷键大全
2013-10-07 22:29 1648转自:http://www.cnblogs.com/mekon ... -
C#正则表达式测试小工具
2013-10-04 18:51 4786C#的正则表达式使用比较方便,但复杂的正则表达式还是需要测 ... -
C#正则表达式语法规则详解
2013-10-04 17:26 4054正则表达式通常包含字 ... -
C# WINFORM 捕获全局异常
2013-10-01 11:56 3043using System; using System.Coll ... -
Visual C# 中XML注释的使用(含注释在开发时显示换行)
2013-10-01 11:54 2470在C#智能注释时,常常希望它能在开发时显示为换行,使得提示更加 ... -
DevExpress汉化(WinForm)
2013-09-19 17:27 8310/* *隔壁老王原创,2013-09-21,转载请保留本人信息 ... -
VC中的CImage类
2011-04-17 22:19 8963今天查找如何实现 ... -
VC旋转图片
2011-04-16 16:45 3778转自:http://hi.baidu.com/sweetpig ... -
VC多线程编程(转)
2010-12-22 21:11 3212原文地址:http://www.cnblo ... -
Manifest的问题
2010-05-11 10:08 2308原始连接:http://www.zming ... -
Asp.Net中Word,Excel等office com组件操作权限的问题
2010-05-06 13:57 10212近日在打开原来写的一 ... -
如何注销windows server2003 服务器中的远程连接
2009-12-14 01:29 3813碰到超过远程连接数而无法连接服务器,可以采用如下方法解决 ... -
访问WebBrowser控件中的HTML源码
2009-12-11 22:13 4125为了实现在自己的程序中显示HTML文档,我们一般采用IE(In ... -
Makefile详解(3/3)
2009-12-01 12:32 1549一、函数库文件的成员 一个函数库文件由多个文件组成。你可以以 ... -
Makefile详解(2/3)
2009-12-01 12:29 2227八、目标变量 前面我们所讲的在Makefile中定义的变量都 ... -
Makefile详解(1/3)
2009-12-01 12:27 2212原文地址:http://blog.csdn ...
相关推荐
逆向分析基础 OllyDBG 入门系列(一)-认识OllyDBG
1. **启动OllyDBG**:首先,我们需要启动OllyDBG并加载目标程序。 2. **查看窗口句柄**:在OllyDBG中,点击“查看 -> 窗口”可以显示当前调试的进程中的所有窗口及其句柄。 3. **设置消息断点**:选择目标窗口后,...
本文档主要围绕使用OllyDbg这款强大的动态调试工具进行逆向分析,特别是针对CrackMe类型的练习程序,同时也涉及了加壳判断的初步知识。 一、OllyDbg基础用法 OllyDbg是一款著名的动态调试工具,适用于Windows平台...
GetWindowTextA是一个用于获取窗口标题文本的API函数,通常在需要读取或处理窗口标题的应用程序中使用。通过在该函数上设置断点,可以在程序试图获取窗口标题时暂停执行,从而观察其内部行为。 #### 步骤四:逆向...
OllyDbg是一款广受程序员和逆向工程师喜爱的16位和32位Windows应用程序的调试工具。这款软件以其强大的反汇编能力、直观的界面以及丰富的调试功能而闻名。标题中的“OllyDbg2.1汉化版测试可用版”表明这是针对...
1. 启动调试:通过Ollydbg.exe启动目标程序,进入调试模式。 2. 设置断点:在需要分析的代码行前设置断点,当程序执行到该位置时暂停。 3. 单步执行:F8单步执行,F7进入子函数,F9继续执行,F2删除断点。 4. ...
【安全攻防进阶篇】本篇主要介绍了利用OllyDbg和Cheat Engine这两个工具进行游戏逆向分析,以植物大战僵尸为例,探讨如何实现游戏辅助器的功能,包括修改阳光值和自动拾取阳光。文章首先强调了反对利用技术进行非法...
本文将通过“crackme.exe”这个经典的练习程序,详细介绍如何使用OllyDbg进行反编译和逆向工程。 首先,让我们了解OllyDbg的基本功能。OllyDbg具有直观的用户界面,能够动态地调试正在运行的程序,查看和修改内存、...
OllyDbg 是一款功能强大的逆向分析工具,对于初学者来说,熟悉其快捷键的使用是非常重要的。下面是 OllyDbg 的快捷键大全: 重启和关闭程序 * Ctrl+F2:重启程序,即重新启动被调试程序。如果当前没有调试的程序,...
使用OllyDbg从零开始,全中文,教程所用实战程序均可下载,共58章。这是一部从零开始的,完全可以零基础开始学习,所有的工具以及实战用的应用程序均可以在里边下载到,而且不会失效,建议喜欢的人赶紧下载。
《深入解析Ollydbg:强大的动态调试神器》 在IT行业中,动态调试是软件分析、逆向工程和安全...通过熟练掌握Ollydbg,我们可以更有效地分析和理解那些看似神秘的二进制程序,从而提升我们的技术能力与解决问题的效率。
本文将基于给定的文件信息,深入探讨OllyDBG的汇编功能及其在逆向分析中的应用。 ### 汇编功能在逆向分析中的作用 OllyDBG的汇编功能是其核心特性之一,它允许用户在二进制级别上理解和操控程序。这包括但不限于:...
熟练掌握ollydbg的使用,对于开发者和安全研究人员来说,是深入探究程序内部运作、高效定位问题、优化代码和加强安全防护能力的有力手段。随着计算机安全领域的持续发展,ollydbg作为一款工具,其价值和地位有望...
OllyDbg 的使用可以帮助开发者快速定位程序中的错误、优化程序的性能、逆向工程和分析恶意软件等。 在这篇教程中,我们将详细介绍 OllyDbg 的使用,包括其组件、使用方法和实践操作。 组件 OllyDbg 由多个组件...
逆向调试ollydbg,新手学习,小软件练习学习
在使用OllyDbg进行程序调试和逆向工程时,用户需要有相应的法律意识。调试和分析软件应当在不侵犯软件版权的前提下进行。逆向工程可能涉及法律风险,用户应当确保所进行的操作不违反当地法律法规。 总的来说,...
OllyDbg是一款专门为逆向工程设计使用的调试器,适合动态分析用户态下执行的应用程序。其内置功能强大的具有代码分析功能的反汇编器,据此OllyDbg识别循环、switch控制块和其它主要代码流程结构。能显示API函数名称...
描述中提到,“随便拖拽个应用程序进去(太大型的不保证)”,意味着你可以将任意可执行文件(如.exe或.dll)直接拖入OLLYDBG界面,该工具会自动启动调试会话,显示程序的内存映像和执行流程。需要注意的是,由于...
10. **反混淆技术**:对于加壳或混淆的程序,OllyDbg提供了反混淆工具,如脱壳检测、反跳转技术等,帮助逆向工程师穿透保护层。 11. **动态代码追踪**:OllyDbg可以追踪代码的执行路径,帮助发现隐藏的功能或异常...
OD是一款16位和32位Windows应用程序的调试器,特别适合于逆向工程。它的主要功能包括单步执行代码、设置断点、查看内存、跟踪寄存器变化等,使得我们能够深入理解程序的运行流程。 在逆向实例中,我们使用的文件"TC...