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

教父的告白
一切都是紙老虎
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>
            欧美涩涩视频| 欧美搞黄网站| 在线观看91精品国产麻豆| 国产精品视频网| 国产区日韩欧美| 国模精品一区二区三区| 国内外成人免费激情在线视频网站| 国产日韩在线一区二区三区| 国产一区二区三区在线观看视频 | 国产精品久久久久一区| 欧美视频不卡| 国产欧美日韩精品专区| 激情综合色综合久久综合| 亚洲精品美女久久7777777| 一本色道久久88精品综合| 欧美一区二区黄| 蜜桃av一区| 亚洲美女网站| 欧美在线网站| 欧美人成在线视频| 激情综合激情| 国产精品99久久99久久久二8| 久久激五月天综合精品| 最近看过的日韩成人| 午夜精品在线观看| 欧美黄网免费在线观看| 国产丝袜美腿一区二区三区| 亚洲久久一区| 久久综合福利| 亚洲视频在线免费观看| 欧美阿v一级看视频| 国产精品美女久久久| 91久久中文字幕| 久久久亚洲国产天美传媒修理工| 亚洲精品免费电影| 免费人成精品欧美精品| 国产综合久久久久久鬼色| 一区二区欧美激情| 欧美成人午夜| 久久久久国产精品一区二区| 国产精品久久久久9999| 一区二区电影免费在线观看| 欧美xart系列在线观看| 欧美综合国产精品久久丁香| 国产美女精品| 午夜亚洲性色福利视频| 99视频精品| 欧美久久久久久| 亚洲国产天堂久久综合网| 久久久久久亚洲精品杨幂换脸| 亚洲欧美日本日韩| 国产精品一区久久久| 午夜欧美精品| 亚洲一品av免费观看| 欧美午夜www高清视频| 亚洲少妇一区| 亚洲欧美日韩成人| 国产精品亚洲网站| 亚洲一区二区三区四区五区黄| 最新日韩在线视频| 欧美黑人在线播放| 日韩亚洲精品电影| 亚洲国产aⅴ天堂久久| 欧美1区2区| 亚洲另类自拍| 亚洲精品自在久久| 国产精品高潮呻吟久久av黑人| 99视频国产精品免费观看| 亚洲日本aⅴ片在线观看香蕉| 欧美日韩ab片| 亚洲欧美清纯在线制服| 午夜天堂精品久久久久| 国产一区自拍视频| 欧美福利视频一区| 欧美激情视频给我| 在线亚洲伦理| 亚洲一区二区三区激情| 国产亚洲女人久久久久毛片| 久久久女女女女999久久| 久久天天躁狠狠躁夜夜爽蜜月| 亚洲成在人线av| 亚洲美女精品久久| 国产女人aaa级久久久级| 久久在线免费观看视频| 美脚丝袜一区二区三区在线观看| 亚洲黄色影院| 亚洲天堂av在线免费| 极品少妇一区二区三区精品视频| 亚洲国产欧美一区二区三区同亚洲| 欧美日韩成人综合| 久久精品国产91精品亚洲| 久久午夜羞羞影院免费观看| 一区二区三区www| 性亚洲最疯狂xxxx高清| 亚洲精选视频免费看| 一区二区免费看| 尤物网精品视频| 国产精品99久久久久久白浆小说| 国产日韩成人精品| 欧美电影打屁股sp| 国产精品一级久久久| 国产精品乱人伦一区二区| 久久免费黄色| 国产精品不卡在线| 亚洲高清电影| 国产日韩精品一区二区浪潮av| 亚洲国产mv| 国产亚洲综合精品| 一二美女精品欧洲| 亚洲国产欧美不卡在线观看| 午夜天堂精品久久久久| 亚洲视频一区二区在线观看| 欧美一区二区在线观看| 亚洲一区二区日本| 欧美精品日韩三级| 欧美粗暴jizz性欧美20| 国内精品久久久久国产盗摄免费观看完整版| 亚洲电影天堂av| 狠狠88综合久久久久综合网| av成人免费在线观看| 亚洲国产成人精品女人久久久| 亚洲欧美综合v| 中文日韩在线视频| 欧美精品色综合| 欧美高清视频一区二区三区在线观看 | 亚洲精品视频一区| 久久久久一区二区三区| 欧美在线观看视频在线| 国产精品久久久久久久午夜片| 亚洲国产第一| 亚洲美女一区| 久久在线免费观看| 老司机67194精品线观看| 国产网站欧美日韩免费精品在线观看 | 国产精品视屏| 日韩视频专区| 亚洲丝袜av一区| 国产精品h在线观看| 亚洲精品一区在线| 亚洲午夜女主播在线直播| 欧美日韩在线播放一区| 亚洲精品一区二区三区婷婷月 | 亚洲视频在线一区观看| 亚洲专区一区二区三区| 欧美亚洲成人网| 亚洲伊人网站| 久久久亚洲影院你懂的| 国外成人在线| 久久综合九色综合欧美狠狠| 欧美激情偷拍| 中文国产一区| 欧美日精品一区视频| 国产精品99久久久久久宅男| 久久精品国产一区二区三| 黄网站免费久久| 欧美激情一区在线| 99精品99| 久久久久这里只有精品| 亚洲国产精品一区制服丝袜 | 1024成人| 欧美精品免费观看二区| 亚洲一区尤物| 欧美国产日韩一区| 一本色道久久综合狠狠躁篇怎么玩| 欧美日韩亚洲高清一区二区| 亚洲一区二区三区777| 免费毛片一区二区三区久久久| 日韩亚洲精品视频| 国产精品视频精品视频| 模特精品在线| 亚洲欧美在线看| 亚洲国产精品尤物yw在线观看| 亚洲在线观看免费| 在线欧美电影| 国产精品免费福利| 蜜乳av另类精品一区二区| 午夜精品久久久99热福利| 曰韩精品一区二区| 国产精品露脸自拍| 欧美波霸影院| 欧美一区国产二区| 亚洲精品美女在线观看播放| 久久久久国产一区二区| 亚洲精品久久久久久久久久久久久 | 亚洲人成绝费网站色www| 国产精品久久77777| 久久综合久久综合久久综合| 亚洲美女淫视频| 在线观看一区| 国产日韩av一区二区| 欧美午夜精品理论片a级按摩| 久久久久久久一区| 久久黄色网页| 欧美一级一区| 一本一本久久a久久精品牛牛影视| 伊人一区二区三区久久精品| 国产欧美一区二区三区在线老狼 | 日韩亚洲成人av在线| 欧美成人日本| 免费成人激情视频|