Android dex加密与解密 application替换

Android dex加密与解密 application替换
libcore\dalvik\src\main\java\dalvik\system    ClassLoader

 

1、

dx   sdk/build-tools,class/jar生成dex文件

命令: dx  --dex --output 文件名.dex  文件名.jar

2、

zipalign

  sdk\build-tools ,apk整理对齐工具。

  未压缩的数据开头均相对于文件开头部分执行特定的字节对齐,减少应用运行内存。

  https://developer.android.google.cn/studio/command-line/zipalign.html

命令:zipalign [-v] [-f]  4 in.apk out.apk

3、apksigner

  sdk\build-tools\24.0.3 以上,apk签名工具

  https://developer.android.google.cn/studio/command-line/apksigner.html#options-sign-general

  签名:

  apksigner sign  --ks jks文件地址 --ks-key-alias 别名 --ks-pass pass:jsk密码 --key-pass pass:别名密码 --out  out.apk in.apk

 

4、openssl

密码库,囊括主要的密码算法、常用的**和证书封装管理功能及SSL协议。

 

步骤

  1、下载

  wget https://www.openssl.org/source/openssl-1.1.0g.tar.gz

  2、解压

  tar xvf  openssl-1.1.0g.tar.gz

  3、编译脚本

  复制https://wiki.openssl.org/images/7/70/Setenv-android.sh中的内容,修改以 '_' 开头的变量( _ANDROID_NDK 不用管,《export ANDROID_NDK_ROOT=NDK目录 即可)

  在末尾加上

  ./config shared no-ssl2 no-ssl3 no-comp no-hw no-engine --openssldir=`pwd`/android/x86/openssl --prefix=`pwd`/android/x86

  make depend

  make all

  sudo -E make install CC=$ANDROID_TOOLCHAIN/arm-linux-androideabi-gcc RANLIB=$ANDROID_TOOLCHAIN/arm-linux-androideabi-ranlib

  (arm-linux-androideabi- 如果是x86需要为i686-linux-android-)

 

ActivityManagerService

frameworks/base/ core/java/com/android/server/am/ActivityManagerService.java

Zygote

  进程孵化器

SystemServer

  Zygote孵化,核心Service所在进程

AMS

  SystemServer中启动。核心的服务,主要负责系统中四大组件的启动、切换、调度及应用程序的管理和调度等工作

Android dex加密与解密 application替换

Android Application启动流程

Android dex加密与解密 application替换

 

反射替换真实的Application
ContentProvider onCreate获取getContext的特殊处理

Application创建出来后 给到了以下对象的以下成员:
ContextImpl -> mOuterContext ProxyApplication
ActivityThread -> mAllApplications(ArrayList) ProxyApplication
ActivityThread -> mInitialApplication ProxyApplication
LoadedApk -> mApplication ProxyApplication

如何获得这些需要替换掉成员的类型的对象?
ContextImpl 通过 Application的 attachBaseContext 回调的参数获得
ActivityThread 可以通过 ContextImpl 的 mMainThread 属性获得
LoadedApk 可以通过 ContextImpl 的 mPackageInfo 属性获得

 

 

 

 

项目地址:https://github.com/IanIanIanIan/ProxyGuard