一、人戚团们上网习惯慢慢从PC端转向了移动端,越来越多的粗型智能设备、移动终端、各种各样的应用app开始渗透生活的方方面面,其实它们很多就是我们所熟悉的Android/iOS应用,普及广泛必然黑产集聚,安全也就接憧而至。
二、移动app的安全现状导致了一款app在发布时,必然要进行简单粗暴的安全加固。web安全一直老生常谈,web安全开发市场也相对饱和,但app的开发者深刻懂得安全的人也少之又少,这也是为什么有些不了解安全的中小app选择直接加壳做安全,简单粗暴。而有移动安全开发团队的大厂则不需要用加壳。
安卓APP加密的方法主要分成三类:源码加密、数桐态据安全和应用保护,而每一类又分成好几个小项。源码加密包括:Dex文件保护、防二次打包、so文件保护、资源文件保护。以Dex文件保护为例,Dex文件保护又包括:高级混淆、DEX文件加壳、DEX文件加花、动态类加载、内存防dump。
高神轮渗级混淆:代码混淆,可以降低代码可读性、缩小包大小。
DEX文件加壳:相当于把源码打包至其他文件夹下,逆向工具对加密后的dex文件解析,只能看到壳文件,可以防止解包后看到真正的源码。爱加密利用挖空技术实现函数级加密,安全强度高,启动效率快。
dex加花:由于大部分逆向工具都是线性读取字节码并解析,当遇到无效字节码时游脊就会引起反编译工具字节码解析失败。爱加密插入无效字节码到dex文件之中,同时保证该字节码永远不会被执行,否则程序运行也会崩溃。这样,就能起到反编译的作用了。
dex动态类加载:爱加密加固后的dex文件源码可以动态分离,在运行时,将源码分段加载到内存当中。
内存防dump:程序运行时会释放代码,内存防dump可以防止程序运行时被劫持。
应用安全包括:log日志输入屏蔽、应用清场。清场技术依赖于云端黑名单、白名单DB,应用每次启动后便自动进行本地的黑名单、白名单DB数据更新,若检测到有异常情况,则可对用户进行提示。
数据安全包括:页面防劫持、本地数据保护、截屏保护、内存数据防查询、协议加密、虚拟键盘。
破解加了dex壳的app,关键是要获得解密后的源dex,现在Android加壳技术大多都是通过DexClassLoader或者隐藏的函数openDexFile来将源dex加载进来,然后动态替换Application来启动源程序,跟Windows上传统的PE文件加壳有一定区别。要破解传统的壳,需要跟踪控制流找到OEP,然后把源程序从内存中dump下来,迅丛重建输入表,最困难的就是要跟着外壳的控制流走,安全裂昌态工程师为了加大破解难度,使用了很多技术来让破解者走得更艰难。安全工程师与破解者对抗的关键点就在寻找OEP的困难性上。
在Android平台上,正因为新兴的dex加壳技术不成熟,导致有些另类的脱壳方法可以绕过肆源分析算法,直接将源程序dump下来。
举个例子,安卓在4.0版本以后提供openDexFile这个函数来从内存中加载dex,所需要提供的参数是源dex在内存中的地址,所以只要对这个函数下断,然后从寄存器里找到内存地址,就能将解密后的源dex从内存中dump下来,直接对其反编译就能获得源代码了。
更进一步,关于openDexFile这个函数,其实它与libdvm.so这个库有密不可分的关系,这个库里提供大量 *** 作dex文件的函数,如果对这个库里的相关函数下断,然后从内存中暴力dump一大块内存区域,经常能直接将内存中的源dex给抓下来。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)