cmd命令
1.端口占用查看:netstat -ano | findstr "5037"
2.结束进程 taskkill -f -pid 5340
报错
adb.exe: device unauthorized.
This adb server's $ADB_VENDOR_KEYS is not set
Try 'adb kill-server' if that seems wrong.
Otherwise check for a confirmation dialog on your device.
检查 C:\Users\Admin\.android 下 adb_usb.ini,adbkey,adbkey.pub文件是否存在且值正确,或者关闭手机的USB调试,再打开调试,cmd中在连接
使用jdb附加程序,调试Java层代码,此命令是本地ip + 监听端口(可以用ddms看,ddms上面显示 8602/8700,填后面那个)
5.adb devices报错:adb server version (36) doesn't match this client (41); killing...
夜神模拟器的adb.exe与本机exe版本不同,将本机adb.exe(可以使用adb --version 命令)改名为nox_adb.exe,覆盖夜神模拟器安装目录 \Nox\bin 下的 nox_adb.exe。
6 ./mprop ro.debuggable 1 将值改为1,getprop ro.debuggable 输出为1即为更改成功
magisk resetprop ro.debuggable 1:通过magisk设置ro.debuggable调试属性为1
stop;start; 必须通过cmd输入该指令重启设备
7 adb install -r demo.apk :adb安装apk命令
8 adb shell dumpsys activity activities :adb查看当前activity
9.xposed的xinstaller模块可以开启调试程序的权限。
dumpsys window | grep -E mCurrentFocus:查看手机屏幕当前置顶activity信息
adb命令
chmod +x /data/local/tmp/ida64:给文件执行权限
/data/local/tmp/ida64 -p12345:更改默认监听端口
so文件调试
1.JNI_OnLoad函数调试:
adb shell am start -D -n 包名 / 包名.activity名:以调试模式启动改包下的这个activity。
手机端通过adb命令运行android_server,ida附加程序,加载librarry时断点选项打勾
jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700
在使用jdb附加程序,8700为ddms中进程对应的端口号,有两个,那个好使填哪个
然后,app的Java层代码开始运行,加载so文件时IDA窗口会断下,看到目标so文件被加载时,此时可能是在 libart.so 或 liblinker.so 中,通过基质加偏移下断点运行也可以跳过frame框架的so文件加载流程。
so文件在IDA中直接下断点;调试模式启动app或者activity;ida中 Debugger->Select debugger ->Remote ARM Linux/Android debugger ;ida再来 Debugger->process option;最后在ida attach
更改默认端口:./android_server -p123456 注意:p后面没有空格
2.so可 自执行 文件调试
frida
包与脚本同时启动:frida -U -no-pause -f 包名 -l PC脚本绝对路径hook.js
frida -U -no-pause -f rca.rc.tvtaobao -l C:\Users\Admin\Desktop\data\python脚本\frida\TVtaobao.js
apktool
PC目录下打开cmd
- 反编译命令: apktool d -f <apkfile_path> -o <output_path>
- 打包命令: apktool b <package_path> -o <outputapk_path>
Emscripten SDK
EMSDK目录下打开cmd
emsdk activate latest:激活SDK
emcc -v:查看版本,看激活是否成功
smali及AndroidMianfest
apk可调试权限:android:debuggable="true"
readlf
文件头:readlf -h 666.so (so文件需在安装目录..../home/Admin/中)
程序头:-l 节头表:-S 符号表:-s 动态段信息:-d (可查到so文件的init_array)
baksmali.jar及smali.jar
classes2smali
java -jar [BaksmaliPath] d [DexPath] -o [OutputPath]
smali2classes
java -Xmx512M -jar [SmalijarPath] assemble [SmailPath] -o [OutputPath]
下载地址:xJesusFreke / smali / Downloads — Bitbucket
010Editor
dex文件头SHA1修复:010中,脚本 -> 新建 -> 复制下面代码 -> 运行 -> Ctrl + s保存
//------------------------------------------------
//--- 010 Editor v13.0.1 Script File
//
// File:
// Authors:
// Version:
// Purpose:
// Category:
// History:
//------------------------------------------------
int endian = ReadInt(0x28); //endian_flag
if (endian == 0x12345678) {
LittleEndian();
} else {
BigEndian();
}
uchar sha1[20];
ReadBytes(sha1, 0xc, 20);
Printf("src sha1: ");
uint i=0;
for (i=0; i<20; i++)
{
Printf("%02x", sha1[i]);
}
Printf("\n");
uchar checksum[20];
ChecksumAlgBytes(CHECKSUM_SHA1, checksum, 0x20);
Printf("calced sha1: ");
for (i=0; i<20; i++)
{
Printf("%02x", checksum[i]);
}
Printf("\n");
int adler32 = ReadInt(0x8);
if (Memcmp(checksum, sha1, 20) != 0) {
WriteBytes(checksum, 0xc, 20);
} else {
Printf("same sha1\n");
}
//uchar adler32_[4];
//ChecksumAlgBytes(CHECKSUM_ADLER32, adler32_, 0xc);
int adler32_ = Checksum(CHECKSUM_ADLER32, 0xc);
Printf("src adler32: %x\n", adler32);
Printf("calced adler32: %x\n", adler32_);
if (adler32_ != adler32) {
WriteInt(0x8, adler32_);
} else {
Printf("same adler32\n");
}
Printf("Done.\n");
ddms
ddms报错,错误日志输出在 D:\zzc\Java&android_SDK\SDK\android-sdk-windows\tools\lib\monitor-x86_64\configuration\1681956388842.log
任务管理器中结束进程,删除 C:\Users\liang\.android\monitor-workspace 文件夹,重新运行ddms.
IDA
shift + F7:查看区段(.init_arry中的函数指针会在JNI_OnLoad执行之前,挨个被执行)
dexdump
frida-dexdump -FU : 手机端运行frida server 并监听端口,使用该命令dump内存中的dex,F:前台活动App U:USB
SoFixer -修复内存中dump的so
sofixer -s soruce.so -o fix.so -m 0x0 -d
-s 待修復的so路徑
-o 修復後的so路徑
-m 內存dump的基地址(16位) 0xABC
-d 輸出debug信息