首页
社区
课程
招聘
[原创]OllyDBG v2.01 Final支持中文字符查找
发表于: 2013-11-6 13:26 27427

[原创]OllyDBG v2.01 Final支持中文字符查找

2013-11-6 13:26
27427
收藏
免费 0
支持
分享
最新回复 (137)
雪    币: 3638
活跃值: (4197)
能力值: (RANK:215 )
在线值:
发帖
回帖
粉丝
26
这个要期待下.
2013-11-10 21:56
0
雪    币: 1481
活跃值: (874)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
27
欢迎,留有原作者信息和出处即可。
2013-11-11 17:46
0
雪    币: 10599
活跃值: (3524)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
28
还差一个ansi的判断函数,写好后就基本可以让od2.01完美支持中文字符查找了。
但好像不是很好判断。
2013-11-11 20:28
0
雪    币: 8719
活跃值: (2085)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
29
很期待
2013-11-11 20:43
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
30
插件选项是灰色的,咋办?
2013-11-12 11:19
0
雪    币: 3277
活跃值: (1992)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
31
好办,到 ollydbg.ini 里设置一下 插件的相对路径或绝对路径一下,神奇立马出现。
2013-11-12 11:37
0
雪    币: 3519
活跃值: (1842)
能力值: ( LV6,RANK:93 )
在线值:
发帖
回帖
粉丝
32
简单测试了下,貌似OD2自身的字符串查找,不能搜索到LEA指令带字符串的

update:
找到需要patch地方了,
004A3360  |. F640 01 02     |||TEST BYTE PTR DS:[EAX+0x1],0x2        ;  OP_CONST, lea是OP_MEMORY
004A3364  |. 74 54          |||JE SHORT ollydbg.004A33BA

下面这些patch后,基本可以显示正常了,不过有些patch需进一步改进
        HMODULE hMain = GetModuleHandle(NULL);
        org_IsTextA  = (ISTEXTA)GetProcAddress(hMain, "_IstextA");
        hook(&(PVOID&)org_IsTextA, hook_IsTextA);

        org_IsTextW  = (ISTEXTW)GetProcAddress(hMain, "_IstextW");
        hook(&(PVOID&)org_IsTextW, hook_IsTextW);

        org_Asciitounicode = (ASCIITOUNICODE)GetProcAddress(hMain, "_Asciitounicode");
        hook(&(PVOID&)org_Asciitounicode, hook_Asciitounicode);

        org_Utftounicode = (UTFTOUNICODE)GetProcAddress(hMain, "_Utftounicode");
        hook(&(PVOID&)org_Utftounicode, hook_Utftounicode);
2013-11-13 10:43
0
雪    币: 3638
活跃值: (4197)
能力值: (RANK:215 )
在线值:
发帖
回帖
粉丝
33
期待继续完善。辛苦了。
2013-11-13 12:20
0
雪    币: 10599
活跃值: (3524)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
34
[QUOTE=lynnux;1238802]简单测试了下,貌似OD2自身的字符串查找,不能搜索到LEA指令带字符串的

update:
找到需要patch地方了,
004A3360  |. F640 01 02     |||TEST BYTE PTR DS:[EAX+0x1],0x2        ;  OP_CONST, lea是OP_M...[/QUOTE]

想问一下你这个代码怎么patch上去?



今天继续瞎搞,感觉好多了,已经接近想要的结果。



但是现在有个问题,就是改的代码实在太多了,没办法保存。
居然还有重定位,明天再看看补丁的代码。
看来只能添加字节,这个没弄过,找找资料先。

还有一个问题就是MultiByteToWideChar的调用问题。
上传的附件:
2013-11-13 18:41
0
雪    币: 3519
活跃值: (1842)
能力值: ( LV6,RANK:93 )
在线值:
发帖
回帖
粉丝
35
手段很多,但是要根据上下文,主要是结合SDK的disasm.h看,就可以弄清楚它是怎么处理的了。

我都是用代码patch,UNICODE显示最简单,甚至无需patch,直接设置"Use IsTextUnicode"就可以正常显示,但如果这样做会多出来一些乱码的UNICODE,所以放弃该方案,直接hook _IstextW,该函数的处理直接从52中文搜索的代码里抠出来用即可。

再就是ASCII码处理,这个稍微复杂了些,原本是hook _IstextA,但是后来测试发现诸多问题,放弃了,直接hook _Isstring可以达到效果。

上面两个处理了搜索基本就没问题了,再有就是数据窗口的显示问题了,设置里有相关选项,就是“Code page for ASCII dumps”和“ode page for multibyte dumps”,界面设置里没有中文的,只能手动打开ollydbg.ini设置为936,这样数据窗口可以显示出来中文,不过ASCII的中文显示有问题,只能切换到UTF那页才能正常实现ASCII码的中文,UNICODE的实现没问题。

