东华杯遇到一题安卓逆向,测试机怎么也安装不了。总结一下我遇到的坑。
ADB安装
首先你要下载AndroidSDK,推荐直接用Android Studio自带的,安装过程中会让你选择SDK的安装路径(不要有中文!)
然后AndroidSDK\platform-tools下就有adb,将这个路径放入环境变量就行了。
ADB使用
首先你要打开手机的开发者模式,然后打开USB调试,再连接电脑。输入以下命令查看设备:
1 | adb devices |
安装apk:
1 | adb install *:/.../*.apk |
上传文件
1 | adb push 1.mp3 /sdcard/mp3/ |
下载文件
1 | adb pull blade_keypad.kl /system/usr/keylayout/ |
进入手机shell
1 | adb shell |
获取屏幕截图
1 | adb shell screencap /sdcard/screen.png |
将手机上的端口转发到主机上:
1 | adb forward tcp:23946 tcp:23946 |
移除端口转发
1 | adb forward --remove tcp:8080或adb forward --remove-all。 |
查看应用包名
1 | 不使用参数:adb shell pm list packages,打印设备/模拟器上的所有软件包 |
然后这里就有一个坑。不要用相对路径!直接用apk的绝对路径。如果你用了相对路径,就会一直卡着不动,然后你再用绝对路径也是,这就要去任务管理器杀死adb.exe进程,然后重新用绝对路径安装,它才能成功…
然后这里,东华杯这道题为什么安装不上,报错:Failure [INSTALL_FAILED_TEST_ONLY: installPackageLI]
因为这个apk是测试版本,需要在install后面加-t参数强制安装,参考:Failure [INSTALL_FAILED_TEST_ONLY: installPackageLI]_私房菜-CSDN博客
我们这里主要讲讲如何调试。
IDA调试
没root的手机好像比较麻烦,参考博客:ida动态调试安卓SO(免root) - 编程和调试 (entry0.cn)
root现在应该都是刷面具,这里不讲了,不同机器方法不同。
release版本的APK文件默认是不能调试的,所以需要修改一些属性使其可调试
(1)在app/build.gradle中添加语句debuggable true
,如下图所示:
(2)在AndroidManifest.xml文件的application标签中添加语句android:debuggable="true"
,如图所示:
但是在实际动态调试过程中往往只有一个apk文件,则将其放入Android Killer工具中反编译,根据方案二修改其AndroidManifest.xml文件的代码,再回编译,此过程这里不再详细描述。以上准备工作完成以后,就可以开始使用IDA进行动态调试了。
然后 adb install *:/…/*.apk安装程序
进入shell,su命令获取root权限
上传android_server64文件到/data/local/tmp/目录下
然后chmod 777 file,并执行
重新打开一个命令提示符,
输入”adb forward tcp:23946 tcp:23946”进行tcp端口转发
其中第一个23946为Android设备上的,第二个是PC端的。
查看要调试的包名
执行命令adb shell am start -D -n com.example.hello/.MainActivity
启动程序,其中选项-D
代表开启debug模式,-n
后加上应用程序包名以及活动名,如图所示:
选择附加进程