首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【安卓开发代码保护】浅谈代码混淆加固技术

【安卓开发代码保护】浅谈代码混淆加固技术

作者头像
用户1263308
发布于 2018-02-01 10:23:34
发布于 2018-02-01 10:23:34
2.3K1
举报
文章被收录于专栏:代码GG之家代码GG之家

随着移动互联网的快速发展,应用的安全问题不断涌现出来,于是越来越多的应用开发者将核心代码由java层转到native层,以对抗成熟的java逆向分析工具,然而如果native层的代码如果没有进行任何保护,还是比较容易被逆向分析工作者获取其运行逻辑,进而完成应用破解或者进行其他的操作。那么提高native代码的安全性有什么好办法吗?答案是肯定的,今天我们就来介绍一种有效对抗native层代码分析的方法——代码混淆技术。

那么,什么是代码混淆呢?代码混淆的学术定义如下:

  代码混淆(code obfuscation)是指将计算机程序的代码,转换成一种功能上等价,所谓功能上的等价是指其在变换前后功能相同或相近。其解释如下:程序P经过混淆变换为P‘,若P没有结束或错误结束,那么P’也不能结束或错误结束;而且P‘程序的结果应与程序P具有相同的输出。否则P’不是P的有效的混淆。

  目前对于混淆的分类,普遍是以Collberg 的理论为基础,分为布局混淆(layout obfuscation)、数据混淆(data obfuscation)、控制混淆(control obfuscation)和预防混淆(preventive obfuscation)这四种类型。

1. 布局混淆

  布局混淆是指删除或者混淆软件源代码或者中间代码中与执行无关的辅助文本信息,增加攻击者阅读和理解代码的难度。软件源代码中的注释文本、调试信息可以直接删除,用不到的方法和类等代码或数据结构也可以删除,这样即可以使攻击者难以理解代码的语义,也可以减小软件体积,提高软件装载和执行的效率。软件代码中的常量名、变量名、类名和方法名等标识符的命名规则和字面意义有利于攻击者对代码的理解,布局混淆通过混淆这些标识符增加攻击者对软件代码理解的难度。标识符混淆的方法有多种,例如哈希函数命名、标识符交换和重载归纳等。哈希函数命名是简单地将原来标识符的字符串替换成该字符串的哈希值,这样标识符的字符串就与软件代码不相关了;标识符交换是指先收集软件代码中所有的标识符字符串,然后再随机地分配给不同的标识符,该方法不易被攻击者察觉;重载归纳是指利用高级编程语言命名规则中的一些特点,例如在不同的命名空间中变量名可以相同,使软件中不同的标识符尽量使用相同的字符串,增加攻击者对软件源代码的理解难度。布局混淆是最简单的混淆方法,它不改变软件的代码和执行过程。

2. 数据混淆

  数据混淆是修改程序中的数据域,而对代码段不作处理。常用的数据混淆方式有合并变量、分割变量、数组重组、字符串加密等。

  合并变量是将几个变量合并为一个数据,原来的每个变量占据其中一个区域,类似于一个大的数据结构。分割变量则是将一个变量分割为两个变量,对分割前后提供一种映射关系,将对一个变量的操作转化为对分割后两个变量的操作。

  数组重组有数组的分割、合并、折叠和平滑等几种方式。分割是将一个数组分成2个或多个相同维度的数组;合并则相反;折叠是增加数组的维数;平滑则是相反。

  在ELF文件中,全局变量和常量字符串存放在数据段中,反汇编工具可以轻易查找到字符串与代码之间的引用关系。在软件破解中,通过一些字符串提示可以很方便的找到代码关键语句,从而破解软件。字符串加密则可以对这些明显的字符串进行加密存储,在需要时再进行解密。

3. 控制混淆

  控制混淆也称流程混淆,它是改变程序的执行流程,从而打断逆向分析人员的跟踪思路,达到保护软件的目的。一般采用的技术有插入指令、伪装条件语句、断点等。伪装条件语句是当程序顺序执行从A到B,混淆后在A和B之间加入条件判断,使A执行完后输出TRUE或FALSE,但不论怎么输出,B一定会执行。

  控制混淆采用比较多的还有模糊谓词、内嵌外联、打破顺序等方法。

  模糊谓词是利用消息不对称的原理,在加入模糊谓词时其值对混淆者是已知的,而对反混淆者却很难推知。所以加入后将干扰反汇编者对值的分析。模糊谓词的使用一般是插入一些死的或不相关的代码(bogus code),或者是插入在循环或分支语句中,打断程序执行流程。

  内嵌(in-line)是将一小段程序嵌入到被调用的每一个程序点,外联(out-line)是将没有任何逻辑联系的一段代码抽象成一段可被多次调用的程序。

