逆向实战第一讲,寻找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看看插件是否加载

正常加载没有问题

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏月牙寂

k8s源码分析------第三方库etcd client分析

第一时间获取文章,可以关注本人公众号 月牙寂道长 yueyajidaozhang

3806
来自专栏前端技术总结

升级你的webpack(上)-- webpack入门教程(二)

我负责的一个前端项目之前用到的是webpack1,现需要升级到webpack4,特此记录下升级过程中有一些配置和需要注意的问题,具体会介绍:

1.1K43
来自专栏专注研发

linux常用命令

     -a          列出当前目录下所有文件及目录,包括隐藏的a(all)

1611
来自专栏大闲人柴毛毛

Java并发编程的艺术(四)——线程的状态

线程的状态 初始态:NEW 创建一个Thread对象,但还未调用start()启动线程时,线程处于初始态。 运行态:RUNNABLE 在Java中,运行态包括...

43011
来自专栏Python

python2 UnicodeDecodeError: 'ascii' codec can't decode byte 0xce in position 7: ordinal not in range

python在安装时,默认的编码是ascii,当程序中出现非ascii编码时,python的处理常常会报这样的错UnicodeDecodeError: 'asc...

3377
来自专栏LhWorld哥陪你聊算法

【常见错误】--Nltk使用错误

AttributeError: module 'nltk' has no attribute 'word_tokenize'

2082
来自专栏Java帮帮-微信公众号-技术文章全总结

Linux常用命令

Linux常用命令 常用指令 ls   显示文件或目录 -l 列出文件详细信息l(list) -a ...

4816
来自专栏Kevin-ZhangCG

Servlet+Tomcat总结

1273
来自专栏FreeBuf

Metasploit自动化Bypass Av脚本:Shecodject X Shellcode Injection

0x00 简介 shecoject 是一个由 python3 编写的工具,可将特制 metasploit 生成的 raw 文件直接使用 pyinstaller ...

2355
来自专栏极客编程

node.js + mongodb 原

想写博客很长时间了,因为一直身患懒癌,所以一直拖到了现在。markdown的语法也是刚刚学,试验一下效果 好了不说了,直接上干货了。 -------------...

1404

扫码关注云+社区