當前位置:開發者網絡 >> 技術教程 >> ASP教程 >> 性能優化 >> 內容
精彩推薦
分類最新教程
分類熱點教程
    
徹底破解Dotfuscator
作者:未知
日期:2004-10-26
人氣:
投稿:snow(轉貼)
來源:未知
字體:
收藏:加入瀏覽器收藏
以下正文:
前陣子有網友叫我幫忙破解一個控件.用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 破解高手了?

相關文章: