逆向实战第一讲,寻找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 ...
随机推荐
- windows访问控制列表 --ACL(Access Control List)
1.定义 ACL是一个windows中的表示用户(组)权限的列表. Access Control List(ACL) Access Control Entry(ACE) ... 2.分类 ACL分为两 ...
- Java高新技术 JavaBean内省
Java高新技术 JavaBean内省 知识概要: (1)了解JavaBean内省 (2)JavaBean的简单内省操作 ...
- Jquery字符串,数组(拷贝、删选、合并等),each循环,阻止冒泡,ajax出错,$.grep筛选,$.param序列化,$.when
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- winPcap编程之获取适配器信息(二)
首先要读一下这一页的东西:http://www.winpcap.org/docs/docs_412/html/group__wpcapsamps.html 可以结合中文版本看http://www.fe ...
- MySQL主从复制 + Mycat实现读写分离
说明:两台MySQL服务器都是使用CentOS6.5系统,MySQL版本为mysql-5.7.17 MySQL一主一被实现主从复制 注意:写包括insert,delete,update 操作:读只有s ...
- win10 uwp 绘图 Line 控件使用
本文主要讲一个在绘图中,我们会有一个基础的控件,Line.控件的基本使用和他能做出的我们很多时候需要的界面. 虽然是一个简单控件,但是可以做出很诡异的很好看的UI. 首先,我们要知道,Line就是画直 ...
- Xamarin Forms 进度条控件
本文翻译:http://xamlnative.com/2016/04/14/xamarin-forms-a-simple-circular-progress-control/ 里面都是胡说的,如果看不 ...
- PHP之回调函数传参(解决eval函数拼接对象参数的问题)
在使用Smarty时,定义了一个统一调用控制器的函数,如下: function C($name, $method){//控制器的名称和其中方法的名称 require_once "contro ...
- C陷阱和缺陷学习笔记
这段时间把<C陷阱和缺陷>看了,没时间自己写总结.就转一下别人的学习笔记吧http://bbs.chinaunix.net/thread-749888-1-1.html Chapter 1 ...
- Tomcat Java.OutOfMemoryError : PermGen Space异常
背景:前些日子更新公司多年前一个旧平台发布到Tomcat上之后,频繁收到网站许多模块无法正常使用的反汇. 测试过程中发现平台发布一段时间后,访问相关网页出现如下500页面 解决方案:PermGen s ...