IDA7.5支持中文函数命名的办法
本帖最后由 fjqisba 于 2021-4-10 14:36 编辑### 解除函数名称的限制
默认配置情况下我们是不能将函数名称修改为中文的,会提示bad character,意思就是包含非法字符,那么怎样让中文成为合法的字符呢?
通过在网上查找资料,这个合法字符的定义在ida.cfg文件中,我们定位到文件,搜索Block_CJK_Unified_Ideographs,如下图所示:
```
// the following characters are allowed in user-defined names:
NameChars =
"$?@" // asm specific character
"_0123456789"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz",
// This would enable common Chinese characters in identifiers:
// Block_CJK_Unified_Ideographs,
CURRENT_CULTURE;
```
我们去掉`Block_CJK_Unified_Ideographs`这一行前面的注释,就可以给函数名字起中文了。
### 解除IDA反汇编代码限制
虽然通过上述操作函数可以起名为中文,但是实际上使用F5功能的时候,得到的伪代码,中文函数名称却会变成下划线,如下图所示:
通过对IDA进行逆向得知,原来hexray在生成伪代码的时候会调用一个`calc_c_cpp_name`函数,该函数会试图针对C/C++的函数名称进行优化,结果却误伤中文字符,我们将此处代码给NOP掉,就可以了。
### 总结
大家可以自行对模块进行修改,或者使用已制作好的DLL,替换后效果如下:
替换文件后显示这个怎么搞啊{:1_896:} kenant 发表于 2023-3-28 17:28
大佬你好,我用的你评论区提供的IDA,然后用你的DLL替换之后,ida.cfg也把对应行注释掉了,测试可以修改中 ...
我去逆向分析了下,我是有个特征没搜到导致的初始化失败
bool EDecompiler::initEArchitectureType()
{
this->arch = E_UNKNOWN;
//探测易语言程序类型
ea_t staticMagicHead = SectionManager::SeachBin("50 64 89 25 00 00 00 00 81 EC AC 01 00 00 53 56 57"); //这个特征码没搜到失败了
if (staticMagicHead != BADADDR) {
unsigned int eHeadAddr = get_dword(staticMagicHead + 0x26);
if (Parse_EStatic(eHeadAddr)) {
this->arch = E_STATIC;
return true;
}
}
//To do...即便是静态编译特征被VM了,应该还有一些解决的思路,暂时先不管。
return false;
} 感谢分享, 找了不少地方没找到解决方案 多谢分享! 感谢楼主的分享!
感谢分享 谢谢分享 刚好解决了问题 谢谢老师分析,好工具,收藏了 n键也能?@fjqisba 成功了,再次感谢。{:301_1006:} 很好的经验,学习了