开通VIP,畅享免费电子书等14项超值服
首页
好书
留言交流
下载APP
联系客服
2024.01.24甘肃
一
前言
二
基础知识
①计算每个文件的SHA-1摘要,进行BASE64编码后写入摘要文件,即MANIFEST.MF文件;
②计算整个MANIFEST.MF文件的SHA-1摘要,进行BASE64编码后写入签名文件,即*.SF文件;
③计算MANIFEST.MF文件中每一块摘要的SHA-1摘要,进行BASE64编码后写入签名文件,即*.SF文件;
④计算整个*.SF文件的数字签名(先摘要再私钥加密);
⑤将数字签名和X.509开发者数字证书(公钥)写入*.RSA文件;
①取出*.RSA中包含的开发者证书,并校验其合法性
②用证书中的公钥解密*.RSA中包含的签名
③用证书中的公钥计算*.SF的签名
④对比(2)和(3)的签名是否一致
①检查APK中包含的所有文件,对应的摘要值与MANIFEST.MF文件中记录的值一致
②使用证书文件(RSA文件)检验签名文件(SF文件)没有被修改过
③使用签名文件(SF文件)检验MF文件没有被修改过
SignerData(签名者数据):主要包括签名者的证书,整个APK完整性校验hash,以及一些必要信息。
Signature(签名):开发者对SignerData部分数据的签名数据。
PublicKey(公钥):用于验签的公钥数据。
②计算每个块的摘要
③计算(2)中所有摘要的签名
④添加X.509开发者数字证书(公钥)
②计算SignerData的hash值。
③两个值进行比较,如果相同则认为APK没有被修改过,解析出SignerData中的证书。否则安装失败。
④如果是第一次安装,直接将证书保存在应用信息中。
⑤如果是更新安装,即设备中原来存在这个应用,验证之前的证书是否与本次解析的证书相同。若相同,则安装成功,否则失败。
①利用PublicKey解密Signature,得到SignerData的hash明文。
④逐个解析出level块证书并验证,并保存为这个应用的历史证书。
⑤如果是第一次安装,直接将证书与历史证书一并保存在应用信息中。
⑥如果是更新安装,验证之前的证书与历史证书,是否与本次解析的证书或者历史证书中存在相同的证书,其中任意一个证书符合即可安装。
系统应用安装:开机时完成,没有安装界面。
网络下载的应用安装:通过市场应用完成,没有安装界面。
ADB工具安装:没有安装界面。
第三方应用安装:通过packageinstall.apk应用安装,有安装界面。
①app在运行的时候,可以通过加载一些本身不存在的文件,来实现一定功能,这种经常应用在app更新的过程中。
②可执行文件是可以替换的,更换静态资源不属于动态加载。
③动态加载的核心思想就是动态调用外部的dex文件,AndroidApk自带的dex是程序入口,所有功能可以直接从服务器中下载dex来完成。
三
插件化和解压缩安全场景和分类
四
插件化漏洞原理分析和复现
③对加载的Dex文件进行完整性校验和签名校验。
原理:这种是开发者在APKjava层中加入了签名校验代码,然后通过校验加入文件的MD5值或者SHA1值来对文件进行校验。
解决方案:一般这种情况,我们通过定位到APK中的签名代码段,然后进行hook篡改或者进行修改后重打包就可以进行绕过。
原理:由于java可解释语言的原因,所以后来开发者又将签名代码放入so层,从而增加逆向工作的难度。
解决方案:这种情况,同样可以使用IDA或GDB进行动态调试确定到签名代码段,然后使用hook注入技术或静态修改来进行绕过。
原理:由于前两种方式都是静态校验的方式,这样的安全性仍然较低,后来更多厂商通过服务器在线进行验证,将签名密钥发送然后在so层或java层中进行校验。
解决方案:这种情况,我们要使用抓包软件对服务器发送的数据包进行抓取,在成功获取正确密钥后,再去hook对应的签名代码段,从而就可以实现绕过。
五
Zip解压缩漏洞分析和复现
Janus漏洞分析和复现
dex文件修改DexHeader中的file_size,将其调整为合并后文件的大小。
zip文件修改尾部Zip,修正[endofcentraldirectoryrecord]中[centraldirectory]的偏移和[centraldirectory]中各[localfileheader]的偏移。
①从设备上取出目标应用的APK文件,并构造用于攻击的DEX文件;
②将攻击DEX文件与原APK文件简单拼接为一个新的文件;
③修复这个合并后的新文件的ZIP格式部分和DEX格式部分,修复原理如图1所示,需要修复文件格式中的关键偏移值和数据长度值;
最后,将修复后的文件,重命名为APK文件,覆盖安装设备上的原应用即可。