erlang 防止反编译

本文介绍了如何使用Erlang防止编译后的源码被反编译。通过创建.erlang.crypt文件,设置加密算法,并修改Emakefile启用加密编译,可以有效加密源码,提高代码安全性。测试步骤展示了加密后无法正常获取抽象代码,验证了加密的有效性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

erlang 编译后的文件极易被对方反编译得到源代码,

对编译后的源码进行加密后,可以起到防止反编译的目的。

下面是如何进行防止反编译的:(环境linux下)


1>在root目录下, 创建.erlang.crypt这个文件


2> 在 .erlang.crypt中加入[{debug_info, des3_cbc, [], "this_is_my_secret_key"}].  

      (des3_cbc的算法来对文件进行加密,加密的密钥为:this_is_my_secret_key)


3> 修改Emakefile

   {
    [
        'src/*',
        'src/*/*',
        'src/*/*/*'
    ]
    ,[
         encrypt_debug_info
        ,{i, "include"}
        ,{outdir, "ebin"}
    ]
}.

(注意的是encrypt_debug_info,不要用debug_info)


4>编译源文件

  erl  -make


5>测试加密

  5.1、  [root@phyzhou]# erl -pa ./ebin
            Erlang R14B (erts-5.8.1) [source] [64-bit] [smp:2:2] [rq:2] [async-threads:0] [hipe] [kernel-poll:false]

  5.2 、beam_lib:chunks(code:which(loop), [abstract_code]).          (我随便写了一个叫loop.erl的测试模块)

           {ok,{loop,[{abstract_code,{raw_abstract_v1,[{attribute,1,
                                                       file,
                                                       {"src/test/performance/loop.erl",1}},
                                            {attribute,9,module,loop},
                                            {attribute,10,compile,export_all},
                                            {function,15,do_loop,2,
                                                      [{clause,15,[{nil,15},{var,15,'_Data'}],[],[{atom,15,ok}]},
                                                       {clause,16,
                                                               [{cons,16,{cons,16,...},{var,...}},{var,16,'Data'}],
                                                               [],
                                                               [{call,17,{...},...}]}]},
                                            {function,19,do_loop2,3,
                                                      [{clause,19,
                                                               [{nil,19},{var,19,'_Data'},{var,19,'_X'}],
                                                               [],
                                                               [{atom,19,ok}]},
                                                       {clause,20,
                                                               [{cons,20,{cons,...},{...}},{var,20,'Data'},{var,20,...}],
                                                               [[{op,20,...}]],
                                                               [{call,21,...}]},
                                                       {clause,22,
                                                               [{cons,22,{...},...},{var,22,...},{var,...}],
                                                               [],
                                                               [{call,...}]}]},
                                            {function,25,test,0,
                                                      [{clause,25,[],[],[{match,26,...},{match,...},{...}|...]}]},
                                            {eof,36}]}}]}}

    5.3 、退出(ctrl+c)

              BREAK: (a)bort (c)ontinue (p)roc info (i)nfo (l)oaded
             (v)ersion (k)ill (D)b-tables (d)istribution

    5.4、移除 .erlang.crypt

  

    5.5、[root@phyzhou]# erl -pa ./ebin

             Erlang R14B (erts-5.8.1) [source] [64-bit] [smp:2:2] [rq:2] [async-threads:0] [hipe] [kernel-poll:false]

    5.6、beam_lib:chunks(code:which(loop), [abstract_code]).
            {error,beam_lib,
            {key_missing_or_invalid,"./loop.beam",abstract_code}}


    6.总结:

      从日志可以看出,移除.erlang.crype文件后,无法进行反编译。

  

    7.谢谢。






  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值