首页
社区
课程
招聘
如何实现自己的ollydbg调试器 (1) 界面的实现
发表于: 2018-1-18 15:34 7285

如何实现自己的ollydbg调试器 (1) 界面的实现

2018-1-18 15:34
7285

在逆向时候我们需要一些工具,但是很多工具毕竟是别人写的,我们无法改变,一套好的工具就会事半功倍,如果我们自己实现一套自己的工具的话,那就更加完美了,读者如果有兴趣可以自己去实现一套全新的调试器。

Windows程序的调试器有很多,比如windbg、ollydbg 等等,但是大多数搞逆向的人都喜欢使用ollydbg来动态调试程序,因为它的快捷键丰富,众多的插件,以及稳定的调试功能,但是还有一个最为重要的原因就是它的界面非常友好,不同的指令显示不同的颜色,能一眼很容易区分出来,不伤眼,所以打造自己的调试器界面也是最重要的一部分,下面我们就来讲解ollydbg 的界面如何实现。

首选我们要了解ollydbg的界面有哪些有点,如下图所示:



 


使用ollydbg的人都知道它的界面的一些特性:

1. 数据显示区域的任何窗体都是自绘的。

2. 移动窗体时界面不会闪动。

3. 显示汇编的时候颜色是不同的。

4. CPU数据窗体分割可使用鼠标左键互相连接移动。

接下来我们就具体分析它是如何实现的,用IDA打开Ollydbg,首选找到 RegisterClass函数来定位CPU窗体的类所对应的窗体函数WndProc的位置:


Ollydbg的CPU汇编显示的类叫ICPUASM, 它对应的窗口回调例程函数就是如图的AsmListView(我标注的函数名字),下面我们就进入这个函数去找一些关键的信息


函数内处理了一些消息,开始的一些消息并没有什么特殊性,继续往下找


看到了WM_PAINT消息的处理,这里我应该能猜测出来这里就是开始自绘客户Client区域了,继续进入Painttable函数看看是否是我们需要的,当我们一进入这个函数就发现了它的一些重要的与界面自绘相关的信息

  





它使用了CreateCompatibleDc、CreateCompatibleBitmap、 Bitblt双缓冲技术来实现绘图防止界面闪动。

第一步是打印Column的头header,首选在头的大小区域的底部大一条黑色的线


接着就是根据column的数量循环画每个column, 规定最大column数量为17个,先画每个 column的边线,然后在填充背景色,最后在打印column的字体




Listview头自绘完毕后就是开始画界面体了,下面这一大块划线打点的代码区域就是实现Hex 数据栏不同的跳转线的实现




接下来就是根据不同的结构数据的设置打印不同的区域内不同颜色的字体


如果这个区域内没有数据结构就直接填充默认背景颜色


关于它的界面的实现的一些原理其他细节我们只介绍到这里其他的细节读者自行去发现,下面最重要的工作就是自己去写代码实现,在实现过程中有几个关键的技术。

1.    防止界面闪动使用双缓冲绘图

在WM_PAINT里使用几个兼容位图的的函数实现双缓冲


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2019-2-1 16:29 被admin编辑 ,原因:
收藏
免费 4
支持
分享
最新回复 (15)
雪    币: 465
活跃值: (667)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
2

看雪如果能实现个点赞功能就更好了。
2018-1-18 15:54
0
雪    币: 1994
活跃值: (1526)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
3
ssarg [em_63] 看雪如果能实现个点赞功能就更好了。
2018-1-18 15:59
0
雪    币: 576
活跃值: (1163)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
4
牛逼,现在玩这个的人不多了。都是移动端物联网了
2018-1-18 16:57
0
雪    币: 775
活跃值: (2292)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
5
前楼膜拜 
2018-1-18 17:03
0
雪    币: 2656
活跃值: (5098)
能力值: ( LV9,RANK:225 )
在线值:
发帖
回帖
粉丝
6
厉害,膜拜。
2018-1-18 17:20
0
雪    币: 1994
活跃值: (1526)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
7
hkfans 牛逼,现在玩这个的人不多了。都是移动端物联网了
2018-1-18 17:25
0
雪    币: 1994
活跃值: (1526)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
8
AperOdry 前楼膜拜
2018-1-18 17:25
0
雪    币: 2355
活跃值: (3069)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
9
回帖刷分发帖
2018-1-18 17:42
0
雪    币: 1432
活跃值: (3072)
能力值: ( LV9,RANK:156 )
在线值:
发帖
回帖
粉丝
10
非常好的文章,不顶不行。希望楼主能介绍内存断点实现过程,以及动态跟踪。这些在研究算法时非常有用。
2018-1-18 18:52
0
雪    币: 12
活跃值: (35)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
一款新的调试器又要诞生了。
和这个好像差不多。
https://bbs.pediy.com/thread-217252.htm
2018-1-20 14:52
0
雪    币: 1994
活跃值: (1526)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
12
Vxlan 一款新的调试器又要诞生了。 和这个好像差不多。 https://bbs.pediy.com/thread-217252.htm
他的界面一看就是mfc  的某个界面库开发,太大了,光主要的模块exe 都几十兆了,这也太大了,我用纯win32  sdk开发的整体加起来非常小。。
2018-1-20 20:35
0
雪    币: 12
活跃值: (35)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
basketwill Vxlan 一款新的调试器又要诞生了。 和这个好像差不多。 https://bbs.pediy.com/thread-217252.htm 他的界面 ...
期待你的神器面世,希望能有64位版本,超越OD,一统江湖,指日可待。
2018-1-21 14:47
0
雪    币: 175
活跃值: (2541)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
高手呀,期待你的神器面世,希望能有64位版本,超越OD。
2018-1-24 21:23
0
雪    币: 6976
活跃值: (1482)
能力值: ( LV11,RANK:180 )
在线值:
发帖
回帖
粉丝
15
讲解这么好,为什么不配套一下源码??
2018-12-28 09:54
0
雪    币: 6
活跃值: (1151)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
good job ,期待后续的更新
2018-12-28 10:27
0
游客
登录 | 注册 方可回帖
返回
//