0.环境
1.火天网测靶场测试环境(Ubuntu+Android)
2.Android Studio
3.某度加固
4.frida-dexdump / BlackDex(github)
5.MT管理器 / Android Killer
1.什么是APP加固
APP加固是对APP代码逻辑的一种保护。原理是将应用文件进行某种形式的转换,包括不限于隐藏,混淆,加密等操作,进一步保护软件的利益不受损坏。
2.各代加固的区别
3.Android Studio编译一个APP
4.查看原始APP结构
我们用jadx-gui打开编译好的app。jadx-gui app-release-unsigned.apk
从这里可以看到我们app的入口点,我们去这个类看先是否可以看到代码逻辑。
上图可以看到,如果没有经过加固的app我们很容易看到这个app源码,从而进行分析破解之类的操作,上次的X音漫客是某度的加固我们只是对其进行了脱壳并未对齐进行修复.这就导致了存在一个问题,我们必须通过hook对数据进行修改.不能直接反编译修改数据,重新打包成app,安装使用。这样就体现出来脱修的重要性了。
5.对APP进行加固操作
1.将app推送到手机,使用MT签名程序。
adb push app-release-unsigned.apk /data/local/tmp
可以看到目前APP是未签名状态/未加固状态.我们点击功能,对APK进行签名。
这里生成了一个新的APP,我们把这个给推送到电脑进行加固。
2.将签名的APP拉取到桌面进行加固
adb pull /data/local/tmp/app-release-unsigned_sign.apk去官网将这个签名的APP进行加固下载即可。
6.对加固APP进行分析
可以看出我们已经找不到这个类了,那我们去看下AppName。
AppInfo这里可以看到原始程序的一些信息。
7.将加固APP进行签名/脱壳/修复
同样的方法将APP推送到手机上用MT看下当前信息。
可以看到当前状态是没有签名但是加固状态显示伪百度加固。那么我们先给他进行签名安装跑起来看看程序是否可以正常使用。
可以看到程序是可以正常运行的,那么我们使用BlackDex对他进行脱壳。
点击需要脱壳的包名会自动进行脱壳。
去这个目录下把脱下的dex进行查看。
先把大小相同的给删除下。然后打开APP目录看下Dex相同的删除。
直接删除即可。接着我们使用dex编辑器看下每个dex文件,不需要的删除。
可以看出这里是blackDex脱壳的dex我们直接删除,对我们没用。
最后发现就这几个dex是我们需要的,其他基本都有加固字样和脱壳的字样,我们需要先合并dex。
这里我们需要对合并后dex进行修复,几种方法。MT或者手动二进制进行前面的字节即可。这里我为了方便用MT进行修复。修复之后改名为classes.dex替换掉APP里面原有的即可。继续修改AndroidManifest.xml文件。
在上面的反编译的AppInfo类中我们可以看到我们原始的appname为空,那么我们需要把这里面的AppName给删除掉。
退出保存即可。继续清理无用资源,这些资源为加固后产生的so文件之类的。
可以很直接的看出这些资源是做什么用的我们直接删除即可。全部修改完毕之后,我们返回到APP哪里看下现在APP的属性,会发现签名校验不通过,这里我们需要对它进行重新签名,因为我们修改删除了里面的数据,导致签名数据不对。
然后执行安装,发现程序已经可以正常运行了。我们在pull到桌面,jadx反编译看下。
可以看到程序已经可以正常的反编译出源码了。至此某度加固脱修算是完成,相对于其他加固,这个算是比较简单的例子。
丈八网安蛇矛实验室成立于2020年,致力于安全研究、攻防解决方案、靶场对标场景仿真复现及技战法设计与输出等相关方向。团队核心成员均由从事安全行业10余年经验的安全专家组成,团队目前成员涉及红蓝对抗、渗透测试、逆向破解、病毒分析、工控安全以及免杀等相关领域。
原文始发于微信公众号(蛇矛实验室):安全开发之某度加固完美脱修