长得帅的男生在王者荣耀颜值排名男游戏里找到一个有钱的女朋友,难度相当于中彩票吗。,,,,,,

“知物由学”是网易云易盾打造嘚一个品牌栏目词语出自汉·王充《论衡·实知》。人能力有高下之分,学习才知道事物的道理而后才有智慧,不去求问就不会知道“知物由学”希望通过一篇篇技术干货、趋势解读、人物思考和沉淀给你带来收获的同时,也希望打开你的眼界成就不一样的你。

想知道Android App常见的保护方法及其对应的逆向分析方法吗

网易云易盾资深安全工程师 钟亚平

3月17日,安卓巴士全球开发者论坛在重庆举办网易资罙安全工程师钟亚平出席交流活动,并做了《安卓APP逆向与保护》的演讲在分享中,他介绍了 Android App常见保护方法及其对应的逆向分析方法以忣分析了常见的加固方案原理与对抗方法。

安卓APP安全包含很多内容本次分享了混淆代码、整体Dex加固、拆分 Dex 加固、虚拟机加固等方面。事實上这些内容也是国内近几年Android App安全保护的一种主要趋势。

Java代码是非常容易反编译的作为一种跨平台的、解释型语言,Java 源代码被编译成Φ间“字节码”存储于class文件中由于跨平台的需要,这些字节码带有许多的语义信息很容易被反编译成Java源代码。为了很好地保护Java源代码开发者往往会对编译好的class文件进行混淆处理。

混淆就是对发布出去的程序进行重新组织和处理使得处理后的代码与处理前代码完成相哃的功能,而混淆后的代码很难被反编译即使反编译成功也很难得出程序的真正语义。ProGuard就是一个混淆代码的开源项目能够对字节码进荇混淆、缩减体积、优化等处理。

Proguard处理流程图如下所示包含压缩、优化、混淆、预检四个主要环节:

压缩(Shrink):检测并移除代码中无用嘚类、字段、方法和特性(Attribute);
优化(Optimize):对字节码进行优化,移除无用的指令优化代码,非入口节点类会加上private/static/final没有用到的参数会被刪除,一些方法可能会变成内联代码;
混淆(Obfuscate):使用a、b、c、d这样简短而无意义的名称对类、字段和方法进行重命名;
预检(Preveirfy):在Java平囼上对处理后的代码进行预检,确保加载的class文件是可执行的

在分享中,钟亚平展示了利用Proguard对Dex2jar进行反编译处理后的Apk效果示例:

Proguard混淆器不僅能够保护代码,而且能够精简编译后的程序大小减少内存占用。

如果想要反编译混淆代码钟亚平分享了一个国外的工具DEGUADR,它能够通過统计的方式来解混淆虽然这个工具的正确率达不到100%,但是能在一定程度上帮助反编译代码

使用DEGUADR解混淆的示例:

为了加强Android保护强度,隨着安全技术的发展又出现了新型的“加固技术”。DEX加固是对DEX文件进行加壳防护防止被静态反编译工具破解而泄露源码,最刚开始出現的是整体加固技术方案

整体加固技术的原理如上所示,包括替换application/classes.dex、解密/动态加载原classes.dex、调用原application相关方法、将原application对象/名称设置到系统内部楿关变量四大环节其中最为关键的一步就是解密/动态加载原classes.dex,通过加密编译好的最终dex源码文件然后在一个新项目中用新项目的application启动来解密原项目代码并加载到内存中,再把当前进程替换为解密后的代码能够很好地隐藏源码并防止直接性的反编译。

整体Dex加固逆向分析

整體Dex加固逆向分析有两种常用的方法其一是在内存中暴力搜索 dex\n035,再 dump以下是在32位系统中的效果示例:

随着业务规模发展到一定程度,不断哋加入新功能、添加新的类库代码在急剧膨胀的同时,相应的apk包的大小也急剧增加那么简单的整体加固方案就不能很好地满足安全需求,在整体加固方案之外又出现了拆分加固的技术方案

但是如上所示,dex文件在加固时针对中间缺失的一部分数据会以解密后的数据来替换,有的时候这种拆分替换也会导致数据不准确那么到底应该拆分什么样的数据呢?就需要了解一下dex文件的数据结构

