接上一篇...
本篇也是Android 应用安全防护和逆向分析的一个demo源码实现,
因为书中写的源码地址找不到,写的也是csdn的,下载极其不便,所以便想参考书里内容写一个上传开源。
加壳app主要有三部分,1. 源app 2. 加壳app 3. 加壳工具
其实就是把源apk加一层壳保护起来,反编译看到的就只是加壳app
这个demo实用性不大,主要用来学习
原理主要是在安装壳app的时候将源app解密出来重新安装吧,具体流程没仔细研究~如有误请指出
原理和问题有两篇博客已详细分析,故不写了:
https://blog.csdn.net/androidsecurity/article/details/8809542#commentsedit
https://blog.csdn.net/itfootball/article/details/50962459
要注意的地方:
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的签名判定~