看雪安卓逆向⾼级研修两万三万班学习笔记
安卓逆向就是将安装包apk⽂件还原成打包前的样⼦。
android代码和资源编译打包会形成安装包apk,反过来就是逆向了。
Apk⽂件其实是⼀个zip⽂件,解压之后可以看到其中的⽬录结构
java程序⽣成的.class⽂件经过打包⽣成
资源⽂件索引
此⽂件夹包括布局⽂件、图⽚、strings等⽂件,可以通过R.java引⽤
lib⽤到的第三⽅库,包括.so⽂件。.so⽂件不易破解
assets
不经编译的资源⽂件,可以通过AssetManager类访问
META-INF
应⽤签名⽂件,⽤于验证apk中的⽂件没有被修改过
使⽤dex2jar和jdgui查看java代码
⾸先将apk或者apk中的dex⽂件拖到d2j-dex2jar.bat上,会得到⼀个jar⽂件
⽤jdgui打开此jar⽂件,即可看到java源码
注意,部分源码⽆法正确得到
使⽤apktool反编译和打包
反编译命令apktool d *.apk
重新打包命令apktool p folder
使⽤auto-sign重签名
将apk改名为update.zip,复制到签名⼯具的⽬录下,运⾏Sign.bat
重新打包之前可以修改smali⽂件夹下的源码达到破解的⽬的
使⽤IDA Pro查看.so⽂件
窗⼝左侧选中函数后,按F5可以在Pseudocode窗⼝查看反编译得到的C代码
同样可以动态调试.so代码
常⽤apk保护⽅法
加固/加壳
加壳指的是将dex⽂件加密后和加密apk写⼊⼀个新的dex⽂件,运⾏时⾸先通过加密apk解密得到源dex⽂件,再通过DexClassLoader动态加载
源dex
运⾏时必然将源dex加载到内存中运⾏,因此在加载源dex后dump内存中对应区块即可得到源dex⽂件,即脱壳成功
混淆java或者C#(Unity)代码,即使反编译也⽆法看懂源代码,增加分析代码逻辑的难度
对于java代码,可以配置proguard脚本⽣成apk时混淆classes.dex安卓软件签名工具
对于Unity项⽬,反编译后得到的Assembly-CSharp.dll即可使⽤.NET Reflector直接查看源代码,建议使⽤Obfuscar混淆提取码:6dCi

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。