C#代碼反編譯 得到項目可運行源碼 經驗分享
今天在網上看到了編輯了好幾次,老是出錯,作者所做的反編譯,并不是'破解',我們這篇文章要跟大家分享的是:用Reflector將C#的開發(fā)的軟件[項目](此文中所說的是winForm項目,對于.net項目可以借鑒或參考)的項目代碼還原——反編譯得到可運行項目源碼。其使用的前提或情況是:公司原來請人開發(fā)的'配餐軟件(幼兒園版)',現(xiàn)有客戶咨詢想買,并且軟件中存在一些問題需改,——不是本人開發(fā)的,該軟件也無源碼,想修改只能想辦法得到軟件的源碼。詳細的'破解'方法記錄在下,方便自己以后查看!(ps: '破解'的方法,自己之前就摸索過。但困于反編譯之后的error比較多,沒有耐心,有的問題感覺比較離奇,試了幾次不行就放棄了 ——這就間接的說明:真正的黑客,應該都是比較有耐心的,呵呵..., 但做軟件開發(fā),又何嘗不需要這樣?!)
a.使用到的工具:Reflector,具體的說是:Reflector插件File disassembler(具體是什么和how to use,直接上網查)。
b. 打開Reflector,選擇要'破解'的軟件(.exe)主程序,再選擇并點擊 如圖: #FormatImgID_0#, 在右側出現(xiàn)的 程序集(輸出)類型選擇界面 選擇類型'windows Appliction' (因為是winForm應用程序,如果是選擇的其它 如'class ...'類庫,則需要在之后的步驟中,改變項目屬性中的 輸出類型,不建議這樣操作),如圖:#FormatImgID_1#
點擊 生成 即可 得到此主程序集的源碼,其它的相關程序集再如此操作即可! ——不要以為大功告成,這只是第一步,麻煩的在后面!
c.將生成的源碼 在Vs中打開(項目), 先試著運行下,(一般)會報錯,排除'xxx程序集不存在'這類的錯誤,我所遇到的如下:
using System.Collections.Generic;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
[CompilerGenerated]
internal class <PrivateImplementationDetails>{1FF4F699-35E0-4117-BDBC-9E44A1B0F9F5}
{
internal static Dictionary<string, int> $$method0x600012e-1;
internal static Dictionary<string, int> $$method0x6000137-1;
internal static Dictionary<string, int> $$method0x6000137-2;
internal static Dictionary<string, int> $$method0x600014a-1;
internal static Dictionary<string, int> $$method0x6000169-1;
internal static Dictionary<string, int> $$method0x60001b6-1;
internal static __StaticArrayInitTypeSize=20 $$method0x6000213-1; // data size: 20 bytes
internal static __StaticArrayInitTypeSize=20 $$method0x6000213-2; // data size: 20 bytes
internal static __StaticArrayInitTypeSize=20 $$method0x6000213-3; // data size: 20 bytes
internal static __StaticArrayInitTypeSize=20 $$method0x6000213-4; // data size: 20 bytes
[StructLayout(LayoutKind.Explicit, Size=20, Pack=1)]
private struct __StaticArrayInitTypeSize=20
{
}
}