adb

1
2
3
4
5
6
7
8
9
10
11
adb shell
adb root 需要超级adbd权限
adb remount 将系统挂载为可读写
adb kill-server 停止adb服务
adb start-server 启动adb服务
adb devices 显示连接的设备
adb install xxx.apk 安装apk
adb install -r xxx.apk 覆盖安装apk
adb uninstall 包名 卸载apk
adb push xxx /目标目录 将文件推送到手机
adb pull /手机上的文件路径 xxx 将文件拉取到本机

包名的获取

1
2
3
1.反编译查看AndroidManifest.xml,manifest根节点的方法有packagename
2.adb shell里查看进程ps ps -A
3.手机上打开目标app(确保在最前面显示),然后手机shell里运行dumpsys window windows | grep mFocusedApp

app界面控件的查看

作用

原生方式开发的app,使用Java+c++开发,加密使用的是Java和c++
H5开发的app,使用Webview控件加载网页,加密使用的是js,这种情况下jadx反编译不出来
app自动化测试,需要知道控件的id,或者说需要定位到控件

使用uiautomatorviewer.bat查看

Android SDK根目录下的\tools\bin

使用appium查看

1
2
3
4
5
6
安装之后点击Edit Configuration,配置SDK和JAVA_HOME
安装Java SDK
配置 Android SDK
设置ANDROID_HOME环境变量,然后启动,点击放大镜按钮,安装Inspector工具
在Inspector工具中找到Capability Builder,配置platformName platformVersion deviceName appPackage(app的包名) appActivity
新版的Inspector需要指定Remote Path为/wd/hub

反制截屏

1
2
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);
activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SECURE);

activity中的onCreate方法中调用getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SECURE);就行
当然实现上不止这一种写法,可以用反射,或者放到so层去,这样的话像getWindow这种函数名都能加密,但是仍然可以Hook,因为底层调用是不变的,直接Hook最终的getWindow方法

logcat使用

1
2
3
4
5
6
7
8
9
10
11
adb logcat 查看所有日志
adb logcat -c 清除日志
adb logcat -g 显示存储日志的缓冲区大小(日志是存储在手机上,adb logcat是把日志读取出来)
adb logcat -G 256M 重新设定缓冲区
adb logcat -v color 设置带颜色显示
过滤日志
根据tag过滤日志
adb logcat -s 字符串
根据pid过滤日志
ps -A | grep 包名
adb logcat | findstr pid

apk基本结构

1
2
3
4
5
6
7
8
9
10
11
assets 资源文件
res 资源文件
lib 各种平台下的使用的对应的so文件
META-INF 签名文件
resources.arsc 打包后的资源
classes.dex 源代码
AndroidManifest.xml 源代码
app反编译就是反编译的dex文件(java层反编译)

data/data目录
存放用户apk数据的目录,每个apk都有自己的目录,以包名命名,每个app只能访问自己的目录,除非root