2017-04-20 12 views
3

誤って私が書いたエリクシールエスケープのソースコードを削除しました。最後の手段として、サーバーにデプロイされた実行可能ファイルを逆コンパイルすることによって、ソースを取得しようとしています(可能な場合)。エスケープ実行可能ファイルのソースコードを取得

問題が発生した場合は、追加の引数なしでmixを実行しているUbuntu 16.04でコンパイルされました。

誰かが私にこのポインタをどのようにするか、どこから始めるべきかを教えていただけたらと思います!ここで

おかげ

答えて

3

はあなたのファイルのコンパイルErlangのソースを取り戻すことができる方法です。私はそれがescriptには全く存在しないので元のElixirソースを戻すことは可能だとは思わない。コンパイルされたErlangバイトコードのみです。あなたが何らかのErlangを知っていれば、逆コンパイルされたErlangコードはかなり読みやすいはずです(そうでない場合は、this速いErlangをチェックしてください。< - > Elixirクラッシュコース)。

エスケープ実行ファイルは、#! /usr/bin/env escriptで始まり、その後にいくつかの行が続き、埋め込まれたコンパイル済みファイルはバイナリのzipファイルとして存在します。エディタでエスケープ・ファイルを開き、行がPK(zipの先頭)で始まるまですべてを削除します。

$ decompile-beam extracted/Elixir.M.beam 
-compile(no_auto_import). 

-file("lib/m.ex", 1). 

-module('Elixir.M'). 

-export(['__info__'/1, main/0, main/1]). 

-spec '__info__'(attributes | compile | exports | 
     functions | macros | md5 | module | 
     native_addresses) -> atom() | 
         [{atom(), any()} | 
         {atom(), byte(), integer()}]. 

'__info__'(functions) -> [{main, 0}, {main, 1}]; 
'__info__'(macros) -> []; 
'__info__'(info) -> 
    erlang:get_module_info('Elixir.M', info). 

main() -> main([]). 

main([email protected]) -> 'Elixir.IO':inspect({[email protected], [email protected]}). 
:最後に、あなたが decompile-beamを使用するモジュールをコンパイルすることができます

$ unzip m -d extracted 
Archive: m 
    inflating: extracted/m_escript.beam 
    inflating: extracted/Elixir.Version.Parser.DSL.beam 
    inflating: extracted/Elixir.Kernel.LexicalTracker.beam 
    inflating: extracted/Elixir.IO.ANSI.beam 
    inflating: extracted/Elixir.Inspect.NaiveDateTime.beam 
    inflating: extracted/Elixir.Protocol.beam 
    inflating: extracted/Elixir.Inspect.Any.beam 
    ... 

$ mix escript.build 
$ head -c 59 m 
#! /usr/bin/env escript 
%% 
%%! -escript main m_escript 
PK 
$ vim m # remove everything until `PK` 
$ head -c2 m 
PK 

は今、あなたはunzipでファイルの内容を抽出し、すべてのコンパイル済み.beamファイルを取得することができます

これは元のエリクシールソースであった:

$ cat lib/m.ex 
defmodule M do 
    def main(args \\ []) do 
    IO.inspect {args, args} 
    end 
end 
+0

ありがとう、まだやるべきことがいくつかありますが、それは素晴らしいベースです。 – mur762

関連する問題