.net下程式的暴力修改2

看雪資料發表於2004-09-23

最近為了使微控制器的通訊擴充套件到Internet使用了Lantronix公司生產的XPort(串列埠―網路口資料轉發模組),在使用它帶的軟體DeviceInstaller進行軟體的配置的時候,發現安裝完畢啟動時出現異常,異常資訊如下

未處理的“System.NotSupportedException”型別的異常出現在 mscorlib.dll 中。

其他資訊: 區域性“zh-CHS”是非特定區域性。它不能用於格式化和分析,因此不能設定為執行緒的當前區域性。

使用。Net反編譯工具,開啟主程式XTool.exe,找到主窗體,此軟體沒有經過混淆,程式碼很清晰,在Form1種
public Form1()
{   
CultureInfo info1;
Version version1;
string text1;
DialogResult result1;
DialogResult result2;
string text2;
string text3;
string[] array1;
int num1;
ListViewColumnSorter sorter1;
base..ctor();
CultureInfo.CurrentCulture.ClearCachedData();
info1 = CultureInfo.CurrentCulture;
if (info1.TwoLetterISOLanguageName == "zh")
{
 Thread.CurrentThread.CurrentCulture = new CultureInfo(info1.Parent.LCID);// //此部分出錯
Thread.CurrentThread.CurrentUICulture = new CultureInfo(info1.Parent.LCID);// 
 }
this.InitializeComponent();
 
}
就是Thread.CurrentThread.CurrentCulture = new CultureInfo(info1.Parent.LCID);將new 的
CultureInfo(info1.Parent.LCID)賦給Thread.CurrentThread.CurrentCulture,出現了異常,因此不能設定為執行緒的當前區域性的異常。可能是程式為了比較好的支援國際化,而這樣寫的帶程式碼,看來有些多餘。看來只要不讓出錯的語句執行即可,而這最好的實現方式就是修改比較條件。

可以使用兩種方法進行修改
1.  使用ildasm進行反彙編,得到中間程式碼,修改中間程式碼,然後重新編譯即可。
使用ildasm進行反彙編後得到一大堆程式碼,下面僅僅列出相關的
// 相關的彙編程式碼
.maxstack 6
.locals (CultureInfo V_0, Version V_1, string V_2, Exception V_3, DialogResult V_4, DialogResult V_5, string V_6, string V_7, string[] V_8, int V_9, ListViewColumnSorter V_10)
.try L_0132 to L_014a catch object L_014a to L_014d
.try L_014d to L_0574 catch Exception L_0574 to L_0584
.try L_0739 to L_0754 catch object L_0754 to L_0768
L_0000: ldarg.0 
L_0001: call Form..ctor
L_0006: call CultureInfo.get_CurrentCulture
L_000b: callvirt CultureInfo.ClearCachedData
L_0010: call CultureInfo.get_CurrentCulture
L_0015: stloc.0 
L_0016: ldloc.0 
L_0017: callvirt CultureInfo.get_TwoLetterISOLanguageName
L_001c: ldstr "zh" ------------將此處的字串改為aa


再使用ilasm 將修改後的相關程式碼進行編譯得到新程式即可。重新編譯後,生成的程式比原來的小了(可能有部分資源沒有編譯進去),不知道什麼原因,但是沒有發現影響使用的狀況

2.  簡單的處理方式,一般的.net程式中使用的常量字串,在.net程式中都有相應的儲存位置(儲存格式為unicode 形式),所以使用WinHex開啟程式,查詢字串zh,選中unicode項,發現檔案中僅能搜尋到一次,毫無疑問,就是他了,直接將字串
7A 00 68 00 改為其他的不同位元組即可。存檔後,程式正常執行

相關文章