青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

教父的告白
一切都是紙老虎
posts - 82,  comments - 7,  trackbacks - 0

稍微深入研究過一點 java 的同學,恐怕都知道什么叫做 “反編譯” 。也就是說,隨便拿一個 class 文件,找一個 jad 來,所有的 “智慧結晶” 就全都 “真相大白” 了,跟原先的 source code 相比,區別只是沒有注釋而已。

對于開源軟件開發者來說,這本是無所謂的事,但對于商業開發者而言,這簡直就是噩夢。在 java 的世界,道高一尺魔高一丈(及其反復迭代)的結果是,這件事最終演變得比較詭異,以至于專門誕生了一個名叫 “代碼混淆” 的產業。在我上一次關注的時候,這個領域的最新進展是可以 “混淆” 程序執行的流程,以至于正常的人類閱讀反編譯出來的源碼,將會導致嚴重的腦殘。不過,傳說又出了個叫做 “流程優化器” 的東東……(這個故事未完待續)。

其實,這件事困擾的不僅只是 java ,幾乎所有 “有源代碼” 的程序都有這個煩惱。比如,飽受折磨的還有 php, asp 以及 .net。不知道有沒有高人能從 “機器碼” 反編譯出 C 和 C++ 的源程序呢,反正我挺好奇的。不過,話說回來, “沒有源代碼” 的程序,恐怕還真的沒有。保護源代碼,在我們現如今 “處處是山寨,遍地是豺狼” 的產業現狀之下,似乎仍然是個不得不認真對待的事情。

在源代碼保護的問題上,Erlang 的表現又會如何?今天體驗了一把,應該說,設計得很細致,至于說這樣的設計是否能夠完全杜絕源代碼的泄露,這個問題恐怕仍然需要留給 “專家” 們去研究。好吧,口水就噴到這里,下面上干貨。

目前這個階段,對 Erlang 源代碼的保護,主要是在 debug_info 上做手腳,因為,在 debug_info 里面有完整的源代碼,可以極其輕松的從中 “找回” 源碼(兩個語句而已,在官方文檔之中都有例子)。

先看如何從 Erlang 的 beam 文件獲取源代碼。象這樣的一個簡單程序:

-module(a).
 
-
export([test/0]).
 
test() ->
 
io:format("source code.~n", []).

帶 debug_info 編譯,并運行之。

$ erlc +debug_info a.erl
$ erl -s a test -s c q -noshell
source code.
$

我們可以這樣還原它的源碼:

$ erl
1>  {ok,{_,[{abstract_code,{_,AC}}]}} = beam_lib:chunks(code:which(a), abstract_code]).
{ok,{a,[{abstract_code,
            {raw_abstract_v1,
                [{attribute,1,file,{"./a.erl",1}},
                 {attribute,1,module,a},
                 {attribute,3,export,[{test,0}]},
                 {function,5,test,0,
                     [{clause,5,[],[],[{call,6,{remote,...},[...]}]}]},
                 {eof,7}]}}]}}
2> io:fwrite("~s~n", [erl_prettypr:format(erl_syntax:form_list(AC))]).
-file("./a.erl", 1).

-module(a).

-export([test/0]).

test() -> io:format("source code.~n", []).


ok
3>

看,和源碼幾乎完全一致。

那么,如果我們編譯的時候不帶 debug_info 呢?是的,完全可以。不過,如果你想要在這樣的 beam 上執行 debugger 或者 xref 之類的動作,那么,沒有 debug_info 就做不了。天知道我們會不會有需要做 “現場調試” 的時候呢。有沒有既保留 debug_info 又阻止其他人通過 debug_info 來得到源碼的辦法呢?有,那就是——加密 debug_info 。

首先建立一個 ~/.erlang.crypt 文件,內容如下:

$ cat ~/.erlang.crypt
[{debug_info, des3_cbc, [], "my_source_code_secret_key"}].

這里的 “my_source_code_secret_key” 就被用來生成對 debug_info 加密的密鑰。用 encrypt_debug_info 參數編譯,并運行之。

$ erlc +encrypt_debug_info a.erl
$ erl -s a test -s c q -noshell
source code.

現在拿掉 ~/.erlang.crypt (模擬生產機環境),看看能否正常運行。

$ mv ~/.erlang.crypt ~/.erlang.old.crypt
$ erl -s a test -s c q -noshell
source code.

運行沒問題。此時,是否還能還原源碼呢。

