开启网络adb

https://www.androiddevtools.cn/

Awesome Adb——一份超全超详细的 ADB 用法大全

Frida Android hook

打开手机上的终端模拟器App,依次输入下述命令

su
setprop service.adb.tcp.port 5555

# 可能要重启下,下面是可选操作
stop adbd
start adbd

或者在文件管理器中打开这个文件/system/build.prop,在最后添加

service.adb.tcp.port=5555

电脑使用adb连接,首次需要手机点击允许调试

adb connect 192.168.3.101
adb shell
adb disconnect 192.168.3.101:5555

修改vendor分区大小,刷入MIUIpie、h2os等sgsi

/system/bin/disable-verity only works for userdebug builds

verity cannot be disabled/enabled - USER build


# 备份boot.img,recovery.img,vbmeta.img,ab分区为boot_a.img
ls -l /dev/block/by-name/ | grep boot
dd if=/dev/block/sde11 of=/sdcard/boot_a.img


adb pull /data/local/tmp/makesysrw_1.31/files/super/super_fixed.bin
adb reboot bootloader
fastboot flash super super_fixed.bin

# 解锁boot的sh脚本
export PATH=/data/adb/magisk:$PATH
dd if=/dev/block/bootdevice/by-name/boot of=./selfboot.img
magiskboot hexpatch selfboot.img 2C766572696679 00000000000000
echo 不要退出
dd if=selfboot.img of=/dev/block/bootdevice/by-name/boot
rm -f selfboot.img
echo 重新启动生效

常用命令

frida unexpectedly timed out while waiting for app to launch

setprop persist.device_config.runtime_native.usap_pool_enabled false

setenforce 0
# 或者
echo 0 > /sys/fs/selinux/enforce

# 通过magisk, MagiskHide Props Config
adb shell
su
# 设置debuggable,一定要通过该方式start重启
magisk resetprop ro.debuggable 1
stop;start;

adb相关

adb shell
su
mount -o rw,remount /system

cat /proc/mounts
mount -o rw,remount -t ext4 /dev/block/dm-0 /system

mount.cifs //192.168.3.111/down/ /media/smb/ -o iocharset=utf8,username=Allen,password=321

# 一加搬家备份
adb pull /sdcard/opbackup.zip Desktop/tmp/

# frida代码提示,在工程目录
npm i @types/frida-gum

# 进入fastboot
adb reboot fastboot
fastboot reboot fastboot
# 进入bootloader
adb reboot bootloader
# 查看当前位于的分区插槽,刷img要对应
fastboot getvar current-slot
# 刷入vbmeta.img及关闭avb2.0校验
fastboot --disable-verity --disable-verification flash vbmeta_a vbmeta.img

# Hook运行apk转发
adb forward tcp:27043 tcp:27043
adb forward tcp:27042 tcp:27042
# 查看android运行的架构
adb shell getprop ro.product.cpu.abi
# 查看app安装信息
pm list packages | grep just
# 查看包安装位置
pm list packages -f | grep just
# 手机截图命令
screencap -p /data/1.png
# 内核打印
cat /dev/kmsg
dmesg
# 跳过开机向导
adb shell settings put secure user_setup_complete 1
adb shell settings put global device_provisioned 1
# 进入9008:
adb reboot edl
fastboot reboot emergency
# GPS 数据库
settings put secure location_providers_allowed # 定位方式格式 
settings get global assisted_gps_enable # 定位功能打开/关闭
# sensor
sns_dsps_tc0001 # 查看sensor相关信息
sns_cm_test # 传感器数据
# IP连接QXDM
adb shell diag_socket_log -a <Host Computer IP Address> &

# 利用 adb 的 build-tools 中的 dx 工具将 jar 包重新打包成 dex 包
/root/Android/Sdk/build-tools/30.0.3/dx --dex --output=fastjson.dex fastjson-1.2.58.jar
# 反编译资源文件,腾讯系的加-xn参数
java -jar .\ShakaApktool_3.0.0-master-release.jar d -xn .\weixin807android1920.apk

