解決ilasm.exe無法編譯 IL代碼一例

標 題: 【原創】解決ilasm.exe無法編譯 IL代碼一例
作 者: tease
時 間: 2009-09-05,15:05:46
鏈 接: http://bbs.pediy.com/showthread.php?t=97204

衆所周知,ildasm.exe和ilasm.exe是破解DONET常用工具之一,但是有時候我們會發現有的程序可以用ildasm反編譯,卻無法用ilasm編譯回去。其中部分是由於包含非託管代碼而引起的,這種混合類的程序用ilasm是100%不會成功的,本文也不會討論這種情況。或許更多的時候你會遇到這樣的情況:

錯誤是:Failed to open managed resource file 'xxx.resource'這類程序大多是被{SA}混淆過的。爲什麼會找不到這些資源文件呢?結果我們發現這些資源文件根本沒有被反編譯程序導出來,於是我們用Reflector手動來導出看看。
名稱:  7.JPG查看次數: 482文件大小:  13.6 KB
結果提示無效的文件名。原來程序經過混淆後,將資源名更改成了windows不支持的文件名,那麼當然無法導出這些文件了。那麼解決此問題的辦法就是我們可以在導出的時候將其更改爲一個合法的新資源文件名就行了。但是不要忘了,我們同時還應該在導出後的IL代碼中將調用的舊資源名的地方也要修改成新的資源文件名。代碼方面可以通過GetManifestResourceNames()和GetManifestResourceStream(xxxx)實現。但是爲了把傻瓜精神進行到底,我特別寫了一個程序來方便大家。
名稱:  3.JPG查看次數: 483文件大小:  24.5 KB
第一個選項是自動導出,自動修改IL代碼,正常情況下,被導出的IL代碼是可以被直接編譯成功的,但是程序畢竟是程序,不可能預見到所有的突發情況。那麼大家可以使用第二或者第三個選項自己導出資源文件,自己修改IL代碼了。
耳聽爲虛,眼見爲實,我們拿剛纔那個無法編譯回去的程序試一試。
導出IL代碼後,我們再用ilasm.exe編譯回去看看。
名稱:  4.JPG查看次數: 484文件大小:  27.3 KB
怎麼樣,還不錯吧。

用Reflector打開看看。資源名已經被修正了。
名稱:  6.JPG查看次數: 482文件大小:  6.4 KB
附件提供了不能被反編譯回去的crackme。
如果有更好的意見,歡迎一起討論。另外這個程序是用WPF寫的,需要安裝DONET Framework3.5 SP1或以上版本。


http://bbs.pediy.com/attachment.php?attachmentid=33525&d=1256485356
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章