erlang beam文件反编译成erl源文件

erlc带debug_info参数编译erl文件生成beam里面包含了debug信息,
所以可以通过debug版本的beam反编译生成erl文件。

例如sum.beam是带debug编译好的beam文件,反编译步骤如下:
{ok, {_, [{abstract_code, {_, Ac}}]}} = beam_lib:chunks(code:which(sum), [abstract_code]).
io:fwrite("~s~n", [erl_prettypr:format(erl_syntax:form_list(Ac))]).
这样我们就得到的sum.beam的预处理之后的程序。
如果我们想查看beam文件的汇编程序erts_debug:df(sum). 执行完毕会得到sum.dis文件,里面就是对应的汇编代码。

所以生成debug的beam文件是很不安全的,不过可以生成加密的debug信息,这样别人拿到这些beam也无法反编译生成erl文件
方法:
在rebar.config文件的debug_info中加上{debug_info_key,{des3_cbc,”your secret key”}编译选项

参考erlang.org