接上一篇...android
本篇也是Android 应用安全防御和逆向分析的一个demo源码实现,git
由于书中写的源码地址找不到,写的也是csdn的,下载极其不便,因此便想参考书里内容写一个上传开源。github
加壳app主要有三部分,1. 源app 2. 加壳app 3. 加壳工具shell
其实就是把源apk加一层壳保护起来,反编译看到的就只是加壳app安全
这个demo实用性不大,主要用来学习app
原理主要是在安装壳app的时候将源app解密出来从新安装吧,具体流程没仔细研究~若有误请指出函数
原理和问题有两篇博客已详细分析,故不写了:工具
https://blog.csdn.net/androidsecurity/article/details/8809542#commentsedit学习
https://blog.csdn.net/itfootball/article/details/50962459gradle
要注意的地方:
AndroidManifest.xml中
<meta-data android:name="APPLICATION_CLASS_NAME" android:value="com.example.signatureprotect.MyApplication"/>
这里是源app的Application包名和类名
protected void attachBaseContext(Context base) 函数中
RefInvoke.setFieldOjbect("android.app.LoadedApk", "mClassLoader", wr.get(), dLoader);
Object actObj = dLoader.loadClass("com.example.signatureprotect.MainActivity");
源app的包名和类名
加壳app和源app的res文件是如出一辙的
注意这两个app编译的resID也要同样才行,否则会找不到资源,两个app 的gradle的版本不同可能会致使编译的resID不同
加壳工具:
主要是将app按照必定的格式从新组合
我是参考这里改了一点点东西:
https://github.com/vbanqi/shellApk/tree/master/unshell/src/com/android/dexunshell
最后,源码路径:
https://github.com/george-cw/AppAddShellDemo
由于使用的源码app是以前的使用签名保护的app,因此要将加壳app的签名用于源app的签名断定~