apktool
官网安装指南
Mac: brew install apktool
反编译apkapktool d test.apk
重新打包apkapktool b 目录
AndroidManifest.xml
-APP权限配置
-程序入口
smali 文件(一种汇编代码)
Dalvik虚拟机和Jvm一样,也有自己的一套指令集,类似汇编语言,但是比汇编简单许多,只要你会java,了解android的相关知识,就可以轻松的看懂,如果得到这些汇编文件呢,利用apktool或者dex2jar工具包,反编译classes.dex文件,就可以得到以smali为后缀的文件,这些smali文件就是Dalvik的寄存器语言
-.smali可以和.dex相互转换
-修改APK代码通常修改smali文件(重新修改.java源代码 重新编译的困难太大)
-baksmali.jar smali.jar对dex 和 smali文件做转换
.dex文件 反编译成了smali文件 都是汇编代码 每个smali对应一个java文件
一般是去修改smali文件 而不是java文件 因为修改java文件还有编译,而且jdk的版本不确定等因素会导致编译后无法使用
classes.dex
-源代码在classes.dex文件里
-可以反编出.java代码
.smali—->.dex——>.java
JADX
apktool和jadx的区别
把dex文件转化为java代码
签名
keytool jarsigner 工具是JAVA JDK自带的
生成证书
keytool -genkey -keystore my-release-key.keystore -alias my_alias -keyalg RSA -keysize 4096 -validity 10000
用证书给apk签名
jarsigner -sigalg MD5withRSA -digestalg SHA1 -keystore my-release-key.keystore -signedjar
com.dahuodong.veryevent_4.6.2_60_sign.apk com.dahuodong.veryevent_4.6.2_60.apk my_alias
未签名APK不能在安卓手机上安装
APP在启动时会对签名校验,要逆APP,跳过校验
APK启动加载
1.Dex加载流程:(安卓源代码)
Davlivk虚拟机加载dex文件
Java层Dex加载流程:
BootClassLoader —-> PathClassLoader ——> DexClassLoader
Native层Dex加载流程:
libdvm.so (重编译 system.img)
OpenDexFileNative (hook这一层C语言 难度大)
2.点击图标,APP加载流程
启动后Activity Manager就会去找AndroidManifest.xml文件,然后在文件里找到要启动的Application
接下来是去xml文件中找到启动界面Launch Activity
一个APK只有一个Application
每个Apk运行时都需要有一个Application对象 Application对象执行onCreate方法是时 APP就开始运行
APP
1、Activity:
一个Activity通常就是一个界面
<activity android:name=""><intent-filter><action android:name="android.intent.action.MAIN"/><category android:name="android.intent.category.LAUNCHER"/></intent-filter></activity>
2、Service:
后台服务,播放音乐,数据处理等
3、Broadcase receiver
异步接收广播
4、Content provider:
内容共享
简单反编译打包加签名的过程
案例:书旗app
链接: https://pan.baidu.com/s/12z3fwpyR7XWQY_Xj-E39bQ 密码: 7of4
- apktool d shuqi.apk
- 找到.xml文件寻找入口类,如果找不到可以通过jadx打开apk,按APPLICATION关键字搜索,在里面查找签名校验的函数,我们需要的是屏蔽该函数
- 找到对应java文件的smali文件,删除到对应的签名逻辑
- 重新打包apk
- 生成证书,重新用证书给apk签名