Failed to spawn: unable to access zygote64 while preparing for app launch; try disabling Magisk Hide in case it is active

关闭magisk的hide选项

刷机常用命令

# 关闭vbmeta校验
fastboot --disable-verity --disable-verification flash vbmeta_a vbmeta.img

# 解锁
fastboot oem unlock-flash
fastboot oem enable-rooting
fastboot flashing unlock

Linux命令

在不是 dir0* 目录下面找*.txt的文件:find ./ ! -path './dir0*' -name *.txt
查看文件夹大小: du -h --max-depth=1
grep查找时排除out目录和.c文件: grep -rn "BRILLO" --exclude-dir=out --exclude=*.c
第一列含有”modi“则打印相应的第二列:
awk -F ":" '($1 ~/modi/){print $2}'
grep查找两个条件(or):
grep -Ein 'gnss|loc'
find 最大深度查找不区分大小写:
find -iname name -maxdepth 1
du指定深度:
du -h --max-depth=1
时间显示:如下命令显示实例:20190220_16:38:07.18432
date +%Y%m%d_%H:%M:%S.%5N
echo 命令: echo -ne "\r" -n,不换行;-e和\r配合,光标移至行首

ddms(用于跟踪调用过程),在android-sdk-windows\tools\monitor.bat,双击运行

uiautomatorviewer(用于定位控件id),在android-sdk-windows\tools\uiautomatorviewer.bat,双击运行

jadx(用于对微信apk静态分析)

frida相关

awesome-frida

