好康道相報
※加入部落軌道,讓你的部落格有更多人知道 《按此加入》《使用心得
※欲轉貼本站文章者,只要註明出處及網址即可,不需我同意了,謝謝您的配合
※留悄悄話的網友請注意:如果您非痞客邦會員(包含使用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 回覆

找更多相關文章與討論