2020第二届网鼎杯RE-bang脱壳环境踩坑记录
承接上文第二届网鼎杯 Writeup,使用DexExtractor进行脱壳。作者在 github 上的说明不太详细,就百度找到了操作向-DexExtractor的使用这篇文章。依据文章和作者的介绍开始配置环境。
AVD 配置
DexExtractor 的使用需要替换 sdk 中的system-images\android-19\default\armeabi-v7a\system.img
为作者版本,如果需要在其他安卓版本使用,需要自行编译对应版本的system.img
。
有现成轮子就直接用了,DexExtractor作者编译的system.img
是android 4.4 、api-19版本。但是 AS API-19 的有三个版本,README 中没指明。操作向-DexExtractor的使用里面写着用非 google api 版本,就尝试性使用。
创建 AVD 完成后,未修改任何文件,测试虚拟机可用性。提示报错有两条,其中一条是:
1 | cannot find avd system path please define android sdk root |
sdk 的系统变量我是配置正确的,重启 AS 错误解决。再次运行报错:
1 | Emulator: emulator: ERROR: This AVD's configuration is missing a kernel file! Please ensure the file "kernel-ranchu" is in the same location as your system image. |
报错没有找到 kernel-ranch
内核文件。百度谷歌后有几种解决方法:
将位于
Sdk\system-images\android-19\default\armeabi-v7a
的kernel-qemu 重命名为 kernel-ranchu 。实测无效,重命名后报错:
1
2PANIC: Unknown AVD name [Pixel], use -list-avds to see valid list.
HOME is defined but there is no file Pixel.ini in $HOME\.android\avd将 sdk 镜像下的
Sdk\system-images\android-19\default\armeabi-v7a
全部文件复制到 AVD 的目录.android\avd\Pixel_2_API_19_2.avd
下。实测无效,报错与复制前一样。
最后在 stackoverflow 找到两篇帖子 Emulator error: This AVD’s configuration is missing a kernel file和Mac and “PANIC: Missing emulator engine program for ‘arm’ CPU.”,解决方法:在启动 AVD 时,指定 kernel-qemu 为内核则可以启动。
原文如下:
author:shizhen
See my answer for the Android Studio environment, Mac and “PANIC: Missing emulator engine program for ‘arm’ CPU.”.To solve this problem, you need to specify the -kernel path manually. i.e.
$ ~/Library/Android/sdk/emulator/emulator @Galaxy_Nexus_Jelly_Bean_API_16 -kernel ~/Library/Android/sdk/system-images/android-16/default/armeabi-v7a/kernel-qemu
Remember to change the emulator name Galaxy_Nexus_Jelly_Bean_API_16 to your own emulator name.Below command is to check the emulators available for command line.
$ ~/Library/Android/sdk/emulator/emulator -list-avds
And also, ensure that your emulator path is correct, i.e. the one located at ~/Library/Android/sdk/emulator/
然后查阅 android 官方的开发手册,找到关于参数 kernel 的描述:
使用特定的模拟内核。如果您未指定路径,则模拟器将在系统目录中查找。如果您未指定此选项,则默认为 kernel-ranchu。如需了解详情,请参阅 AVD 系统目录。使用 ‑show‑kernel 选项查看内核调试消息。
当没有指定 kernel 参数时就默认使用 kernel-ranchu 。而 armeabi-v7a 里面只有 kernel-qemu 。而如果下载的镜像有 google-api 的标签,则有 kernel-ranchu 。(在同一页文档中也找到 kernel-ranchu 是最新版本的 QEMU 2 模拟器。)
但是使用镜像带有 google-api 的镜像,没有 dump dex 的 logcat,脱壳不成功。
手动指定 AVD 的启动内核:
1 | emulator -avd avd_name -kernel kernel-qemu |
报错如下:
1 | PANIC: Missing emulator engine program for 'arm' CPU. |
原因可能是 sdk/tools 下缺少某些文件,我的解决方法是将 sdk/emulator
全部文件(夹),复制到 sdk/tools
,重名文件都选择替换。
成功启动 AVD 。
添加读写权限
apktools 反编译后,在 AndroidManifest.xml manifest 标签内添加:
1 | <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> |
保存后回编译 apk 。
dump dex
按照DexExtractor readme 描述当在 logcat 中查看到类似于:(x为包名)
1 | E/dalvikvm(4396): --pacthed-- , /sdcard/xxxxxxxxxxxxxxxxx.dex |
将 dex 文件拷贝到本机,然后用DexExtractor里面的 Decode.jar 对 dex 解码。
再用 baksmail.jar 将 dex 转 smali 。
计划设想很美好,但是 apk 怎么都运行不了, 错误提示 no support xxxx 。
猝~