打破顺序是指打破程序的局部相关性。由于程序员往往倾向于把相关代码放在一起,通过打破顺序改变程序空间结构,将加大破解者的思维跳跃。

4. 预防混淆

  预防混淆一般是针对专用的反编译器设计的,目的就是预防被这类反编译器反编译。他是利用特定的反编译器或反混淆器的弱点进行专门设计。预防混淆对于特定的反编译器非常有效,所以在使用时要综合利用各种反编译器的特点进行设计。

  腾讯御安全保护方案提供了以上所述四种混淆分类的多维度的保护;布局混淆方面:提供了针对native代码层中的函数名进行了混淆删除调试信息等功能;数据混淆方面:提供了针对常量字符串加密及全局变量的混淆的功能;控制混淆方面:针对代码流程上,提供了扁平化,插入bogus 分支以及代码等价变换等功能;预防混淆方面:在混淆过程中加入了针对主流反编译器的预防混淆的代码,能够有效地抵抗其分析。此外还对应用开发者提供不同等级的保护力度及多种混淆方式的功能的选择,用户可以根据自己的需求定制不同的混淆功能保护。

  安全保护方案除了提供代码混淆保护方面的技术,还提供代码虚拟化技术及反逆向、反调试等其他应用安全加固方案,综合使用多种代码保护方案可以有效地提高应用代码安全。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2016-06-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 代码GG之家 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
