前言:
OllyDbg V2.01在某些功能上比V1.10版本要强大一些,所以折腾一下OD V2.01,
但是在在看雪下载的OllyDbg V2.01中文修改版有个问题,数据窗口无法正常显示UNICODE字符;
下载页面::http://tools.pediy.com/windows/debuggers.htm
于是我在OllyDbg的官方网站下载了英文原版:http://www.ollydbg.de/odbg201.zip,该版本数据窗口可以正常显示UNICODE字符,但是原版对中文的支持又不够友好,有以下两个问题:
1.设置对话框文字太小
2.很多窗体内中文只能显示一半
于是我就想自己动手,研究一下能不能修复OD2.01的中文显示。
最后问题2没有完美解决,所以前来请教前辈!
----------------------------------------------------------------------------------------------------------
这里我复制了一份OD2.01,用一个OD2.01英文版调试另一个OD2.01英文版
首先是解决设置窗口文字太小的问题:
Win32 API中设置窗体字体一般情况是SendMessage(hwnd,WM_SETFONT,HFONT,0),所以在这里下断,经过无数次F8,F9之后找到了地址00429FFF,如下图:
OD 2.01对每个控件都进行了这个操作,设置它的字体,从wParam可以看到字体句柄,然后追踪这个句柄是从哪里来的,又经过无数次F8,F9之后,又来到了0040EA2B,如下图:
可以看到LOGFONT的Width参数被限定为5,这不科学啊,创建字体都是使用0,让系统自动匹配,
所以果断改为0,于是设置界面字体就变大了,如下图:
但是还是不对,字符间隔太宽,文本显示不全,后来研究了很久没找到原因,
最后索性把字体从原来的"MS Sans Serif"改为"宋体",字号改为12号,总算可以正常显示了。
于是第1个问题就算是解决了吧!
--------------------------------------------
第2个问题就困难了:
OD的窗体是自绘的控件,文本使用的是ExtTextOutW来输出,在所有ExtTextOutW下断,无数个F8,F9之后,锁定了0041D52F,如下图:
观察它的输入参数,在有中文的情况下RECT的宽度少了一半,导致中文显示不全,找到了问题所在,
这回就要跟踪这个输入RECT是怎么计算出来的了,这里的代码逻辑比较复杂,跟踪了很长时间,最后找到了这里0041B1C8,如下图:
判断[EBP-2F]的BIT1是否为1,为1则使用GetTextExtentPoint32来计算文本宽度,否则使用
单个字符宽度乘以字符数量来决定宽度,
一开始我不明白为什么要分这两种情况?理论上应该用GetTextExtentPoint32来计算才正确啊,
所以我直接将判断条件改为TRUE,这样无论如何都会调用GetTextExtentPoint32来计算文本的宽度,果然解决了中文只显示一半的问题,
然而却又发现了新的问题,那就是和在看雪下载的修改版的问题一样,数据窗口无法正常显示UNICODE字符:
于是只能继续调试,看看[EBP-2F]这个标志位是怎么来的,又无数次的F8,F9终于找到了0041AE40,下图:
其实[EBP-2F]只是变量[EBP-30]的第2个字节,它是一个DWORD类型的FLAG,一开始是清0了,
调用回调函数之后,得到正确的FLAG置位,在这里发现每个窗口的回调函数是不一样的,
因此我想在回调函数里给FLAG |= 0x200,结果行不通,
因为有一些窗口的回调函数里根本就没有修改[EBP-30],所以我想干脆给FLAG初始值就为0x200吧,还是行不通:
因为在地址0041AE3E处有这2条指令:
地址 十六进制数据 指令 注释
0041AE3E |. 33D2 XOR EDX,EDX
0041AE40 |. 8955 D0 MOV DWORD PTR SS:[EBP-30],EDX ; FLAG清零
要改为 MOV DWORD PTR [EBP-30],200一条指令,需要6个字节的空间,而原来只有5个字节!
本来想解决了这个问题,得到完美版的中文OD2.01,发到论坛分享一下的,奈何技能不够用,解决不了这个问题,所以只能前来寻找前辈指点!
另外有没有人打赏几个Kx给我呀,...
-----------------------------------------------------------------------------------------------------------
2016.10.20添加
按照LOCKLOSE前辈的指点,基本解决了OllyDbgV2.01的中文显示问题,
大功告成,现上传附件,分享一下!
还有一点瑕疵,就是CPU INFO窗口,显示"(当前寄存器)"这个红色警告,稍微挡住了前面一个字符,不过可以在“设置”里面关闭这个红色警告.
OllyDbgV2.10.zip
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!