保证selinux是关闭的状态,可以在adb shell里,su -获得root权限之后,输入setenforce 0命令来获得,在Settings→About Phone→SELinux status里看到Permissive,说明selinux关闭成功。
# 查看adb设备的进程
frida-ps -U
# 使用frida spawn 进程动态调试
frida -Ufo out.txt -n com.tencent.mm -l wx.js
# 追踪app的系统调用,监控open方法
frida-trace -U -i open com.tencent.mm
# 查看当前调用堆栈的方法
console.log(Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Exception").$new()))
# traceview单独查看trace文件,注意路径要使用绝对路径
traceview.bat D:\tmp\ddms7542469556712366155.trace

常用脚本

frida的几个常用工具

//枚举当前加载的模块
Java.perform(function(){
    var process_Obj_Module_Arr = Process.enumerateModules();
    for(var i = 0; i < process_Obj_Module_Arr.length; i++) {
       //包含"lib"字符串的
       if(process_Obj_Module_Arr[i].path.indexOf("lib")!=-1)
       {
           console.log("模块名称:",process_Obj_Module_Arr[i].name);
           console.log("模块地址:",process_Obj_Module_Arr[i].base);
           console.log("大小:",process_Obj_Module_Arr[i].size);
           console.log("文件系统路径",process_Obj_Module_Arr[i].path);
       }
    }
});

//枚举模块中所有中的所有导入表(Import)函数
function frida_Module_import() {
    Java.perform(function () {
        const hooks = Module.load('libc.so');
        var Imports = hooks.enumerateImports();
        for(var i = 0; i < Imports.length; i++) {
            //函数类型
            console.log("type:",Imports[i].type);
            //函数名称
            console.log("name:",Imports[i].name);
            //属于的模块
            console.log("module:",Imports[i].module);
            //函数地址
            console.log("address:",Imports[i].address);
        }
    });
}
setImmediate(frida_Module_import,0);

// 获取当前堆存在的对象实例,可用于主动调用对象的方法
Java.choose("com.tencent.mm.plugin.account.ui.LoginUI",{
    // 匹配到对象执行的回调函数
    onMatch: function(instance){
        console.log(instance.getLayoutId());
    },
    // 搜索完成后执行的回调函数
    onComplete:function(){
    }
});

// 或取类定义的方法
var ab = Java.use("com.tencent.matrix.trace.core.AppMethodBeat");
var ms = ab.class.getDeclaredMethods();
console.log(ms);

// 创建新对象来主动调用方法(可能与运行的动态调用数据不一致)
var cls = Java.use("com.tencent.matrix.trace.core.AppMethodBeat");
var obj = cls.$new();
var res = obj.i(1);
// var res = obj.getInstance();



Ghidra

some commonly used functions (and their offsets in JNIEnv):

JNIEnv + 0x18: jclass (*FindClass)(JNIEnv, const char);
JNIEnv + 0x34: jint (*Throw)(JNIEnv*, jthrowable);
JNIEnv + 0x70: jobject (*NewObject)(JNIEnv*, jclass, jmethodID, …);
JNIEnv + 0x84: jobject (*NewObject)(JNIEnv*, jclass, jmethodID, …);
JNIEnv + 0x28C: jstring (*NewString)(JNIEnv, const jchar, jsize);
JNIEnv + 0x35C: jint (*RegisterNatives)(JNIEnv, jclass, const JNINativeMethod, jint);

adb传输文件

1、获得root权限:adb root

2、设置/system为可读写:adb remount

3、将hosts文件复制到PC:adb pull /system/etc/hosts <PC机上文件名>

4、修改PC机上文件

5、将PC机上文件复制到手机:adb push <PC机上文件名> /system/etc/hosts

vendor.img 镜像解压:

  1. 将Android sparse image格式的vendor.imag转换成e普通格式:simg2img vendor.img vendor.img.ext4
  2. mount 镜像:sudo mount -t ext4 -o loop vendor.img.ext4 /tmp/vendor/

安装kali nethunter

安装magisk root,搜索安装kali nethunter模块,或者下载模块KaliNethunter-v8.2(22).zip本地选择安装

安装KaliNethunter-v8.2(22).zip中apps文件夹里的Nethunter,nt-terminal,VNC应用,进入Nethunter,允许7次,并给root权限,使用

nethunter apt Temporary failure in name resolution

nethunter 能上网,但是不能ping和apt

Using putty connect to Nethunter and Run
vi /etc/passwd,
Change the line

_apt:x:104:3004::/nonexistent:/bin/false
to 
_apt:x:0:65534::/nonexistent:/bin/false

Save and Run apt-get update ,It Works Check it ,
Explanation: Changing GID 3004 to 65534 ,What is GID 3004 on your system?
The fact that the _apt user is part of "nogroup" is actually the problem.

Err:1 https://packages.microsoft.com/repos/microsoft-debian-stretch-prod stretch InRelease

The following signatures couldn't be verified because the public key is not available: NO_PUBKEY EB3E94ADBE1229CF

vi /etc/apt/sources.list.d/microsoft.list

#deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-debian-stretch-prod stretch main

Err:1 http://mirrors.neusoft.edu.cn/kali kali-rolling InRelease

The following signatures were invalid: EXPKEYSIG ED444FF07D8D0BF6 Kali Linux Repository devel@kali.org

# 1
wget -q -O - https://archive.kali.org/archive-key.asc | apt-key add

# 2
wget https://http.kali.org/kali/pool/main/k/kali-archive-keyring/kali-archive-keyring_2018.1_all.deb
apt install ./kali-archive-keyring_2018.1_all.deb

# 3
apt-key adv --keyserver hkp://keys.gnupg.net --recv-keys 7D8D0BF6

Burp 抓包安卓APP的HTTPS流量

安卓7.0之后默认不信任用户安装的系统证书。所以手机在安装burp证书的时候,需要将证书安装为系统信任的证书。

手机下载证书

http://burp
http://chls.pro/ssl
http://192.168.3.111:8888

手机需要先进行 ROOT

# 1. 证书转换,已经是pem格式的证书不需要执行这一步
openssl x509 -inform DER -in cacert.der -out cacert.pem 

# 2. 进行MD5的hash显示
# openssl版本在1.0以上的版本的执行这一句
openssl x509 -inform PEM -subject_hash_old -in cacert.pem

# openssl版本在1.0以下的版本的执行这一句
openssl x509 -inform PEM -subject_hash -in cacert.pem

证书重命名,数字为上面计算出的hash
mv cacert.pem 9a5ba575.0
# 2. 新证书放到系统目录下

/system/etc/security/cacerts
chmod 644 /system/etc/security/cacerts/<hash>.0
chgrp root <hash>.0

DDMS调试

uiautomatorviewer和traceview的JVM无法create退出问题

-Djava.ext.dirs=..\lib\x86_64;..\lib is not supported.

新增系统环境变量

# 环境变量
ANDROID_SWT : D:\android\android-sdk\tools\lib\x86_64
ANDROID_HOME : D:\android\android-sdk
ANDROID_PLATFORM_TOOLS : D:\android\android-sdk\platform-tools
ANDROID_SDK_HOME : D:\android\android-sdk

# PATH环境变量
D:\apps\jdk1.8.0_202\bin
D:\android\android-sdk
D:\android\android-sdk\tools
D:\android\android-sdk\platform-tools
D:\android\android-sdk\tools\bin
D:\android\android-sdk\tools\lib\x86_64\swt.jar

Unrecognized option: --class-path=D:\dev\android\android-sdk\tools\lib\x86_64;lib

Method: 
    1. Find the Monkeyrunner under the Android SDK tools path
    2. Open the source file
    3. Modify the bottom line of the file:
exec java -Xmx128M $os_opts $java_debug -Djava.ext.dirs="$frameworkdir:$swtpath" -Djava.library.path="$libdir" -Dcom.android.monkeyrunner.bindir="$progdir" -jar "$jarpath" "$@"
    change into: 
exec java -Xmx128M $os_opts $java_debug --class-path="$frameworkdir:$swtpath" -Djava.library.path="$libdir" -Dcom.android.monkeyrunner.bindir="$progdir" -jar "$jarpath" "$@"
    4. Save and run

jdk9之上增加了--class-path选项

修改android\android-sdk\tools下的uiautomatorviewer.bat,还原-Djava.ext.dirs

call "%java_exe%" "-Djava.ext.dirs=%javaextdirs%" -Dcom.android.traceview.toolsdir= -jar %jarpath% %*
rem call "%java_exe%" "--class-path=%javaextdirs%" -Dcom.android.traceview.toolsdir= -jar %jarpath% %*

genymotion 支持arm应用

https://github.com/m9rco/Genymotion_ARM_Translation

adb shell
cd /sdcard/Download/
sh /system/bin/flash-archive.sh /sdcard/Download/Genymotion-ARM-Translation.zip
adb reboot

9008售后救砖

https://cloud.189.cn/web/share?code=eU3aMvU3aeee

使用方法

1. 安装下面的 9008 新版驱动。
    安装时,第一次弹出的界面是选择网络驱动,可直接点击 Cancel 并选择是跳过安装这个驱动。
    取消后再点击 Next 即可。
2. 下载想刷的救砖包,解压后运行 MsmDownloadTool,选择 Other 进入并选好 Target。
3. 手机进入 9008 模式。
    方法1. 手动进入。
        1). 关机并拔掉数据线。
            方法1. 长按电源键选择关机。
            方法2. 重启到 bootloader 模式,选择 power off。
            方法3. 同时按住音量加和电源键不松,强制关机。
        2). 先按住[音量-]再按住[音量+]不松,同时插上数据线。
    方法2. adb reboot edl,或者有些 App 也有重启到 EDL 功能(如 MagiskManager 和 EdXposedManager)
