好康道相報
※加入部落軌道,讓你的部落格有更多人知道 《按此加入》《使用心得
※欲轉貼本站文章者,只要註明出處及網址即可,不需我同意了,謝謝您的配合
※留悄悄話的網友請注意:如果您非痞客邦會員(包含使用FB/Google+帳號),是看不到回覆的喔
※痞客邦會自動將疑似廣告留言隱藏,因此若留言後看不到,可能是被系統自動隱藏了,由於我現在很久才會開一次網誌,有看到時我才會將非廣告留言解開,敬請見諒

相信大家都知道,.NET跟Java一樣編譯之後都會產生中介碼
由於中介碼有固定規則的排列組成(組合語言或機械碼的特徵)(←感謝閒逛的過客更正
因此很容易能夠轉回原來的語言
雖然這類型的反組譯程式已經行之有年了
不過我還是昨天才接觸到一款很棒的.NET反組譯工具 Red Gate's Reflector
這個工具非常強大,只要輸入.NET製作的exe或dll
就可以直接看到他的程式碼喔
(非常感謝克洛洛的提醒,我才知道我寫的程式都被看光光了)

官方網站(內有免費的下載點)

我試用過的結果,真的非常強大
我隨便拿了一個我幫人狼遊戲寫的書記程式
結果根本完全被看光嘛!太強大了
雖然有些地方還是有點不同,比方說某段程式自動被加上GoTo指令
或是原始碼自動補上對某些變數的轉型...等等

Reflector_1.gif

而且厲害的地方在於,他還可以把程式碼轉成不同的Code顯示
比方說上面是C#顯示的程式碼(我的程式是用VB 2005寫的)
下面就是用Visual Basic的方式來顯示的程式碼
不過不知為何Visual Basic的字串都會變成ChrW(編號)的方式來顯示
而C#就能直接顯示出來?
可能是因為編譯方式的不同吧

Reflector_2.gif 

還有一個網站能夠線上反組譯喔,只要上傳程式上去即可
不過免費版只能看前十個method,所以實用性並不大

Salamander .NET Decompiler

或許有人會問,程式設計師有沒有辦法不讓別人反組譯程式碼?
因為MSIL設計的關係,事實上是沒辦法的
但還是有辦法讓程式碼作高度的模糊化
像是把funtion name改成a跟b這種東西,而且把程式邏輯整個搞亂
讓人就算打開也沒辦法看懂
這是克洛洛幫我加密過的程式,真是切得很好很強大

Reflector_3.gif 

這種模糊化程式其實也很多
最常見的應該是Visual Studio內附的Dotfuscator
為了這個程式我還特地把Visual Studio 2008裝起來
不過每次模糊,他都說我用.NET Framework 2.0的專案無法模糊...
不知道是不是我操作錯誤了

我也去用過其他軟體如Spices Decompiler
只是免費版好像只能模糊化function name
無法模糊化裡面的程式碼架構
不意外,這些軟體都是要錢的...
等我找到免費又好用的MSIL模糊工具,會再分享的

還是要提醒一下,希望大家都能把這個程式用在正途上(ex. 觀摩學習)
不要去盜用別人寫的程式碼喔

蕭雲 發表在 痞客邦 PIXNET 留言(3) 人氣()


留言列表 (3)

發表留言
  • 大鐵
  • 嗯嗯,我現在也才發現自己開發的專案都沒有模糊化說.... orz
    看了這一篇後,真的是要很小心~~
  • VB跟Java這種bytecode的東西實在是太容易轉回去了="=
    真的要小心別人盜用啊...

    蕭雲 於 2009/04/21 15:40 回覆

  • 佶也
  • 的確
    要注意
    並有
    公德心
  • 閒逛的過客
  • >>由於中介碼有高度抽象化的特性
    這句話聽起來怪怪的

    中介碼指的.net虛擬機用的指令,基本上像組合語言
    可能像這樣
    MOV A,12
    ADD A,25
    mov ax,[bp+4] ;AX=年
    mov bx,[bp+6] ;BX=月
    也許.net虛擬機指令可能會高階點


    而抽象化(文中)指的是物件導向的基本概念,
    例:會員管理,會員分一般,VIP,特級VIP
    抽象化出基礎會員,再來實作基礎會員就可以得到物件導向的好處

    所以中介碼,抽象化,這兩個詞用在一起蠻奇怪的,至少我是無法了解這句的語意

    也許改這樣會好一點
    由於中介碼有固定規則的排列組成(組合語言或機械碼的特徵)
  • 謝謝你的解釋,應該是我自己的觀念錯誤
    所以才會聽起來怪怪的
    聽你一說我就懂了,感謝你喔^^

    蕭雲 於 2009/06/02 15:04 回覆