文章目录
分阶段代码保护剖析
一个编译型语言,简单概括经历编译-》汇编-》链接-》目标代码,一个解释型语言从源码-》字节码-》虚拟机-》机器语言。基于虚拟机的java很特殊,Java程序也需要编译,但是没有直接编译成为机器语言,而是编译成了字节码,然后java虚拟机上用解释方式执行字节码。python的也采用了java的编译模型,现将python程序编译成python字节码,然后由一个专门的python字节码解释器负责解释执行字节码。python是一个解释性的语言,但是为了效率上的考虑,python提供了编译的方法,将py文件编译成pyc文件,最大的优点在于我们在运行程序的时候,不需要重新对该模块进行重新的解释,编译之后是bytecode的形式,这种bytecode也增加了反向工程的难度,一定程度上也保护了你的代码。
下面提供一些思路
各阶段思路
python
对于python代码,首先编写一个源码.py文件,在我们运行的时候会在内存中编译py代码,在内存中表示为pyCodeProject对象,有可重用的模块会编译成.pyc可重用模块,运行结束后写入到磁盘。pyCodeProject和可重用的.pyc文件代码会在python虚拟机上经过python解释器,逐步解释生成机器码用于控制pc。经过上述的过程代码就运行起来了,所以基本上每一个步骤都可以作为代码保护的切入点
源码阶段
.py代码基本上在项目开发阶段和交付阶段是处于裸奔状态的,无论是交付项目还是参加竞赛,乙方只是需要代码可运行,源码阶段是第一步防线。
该阶段常用的方式就是代码混淆,代码混淆的方式也分多种,感兴趣可以看看《》。然后目前市面上的工具自行探索
代码编译阶段
代码编译阶段,主要就是.py文件编译成pyc文件、pyd文件。或者是通过字节码加密的方式来保护代码编译阶段的代码
可执行文件
可以将py代码编译成可执行文件,提升代码的安全性
定制python解释器
定制python解释器主要是针对python代码解释运行的控制,通过加密技术对python解释器的.c源码进行修改,感兴趣的话可以自行去官方下载cpython的源码,搜索定制python解释器也有相关的教程。
license控制
license控制是建立在源码加密的基础之上的,没有加密过的代码已经到了客户手中,license控制就是没必要了。
包压缩加密
实在不行的话,把你的python代码打成一个压缩包,加上密码,在c的源码或者其他加密过的代码中器解压使用这个代码也是可以的。
总结
上述方式可以进行个性化的组合,每一种都有利有弊,比如混淆后的代码在看堆栈的时候很难受,基本不能排错。也不一定要用多种方法来保护代码,可能到了最后家里配了多把锁,自己却回不了家,那就得不偿失了
java
java代码简单来说是在内存中编译成了字节码文件,然后在JVM中运行。我们可以在以下多个阶段进行代码保护
码编译
通过GCJ等工具在代码编译阶段保护代码
代码混淆
通过代码混淆方法,对java字节码进行混淆,防止反编译
字节码加密
通过Java agent探针对字节码进行加密;
可执行文件
将java代码编译成exe文件
license控制
与python一样