忠于品牌,精于技术

什么是代码混淆

这还要从很久以前的一个故事说起,某电商在做手机预订时,为了显得这款手机很火爆,在显示预定数的页面上,将预定数显示为实际预定数的3倍。虽然这是一个简单吸引眼球的方式,但是他们操作起来也太草率了,直接在前端页面里面将数字乘以3,然后就自然地被网友们扒了底裤。

要知道,很多的场景下,我们不得不将程序的源代码暴露到外界,比如说网页应用,用户在浏览这个网页时,使用右键查看网页或者打开开发者工具,都可以轻松地看到HTML和前端JS的源代码;又比如说一个Android程序,在下载到安装包的APK文件后,使用一些反编译工具,也可以将这个应用的Java源代码反编译出来查看。

既然源代码都暴露了,那么写在代码里的一些有点小心思的逻辑自然也隐藏不了咯。如果代码不可避免地要暴露出去,同时又想隐藏一些逻辑,或者说想让别人不是那么容易的被看出来,那么『代码混淆』你值得拥有。

『代码混淆』其实并不是什么高科技,它的作用就是将一句条理清晰的话翻译得晦涩难懂,但是功能却保持不变。一般采用的方法,就是将代码中各种有意义的变量名、函数名都用简单的几个字母组合来表示,还有就是将一些等价的代码逻辑转换一下,比如将for循环改成while循环,将while循环改成for循环等。比如说,我有个函数是从银行取钱1万块钱,这样写的Bank.giveMeMoney(10000),经过混淆后就变成a.b(10000),单纯地看a.b(10000)鬼才知道是什么意思。

我们再来看个实际的栗子,这次混淆基本上将代码中有意思的词都替换了:

最后要说一句,『代码混淆』并不是加密代码,它只是让代码看起来比较难懂,但是机器执行起来的逻辑是一样一样的,增加的是人为分析的难度和时间成本。