徹底破解Dotfuscator - 中國WEB開發者網絡 (http://www.webasp.net) -- 技術教程 (http://www.webasp.net/article/) --- 徹底破解Dotfuscator (http://www.webasp.net/article/15/14201.htm) |
| -- 作者:未知 -- 發佈日期: 2004-10-26 |
| 前陣子有網友叫我幫忙破解一個控件.用Dotfuscator混淆了的,字符串也加密成這種形式
IL_2b19: ldstr bytearray (9F FA 9A FC 9E FE 8B 00 6E 02 71 04 ) // ........n.q. IL_2b1e: call string a$PST06000001(string) .net軟件的保護方法無非就是限試用時間,限訪問IP,用license key,運行時顯示版權提示這幾種. 限時間或IP是最容易搞定的,不論有沒有被混淆,他都要調用framework的東西,而framework裡的東西無法混淆,所以查找DateTime, Request之類的字眼,幾下就搞定. 如果用key,也容易跟蹤,起碼他對外曝露了一個類來接收key.如果控件在檢查到在非法使用時拋出個異常,那是個更愚蠢的做法,因為.net會提供出錯時的調用堆棧,方便我跟蹤.顯示版權提示而且字符給混淆的就最難辦了(沒混淆的倒是容易,查找就是了)因為他從來不會像正式版那樣工作. 唯一難倒我的控件是Intersoft WebGrid.net 3.5,因為他用Remotesoft Protector處理過.這Protector不算混淆器,他是把.net的代碼做成win32鏡像,只把元數據保留.破他處理過的控件和破加了密的win32程序一樣難,我沒這樣的本事.當然使用這東西的軟件也很少,因為太貴了,要上千美金 這次破的是一個Chart控件的試用版,他在渲染圖表時留下了淡淡的聲明版權的水印.要破他只能從他混淆字符串的函數入手了,就是string a$PST06000001(string).要寫個逆運算的函數 用反編譯器反編譯了這個函數: private static string a(string A_0) { char[] chs = new char[(uint)A_0.Length]; int i = 732379897; for (int j = 0; j < (int)chs.Length; j++) { char ch = A_0.Chars(j); byte b1 = (byte)(ch & '\u00ff' ^ i++); byte b2 = (byte)(ch >> '\b' ^ i++); chs[j] = (ushort)(b2 << 8 | b1); } return string.Intern(new string(chs)); } 第一眼看來,好像很難下手.混淆過程竟然又AND又移位又XOR又OR,還有兩個中間變量,然後又混在一起...但是這個算法一定是可逆的,不然他怎麼能被加密然後解密.果然,仔細一看,裡面有很多地方是嚇唬人的.本來AND和OR根本是不可逆的,可以肯定相關的運算是廢的: 第一句byte b1 = (byte)(ch & '\u00ff' ^ i++);b1是8位整數,所以ch & ff根本不會改變什麼,於是可以簡化為(byte)(ch ^ i++) 第二句byte b2 = (byte)(ch >> '\b' ^ i++);沒看到什麼不妥,ch是16位的,右移8位可能會有影響 第三句chs[j] = (ushort)(b2 << 8 | b1);又在唬弄人了,b2是8位,右移8就是0了,0|b1就是b1 好了,簡化後的函數是 private static string a(string A_0) { char[] chs = new char[(uint)A_0.Length]; int i = 732379897; for (int j = 0; j < (int)chs.Length; j++) { char ch = A_0.Chars(j); chs[j] = (byte)(ch ^ i++); i++; } return string.Intern(new string(chs)); } 這下就簡單了,^的逆運算就是^,他本身就是加密方法!我可以根據水印的字符去il裡查找了,不過這裡還有個唬人的地方,因為這函數用byte來處理,所以混淆後的高8位應該是0,但是il裡混淆的字符串高8位還有東西,明顯是隨機加上去的,對解密結果沒影響.於是,我把加密後的字符用通配符來查找,例如9F ?? 9A ?? .找到了顯示版權信息的函數了,把它清空,搞定! 這竟然還是ms推薦的混淆器... Posted by Yok at September 7, 2004 09:48 PM | TrackBack Comments Yok 竟然成為 .Net 破解高手了? |
| webasp.net |