解决中文乱码
问题描述
程序调用第三方日志Log.dll模块,无源码。发现导出的日志为乱码,如下图所示。
期望目标
为Log.dll打补丁,解决乱码问题。
问题分析
经分析,是因为日志导出的文件编码问题造成的。通过二进制修改文件格式,将UTF-16 LE修改成UTF-8或者ANSI,问题即可解决。
其中UTF-16 LE的特征码是FFFE ,这一点很关键。
注意:使用notepad++等工具直接进行编码转换是无法正常转码的。
解决方案
逆向解决方案。猜想文件读写调用API WriteFile。经MSDN查询,该接口在Kernel32模块中,使用IDA定位API,并锁定引用位置。运气不错,引用的位置在同一个函数之中。在上下文中发现了特征吗FFFE,确定了变量Buffer+0x1D8。
刚好,WriteFile写入了该变量
使用X64Dbg锁定该代码片段,打补丁。
结论
通过验证之后,导出的日志乱码问题解决了。