4. 点击 Start 开始刷入

注意事项

进入 9008 之后如无操作,15 秒后会自动退出 9008,一直按住音量键不松,退出后会继续进入 9008 模式。

如出现 Sahara 通信失败,内存检测错误,Param 预载失败等错误,如使用其他版本驱动,可尝试卸载其他版本 9008驱动,安装此文件夹内新版驱动。
如无法解决,请确保系统无问题,尝试重新安装系统。

9008 无法修复指纹,可以参考此视频尝试修复
https://www.bilibili.com/video/BV1vz4y1X7fy

高通9008驱动

Qualcomm_USB_Host_Drivers_1.00.37_20150708_xp_vista_w7_w8.exe
Qualcomm_USB_Host_Drivers_1.00.53_20180705_w7_w10.exe

9008 氢

9008_HydrogenOS_11.0.1.2.KB05_kebab_15_H.12_201015.7z(感谢工藤新一分享)
9008_HydrogenOS_11.0.4.5.KB05_kebab_15_H.12_201110.7z
9008_HydrogenOS_11.0.5.6.KB05_kebab_15_H.12_201117.7z

9008 氧 欧版

9008_OxygenOS_EU_11.KB05BA_kebab_15_E.12_200918.zip
9008_OxygenOS_EU_11.0.1.2.KB05BA_kebab_15_E.12_201015.zip
9008_OxygenOS_EU_11.0.4.5.KB05BA_kebab_15_E.12_201110.zip
9008_OxygenOS_EU_11.0.5.6.KB05BA_kebab_15_E.12_201113.zip

