前言
web太卷了,混子选手卷不动了,准备开始学习安卓逆向,有多少写多少,保证尽可能不断更。
安卓逆向环境
这里简单讲一下我自己的环境,我是mac,所以只挑了我能用且常用的一些工具,框架。
硬件环境:
1.mac
2.真机环境(pixel 1/2 nexus 5x)
软件环境:
1.基础的java开发环境
2.idea/android studio
3.jadx
4.jeb
5.IDA
6.模拟器
7.虚拟机: r0env
8.frida
认识apk
apk(android Application PacKage) 是Android软件包的分发格式,它本身是个zip压缩包,因此可以用解压缩工具把apk当做zip文件一样去解压。
APK根目录下可能出现的目录和文件如下:
解压后,得到上图中的安卓相关文件。
apk打包流程
apk可以在apktool等工具修改了安卓对应的文件后,重新打包为apk文件。
apk的打包流程:
apk重打包:
java -jar apktool.jar d a.apk //解包
java -jar apktool.jar b b a/ -o a.apk //打包
keytool -genkey -v -keystore mysign.keystore -alias mysign -keyalg RSA -keysize 2048 -validity 10000 //生成证书
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore mysign.keystore a.apk mysign //签名
dex文件
dex(Dalvik EXecutable format)即Dalvik 可执行文件。它的结构如下:
struct DexFile{
DexHeader Header;
DexStringId StringIds[stringIdsSize];
DexTypeId TypeIds[typeIdsSize];
DexFieldId FieldIds[fieldIdsSize];
DexMethodId MethodIds[methodIdsSize];
DexProtoId ProtoIds[protoIdsSize];
DexClassDef ClassDefs[classDefsSize];
DexData Data;
DexLink LinkData;
};
一张图讲完:
关于9个区段的作用,可以去参考上图学习。这里篇幅问题不再展开。
总结
讲了下基础的环境以及对apk文件的认识。算是记录下学习的过程,希望不断更。