吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 25034|回复: 55
收起左侧

[IDA Plugin] 改善IDA6.8对中文等非英语国家的ANSI字符串显示支持不佳的问题

  [复制链接]
风吹屁屁凉 发表于 2015-12-10 12:08
转自看雪:sonyps

int _tmain(int argc, _TCHAR* argv[])
{
  printf("%s","我是中国人");
  return 0;
}
这个几句代码编译的程序,在IDA6.4 Demo的字符串窗口还能识别出来

1.png

可是到了IDA6.6,就显示乱码了

2.png

BUG呀,弄起我IDA6.4一直不敢删除,算了忍忍,以为到了后面的版本出来了,会修复,天天看看雪,等啊等,终于等到IDA6.8出来了,一开程序,发现MD还是这样,情何以堪,

3.png

不晓得官方,是不是因为上次是中国区泄露了他们的软件,特别不照顾中国客户,还是怎么的,没办法了,还是自己动手吧,自己动手丰衣足食。
逆向IDA,寻寻觅觅,倒腾到字符串列表管理的几个函数
get_strlist_item refresh_strlist get_strlist_qty
get_ascii_contents2 ea2str str2user print_ascii_string_type areacb_t_get_area,
调试跟踪还是无果。
第二天休息好,继续调试,猜测,调试,
想是不是QT版本的问题,替换成IDA6.4用的4.8.3,还是不行,差个函数没有,试了几次,不好替换,会报错,只好放弃这个方案。继续打开IDA逆向IDA,漫无目的的想从代码中,寻找其他线索,但是心里还是没底的,几次想放弃,又不舍
搜索字符串嘛Strings,Strings window,String还是无果,
试了试Ansi,Asc
真的是灵感只青睐于思考着的人们啊。老天把我引导了这个地方

4.png

感觉好像发现了契机,另外开个IDA,依然逆向这个示例程序,按Alt+A,这个窗口出现了

5.png

encording,对这就是encording,编码问题,F1结合IDA的帮助文档,知道了IDA关于ANSI编码问题的操作使用,如何添加一个编码名,更改默认编码, 首先测试默认已有的编码名<default>,<no conversion>,UTF-16LE,UTF-8,都是无法使ANSI中文识别出来的,接着尝试添加简体中文编码GBK,成功了,可以添加的(IDA还支持添加‘CP+代码页整数’,‘代码页整数’的形式的编码名),然后应用到"8位和多字节字符串"。

7.png

再次打开Strings Windows,OH, YES!终于正确了,熟悉的中文出现了

8.png

最后思考,为什么IDA6.4和IDA6.8都是Default(<no conversion>)

9.png
10.png

却显示结果不同呢,但是他们的帮助文档中关于<default> 和<no conversion>的描述都是相同的,Default(<no conversion>)这句的意思是Default(默认)就是<no conversion>,

11.png

,如上图,编码可选列表中也没有<default>这项,足以见得<default>就是<no conversion>
而帮助文档中显示
点击图片以查看大图

12.png

<default> - the default encoding for this string type (8-bit or 16-bit)

<no conversion> - the string bytes are printed using the current system encoding (after translating with XlatAsciiOutput array in the configuration file).

<no conversion>是the current system encoding(当前系统编码),那么理论上应该简体中文的系统就是简体中文为<no conversion>的代表了。可是IDA6.8中却默认显示乱码,无法正确显示。
足以见得这是一个BUG。
修复方式是:
   1.每次新逆向一个程序时,去'Options'->'ASCII string style'中将ANSI字符串设置成简体中文。
   2.上面的方案,太麻烦了,要用户留心一个事情,不符合程序设计的初衷,写程序的初衷就是让机器自动去完成那些我们不想记住,不想完成,繁琐机械的任务,提高生产效率。所以接着我写了一个IDA插件,会在IDB初始化时,自动帮你添加一个当前代码页的编码名,并将当前"8位和多字节字符串"设置到这个编码名上。

下面是本插件的程序及源码,请解压后把bin目录下的两个文件放到IDA6.8的插件目录(plugins)中。其他IDA版本的用户可能需要自己编译源码。
AutoSetToLocalAnsiCodePage.7z (19.48 KB, 下载次数: 862)
最后说一句,还是请大家支持正版,如果大家都等着使用盗版,hex-rays就没资金继续开发完善这么优秀的软件,给我们继续使用,这样就是一个恶性循环了,不好。有钱的就买正版,在公司单位上班的需要用到IDA作为工作工具就要求公司买正版。

免费评分

参与人数 8吾爱币 +1 热心值 +8 收起 理由
sec360zz + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
kaikai121996 + 1 + 1 插件安装之后,中文字符串地址处显示:.rdata:00416D30 0000011D C A cast .
盈盈一水间cc + 1 谢谢@Thanks!
keprince + 1 感谢分享,可是为什么出来的编码是CP936,而且就第一次运行正常,再打开又乱.
LzSkyline + 1 谢谢@Thanks!
岁月的浪花 + 1 谢谢@Thanks!
yypE + 1 跪拜
smile1110 + 1 p叔在南宁买了一套房

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

keprince 发表于 2016-5-7 18:07
本帖最后由 keprince 于 2016-5-8 10:23 编辑

楼主,感谢你的分享,但是只有在第一次用IDA6.8绿色版时正常显示了大部分汉字,后来再打开就显示乱码了。你知道为什么吗?谢谢!-----------------------------------------------------------
20160508
感谢你分享IDA6.8中文显示插件,可是为什么我把你的插件放进去,在默认编码里多出来的选项只有CP936呢?
用这个CP936的编码,第一次运行时正常显示了中文,后面再运行就乱码了,求指点,如何正确使用,谢谢!

 楼主| 风吹屁屁凉 发表于 2015-12-10 12:50
smile1110 发表于 2015-12-10 12:30
风吹大神你的 个性签名 p叔在南宁买房的那个段子不见了呢  这个东西太好啦

段子太老了,我改改。
smile1110 发表于 2015-12-10 12:30
风吹大神你的 个性签名 p叔在南宁买房的那个段子不见了呢  这个东西太好啦
pengcan 发表于 2015-12-10 12:35
不明觉厉{:1_888:}
odmin 发表于 2015-12-10 12:43
good .Thanks for share
A00 发表于 2015-12-10 12:43
感谢这个解决方案不错
萋小磊 发表于 2015-12-10 12:52
风吹屁屁凉 发表于 2015-12-10 12:50
段子太老了,我改改。

不行了- -

这样黑P叔
不是五套房么!
exiahan 发表于 2015-12-10 14:49
多谢楼主
frozenrain 发表于 2015-12-10 15:23
貌似没效果,不知道其他同学那里怎么样。
xiawan 发表于 2015-12-10 16:55
真心感谢楼主~
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-3-29 23:28

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表