本文浅浅地针对CTF中遇到的安卓apk题目,罗列出一些基本知识点
工具:
2.jeb(apk)
知识点:
·拿到一个apk文件可以用PKID工具查一下有没有壳,有壳的话用frida-dexdump等工具脱壳
·frida-dexdump脱壳
先介绍一下加固和脱壳的概念。加固本质上就是对 dex 文件进行加壳处理,让一些反编译工具反编译到的是 dex 壳,而不是 dex 文件本身。具体的实现方式是,将原 dex 文件进行加密,再合成到 dex 壳中,而系统运行应用的时候,会加载 dex 壳文件,而 dex 壳里面有一个自定义的 ClassLoader 类,它会将原有 dex 文件进行解密,然后再加载到 dex 数组中。系统会加载壳 dex,壳 dex 才会加载原 dex,那这个时候原 dex 已经被加载到内存中了,我们只需要从内存中把它 dump 出来就可以了。frida-dexdump就是这样一个工具。
首先安装frida,安装完后要在模拟器运行apk文件(如果运行不了可能是模拟器的位数错的,如果还是运行不了那就不适用frida脱壳),再开启frida-server监听
adb shell # cd data/local/tmp # ./frida-server-16.1.0-android-x86
使用frida-dexdump -FU导出当前模拟器中前台运行的应用(如果有的题不是在前台运行的,也可以是通过运行frida-dexdump -U -f com.app.pkgname导出指定包名的应用),可以看到导出了两个文件在C盘(根据题目不同,导出的文件数量不同)
将dex文件转化为jar包,再用jd-gui打开,有flag的明文
$d2j-dex2jar -f -o output.jar class.dex
·apk的本质是压缩文件,如果没有思路的话就把.apk换成.zip试试看,有时候zip里会有惊喜
·资源文件里的AndroidManifest.xml指明了程序运行所用到的主要函数(不限于MainActivity)
·MainActivity存在于com目录下,是程序的主函数,可以看到程序执行的逻辑
·资源文件中的lib目录下存在.so文件,(jeb)导出后可拖进ida分析,有时.so文件中的内容就是主函数,会在MainActivity中直接或间接引用;有时某个dll链接库里存放着程序的主要逻辑
·有些数据包只有在运行程序的时候才会生成(动态释放文件),那就用模拟器运行这个apk,再打开模拟器的文件管理器,去/data/data目录下找相应的jar、dex文件或其他数据包,一般目录名或文件名都和题目名称有关。粘贴到桌面共享的文件夹中,就完成导出操作了。
例:SCTF的SycLock
持续更新。。。