行业干货-如何逆向解决QT程序汉化中乱码问题 (3)

行业干货-如何逆向解决QT程序汉化中乱码问题

行业干货-如何逆向解决QT程序汉化中乱码问题

可见,两个函数其实最终调用的都是第一个函数,而核心关键点就是枚举类型参数的值,那么我们在第一个库函数入口【6A2B5818】下断点动态运行一下,堆栈中观察参数的变化,如下动图

行业干货-如何逆向解决QT程序汉化中乱码问题

5.总结所有线索

标题字符串Registration被函数QCoreApplication::translate作为参数

标题字符串Registration被函数QMetaObeject::tr作为参数

两个函数核心都是QCoreApplication函数

QCoreApplication控制中文乱码核心参数是枚举类型,值0乱码,1是utf-8支持中文

QMetaObeject::tr调用的QCoreApplication::translate关键枚举类型是0,所以标题最后是不支持中文的,导致一汉化产生乱码

 

、修改QT库QTCore4.dll解决问题

其实上面的分析如果已经完全搞懂了,其实就已经知道怎么解决了,而且解决方法有很多,但是都并不能保证所有程序的通用性,毕竟一个开发一个样,这次他用这个库函数,没准下次他用另外一个,所以吃透后,具体问题具体分析才是任何武功中的“无招胜有招”!针对于这个案例,解决的思路就至少有以下三种

程序领空修改,让其调用的QMetaObeject::tr更换为QMetaObeject::trUtf8(阅读源码就会发现有这个函数,为什么此案例他没调用这个,因为是国外软件,他压根没想支持中文,所以他用的是tr而不是trutf8),这样修改的好处,可以相对保证汉化者的劳动成果,毕竟修改的地方可能会多,而且只在程序领空修改,但通用性差,换个程序百分百没用

修改库函数QMetaObeject::tr,让他调用QCoreApplication::translate时,枚举参数设置成1,也就是压根用逆向的方式把QMetaObeject::tr函数改成了QMetaObeject::trUtf8,好处通用性较强。

修改QCoreApplication::translate内部逻辑,让枚举类型为0时,也按为1的流程逻辑走(最常见的爆破套路),有点通用性很强,极大程度适用很多QT程序汉化乱码问题

两种标红的方法都是修改QT库函数,所以最终体现是修改了QTcore4.dll这个文件,方法分别如下

方法1

行业干货-如何逆向解决QT程序汉化中乱码问题

方法2

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwdjpg.html