记一次APP脱壳重打包过程
小伙伴分享了一个开车软件,但是有播放次数限制。对此小伙伴放言要制裁它,无奈APP加固了。
咳咳,本着学(wei)习(le)研(fu)究(li)的态度,尝试着脱壳并重打包。
为证清白,伸出双手,上操作。
右键直接解压APK,查看特征是360加固:
使用apktool工具反编译APK作为我们的工程目录(能成功运气还不错):
总结下大致思路:
脱壳拿到DEX --- 替换smali源码 --- 修复AndroidManifest.xml --- 重打包 --- 签名运行
一、脱壳获取DEX文件
看特征是360加固,用我之前的方法脱之(http://bbs.pediy.com/thread-219227.htm),拿到两个dex,分别改名classes.dex,classes2.dex。
使用baksmali反编译,由于是两个dex,分别修改下目录名,并替换:
classes.dex -> smali/
classes2.dex -> smali_classes2/
二、修复AndroidManifest.xml
修复AndroidManifest.xml,修改内容包括还原application入口,主activity,删除无用的组件。
1、 查看smali,结合APP包名,确定原application类为
2、修改” application”节点”android:name”:
改为
删除属性“android:protect”
3、修改主activity 的 “.DEFAULT”为“.LAUNCHER”
4、删除所有“com.stub.stub*”的组件。
如:
三、重打包、并签名运行
修改替换后,我们得到以下目录:
使用apktool打包试试,打包成功了(哦也)。
签名完、安装启动APP看看情况。
果然,启动就闪退了。(果然考驾照没那么简单)
现在,咱们要确定是什么原因造成了闪退,最直接的方法就是动态调试APP。
四、调试APP
使用IDEA + smalidea调试APP(参考http://www.52pojie.cn/thread-502219-1-1.html)。
那么下段点-> F8->F7->下段点 …… 不断跟踪代码
最终确定退出的地方:
由于咱们删除了壳的相关代码,这里就找不到com.stub.StubApp类了,所以删除之。
重新打包安装,运行成功!
嘿嘿,学(xing)习(fu)到(sheng)此(huo)结(lai)束(le)。
总结:这次重打包还是挺简单的,没有遇到反编译工具对抗,签名校验,native
原理:
参考:https://bbs.pediy.com/thread-219227.htm
dex文件在ART上运行需要转换为OAT格式,因此壳在还原代码时少不了要将解密后的DEX文件利用dex2oat进行还原。
修改4.4的源码art/dex2oat.cc编译,做个虚拟机脱。
一、编译Android源码启动生成的镜像文件
生成的镜像文件:
然后将生成的镜像文件拷贝到AVD system directory对应目录下面,通过Android模拟器启动
二、创建AVD system directory路径:
路径类型:xxx/sdk/system-images/android-apiLevel/variant/arch/
真实路径xxx/sdk/system-images/android-19/default/armeabi-v7a
相关资料:https://developer.android.com/studio/run/emulator-commandline.html?hl=zh-cn
三、通过AVD Manager创建Android 模拟器,注意选择你创建 system image
四、启动Android模拟器
在Android莫模拟器装上加固的APP,运行一下,观察app目录下的/data/data/packagename/.jiagu文件夹下就有还原的dex文件了
相关资料:https://developer.android.com/studio/run/managing-avds.html?hl=zh-cn
[原创]分享一个360加固脱壳模拟器(2017/07/17更新)
前段时间由于工作需要,需要对一个360加固后的APK进行脱壳,网上查了一些相关资料,发现一篇论坛里前辈写的帖子《360加固成功脱壳》。
结合自己对ART机制的了解,dex文件在ART上运行需要转换为OAT格式,因此壳在还原代码时少不了要将解密后的DEX文件利用dex2oat进行还原。
所以觉得这种脱壳方法很有可行性。无奈附件中的dex2oat怎么也运行不起来(估计人品不好),所以干脆自己修改4.4的源码编译,做个虚拟机脱。
下载编译源码的帖子很多,过程这儿就不讲了,直接上成果。修改源码部分如下(art/dex2oat.cc):
(大意就是将还未转换的dex文件输出,因为360存在.jiagu目录下,因此作为过滤条件)
修改完源码编译,提取相关的.img文件,然后创建虚拟机。运行后,设置运行模式为ART模式。
装上加固的APP,运行一下,观察app目录下的.jiagu文件夹下就有还原的dex文件了。
注:由于大家反映提供的虚拟机不能脱壳。所以这里重新上传一个源码编译的原镜像还有dex2oat文件。
自行创建虚拟机后,记得改用art模式运行(第一次转换时间较长,耐心等待)。
应用市场上重新找了一个APP脱了下,成功脱壳:
新上传的镜像文件和加固样本:
链接:https://pan.baidu.com/s/1htp4GO8 密码:mwbc
有问题可以加群讨论:637599003