android脱壳机使用

前言

自制rom才是通杀
adb shell ps可看全部进程。adb shell 后ps却不行….
adb shell dumpsys activity top |more 可以直接显示最上层应用的详细信息,包名、id、pid都可以查看到。(less和more在前是打开文件用的,想用其功能显示输出要用管道)

drizzleDump

一个基于内存搜索的android脱壳工具,开源
主页:https://github.com/DrizzleRisk/drizzleDumper#drizzledumper

命令
./drizzleDumper package_name wait_times(s)
使用

  1. 这个工具就是ndk程序,所以要在Root后的Android环境下运行(虚拟机和实体机都可以)
  2. 一般来说,先让工具跑起来等着,第一个参数是包名,第二个参数是等待时间。
  3. 等待时间有两重含义,第一是当工具发现APP进程后,等待多久才开始第一次Scan;第二是每次Scan的时间间隔。(因为每种壳机制都不太一样,所以dex在内存中出现和留存的时间也不同,所以这个wait_time可以灵活配置)
  4. 打开应用
  5. dump下来的存在data/local/tmp中
  6. 觉得差不多了就ctrl+c终止

原理
./drizzleDumper package_name wait_times(s)
基本就是自己定何时开始暴力搜索内存,搜到后就dump。

测试
360:
./drizzleDumper com.example.imbaya.a360
之后打开加固应用
等一会ctrl+c
脱下来了,dex中被加了不少java层的类,oncreat也被native化了

zjdroid

基于基于Xposed Framewrok的动态逆向分析模块。半开源
主页:https://github.com/halfkiss/ZjDroid
命令
1、获取APK当前加载DEX文件信息:
adb shell am broadcast -a com.zjdroid.invoke –ei target pid –es cmd ‘{“action”:”dump_dexinfo”}’
2、获取指定DEX文件包含可加载类名:
adb shell am broadcast -a com.zjdroid.invoke –ei target pid –es cmd ‘{“action”:”dump_class”,”dexpath”:”*“}’
4、根据Dalvik相关内存指针动态反编译指定DEX,并以文件形式保存。
adb shell am broadcast -a com.zjdroid.invoke –ei target pid –es cmd ‘{“action”:”backsmali”,”dexpath”:”*“}’
该方式可以脱壳目前大部分流行的加固防护。
例外情况:
由于ApkProtect特定防修改检测,需要做如下修改即可解固该保护:

(1)在设备上创建特定目录(如/data/local)并 chmod 为777
(2)复制zjdroid.apk到该目录,并修改文件名为zjdroid.jar
(3)修改/data/data/de.robv.android.xposed.installer/conf/modules.list,模块代码文件修改为zjdroid.jar,然后重启设备即可。
5、Dump指定DEX内存中的数据并保存到文件(数据为odex格式,可在pc上反编译)。
adb shell am broadcast -a com.zjdroid.invoke –ei target pid –es cmd ‘{“action”:”dump_dexfile”,”dexpath”:”*“}’
6、Dump指定内存空间区域数据到文件
adb shell am broadcast -a com.zjdroid.invoke –ei target pid –es cmd ‘{“action”:”dump_mem”,”start”:1234567,”length”:123}’
7、Dump Dalvik堆栈信息到文件,文件可以通过java heap分析工具分析处理。
adb shell am broadcast -a com.zjdroid.invoke –ei target pid –es cmd ‘{“action”:”dump_heap”}’

使用

  1. 打开ddms logcat加tag限制:zjdroid-shell-应用包名
  2. am broadcast -a com.zjdroid.invoke –ei target pid –es cmd ‘{action:dump_dexinfo}’ 从log中找到apk路径
  3. am broadcast -a com.zjdroid.invoke –ei target pid –es cmd ‘{action:backsmali, “dexpath”:”apk路径“}’从log中看到dump路径。

原理
底层应该是采用了libdvm.so或者是libart.so库来得到具体的函数,然后通过dex对应的cookie值获取信息。

测试
腾讯和360的壳均失败,而且应用停止,应该针对的做了反脱壳处理。

DexHunter

修改android源码进行脱壳,开源https://github.com/zyq8709/DexHunter/
有很专业的官方android加固分析文章在其中。

未测试

dumpDex

基于xposed的。开源
https://www.52pojie.cn/thread-714353-1-1.html
https://github.com/WrBug/dumpDex
源码编译不成功