lijie пре 2 година
родитељ
комит
390f63f2eb
2 измењених фајлова са 103 додато и 19 уклоњено
  1. +62
    -19
      src/compile/utBeamToSrc.erl
  2. +41
    -0
      src/docs/EnDeCrypto

+ 62
- 19
src/compile/utBeamToSrc.erl Прегледај датотеку

@ -3,6 +3,8 @@
-export([
genSrc/2
, genSrcs/2
, notCan/2
, reToDir/2
]).
%% beam生成erl文件beam编译选项必要带debug_info才能反编译生成代码
@ -23,28 +25,69 @@ genSrc(Module, SrcDir) ->
%% beam生成erl文件beam编译选项必要带debug_info才能反编译生成代码
genSrcs(BeamDir, SrcDir) ->
FunRead =
FunDeal =
fun(File, ProAcc) ->
case filename:extension(File) == ".beam" of
true ->
ModName = filename:basename(File, ".beam"),
Module = list_to_atom(ModName),
case beam_lib:chunks(code:which(Module), [abstract_code]) of
{ok, {_, [{abstract_code, {_, AC}}]}} ->
Code = erl_prettypr:format(erl_syntax:form_list(AC)),
%% unicode码
%% SrcStr = io_lib:fwrite("~ts~n", [erl_prettypr:format(erl_syntax:form_list(AC))]),
SrcBin = unicode:characters_to_binary(Code),
file:write_file(lists:concat([SrcDir, Module, ".erl"]), SrcBin),
io:format("build beam:~p to erl:~p success.~n", [Module, Module]);
{error, beam_lib, Reason} ->
io:format("code_gen_erl_file error, reason:~p~n", [Reason]);
_Err ->
io:format("code_gen_erl_file error, reason:~p~n", [_Err])
end,
ModName = filename:basename(File, ".beam"),
Module = list_to_atom(ModName),
case beam_lib:chunks(code:which(Module), [abstract_code]) of
{ok, {_, [{abstract_code, {_, AC}}]}} ->
Code = erl_prettypr:format(erl_syntax:form_list(AC)),
%% unicode码
%% SrcStr = io_lib:fwrite("~ts~n", [erl_prettypr:format(erl_syntax:form_list(AC))]),
SrcBin = unicode:characters_to_binary(Code),
file:write_file(lists:concat([SrcDir, Module, ".erl"]), SrcBin),
io:format("build beam:~p to erl:~p success.~n", [Module, Module]);
{error, beam_lib, Reason} ->
io:format("code_gen_erl_file error, reason:~p~n", [Reason]);
_Err ->
io:format("code_gen_erl_file error, reason:~p~n", [_Err])
end,
ProAcc
end,
filelib:fold_files(BeamDir, "\\.beam$", true, FunDeal, []).
%% beam文件复制到指定的目录
notCan(BeamDir, SrcDir) ->
FunDeal =
fun(File, ProAcc) ->
ModName = filename:basename(File, ".beam"),
Module = list_to_atom(ModName),
case beam_lib:chunks(code:which(Module), [abstract_code]) of
{ok, {_, [{abstract_code, {_, _AC}}]}} ->
ProAcc;
{error, beam_lib, Reason} ->
io:format("code_gen_erl_file error, reason:~p~n", [Reason]),
file:copy(File, lists:concat([SrcDir, ModName, ".beam"]));
_Err ->
io:format("code_gen_erl_file error, reason:~p~n", [_Err]),
file:copy(File, lists:concat([SrcDir, ModName, ".beam"]))
end,
ProAcc
end,
filelib:fold_files(BeamDir, "\\.beam$", true, FunDeal, []).
%% -file信息
reToDir(SSrcDir, DSrcDir) ->
FunDeal =
fun(File, ProAcc) ->
case file:read_file(File) of
{ok, <<"-file(", _/binary>> = BinStr} ->
case binary:split(BinStr, <<"-module">>) of
[AllFileInfo, _] ->
FileInfo = binary:replace(AllFileInfo, [<<" ">>, <<"\n">>, <<"\"">>], <<"">>, [global]),
[_, LeftFileInfo] = binary:split(FileInfo, <<"(">>),
[DirInfo, _] = binary:split(LeftFileInfo, <<",">>),
FileDir = filename:join(DSrcDir, DirInfo),
filelib:ensure_dir(FileDir),
{ok, _} = file:copy(File, FileDir),
ok;
_ ->
ProAcc
end;
_ ->
ProAcc
end
end,
filelib:fold_files(BeamDir, "\\.beam$", true, FunRead, []).
filelib:fold_files(SSrcDir, "\\.erl$", true, FunDeal, []).
%%

+ 41
- 0
src/docs/EnDeCrypto Прегледај датотеку

@ -0,0 +1,41 @@
#!/usr/bin/env escript
%% -*- erlang -*-
main([EnOrDe, Key, InFileName, OutEnFile]) ->
crypto:start(),
io:format("~p~n", [{EnOrDe, Key, InFileName, OutEnFile}]),
case file:read_file(InFileName) of
{ok, SrcData} ->
IV = <<88:128>>,
KeyBin = fixKey(Key),
{IsEn, DealData} = case EnOrDe of "en" -> {true, SrcData}; _ -> {false, base64:decode(SrcData)} end,
EnData = crypto:crypto_one_time(aes_128_cbc, KeyBin, IV, DealData, IsEn),
LastData = case EnOrDe of "en" -> base64:encode(EnData); _ -> EnData end,
case OutEnFile of
"" ->
io:format("~s the file result:~ts ~n", [EnOrDe, LastData]);
_ ->
file:write_file(OutEnFile, LastData)
end,
halt(0);
_ ->
io:format("bad file:~ts ~n", [InFileName]),
halt(1)
end.
fixKey(Key) ->
KeyBin = list_to_binary(Key),
KeySize = bit_size(KeyBin),
case KeySize >= 128 of
true ->
io:format("too len key max len is 128, in put len:~p ~n", [KeySize]),
halt(1);
_ ->
FixLen = 128 - KeySize,
<<0:FixLen, KeyBin/binary>>
end.

Loading…
Откажи
Сачувај