二進位制修復中文亂碼的問題

_THINCT發表於2021-11-16

解決中文亂碼

問題描述

程式呼叫第三方日誌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鎖定該程式碼片段,打補丁。

 

結論

通過驗證之後,匯出的日誌亂碼問題解決了。

 

相關文章