$ erl
1>  beam_lib:chunks(code:which(a), [abstract_code]).
{error,beam_lib,
       {key_missing_or_invalid,"./a.beam",abstract_code}}

這正是我們想要的。

比如說,假如某日我們需要在這臺生產機上做 “現場調試”,那就再加上 ~/.erlang.crypt 文件。作為驗證,我們再執行一次還原源碼的操作。

$ mv ~/.erlang.old.crypt ~/.erlang.crypt
$ erl
1>  {ok,{_,[{abstract_code,{_,AC}}]}} = beam_lib:chunks(code:which(a), abstract_code]).
{ok,{a,[{abstract_code,
            {raw_abstract_v1,
                [{attribute,1,file,{"./a.erl",1}},
                 {attribute,1,module,a},
                 {attribute,3,export,[{test,0}]},
                 {function,5,test,0,
                     [{clause,5,[],[],[{call,6,{remote,...},[...]}]}]},
                 {eof,7}]}}]}}
2> io:fwrite("~s~n", [erl_prettypr:format(erl_syntax:form_list(AC))]).
-file("./a.erl", 1).

-module(a).

-export([test/0]).

test() -> io:format("source code.~n", []).


ok
3>

看 debug_info 還原出來了。

我們藏在 debug_info 中的源碼是被 des3_cbc 算法保護起來的,有興趣的童鞋可以去 wiki 百科了解它的加密強度,解開它的關鍵是 ~/.erlang.crypt 文件,只要它不泄露,那么在生產環境下,我們的代碼就仍然是安全的,也就是說,就算這臺機器被黑掉了,也還原不出源碼(如果我說錯了,請糾正我),而且只要你持有 .erlang.crypt 文件,(在需要的時候)仍然可以進行調試。

實驗之前,確實沒想到 Erlang 還設計了這么一個機制,挺細致的。需要說明的是,上述方案是對 beam 中的 debug_info 進行了加密,從而阻止其他人從中獲取源碼,至于是否還有其他的還原源碼的可能,目前還不是很清楚。比如,理論上,是否有可能通過 beam 之中的 op code 反編譯出原始的 source code 呢?對于這個話題,如果有童鞋知道,請不吝賜教。

posted on 2009-09-07 16:18 暗夜教父 閱讀(728) 評論(0)  編輯 收藏 引用

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理



<2009年9月>
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

常用鏈接

留言簿(2)

隨筆分類

隨筆檔案

文章分類

