net項目反編譯
工具:De4Dot + IL SPY和Reflector結合使用
項目:vs10+創建解決方案,每個類庫盡量按照dll名來命名,方便整合,新建web項目先把aspx等文件拷貝進去,注意:bin文件夾不用拷貝
一、沒有混淆的代碼
1.IL SPY反編譯出來的代碼相對干凈
2.Reflector反編譯代碼里面容易出現goto等結構可讀性差,還會加入較多的亂碼代碼
建議:IL SPY導出代碼,往vs項目里拷貝,生成項目時報錯文件可與Reflector反編譯文件對比,方便排查錯誤。
二、有混淆的代碼
先使用De4Dot進行反混淆,反混淆出來的dll在用IL SPY或Reflector進行反編譯
反混淆步驟:
1.1打開 De4Dot 所在文件夾,按住 Shift,右鍵該文件夾 → 選擇“在此處打開命令窗口”也可以打開“命令提示符”,再定位到 De4Dot 所在目錄。
1.2輸入 De4Dot + 要反混淆 .net 文件,如輸入 De4Dot G:\xx\xx.dll 回車,反混淆成功,在 G:\xx\目錄下生成一個反混淆后的 xx-cleaned.dll 文件。
1.3用 IL SPY或Reactor 打開 xx-cleaned.dll 文件源代碼定義的變量和方法已經顯示出來,說明反混淆成功。
三、項目整理
1.vs創建好類庫項目已經web項目,根據各dll層級管理添加好項目引用,第三方dll放專門文件夾里,防止丟失方便查找引用。
2.混淆導出的代碼拷貝到對應的類庫,如:三層代碼,先拷貝Model然后DAL最后BLL,拷貝完成一項生成對應類庫(或生成解決方案,防止錯誤代碼太多)
3.所有類庫代碼處理完成之后處理最為復雜的web項目里的反編譯代碼
3.1、反編譯出來的代碼后綴為.cs,而項目里需要的文件是.aspx.cs,否則項目里的aspx文件與反編譯出來的文件關聯不起來
3.2、批量替換文件名;在當前這個文件夾下面,先新建一個記事本,改后綴為bat,編輯ren *.cs *.aspx.cs(注意*號前面為英文半角空格),保存后雙擊執行;在目錄空白處右鍵刷新查看是否已經修改過來。
如果替換錯了(獨立的類不要替換為aspx.cs)想要恢復.cs新建另一個bat文件內容填寫
@echo off
Setlocal Enabledelayedexpansion
set "str=.aspx"
for /f "delims=" %%i in ('dir /b *.cs') do (
set "var=%%i" & ren "%%i" "!var:%str%=!")
溫馨提醒:批量替換哪個文件夾下面的文件,就在對應文件夾根目錄創建對應的bat文件(多個文件夾多個bat),跨文件夾批量替換暫未找到合適的方法,有熟悉的請告知,謝謝。
3.3、把替換過的文件拷貝到web文件夾下(注意不要直接拖拽到vs里),切換到vs右鍵包含在項目中,aspx和aspx.cs文件就會自動關聯;如果aspx文件與反編譯出來的文件沒有關聯,排查aspx里的Codebehind和Inherits設置是否正確aspx.cs里命名空間,類名是否正確等,確保沒有問題先把aspx和aspx.cs文件排除項目,在右鍵包含在項目中,一般情況下vs會自動把兩個文件關聯在一起。
3.4、包含在項目中分批包含,等把錯誤提示都排查完,整個項目從反編譯到項目整理基本也就完成了
四、記錄
1.反編譯需要耐心,要一點點排錯,越復雜的項目越需要一步步處理,畢竟反編譯完就可以用的項目很少。
2.多學習Reflector反編譯,畢竟是用的比較多的,各搜索引擎解決方案文檔等較全面
五、針對dll里想要修改部分代碼直接再生成新的dll,這樣的工具還沒有找合適的,如果有熟悉的朋友,望留言告知。