好友
阅读权限25
听众
最后登录1970-1-1
|
罗萨
发表于 2020-6-16 12:00
本帖最后由 罗萨 于 2020-6-16 12:01 编辑
https://www.52pojie.cn/forum.php?mod=viewthread&tid=1200885&page=1#pid32439535
求助区看到法王的帖子,简单看了一眼,qt汉化都有乱码,网上资料只有qt4乱码解决方法的,下载了帖子中的软件开搞.
因为软件是64位的,所以说得用x64dbg来调试.
直接搜索要汉化的字符串,本帖以"Escaped string"为例.
搜索到3个字符串,全部下断点.
例子对应的位置是这里,断点断下来之后.
注意看这三行.
qword ptr [0000000140800810 <binaryninja.&?fromAscii_helper@QString@@CAPEAU?$QTypedArrayData@G@@PEBDH@Z>]=<qt5core.?fromAscii_helper@QString@@CAPEAU?$QTypedArrayData@G@@PEBDH@Z>
可以看到软件调用了fromAscii_helper()函数,搜索一顿.函数原型为
QString QString::fromAscii(const char *str, int size)
那么看到这里就明白了,参数1为字符串,参数2为字符串的大小
至于为什么乱码说到底还是因为编码的问题,因为软件使用的ascii编码,我们用winhex等工具修改字符串的话是utf8,所以我们手动转换一下
这里用个简单的方法
新建记事本内容为"转义字符串"保存一下,c32中可以看到16进制为
EFBBBFE8BDACE4B989E5AD97E7ACA6E4B8B2
但是这个字符串要远远比原来字符串保存的位置要长,所以随便找个空地址填进去
000000013FBB8E9B | 48:8D0D 36C4C500 | lea rcx,qword ptr ds:[1408152D8] | rcx:PEB.InheritedAddressSpace, 00000001408152D8:"Escaped string"
在把这里的指针指向刚刚填数据的地址,同时上面的
000000013FBB8E98 | 8D53 0E | lea edx,qword ptr ds:[rbx+E] |
这一句的[rbx+E]里的E就是字节的长度,修改为刚刚替换数据的长度12
运行一下,ok没问题了
这里只是提供个思路,如果想汉化的内容比较多的话可以根据这三句代码的特征快速定位,然后补个区段把编码转换过后的字节填进去修改字节长度.当然 这得自己写个工具来实现了
|
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|