ADB
ADB(Android Debug Bridge),安卓调式桥。用于与安卓模拟器或真实安卓设备进行通信,提供了丰富的命令行工具对应用进行安装、调试。使用手册常用命令1
常用命令2
adb devices #列出可连接设备
adb shell #进入手机管理(只有一个设备时)
adb -s shellID command#指定shell,后跟命令
adb install #安装包文件
adb push computerfilepath phonefilepath #将文件传至手机端
adb pull phonefilepath computerfilepath #将文件传至电脑端
adb -s shellID root #以root权限运行
案例—登录逻辑分析
程序编写
C源程序
#include <stdlib.h>
#include<stdio.h>
#include<string.h>
char name[20];
char pwd[20];
char __name[20] = "hello";
char __pwd[20] = "123456";
int check(char _name[],char _pwd[])
{
if(!strcmp(__name,_name) && !strcmp(__pwd,_pwd))
{
printf("恭喜你登陆成功! \n");
}
else
{
printf("请输入正确的账号密码!\n");
}
return 0;
}
int main()
{
printf("************************\n");
printf("**");
printf("请输入账号:");
scanf("%s",name);
printf("请输入密码:");
scanf("%s",pwd);
printf("********\n");
check(name,pwd);
printf("\n*************\n\n");
printf("***************\n");
system("pause"); //需加头文件<stdlib.h>,发出一个dos命令,如pause冻结屏幕,system("dir")列出目录文件;
return 0;
}
Android.mk编写
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_ARM_MODE := arm
LOCAL_MODULE := user
LOCAL_SRC_FILES := user.c
include $(BUILD_EXECUTABLE)
Application.mk编写
APP_ABI := all
#APP_ABI := x86 armeabi-v7a
APP_PLATFORM := android-22
#若报错Android NDK: Aborting (set APP_ALLOW_MISSING_DEPS=true to allow missing dependencies) . Stop.
APP_ALLOW_MISSING_DEPS=true
构建
使用ndk构建系统
ndk-build -C /path/project #-C 指定项目位置,从任意位置开始构建
ndk-build -B #若源文件未修改,NDK构建系统不会重构建目标,-B可强制重构所有源代码
ndk-build clean #清理生成的二进制文件和目标文件
ndk-build -j 4 #GNU Make工具默认一次执行一条命令,-j可以并行执行命令。数字指定并行执行的命令总数。
分析
IDA远程调试
在\IDA 7.0\dbgsrv目录中选择合适的dbgsrv,使用命令在adb -s shellPID push Clipath Serpath
传至模拟器上,加权限后执行。另一窗口执行adb -s emulator-5554 forward tcp:23946 tcp:23946
。打开IDA,选择debugger-run-remote linux debugger
,配置如图,在“Debug options”选项中勾选“Suspend on process entry point”和“Suspend on library load/unload”复选框。即可开始调试。若报错debugger id is xxx, expected yyy (armlinux),检查模拟器和IDA的debugger是否匹配。