依然从APK文件开始说起,相信大家看我之前的帖子,已经知道APK文件怎么看里面的文件内容了。这里还是啰嗦一下吧!
APK文件(全称:Android Application Package),是安卓系统使用的一种应用程序包文件格式,也就是说可以将apk文件双击对其进行安装。既然说是包文件格式,说明apk文件应该是一个将其他文件进行整合压缩后的一个压缩包。既然是压缩包,就可以利用winrar软件对其进行解压并得到里面的软件。
本次的利用工具:apktool,SignAPK,ApkBurster
apktool:这个工具就不多解释了,就是一个解包工具。或者修改尾部扩展名,一样的哈
SignAPK:这是个新名词,我也是有幸第一次接触到,这是一个对未签名的APK问价进行签名的工具。
神器之ApkBurster:这也是个新名词,作用是加载APK时会自动进行解包,使用“解包目录”功能打开文件夹进行修改后,使用重“打包安装”即可自动完成打包,签名,覆盖安装操作。
第一步当然是利用apktool进行解包咯。当然也是可以修改尾部扩展名,将.apk修改为.zip的哦
先附上apktool的解包公式。然后我们找一款android进行解包。(当然,涉及敏感信息的地方我会打马赛克的)
java -jar apktool.jar d -f apk文件路径 -o 解包目标文件夹
为啥是修改里面的图片?而不是修改里面的数据呢?其实修改logo图片首先是最简单。其次是最容易看到效果的。
首先,先找到res文件夹。这个文件夹里面存放着大量的图片。很容易就可以找到logo的图片
其次,从网站上下载好一个图片(随便大小,别超过手机屏幕就行),然后与本身里面的logo进行替换。(注意哦,替换的名字也必须是一样的,因为程序会以名字调用的)
我们把APK解压出来,是否要对整个信息进行封装了呢?其实封装就是要对apk文件进行签名。如果无法签名的话,apk文件是不会正常运行的。那我把他们再压缩成zip压缩包,然后再改成apk可以吗?我这里告诉你,我试过了,不行的。
但是还有一个方法可以做掉。你当初把apk扩展名改为zip的那个包,是可以利用的,直接整个替换里面的或部分替换后,再改为.apk就行了。(亲测可用)
封装命令我还是照常给出,便于大家去测试方便一些
java -jar signapk.jar testkey.x509.pem testkey.pk8 待签名的APK路径 签名后输出apk路径
从这里面看来,我们的逆向的,基本都是要用到java程序耶!所以大家一定要装好java程序。另外,建议大家装一下java1.8,因为java版本高会不支持很多的软件和工具的。
同时,这个命令,又多出了2个文件,一个叫testkey.x509.pem,另外一个叫testkey.pk8。这2个文件是用来给apk文件签名用的,不知道大家是否用burpsuite抓过https的包。我们是先要去burp上下载一个CA证书,然后将CA证书安装到浏览器并添加信任。抓取https的包的时候,就是利用burp官网下载的CA证书,去骗取浏览器的信任,让浏览器误认为这是一个真证书。而apk里的这个签名也是同样的道理
对比是肯定要的,可以看一下安装前和安装后的差异,那。。。。我们以我们这个软件进行测试一下!
这个截图是安装前的画面。基本没有什么变化,是一个正常的软件
这个截图是安装后的画面。我们把里面的logo的图片改了,打开后,安装卸载的图标都发生了变化。是不是很好玩啊!
有的人说,看了文章,也会了。但是遇到些解决方法反而就不会了。远离说不清楚。这里也给大家写出来了。
解决方法:客户端再没次开机启动时,实际上都会对客户端自身的应用完整性进行校验的。再验证逻辑中,不使用MANIFEST.MF中的数据作为验证凭证。并且需验证是否有不属于该客户端版本的新文件添加,验证过程于服务器完成即可
通俗说法:客户端没有对自己的程序进行校验,导致攻击者可以任意修改里面的内容。本次虽然是改了图片。那如果真正的攻击者是改了数据呢?