摘要:作者逆向驛站微信公眾號逆向驛站知乎逆向驛站一款開發的國外軟件,大概率是沒有做中文支持的,所以你漢化中,不論怎么設置編碼都一定是亂碼。
作者:逆向驛站
微信公眾號:逆向驛站
知乎:逆向驛站
一款QT開發的國外軟件,大概率是沒有做中文支持的,所以你漢化中,不論怎么設置編碼都一定是亂碼。面對這個問題,你去互聯網上找答案,答案卻大多是復制粘貼的開發中解決亂碼的文章,可是我們是要逆向中解決,于是吾愛破解、漢化新世紀等找過來,盤搜搜個遍,發現基本不是資源過期就是驢唇不對馬嘴的抄襲貼,所以我來發一篇干貨
【環境和工具】
win7/xp虛擬機環境
pdf2any原版安裝程序(qt開發的國外程序,不支持中文,無源碼)
ollydbg
Radialix 3
010editor
qt-win-opensource-4.8.2-mingw.exe(相當于QT庫支持,核心部件)
qt-creator-opensource-windows-x86-3.3.0.exe(相當于編輯器而已)
MinGW.rar(編譯調試環境)
最后三個是QT開發環境,搭建起來有利于學習,當然如果你不想玩QT開發那其實只用裝第一個就行了,里面有QT各種庫函數的源碼,遇到相應程序瀏覽源碼即可
【學習層次】
生搬硬套,能解決大部分QT漢化中亂碼問題
搞懂搞透,舉一反三
干貨視頻,放出來盡可以去傳播,但是不要干那種修改我版權說是自己視頻的事,那就low了!
https://v.qq.com/x/page/o0825...
一.某QT程序漢化中遇亂碼
QT開發的國外軟件,若是沒有特意做中文支持,不論怎么搞,都是亂碼
例如漢化下圖中的標題registration
亂碼
二.逆向分析尋找原因
1.OD中定位標題字符串
程序載入OD,定位"registration",并查看,程序中都有那些位置會調用這個字符串,如圖
發現有三個地方調用了這個字符串地址,全部下斷點
2.運行觀察
斷點下好后,運行程序,觀察調用字符串的邏輯流程,發現下的三個斷點中有兩個在程序啟動會被調用,調用的目的分別是作為兩個QT庫函數的參數,如下圖
3.正向查閱相關函數源碼
這里多說一句,玩逆向不只光玩逆向,一直強調逆向是一種思維,逆向破解的逆向就是開發,活用開發資料,逆向破解中往往事半功倍。
安裝QT后就可以看QT各種庫函數的源碼和資料,如果你想更深入的了解,給吃透的話,最好的方式莫過于自己開發,自己逆向分析。
開始尋找目標函數源碼,everything搜兩個函數類命,QCoreApplication和QMetaObject,如下圖
打開源碼,閱讀相關函數,源碼如下
QCoreApplication::translate函數定義,發現核心參數就是這個枚舉類型,當枚舉類型為0的時候中文是亂碼,當是1的時候中文沒問題
QMetaObjcet::tr函數實現,發現這個函數的實質其實是以枚舉類型參數為0去調用QCoreApplication::translate
4.逆向中驗證上面的正向源碼
從新載入OD,重新運行,根據上面正向查閱的源碼資料觀察相應的兩個庫函數在逆向中的體現,如下圖
可見,兩個函數其實最終調用的都是第一個函數,而核心關鍵點就是枚舉類型參數的值,那么我們在第一個庫函數入口【6A2B5818】下斷點動態運行一下,堆棧中觀察參數的變化,如下動圖
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
方法2
修改后,生成新的qtcore4.dll文件,替換原版qtcore4.dll就會發現,再去漢化此軟件,亂碼問題已經解決了。我們依然以漢化題目為示例,OD中修改數據(如果你是大量漢化工作就別用OD了否則累死哦),注意要是utf-8的內存編碼形式,關于編碼常識可以在公眾號內回復“編碼”閱讀,也可以點此鏈接 編碼常識 ,修改標題registration為“測試”,“測試”的utf-8內存編碼模式16進制數據是E6 B5 8B E8 AF 95 ,轉換方法如下,有興趣的也可以自己寫工具
notepad++寫入內容,轉碼
010editor查看16進制內容
OD改字符串
亂碼解決
文章中涉及軟件、課件、源碼等均在網盤,為避免網盤鏈接失效,公眾號中回復:網盤
歡迎關注微信公眾號:逆向驛站
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/11463.html
摘要:默認是英文界面,如果想漢化它,網上有很多相關的漢化丁可以下載。 showImg(https://segmentfault.com/img/remote/1460000016400154); PyCharm 默認是英文界面,如果想漢化它,網上有很多相關的漢化?丁可以下載。 我的 Pycharm 版本是 pycharm-professional-2018.2.2,這里僅簡單展示手動漢化的原...
摘要:本身是一款收費的軟件,有經濟基礎的還是建議購買注冊號,支持正版。選擇自己喜歡的風格,即可。如何安裝自己下載的主題在官方主題下載自己喜歡的主題,下載下來的是格式的,然后將文件拷貝到的配置目錄里。 php開發神器之一,必然會說到phpStorm,工具的強大之處是有目共睹的,開發工具即使再強大,功能再齊全,也是一種工具,重要的是你怎么看待它和使用它。之前一直用的zend studio,最近試...
閱讀 3005·2021-10-12 10:12
閱讀 3052·2021-09-22 16:04
閱讀 3287·2019-08-30 15:54
閱讀 2602·2019-08-29 16:59
閱讀 2902·2019-08-29 16:08
閱讀 868·2019-08-29 11:20
閱讀 3492·2019-08-28 18:08
閱讀 648·2019-08-26 13:43