1 条评论
热度
最新
非常详细,学习了,点赞。感谢分享,学习了,还是有些懵逼,混淆的AndroidManifest.xml,还是会报哦!折腾了很久,太难了!最后找到 apk119.com 在线去报毒加固混淆,很不错。
非常详细,学习了,点赞。感谢分享,学习了,还是有些懵逼,混淆的AndroidManifest.xml,还是会报哦!折腾了很久,太难了!最后找到 apk119.com 在线去报毒加固混淆,很不错。
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
XPS文件转换成PDF[通俗易懂]
XPS是XML PaperSpecification(XML文件规格书)的简称,是一种电子文件格式, 它是微软公司开发的一种文档保存与查看的规范,关联的阅读器是XPS Viewer。
全栈程序员站长
2022/09/05
2.1K0
将XPS文件转换成PDF格式有哪些方法?「建议收藏」
XPS文件在我们日常工作中使用比较少,大部分时候我们都会将它转换成PDF格式后进行修改或保存等操作,那么如何将XPS转换成PDF呢?
全栈程序员站长
2022/08/18
8.2K1
将XPS文件转换成PDF格式有哪些方法?「建议收藏」
如何在线将XPS转换成Word文档?
怎么将XPS转成Word?这个比较难,xps是通过虚拟打印机生成的电子文件,与PDF文件类似,但是却不支持直接编辑,要转换只能借助工具。那么什么工具可以转换,不下载软件有没有在线转换的方法?
全栈程序员站长
2022/09/05
2.4K0
如何在线将XPS转换成Word文档?
如何将pdf转换成word的3种免费方法「建议收藏」
怎样将PDF转成Word?这是很多网友经常问到的问题,PDF转换成Word利用一些小技巧和工具,你会发现是很容易的,以下的PDF转Word的3种免费方法你一定要看一看。
全栈程序员站长
2022/09/05
4.5K1
如何将XPS转成PDF?XPS转PDF的免费方法「建议收藏」
你还不知道XPS是什么?不懂这种文档要怎么打开?其实这些都不重要,只要你知道PDF就可以,教你几种将XPS转成PDF的方法,还有免费使用哦。
全栈程序员站长
2022/09/05
2.1K0
如何将ofd文件转成pdf格式?
自电子发票改为ofd格式文件后,很多通知、办公文档也逐步开始用ofd替代,但毕竟使用还不算普及,我们也都更习惯PDF格式。那么如何将OFD文件转成PDF呢?
全栈程序员站长
2022/09/01
1.9K0
XPS文件怎么打开?可以转成PDF格式吗?
我们在打印文件时经常会遇到和我们保存的格式不一样的情况,为了无法轻易变更档案中的数据,有些朋友就将其保存为xps格式文件。下面就一起来看一下打开xps格式文件和转成PDF的方法。
全栈程序员站长
2022/09/05
5.3K0
如何将XPS文档转成Excel表格?
今天收到一个XPS文档,打开文档后发现里面的内容都是数据,使用Excel用公式整理会非常方便,那么如何将XPS文件转换成表格呢?
全栈程序员站长
2022/08/22
3.2K0
如何将XPS文档转成Excel表格?
极速pdf文件打印时此计算机未连接到网络,PDF文件不能打印的五种解决方案[通俗易懂]
有时我们会发现有些PDF文档虽然能够正常打开,点击打印缺没有反应,是打印机坏了吗?当然不是,PDF不能打印90%是被加密,想要正常重新打印其实很简单。
全栈程序员站长
2022/09/01
2.5K0
极速pdf文件打印时此计算机未连接到网络,PDF文件不能打印的五种解决方案[通俗易懂]
教你如何免费将XPS转换为PDF格式
XPS文件在我们日常工作中使用比较少,大部分时候我们都会将它转换成PDF格式后进行修改或保存等操作,不懂这种文档要怎么打开?其实这些都不重要,只要你知道PDF就可以,教你几种将XPS转成PDF的方法,还有免费使用哦。
全栈程序员站长
2022/09/05
1.6K0
xps 转 pdf android版,xps文件转换pdf
XPS阅读器是一款专门为XPS格式的文件而打造的阅读器,能够帮助用户在这款软件中对XPS文件一键阅读,并且能够随时打开。对于不知道用什么打开xps文件的朋友可以下载这款专用阅读器,它还能对xps文件进行格式转换。
全栈程序员站长
2022/09/05
1.8K1
python处理xps文件_如何在Windows 10系统中处理XPS文件
XPS(XML Paper Specification)文件是Microsoft的Adobe PDF文件的竞争对手。也许这种类型的文件不像PDF那样受欢迎,但了解XPS及其工作方式可能会有所帮助。
全栈程序员站长
2022/08/23
4.6K0
如何使用手机免费将PDF转Word还不限页数
手机如何将PDF转换成Word?有时一些PDF资料需要修改才能使用,电脑端的修改已经很复杂了,更何况手机端安装软件和使用都更困难,而且有一些PDF文档本身就是扫描版无法进行修改,那么我们就只能将PDF转成Word后再编辑。
全栈程序员站长
2022/08/11
3.2K0
如何使用手机免费将PDF转Word还不限页数
如何查看XPS文件
xps文件相当于离线版网页,WPS不支持查看XPS文件,Office也不支持查看XPS文件
全栈程序员站长
2022/08/31
3.2K0
如何查看XPS文件
c# 调用Microsoft XPS Document Writer打印机,将Pdf文件转换成Xps文件「建议收藏」
最近碰到个项目,其中有个需要将pdf文件转换成xps文件的功能,xps文件还算是新东西,所以基本没啥了解,通过一段时间的调查,
全栈程序员站长
2022/08/19
2.7K0
xps 转 pdf android版,OakDoc XPS to PDF Converter(XPS文件转PDF格式工具)V2.2 正式版
OakDoc XPS to PDF Converter(XPS文件转PDF格式工具)是一款很优秀好用的XPS转PDF的辅助工具。如果你需要一款好用的文件转换工具,小编带来的这款OakDoc XPS to PDF Converter软件是很不错的选择,功能强大全面,使用后可以帮助用户轻松将XPS文件转换成PDF格式。软件可帮助用户通过简单的方式将XPS文件转换输出为PDF为主的主流图片格式。该工具的操作方法十分简单,只需导入需要转换的XPS文件,设置其输出参数和位置等信息,即可执行转换操作,小白也能轻松掌握。有需要的朋友欢迎来下载使用。
全栈程序员站长
2022/08/19
8490
xps 转 pdf android版,OakDoc XPS to PDF Converter(XPS文件转PDF格式工具)V2.2 正式版
PDF文件使用指南
它是公认的分享文档的最佳格式。但是,这种格式的文件,必须用专门的阅读器打开,而且不能编辑,所以对使用者来说,会遇到很多问题。
ruanyf
2018/09/21
2.8K0
有哪些免费的方法能将PDF导出成JPG图片?
根据不同的应用场合,有时需要将PDF文件导出成图片使用,有哪些能够免费将PDF转成JPG的方法呢?下面分享两种方法你一定用的上。
全栈程序员站长
2022/08/28
2.5K0
有哪些免费的方法能将PDF导出成JPG图片?
excel中html批量转化为pdf文件,如何将大量的Excel转换成PDF?
大家好,又见面了,我是你们的朋友全栈君。 大家都知道Excel表,最怕别人修改了,尤其是数据。一旦修改,可能就会有麻烦。那如何是好呢?有一个最简单的办法就是把Excel转换成PDF文件,这样别人只能阅
全栈程序员站长
2022/08/30
3.1K0
excel中html批量转化为pdf文件,如何将大量的Excel转换成PDF?
如何免费的、完整的把 PDF 转换为 Word?
我们都知道PDF是一种不能编辑的文件,如果要将pdf文件转换成word文件又该怎样转换呢?其实我们可以借助工具实现pdf转换成word的操作哦。
全栈程序员站长
2022/07/01
2.8K0
如何免费的、完整的把 PDF 转换为 Word?
推荐阅读
相关推荐
XPS文件转换成PDF[通俗易懂]
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档