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

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 10754|回复: 52
收起左侧

[Other] IDA7.5支持中文函数命名的办法

  [复制链接]
fjqisba 发表于 2021-4-10 14:33
本帖最后由 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功能的时候,得到的伪代码,中文函数名称却会变成下划线,如下图所示:
中文下划线.png

通过对IDA进行逆向得知,原来hexray在生成伪代码的时候会调用一个calc_c_cpp_name函数,该函数会试图针对C/C++的函数名称进行优化,结果却误伤中文字符,我们将此处代码给NOP掉,就可以了。
合法化名称.png

总结

大家可以自行对模块进行修改,或者使用已制作好的DLL,替换后效果如下:
中文函数.png


IDA.7.5.SP3.zip (1.59 MB, 下载次数: 1868)

免费评分

参与人数 13吾爱币 +10 热心值 +11 收起 理由
m1n9yu3 + 1 + 1 我很赞同!
园川桃香 + 1 + 1 谢谢@Thanks!
lizhuowu + 1 谢谢@Thanks!
gcode + 1 + 1 谢谢@Thanks!
悠然地2012 + 1 热心回复!
wuai164 + 1 谢谢@Thanks!
Li1y + 1 + 1 我很赞同!
冥界3大法王 + 1 用心讨论,共获提升!
nmy124 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
笙若 + 1 + 1 谢谢@Thanks!
芽衣 + 1 感谢,这个好
Service123 + 1 + 1 热心回复!
满不懂 + 1 + 1 谢谢@Thanks!

查看全部评分

本帖被以下淘专辑推荐:

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

chinasmu 发表于 2021-4-11 13:09
Snipaste_2021-04-11_13-09-16.png

替换文件后显示这个怎么搞啊

点评

链接:https://pan.baidu.com/s/1Ef7gujVyEdvfLFVc349nTA 提取码:ida7 新版本IDA  发表于 2023-2-20 16:16
rogxo 发表于 2023-4-21 15:05
kenant 发表于 2023-3-28 17:28
大佬你好,我用的你评论区提供的IDA,然后用你的DLL替换之后,ida.cfg也把对应行注释掉了,测试可以修改中 ...

我去逆向分析了下,我是有个特征没搜到导致的初始化失败
[C] 纯文本查看 复制代码
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;
}
romobin 发表于 2021-4-10 15:11
fkcp 发表于 2021-4-10 16:40
多谢分享!
winooxx 发表于 2021-4-10 17:00
感谢楼主的分享!
.KK 发表于 2021-4-10 18:01

感谢分享
freecat 发表于 2021-4-10 18:49
谢谢分享 刚好解决了问题
nmy124 发表于 2021-4-10 21:50
谢谢老师分析,好工具,收藏了
冥界3大法王 发表于 2021-4-10 22:00
n键也能?@fjqisba
冥界3大法王 发表于 2021-4-11 09:16
成功了,再次感谢。
GeaC 发表于 2021-4-11 09:58
很好的经验,学习了
您需要登录后才可以回帖 登录 | 注册[Register]

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

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

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

GMT+8, 2024-4-25 15:18

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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