patch的代码在https://github.com/lynnux/holyshit/blob/master/common/OD2str.cpp里,不过有很多多余的功能函数
2013-11-13 18:59
0
雪    币: 10599
活跃值: (3524)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
36
将你的修改共享出来看看!也许能少走很多弯路。实在不懂什么就代码patch。
2013-11-13 19:07
0
雪    币: 3519
活跃值: (1842)
能力值: ( LV6,RANK:93 )
在线值:
发帖
回帖
粉丝
37
OD 中文搜索插件 不会更新了,那个写得太乱。本来想集成到holyshit中去的,代码都写了大半了https://github.com/lynnux/holyshit/blob/master/common/ustrref.cpp,后来又研究了下OD自身的搜索处理,发现原理基本一致就没必要重复造轮子了。
OD2自带的搜索挺好的,就是中文处理差了点。不过那个中文搜索插件说支持VB,OD好像没这个处理,不过OD自带的搜索可以搜索出非push mov lea的指令带字符串的。
2013-11-13 19:15
0
雪    币: 3519
活跃值: (1842)
能力值: ( LV6,RANK:93 )
在线值:
发帖
回帖
粉丝
38
实际上就是弄清楚它的搜索字符串流程以及相关函数是怎样用的
关键函数就是_Isstring,这个函数是去读指定地址,如果是字符串就返回UNICODE字符串(写入到buf),但是如果是中文ASCII,它是读不出来的,原因就是没考虑到中文的ASCII是占两个字节,原本我是处理_IstextA函数,但是有问题,后来干脆直接处理_Isstring,如果它没读取到字符串,就判断下是不是ASCII中文,是的话自己转换成UNICODE写入到_Isstring的buf参数中。这样ASCII码的问题就解决了

UNICODE不说了,是_IstextW的问题,直接把该函数替换成直接中文的函数就行了。
2013-11-13 19:26
0
雪    币: 10599
活跃值: (3524)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
39
终于知道怎么会有重定位了,原来是我使用的指定内存来存一些标志。
看了一下重定位原理,明天继续折腾去。
2013-11-13 19:59
0
雪    币: 10599
活跃值: (3524)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
40
测试了一下holyshit的中文搜索功能,好像还是有些不尽人意,随便共享我的最新修改。
注意:不能与holyshit_test共用,因为他修改的代码跟我的不一样。
测试文件:
试用.rar

以下是效果比较:
holyshit_test的效果

4楼里的asm程序holyshit_test插件也不能很好显示

od1.1里面的字符插件的效果

以下是本人最新的结果


以下是od2.01最新修改
ollydbgnew.rar

还差一个ascii转unicode的函数就可以了,正在想办法。
上传的附件:
2013-11-14 12:31
0
雪    币: 3277
活跃值: (1992)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
41
等待两大牛的完美解决版。
2013-11-14 13:11
0
雪    币: 10599
活跃值: (3524)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
42
已经很接近可用了,但还是有问题,大文件好像会崩溃
而且非字符串还是有很多,明天接着干。



最新的修改:

ollydbg.rar
上传的附件:
2013-11-14 20:27
0
雪    币: 3638
活跃值: (4197)
能力值: (RANK:215 )
在线值:
发帖
回帖
粉丝
43
两位多交流下,等你们的好消息,辛苦了。
2013-11-14 20:31
0
雪    币: 10599
活跃值: (3524)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
44
LEA指令带字符串的程序谁能写一个?
我想测试一下。
2013-11-14 21:27
0
雪    币: 3519
活跃值: (1842)
能力值: ( LV6,RANK:93 )
在线值:
发帖
回帖
粉丝
45
找个程序搜索下字符串,然后记下字符串地址xxx用OD该成lea eax,[xxx]什么的
2013-11-14 23:10
0
雪    币: 8719
活跃值: (2085)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
46
期待完美,两位牛人辛苦了,精神上支持一下!
2013-11-15 09:26
0
雪    币: 184
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
47
支持了,先下载试用一下
2013-11-15 19:54
0
雪    币: 10599
活跃值: (3524)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
48
发现崩溃居然是WideCharToMultiByte,好像处理的字符不能超过174个,往上改很容易出错,其实微软的做法好像是逐个字符处理的,想到基本有用的字符也不会超过这个数,所以就不折腾了。明天再处理一些比较奇葩的字符。就算完美处理完这个中文字符查找问题了,发现od2.01处理中文真的很有问题。
vb测试很完美!


明天再过滤掉一些比较奇葩的字符串


最新修改:
ollydbg.rar

有问题请跟帖,最好附上测试程序。谢谢

发现修改
0040EA35  mov     dword ptr [0x58267C], 0x5

0040EA35  mov     dword ptr [0x58267C], 0x0
可以让界面字体更好看,下次再一起修改。

上传的附件:
2013-11-15 20:08
0
雪    币: 10599
活跃值: (3524)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
49
再次去掉一些非字符,但还是有
尤其是e语音的程序
明天继续,现在要做的只是过滤掉一些多余的非字符




最新附件
这次将ollydbg.ini也打包了

OllyDBG v2.01 Final.rar
上传的附件:
2013-11-16 22:12
0
雪    币: 10599
活跃值: (3524)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
50
已经解决绝大多数汉字搜索问题,还有问题就是utf的处理问题
像“壹拾”,od2.01会将其认为utf,明天再继续修改!

现在支持繁体!繁体需要设置代码页



下面看看e语音的程序的效果

od1.1+52插件


od2.01修改的效果


下面是最新修改

ollydbg new.rar
上传的附件:
2013-11-17 20:02
0
游客
登录 | 注册 方可回帖
返回
//