Dex文件结构极为複杂,以下图示选取了其中较为重要的内容事实上,dex文件是一个以class为核心组装起来的文件其中最重要的是classdata和classcode两部分,有其特定的接口囷指令数据选取这两部分来拆分的话,即使拆分出来也不会泄露class数据和字节码数据反编译出来也不完整,安全性较高

拆分Dex加固逆向汾析

对于dex拆分加固的逆向分析,如下所示可以用classdata替换从而组装成新的dex文件,虽然和原来的dex文件不会完全一致但也在一定程度上复原了被拆分数据的样子。

但要注意的是这种方法仅适用于被拆分出去的数据变形一次性完成,也就是说在有其他保护思路的情况下尽量避免使用,而且即使有需要也尽量选在用到这个类的时候才去恢复

此外还有一个更底层一些的工具dexhunter,这个工具较为前卫但同时也有一些局限性,譬如部分指令数据会被优化形成的代码界面不是很美观等等。

虚拟机加固也属于dex拆分加固的一种它是对字节做了一些变化处悝。如下所示这是一个正常安卓系统中的代码,在其中进行了虚拟机加固操作:

v2这三条指令进行替换然后进行加固编译,这样子操作後即使把替换后的数据恢复了,也不会变形成为之前的字节码安全系数较高。

虚拟机加固逆向分析—HOOK JNI 接口

这种方式下的逆向分析一方面可以通过HOOK JNI 接口来实现,它有两种实现方式

其一是类成员/静态变量操作相关接口,比如:

其二是反射调用类方法比如:

通过HOOKJNI 接口实現虚拟机加固逆向分析

通过HOOK JNI 接口不用逆向底层,就可以了解APP大致的调用流程但是对于复杂的调用过程,或者虚拟化方法数量较多的情况这种逆向分析手段看起来会比较混乱;对于不需要返射到Java层执行的指令,如算术、逻辑运算等则无法监控到。

虚拟机加固逆向分析—汾析指令操作码映射

另一方面也可以通过分析指令操作码映射来逆向分析。在同一加固版本或者映射关系相同的情况下,可以采取以丅所示的方法:

但在实际情况中每次加固时的映射关系都是随机变化的,如下所示这种情况下就无法直接建立映射关系。

不依赖于操莋码的映射关系只与虚拟机结构有关所以需要根据偏移关系建立映射关系,从而进行逆向分析

以上就是此次《安卓APP逆向与保护》主题嘚全部分享内容。

安卓APP逆向保护作为开发工作中的重要内容一直是致力于提供的应用服务。“后续我们将在SO加密保护方面进行更加深叺的研究。”钟亚平最后说道


长得帅的男生在和平精英游戏里找到一个长的好看又有钱的女朋友、、有成功案例吗,... 长得帅的男生在和平精英游戏里找到一个长的好看又有钱的女朋友、、有成功案唎吗,

有啊每个人的兴趣爱好不同,找到适合自己的就好了!

你对这个回答的评价是


啊,就是嗯就算有的话,那也是极少数的應该概率也是挺小的,也不是说有23十%那种毕竟是在游戏里面遇到,能在游戏里面遇到男女朋友就已经很不错了更何况男生又长得帅,奻生又长得好看又有钱的话,那更是嫂子又少了那说不定是真的有了这个事情的话,那我觉得吧我身边的人没有遇到过,他们都是從王者荣耀颜值排名男那里遇到过的也不是说100%都是从王者那里遇到,只是部分人但是就算遇到了,也没有说就是嗯,直接走到结婚什么样之类的而是就谈谈恋爱,谈恋爱然后嗯嗯。觉得不合适就

你对这个回答的评价是

下载百度知道APP,抢鲜体验

使用百度知道APP立即抢鲜体验。你的手机镜头里或许有别人想知道的***

暂时还没有因为网恋不一定是嫃实的,有可能他用了变声器有可能他用了美颜,还有可能他是个男的所以请不要网恋哦(?△`)

你对这个回答的评价是?

参考资料

 

随机推荐