逆向实战第一讲,寻找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 ...
随机推荐
- M-移动端的webapp页面布局教程和webapp实战分析
http://www.25xt.com/html5css3/8092.html 响应式设计 1 媒体查询 适用于不同固定宽度设计 媒体类型 : screen 屏幕 print 打印机 handheld ...
- win 7 系统ie浏览器升级11版本后,f12功能不可用的问题
自从把ie8升级成11后,f12功能就不可用了.浏览器兼容模式也无法使用. 解决办法:下载windows补丁 IE11-Windows6.1-KB3008923-x64.msu 下载地址: 64位:h ...
- ListBox数据绑定无效
public class DataList { public List<string> listSource; private DataTable table; public DataLi ...
- nginx的反向代理功能和缓存功能
html { font-family: sans-serif } body { margin: 0 } article,aside,details,figcaption,figure,footer,h ...
- 九大排序算法Demo
1. 冒泡排序 冒泡排序(Bubble Sort)是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换, ...
- configparser模块(拷贝)
该模块适用于配置文件的格式与windows ini文件类似,可以包含一个或多个节(section),每个节可以有多个参数(键=值). 创建文件 来看一个好多软件的常见文档格式如下: [DEFAULT] ...
- 三、Spring的面向切面
Spring的面向切面 在应用开发中,有很多类似日志.安全和事务管理的功能.这些功能都有一个共同点,那就是很多个对象都需要这些功能.复用这些通用的功能的最简单的方法就是继承或者委托.但是当应用规模达到 ...
- Java IO流 思维导图
- LINUX 笔记-crontab命令
用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下: minute hour da ...
- MongoDB全文检索
1. 全文检索概念: 全文检索是对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式. (暂时不支持中文) ...