文章檔案

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲国产va精品久久久不卡综合| 亚洲精品一二| 亚洲日韩视频| 亚洲欧美一级二级三级| 雨宫琴音一区二区在线| 亚洲免费小视频| 亚洲激情国产精品| 看片网站欧美日韩| 久久久久久夜| 欧美成人在线免费视频| 国产一区二区三区在线观看网站| 国产精品网站一区| 99av国产精品欲麻豆| 99精品欧美一区二区三区综合在线| 欧美激情国产高清| 亚洲自拍偷拍一区| 亚洲国产日韩欧美在线动漫| 99亚洲精品| 亚洲人午夜精品免费| 在线看片欧美| 亚洲人成网站在线播| 正在播放亚洲| 亚洲尤物视频在线| 久久精品亚洲一区| 久久亚洲综合网| 欧美成人免费观看| 国产精品色婷婷| 国产一区二区三区直播精品电影| 国产日韩欧美三级| 在线观看视频一区二区欧美日韩| 一区二区三区精品国产| 午夜久久一区| 快射av在线播放一区| 亚洲全部视频| 欧美一区二区三区久久精品茉莉花| 欧美在线亚洲| 欧美电影在线| 午夜精品区一区二区三| 欧美.日韩.国产.一区.二区| 国产精品久久福利| 亚洲在线一区二区三区| 欧美成年人视频网站欧美| 欧美日韩国产黄| 国产日韩在线一区| 欧美日韩国产探花| 久久久久欧美| 亚洲黄色免费网站| 亚洲一区国产精品| 久热国产精品视频| 久久免费少妇高潮久久精品99| 欧美成人乱码一区二区三区| 麻豆精品在线视频| 欧美日韩亚洲成人| 国产精品久久国产精麻豆99网站| 免费亚洲网站| 国产精品va| 国产精品一区二区三区久久| 欧美日韩成人综合在线一区二区 | 久久久xxx| 久久中文精品| 国产精品白丝av嫩草影院| 国产精品久久久久久av下载红粉| 亚洲黄色尤物视频| 久久久精品网| 亚洲一区综合| 国产老女人精品毛片久久| 亚洲人永久免费| 亚洲——在线| 亚洲日本成人网| 午夜亚洲激情| 欧美激情欧美狂野欧美精品| 亚洲精品自在久久| 欧美黑人在线播放| 欧美电影在线| 亚洲欧洲在线视频| 亚洲第一精品久久忘忧草社区| 麻豆精品一区二区综合av| 亚洲精品系列| 亚洲欧美日本国产有色| 极品少妇一区二区三区| 欧美国产91| 欧美三级视频在线观看| 欧美中在线观看| 久久香蕉精品| 亚洲深夜福利在线| 久久成人精品| 99国产精品| 亚洲影院色在线观看免费| 激情五月婷婷综合| 日韩视频永久免费观看| 韩日精品视频| 亚洲美女诱惑| 国产精品免费看| 欧美三级乱码| 欧美日韩国产色站一区二区三区| 午夜激情综合网| 亚洲一区制服诱惑| 一区二区日韩伦理片| 欧美人在线观看| 久久精品国产77777蜜臀| 欧美激情日韩| 久久精品在这里| 亚洲成色777777在线观看影院| 亚洲视频在线一区| 亚洲欧美日韩在线一区| 午夜精品久久久久久久白皮肤| 国产欧美日韩精品在线| 日韩视频在线你懂得| 亚洲一区二区三区在线观看视频| 亚洲日本欧美日韩高观看| 亚洲免费在线视频| 在线天堂一区av电影| 国产亚洲综合精品| 欧美一区二视频在线免费观看| 久久综合久久88| 亚洲美女免费视频| 精品福利av| 欧美成人精品在线视频| 老司机aⅴ在线精品导航| 欧美aⅴ一区二区三区视频| 国产精品成人一区二区三区吃奶| 亚洲激情综合| 欧美日韩黄色大片| 亚洲社区在线观看| 亚洲在线电影| 亚洲精品日日夜夜| 亚洲一区网站| 亚洲精品美女在线| 国产欧美在线观看| 亚洲高清在线精品| 欧美日韩国产首页在线观看| 在线亚洲美日韩| 亚洲毛片在线| 亚洲精品中文字| 久久爱www| 亚洲精品乱码| 久久精品一区二区三区四区| 一区二区三区四区国产| 亚洲一级二级| 亚洲性图久久| 玖玖在线精品| 国内精品视频666| 亚洲激情小视频| 国产在线观看一区| 欧美日韩一区二区在线观看视频| 六月天综合网| 99精品国产在热久久下载| 9l国产精品久久久久麻豆| 亚洲破处大片| 欧美激情亚洲一区| 亚洲人成亚洲人成在线观看图片| 亚洲精品久久久蜜桃| 欧美激情视频一区二区三区在线播放 | 亚洲免费在线观看| 欧美大片免费观看在线观看网站推荐 | 亚洲精品1区2区| 中文一区在线| 欧美www视频在线观看| 国产精品一区二区在线| 欧美在线三级| 欧美在线播放视频| 国模大胆一区二区三区| 欧美一级精品大片| 久久国产加勒比精品无码| 国内精品美女在线观看| 久久久久久久久伊人| 亚洲免费在线视频| 国产一区二区久久精品| 亚洲欧美日韩国产综合| 国产日韩欧美三级| 久久精品国产99| 久久婷婷麻豆| 黄色免费成人| 亚洲每日在线| 国产精品夜夜夜| 久久久久久九九九九| 久久久噜噜噜久久中文字免 | 一区二区三区高清| 正在播放欧美一区| 精品1区2区3区4区| 91久久精品国产91性色| 国产精品久久久久aaaa| 欧美1级日本1级| 国产精品入口| 亚洲精选91| 91久久精品一区二区三区| 亚洲视频在线视频| 亚洲人成网站精品片在线观看| 亚洲欧美精品在线| 亚洲午夜电影网| 最新中文字幕亚洲| 欧美一区1区三区3区公司| 亚洲一区二区免费视频| 久久夜色精品国产噜噜av| 亚洲欧美影音先锋| 女女同性精品视频| 久久精品中文字幕一区二区三区| 欧美巨乳在线| 亚洲经典在线看| 亚洲国产成人在线视频|