亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

干貨 - 如何逆向解決QT程序漢化中的亂碼問題

smartlion / 1680人閱讀

摘要:作者逆向驛站微信公眾號(hào)逆向驛站知乎逆向驛站一款開發(fā)的國外軟件,大概率是沒有做中文支持的,所以你漢化中,不論怎么設(shè)置編碼都一定是亂碼。

作者:逆向驛站
微信公眾號(hào):逆向驛站
知乎:逆向驛站

一款QT開發(fā)的國外軟件,大概率是沒有做中文支持的,所以你漢化中,不論怎么設(shè)置編碼都一定是亂碼。面對(duì)這個(gè)問題,你去互聯(lián)網(wǎng)上找答案,答案卻大多是復(fù)制粘貼的開發(fā)中解決亂碼的文章,可是我們是要逆向中解決,于是吾愛破解、漢化新世紀(jì)等找過來,盤搜搜個(gè)遍,發(fā)現(xiàn)基本不是資源過期就是驢唇不對(duì)馬嘴的抄襲貼,所以我來發(fā)一篇干貨

準(zhǔn)備

【環(huán)境和工具】

win7/xp虛擬機(jī)環(huán)境

pdf2any原版安裝程序(qt開發(fā)的國外程序,不支持中文,無源碼)

ollydbg

Radialix 3

010editor

qt-win-opensource-4.8.2-mingw.exe(相當(dāng)于QT庫支持,核心部件)

qt-creator-opensource-windows-x86-3.3.0.exe(相當(dāng)于編輯器而已)

MinGW.rar(編譯調(diào)試環(huán)境)

最后三個(gè)是QT開發(fā)環(huán)境,搭建起來有利于學(xué)習(xí),當(dāng)然如果你不想玩QT開發(fā)那其實(shí)只用裝第一個(gè)就行了,里面有QT各種庫函數(shù)的源碼,遇到相應(yīng)程序?yàn)g覽源碼即可

【學(xué)習(xí)層次】

生搬硬套,能解決大部分QT漢化中亂碼問題

搞懂搞透,舉一反三


詳解視頻

干貨視頻,放出來盡可以去傳播,但是不要干那種修改我版權(quán)說是自己視頻的事,那就low了!

https://v.qq.com/x/page/o0825...


實(shí)戰(zhàn)圖文

一.某QT程序漢化中遇亂碼

QT開發(fā)的國外軟件,若是沒有特意做中文支持,不論怎么搞,都是亂碼
例如漢化下圖中的標(biāo)題registration

亂碼

二.逆向分析尋找原因

1.OD中定位標(biāo)題字符串

程序載入OD,定位"registration",并查看,程序中都有那些位置會(huì)調(diào)用這個(gè)字符串,如圖

發(fā)現(xiàn)有三個(gè)地方調(diào)用了這個(gè)字符串地址,全部下斷點(diǎn)

2.運(yùn)行觀察

斷點(diǎn)下好后,運(yùn)行程序,觀察調(diào)用字符串的邏輯流程,發(fā)現(xiàn)下的三個(gè)斷點(diǎn)中有兩個(gè)在程序啟動(dòng)會(huì)被調(diào)用,調(diào)用的目的分別是作為兩個(gè)QT庫函數(shù)的參數(shù),如下圖

3.正向查閱相關(guān)函數(shù)源碼

這里多說一句,玩逆向不只光玩逆向,一直強(qiáng)調(diào)逆向是一種思維,逆向破解的逆向就是開發(fā),活用開發(fā)資料,逆向破解中往往事半功倍。
安裝QT后就可以看QT各種庫函數(shù)的源碼和資料,如果你想更深入的了解,給吃透的話,最好的方式莫過于自己開發(fā),自己逆向分析。
開始尋找目標(biāo)函數(shù)源碼,everything搜兩個(gè)函數(shù)類命,QCoreApplication和QMetaObject,如下圖

打開源碼,閱讀相關(guān)函數(shù),源碼如下

QCoreApplication::translate函數(shù)定義,發(fā)現(xiàn)核心參數(shù)就是這個(gè)枚舉類型,當(dāng)枚舉類型為0的時(shí)候中文是亂碼,當(dāng)是1的時(shí)候中文沒問題

QMetaObjcet::tr函數(shù)實(shí)現(xiàn),發(fā)現(xiàn)這個(gè)函數(shù)的實(shí)質(zhì)其實(shí)是以枚舉類型參數(shù)為0去調(diào)用QCoreApplication::translate

4.逆向中驗(yàn)證上面的正向源碼

從新載入OD,重新運(yùn)行,根據(jù)上面正向查閱的源碼資料觀察相應(yīng)的兩個(gè)庫函數(shù)在逆向中的體現(xiàn),如下圖


可見,兩個(gè)函數(shù)其實(shí)最終調(diào)用的都是第一個(gè)函數(shù),而核心關(guān)鍵點(diǎn)就是枚舉類型參數(shù)的值,那么我們?cè)诘谝粋€(gè)庫函數(shù)入口【6A2B5818】下斷點(diǎn)動(dòng)態(tài)運(yùn)行一下,堆棧中觀察參數(shù)的變化,如下動(dòng)圖

