逆向实战第一讲,寻找OllyDbg调试工具的Bug并修复
逆向实战第一讲,寻找OllyDbg调试工具的Bug并修复
首先我们要知道这个OD的Bug是什么. 我们调试一个UNICODE的窗口,看下其窗口过程.
一丶查看OllyDbg 的Bug
1.1spy++查看窗口,确定是一个Unicode窗口
2.使用Olly附加
使用Od附加之后,点击窗口,发现获取的值是错误的.所以判断Od的Bug是针对Unicode窗口,调用了Asi版本的API
3.解决思路
此时我们解决的时候,要Od调Od了. 而出现这个Bug的原因可能是API调用失败,我们发现,它在调用获得类的回调的时候出现错误
所以可以快速定位这个API
GetClassLongA
GetClassLongW
4.定位此位置发先是否是调用错误
此时我们Od调OD,然后定位此API下断点,看看是否调用错误
发先确实是调用A版本的.所以出现错误.
二丶解决OD Bug的两种方式
1.1 API HOOK的方式
首先我们执行到返回,在次API上面我们下HOOK 钩子,跳转到我们的代码执行,然后判断其是否是Unicode窗口还是 Asi窗口,根据不同我们调用不同的函数返回即可.
此方法虽然可以解决但是有点麻烦.所以不采用
1.2 Dll劫持的方式
这个方法可以有效的劫持DLL,然后执行我们的代码
我们可以劫持一下这个DLL
首先我们找到我们的劫持工具
选择它的DLL,然后选择转发函数,而后会生成一个CPP,此时我们只需要写一个DLL,这个DLL的CPP就是这个,和原DLL名字一样
原DLL名字改为 DBGHELPOrg即可.
在代码里面写入我们的代码
1.首先在我们的转发里面定义函数
里面写上我们的代码
2. 在程序加载的时候,启动我们的代码
这里的启动会在load里面启动,所以在load里面写代码就可以了.
思路:
思路:
定位Call调用GetClasslongA的地方,跟进去之后会看到转发的IAT表,把里面的内容改为我们的就可以了.
我们刚才已经定位到了调用GetClassLongA的地方,那么此时我们 F7 进去可以看到转发
我们可以看到IAT表格的位置是 0050D858 ,那么把里面的地址改为我们的地址就可以了
步骤:
1.定义一个指针指向IAT表格
2.修改内存保护属性
3.把IAT表格里面的内容变成我们的函数地址
4.还原内存保护属性.
主要是中间一不,修改IAT表中的地址为我们的地址
现在我们试一试看看是否成功
成功获取.
2.插件修改
对于上面来说有点基础的,细心的应该可以明白,做了这一切其实简单的就是
1. 寻找API位置
2. 跳转的地方下改为我们的函数地址
3.我们的函数地址判断执行.
但是上面说起来还是比较麻烦,我们自己写一个OllyDbg的插件解决这个Bug吧.
首先使我们的插件,
开发插件所必须有的2个导出函数
ODBG_Plugindata 这个函数里面是给插件名称的所以我们需要
ODBG_Plugininit 这个函数是Od启动的时候调用的.(初始化数据)
当然肯定会有释放的,这里不写了.
写插件第一步
建立一个DLL 工程,添加插件自带的头文件
第二步,实现插件的接口
第三步,拷贝我们以前的代码让插件初始化的时候去工作
遇到的问题:
如果提示这个问题,那么编译选项中,链接的时候假如这个 /j即可.
启动OD看看插件是否加载
正常加载没有问题
逆向实战第一讲,寻找OllyDbg调试工具的Bug并修复的更多相关文章
- 逆向课程第二讲,寻找main入口点
逆向课程第二讲,寻找main入口点 一丶识别各个程序的入口点 入门知识,识别各个应用程序的入口点 (举例识别VC 编译器生成,以及VS编译生成的Debug版本以及Release版本) 1.识别VC6. ...
- 逆向知识第一讲,IDA的熟悉使用,以及TEB,PEB结构
逆向知识第一讲,IDA的熟悉使用,以及TEB,PEB结构 一丶熟悉IDA,以及手工制作sig文件. IDA,静态分析工具,网上随便找一个即可下载. 首先,我们写一个可执行EXE,最简单的 使用IDA打 ...
- 逆向知识第一讲,IDA的熟悉使用
逆向知识第一讲,IDA的熟悉使用 一丶熟悉IDA,以及手工制作sig文件. IDA,静态分析工具,网上随便找一个即可下载. 首先,我们写一个可执行EXE,最简单的 使用IDA打开. 1.提示使用什么格 ...
- jquery实战第一讲---概述及其入门实例
就在5月28号周四下午五点的时候,接到xxx姐姐的电话,您是xxx吗?准备一下,周五上午八点半去远洋面试,一路风尘仆仆,颠颠簸簸,由于小编晕车,带着晕晕乎乎的脑子,小编就稀里糊涂的去面试了,温馨提醒, ...
- 32位汇编第一讲x86和8086的区别,以及OllyDbg调试器的使用
32位汇编第一讲x86和8086的区别,以及OllyDbg调试器的使用 一丶32位(x86也称为80386)与8086(16位)汇编的区别 1.寄存器的改变 AX 变为 EAX 可以这样想,16位通 ...
- 逆向实用干货分享,Hook技术第一讲,之Hook Windows API
逆向实用干货分享,Hook技术第一讲,之Hook Windows API 作者:IBinary出处:http://www.cnblogs.com/iBinary/版权所有,欢迎保留原文链接进行转载:) ...
- PC逆向之代码还原技术,第二讲寻找程序入口点
PC逆向之代码还原技术,第二讲寻找程序入口点 一丶简介 程序逆向的时候.我们需要知道程序入口点.动态分析的时候以便于看是什么程序编写的. 比如VC++6.0 我们可以写一个程序测试一下 我们写一段代码 ...
- PC逆向之代码还原技术,第一讲基本数据类型在内存中的表现形式.浮点,指针寻址公式
目录 代码还原技术 一丶简介代码还原 二丶代码还原中的数据类型表现形式 1.整数类型 2.无符号整数 3.有符号整数 4.浮点数数据类型 5.浮点编码 4.Double类型解析. 三丶浮点汇编 1.浮 ...
- GIF Movie Gear逆向实战+注册代码+补丁
GIF Movie Gear逆向实战+注册代码+补丁 准备 我是在windows 8.1 x64上进行的操作.有不足之处,还望大虾指出. 获取资源 网站下载:http://www.gamani.com ...
随机推荐
- Java历程-初学篇 Day05选择结构(2)
一,switch 由于本作者学的是jdk6.0版本,我知道7.0可以使用字符串,但是我就不改了 语法: switch(char类型/int类型){ case 值: //输出 break; ... de ...
- MVC中@RenderBody、@RenderSection、@RenderPage、@Html.RenderPartial、Html.RenderAction的作用和区别
1.@RenderBody() 作用和母版页中的服务器控件类似,当创建基于此布局页面的视图时,视图的内容会和布局页面合并,而新创建视图的内容会通过布局页面的@RenderBody()方法呈现在标签 ...
- MYSQL数据库引擎区别详解
数据库引擎介绍 MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的.要添加一个新的引擎,就必须重新编译MYSQL.在缺省情况下,MYSQL支持三个引擎:ISAM.MYISAM和HEAP.另 ...
- .net Mvc框架原理
.net Mvc框架原理 本文只是简要说明原理,学习后的总结. 1.当一个Http请求发送后会被URLRoutingModule拦截(这时候也就是正式进入管道,下章会讲管道事件) 2.这时根据Isap ...
- dotweb框架之旅 [四] - 常用对象-HttpContext
dotweb属于一个Web框架,希望通过框架行为,帮助开发人员快速构建Web应用,提升开发效率,减少不必要的代码臃肿. dotweb包含以下几个常用对象: App(dotweb) App容器,为Web ...
- 61、web框架
每个编程语言都有它自己的框架,它是我们做项目总重要的一部分.python最重要的框架为django,到底什么是框架,今天先来了解了解 一.http协议 1.HTTP简介 HTTP协议是Hyper Te ...
- JSTL标签库的基本教程之核心标签库(一)
JSTL介绍 Java Server Pages Standard Tag Libray(JSTL):JSP标准标签库,它封装了JSP应用的通用核心功能.JSTL支持通用的.结构化的任务,比如迭代,条 ...
- 假如时光倒流,我会这么学习Java
回头看看, 我进入Java 领域已经快15个年头了, 虽然学的也一般, 但是分享下我的心得,估计也能帮大家少走点弯路. [入门] 我在2001年之前是C/C++阵营, 有C和面向对象的基础, 后来转到 ...
- Nodejs.安装.非源码方式安装Node.js (Centos)
已验证的适用环境: Centos6.x 树莓派官方ROM(Raspbian) 先去官网下载已编译好的安装包 https://nodejs.org/en/download/current/ 以Cent ...
- SpringMVC 异常的处理
Spring MVC处理异常有3种方式: (1)使用Spring MVC提供的简单异常处理器SimpleMappingExceptionResolver: (2)实现Spring的异常处理接口Hand ...