dancebird 发表于 2017-8-5 21:32

记一次APP脱壳重打包过程

本帖最后由 dancebird 于 2017-8-5 21:34 编辑

小伙伴分享一个开车软件,但是有播放次数限制。对此小伙伴放言要制裁它,无奈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替换解压出来的classes.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 onCreate等,算是运气不错。样本就不放了,怕(liu)被(zhe)河(si)蟹(yong)。

1916ky 发表于 2017-8-5 22:09

刚开始学,毫无头绪,虽然不懂但是很感谢你们这些技术贴,实实在在的教人学习

wlpkcheng 发表于 2018-1-9 17:29

想问一下大神,我现在已经都走到断点这个位置,其中我不懂的是断点为任意断还是invoke-static 开头的为首?怎么确定闪退代码? 请大神百忙给个回复,谢谢!

repobor 发表于 2017-8-5 21:48

不错 小白学习ing

第六元素 发表于 2017-8-5 22:01

学习了 楼主辛苦了 吾爱有你更精彩。{:301_988:}

congzehao 发表于 2017-8-5 22:10

学习了,看来还是要多看看啊

xjh88232259 发表于 2017-8-5 22:34

学习了 楼主辛苦了 吾爱有你更精彩。

超大红细胞 发表于 2017-8-5 23:14

技术贴必须要留名学习

dancebird 发表于 2017-8-5 23:31

Ravey 发表于 2017-8-5 23:52

学习了,感谢

慵懒丶L先森 发表于 2017-8-6 01:38

请教如何知道APP加固,用的什么加固。AK检测说没有加固但是死活找不到入口文件,无奈
页: [1] 2 3 4
查看完整版本: 记一次APP脱壳重打包过程