5.總結(jié)所有線索

標(biāo)題字符串Registration被函數(shù)QCoreApplication::translate作為參數(shù)

標(biāo)題字符串Registration被函數(shù)QMetaObeject::tr作為參數(shù)

兩個(gè)函數(shù)核心都是QCoreApplication函數(shù)

QCoreApplication控制中文亂碼核心參數(shù)是枚舉類型,值0亂碼,1是utf-8支持中文

QMetaObeject::tr調(diào)用的QCoreApplication::translate關(guān)鍵枚舉類型是0,所以標(biāo)題最后是不支持中文的,導(dǎo)致一漢化產(chǎn)生亂碼

三、修改QT庫QTCore4.dll解決問題

其實(shí)上面的分析如果已經(jīng)完全搞懂了,其實(shí)就已經(jīng)知道怎么解決了,而且解決方法有很多,但是都并不能保證所有程序的通用性,畢竟一個(gè)開發(fā)一個(gè)樣,這次他用這個(gè)庫函數(shù),沒準(zhǔn)下次他用另外一個(gè),所以吃透后,具體問題具體分析才是任何武功中的“無招勝有招”!針對(duì)于這個(gè)案例,解決的思路就至少有以下三種

程序領(lǐng)空修改,讓其調(diào)用的QMetaObeject::tr更換為QMetaObeject::trUtf8(閱讀源碼就會(huì)發(fā)現(xiàn)有這個(gè)函數(shù),為什么此案例他沒調(diào)用這個(gè),因?yàn)槭菄廛浖?,他壓根沒想支持中文,所以他用的是tr而不是trutf8),這樣修改的好處,可以相對(duì)保證漢化者的勞動(dòng)成果,畢竟修改的地方可能會(huì)多,而且只在程序領(lǐng)空修改,但通用性差,換個(gè)程序百分百?zèng)]用

修改庫函數(shù)QMetaObeject::tr,讓他調(diào)用QCoreApplication::translate時(shí),枚舉參數(shù)設(shè)置成1,也就是壓根用逆向的方式把QMetaObeject::tr函數(shù)改成了QMetaObeject::trUtf8,好處通用性較強(qiáng)。

修改QCoreApplication::translate內(nèi)部邏輯,讓枚舉類型為0時(shí),也按為1的流程邏輯走(最常見的爆破套路),有點(diǎn)通用性很強(qiáng),極大程度適用很多QT程序漢化亂碼問題

后兩種方法都是修改QT庫函數(shù),所以最終體現(xiàn)是修改了QTcore4.dll這個(gè)文件,方法分別如下

方法1

方法2

修改后,生成新的qtcore4.dll文件,替換原版qtcore4.dll就會(huì)發(fā)現(xiàn),再去漢化此軟件,亂碼問題已經(jīng)解決了。我們依然以漢化題目為示例,OD中修改數(shù)據(jù)(如果你是大量漢化工作就別用OD了否則累死哦),注意要是utf-8的內(nèi)存編碼形式,關(guān)于編碼常識(shí)可以在公眾號(hào)內(nèi)回復(fù)“編碼”閱讀,也可以點(diǎn)此鏈接 編碼常識(shí) ,修改標(biāo)題registration為“測(cè)試”,“測(cè)試”的utf-8內(nèi)存編碼模式16進(jìn)制數(shù)據(jù)是E6 B5 8B E8 AF 95 ,轉(zhuǎn)換方法如下,有興趣的也可以自己寫工具

notepad++寫入內(nèi)容,轉(zhuǎn)碼

010editor查看16進(jìn)制內(nèi)容

OD改字符串

亂碼解決


文章中涉及軟件、課件、源碼等均在網(wǎng)盤,為避免網(wǎng)盤鏈接失效,公眾號(hào)中回復(fù):網(wǎng)盤

歡迎關(guān)注微信公眾號(hào):逆向驛站


文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/11463.html

相關(guān)文章

  • 手動(dòng)漢化 PyCharm 的過程

    摘要:默認(rèn)是英文界面,如果想漢化它,網(wǎng)上有很多相關(guān)的漢化丁可以下載。 showImg(https://segmentfault.com/img/remote/1460000016400154); PyCharm 默認(rèn)是英文界面,如果想漢化它,網(wǎng)上有很多相關(guān)的漢化?丁可以下載。 我的 Pycharm 版本是 pycharm-professional-2018.2.2,這里僅簡單展示手動(dòng)漢化的原...

    RayKr 評(píng)論0 收藏0
  • 如何把phpStorm打造成自己的專屬IDE?

    摘要:本身是一款收費(fèi)的軟件,有經(jīng)濟(jì)基礎(chǔ)的還是建議購買注冊(cè)號(hào),支持正版。選擇自己喜歡的風(fēng)格,即可。如何安裝自己下載的主題在官方主題下載自己喜歡的主題,下載下來的是格式的,然后將文件拷貝到的配置目錄里。 php開發(fā)神器之一,必然會(huì)說到phpStorm,工具的強(qiáng)大之處是有目共睹的,開發(fā)工具即使再強(qiáng)大,功能再齊全,也是一種工具,重要的是你怎么看待它和使用它。之前一直用的zend studio,最近試...

    Forelax 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<