为什么80%的码农都做不了架构师?>>>   

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

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

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

不晓得官方,是不是因为上次是中国区泄露了他们的软件,特别不照顾中国客户,还是怎么的,没办法了,还是自己动手吧,自己动手丰衣足食。
逆向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
真的是灵感只青睐于思考着的人们啊。老天把我引导了这个地方

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

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

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

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


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

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

<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
最后说一句,还是请大家支持正版,如果大家都等着使用盗版,hex-rays就没资金继续开发完善这么优秀的软件,给我们继续使用,这样就是一个恶性循环了,不好。有钱的就买正版,在公司单位上班的需要用到IDA作为工作工具就要求公司买正版。

20160514:
    本插件升级到第二版,现在已添加对各种形式的Unicode字符串及各国ANSI编码字符集的字符串的自动识别功能,如UTF8,UTF16LE,UTF16BE等。依然开源,以方便用户定制修改,目前只测试了PE文件,其他平台的二进制可执行文件也应该大致支持吧。
   识别功能使用了notepad2-mod中的几个函数,微软视窗系统的MLang接口及IBM的ICU函数库。
参考地址:
http://xhmikosr.io/notepad2-mod/
https://msdn.microsoft.com/en-us/library/aa741220(v=vs.85).aspx#Code_Page_Detection
http://site.icu-project.org/

转载于:https://my.oschina.net/u/1777508/blog/2248942

支持了Unicode及各国字符集编码识别]改善IDA6.8对中文等非英语国家的ANSI字符串显示支持不佳的问题...相关推荐

  1. ASCII 、GB2312、GBK、GB18030、unicode、UTF-8字符集编码详解

    ASCII码表在线查询: http://www.weste.net/tools/ASCII.asp ASCII字符集编码 ASCII码是7位编码,字符在计算机中以其ASCII码方式表示,其长度为1个字 ...

  2. ASCII 、GB2312、GBK、GB18030、unicode、UTF-8字符集编码详解(转载)

    ASCII字符集编码 ASCII码是7位编码,字符在计算机中以其ASCII码方式表示,其长度为1个字节, 有符号字符型数.编码范围是0x00-0x7F(0~127).ASCII字符集包括英文字母.阿拉 ...

  3. ASCII 、GB2312、GBK、GB18030、unicode、UTF-8字符集编码

    ASCII字符集编码 ASCII字符集编码ASCII码是7位编码,编码范围是0x00-0x7F.ASCII字符集包括英文字母.阿拉伯数字和标点符号等字符.其中0x00-0x20和0x7F共33个控制字 ...

  4. ASCII 、GB2312、GBK、GB18030、unicode、UTF-8字符集编码详解 1

    ASCII字符集编码     ASCII码是7位编码,编码范围是0x00-0x7F.ASCII字符集包括英文字母.阿拉伯数字和标点符号等字符.其中0x00-0x20和0x7F共33个控制字符.     ...

  5. Linux下MySQL 5.5的修改字符集编码为UTF8(彻底解决中文乱码问题)

    一.登录MySQL查看用SHOW VARIABLES LIKE 'character%';下字符集,显示如下: +--------------------------+---------------- ...

  6. java字符集编码是,java字符集与编码有关问题

    java字符集与编码问题 没想到自己的第一篇javaeye博客就是让人头痛的java字符集转码问题,下面是我个人的一些认识与网上收集的代码.在java中String在JVM里是unicode的,任何b ...

  7. 英语翻译软件-批量自动免费翻译软件支持三方接口翻译

    英语翻译软件,什么是英语翻译软件.今天给大家分享一款免费的英语翻译软件,支持采集翻译,自动导入批量翻译,支持各大翻译接口免费翻译(百度/有道/谷歌)翻译后保留原文排版格式,同时支持文章互译:中文翻译英 ...

  8. 字符集编码详解【ASCII 、GB2312、GBK、GB18030、unicode、UTF-8】(转)

    ASCII字符集编码 ASCII码是7位编码,编码范围是0x00-0x7F.ASCII字符集包括英文字母.阿拉伯数字和标点符号等字符.其中0x00-0x20和0x7F共33个控制字符. 只支持ASCI ...

  9. 转载 中文字符集编码Unicode ,gb2312 , cp936 ,GBK,GB18030

    转自: http://www.blog.edu.cn/user3/flyingcs/archives/2006/1418577.shtml 概要:UTF-8的一个特别的好处是它与ISO- 8859-1 ...

  10. 字符集编码(三):Unicode

    前面<字符集编码(上):Unicode 之前>我们讲了在二十世纪九十年代 Unicode 出现之前各厂商和标准化组织为了应对不同语言文字的编码需求而设计了各种互不兼容的字符集编码标准,这使 ...

最新文章

  1. Redis 笔记(16)— info 指令和命令行工具(查看内存、状态、客户端连接数、监控服务器、扫描大key、采样服务器、执行批量命令等)
  2. 设计模式读书笔记-单件模式
  3. 习题8-5 使用函数实现字符串部分复制 (20 分)
  4. 45.2mAP+155FPS! PP-YOLO来了, 精度速度双超YOLOv4
  5. 【Android 高性能音频】OboeTest 音频性能测试应用 ( 应用简介 | 测试内容 | 输出测试 | Oboe 缓冲区 与 工作负载修改 | 测试案例 )
  6. coursera 《现代操作系统》 -- 第十周 文件系统(2)
  7. 使用Dagger 2在GWT中进行依赖注入
  8. springcloud Feign工程熔断器Hystrix
  9. 从个人经历出发,说说如何0基础学Java
  10. 使用kermit通过串口升级uboot
  11. Python:命令安装pyQt5相关插件
  12. SmartSVN 11 破解 亲测可用 license
  13. 2022-02-03:有一队人(两人或以上)想要在一个地方碰面,他们希望能够最小化他们的总行走距离。 给你一个 2D 网格,其中各个格子内的值要么是 0,要么是
  14. 淘宝+京东+拼多多+苏宁易购+聚划算百亿补贴,双11秒杀抢购助手脚本,分享源码
  15. 图片怎么缩小尺寸比例不变?
  16. IE高版本兼容低版本
  17. PHPexcel 导出身份证处理
  18. 电大计算机应用基础word排版,电大计算机应用基础考试全部操作100题
  19. 详解nginx服务器绑定域名和设置根目录的方法
  20. oracle exp/imp命令使用parfile实现参数文件调用

热门文章

  1. TP5整合的阿里云短信接口
  2. 小程序模板消息报错41028。解决方法
  3. 比特币以太坊数字货币钱包安全助记词安全问题
  4. 让块元素在同一行显示的方法: float 和inline-block
  5. linux 查看网络流量
  6. react native 第三方组件react-native-swiper 轮播组件
  7. 【手绘】A old painting ,drawed in middle school ,grade 8
  8. Java编程基础阶段笔记 day03 Java基本语法(中)
  9. gcc 找不到 boot python 链接库的问题: /usr/bin/ld: cannot find -lboost_python
  10. 可视化操作和命令化操作