9008 氧 印度版

9008_OxygenOS_IN_11.KB05DA_kebab_15_I.12_200918.zip
9008_OxygenOS_IN_11.0.1.2.KB05DA_kebab_15_I.12_201015.zip
9008_OxygenOS_IN_11.0.4.5.KB05DA_kebab_15_I.12_201110.zip
9008_OxygenOS_IN_11.0.4.5.KB05DA_kebab_15_I.12_201113.zip

9008 氧 国际版

9008_OxygenOS_NA_11.KB05AA_kebab_15_O.12_200918.zip
9008_OxygenOS_NA_11.0.1.2.KB05AA_kebab_15_O.12_201015.zip
9008_OxygenOS_NA_11.0.4.5.KB05AA_kebab_15_O.12_201110.zip
9008_OxygenOS_NA_11.0.4.5.KB05AA_kebab_15_O.12_201113.zip

为rec启用adb

recovery-debug.img
修改后的 rec 文件,开启了 adb 功能,对应版本可直接刷入
如使用 boot 方式启动,可随意使用
原贴见 XDA [Guide] Enable ADB on the stock OxygenOS recovery
https://forum.xda-developers.com/oneplus-8t/how-to/guide-enable-adb-stock-oxygenos-recovery-t4179839

删除magisk的问题模块

代码:

cd /data/adb/modules
切换到 Magisk 模块目录
代码:
ls
列出这个目录的内容,每个模块都有自己的目录,通常有一个容易识别的名字 :)
代码:
rm -r <directory>
删除有问题的目录。提示:在控制台选项卡自动完成工作

使用"adb shell"->输入"magisk --remove-modules"删除所有模块
tree -NCfhl | grep gdb
objection -g com.instagram.android explore
    memory list modules
    memory list exports libard-upload.so
adb push gdbserver/gdbserver /data/local/tmp/gdbserver/gdbserver64
ps -e | grep instagam
# 虚拟机孵化器进程
ps -e | grep zygote64
./gdbserver64 0.0.0.0:23946 --attach 15398
gdb-multi
    set architecture arm
    # set arch arm
    set arm fallback-mode thumb
    target remote 192.168.6.2:23946
    # No shared libraries matched.
    info shared libstrings.so
    

[原创]使用frida来hook加固的Android应用的java层

https://bbs.pediy.com/thread-246767.htm

如何xposed hook 带"壳"的app

https://www.cnblogs.com/xiaobaiyey/p/6442417.html

[原创]记一次安卓内核源码编译刷机过程(修改反调试标志位)。

https://bbs.pediy.com/thread-219233.htm

No address associated with hostname错误

在AndroidManifest.xml的manifest节点下添加权限

<uses-permission android:name="android.permission.INTERNET" />
最后由 不一样的少年 编辑于2022年03月11日 14:35