Android 逆向Android 进程注入工具开发 ( 注入代码分析 | 注入工具的 main 函数分析 )

Posted 韩曙亮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 逆向Android 进程注入工具开发 ( 注入代码分析 | 注入工具的 main 函数分析 )相关的知识,希望对你有一定的参考价值。





一、注入流程



开始分析 【Android 逆向】Android 进程注入工具开发 ( 编译注入工具 | 编译结果文件说明 | 注入过程说明 ) 博客中的 tool 工具代码 ;


tool 工具使用前 , 先获 取要注入的目标进程 进程号 , 使用

dumpsys activity top|grep pid

命令获取当前前台进程的进程号 ;

/data/system/debug/ 目录中 ( 之前将所有注入相关的文件都拷贝到该目录中 , 并赋予 777 权限 ) , 执行

./tool 2222

命令 , 即可 向目标进程注入 SO 动态库 ; 其中 2222 就是要注入 SO 动态库的 目标进程 进程号 ;





二、注入工具的 main 函数分析



该应用涉及到 CPU 寄存器操作 , 因此需要确定应用运行在指定的 CPU 架构中 , 使用

#if defined(__i386__)  

判定当前的运行环境的 CPU 架构 ;


判断参数是否合法 , 正常情况下执行 ./tool 2222 命令 , 有 2 个参数 , 如果参数个数不是 2 个 , 直接报错 ;

	/* 验证 参数个数是否合法 , 如果参数个数不是 2 个 , 报错 */
	if (argc != 2) {
		printf("Usage:%s pid\\n", argv[0]);
		return 0;
	}

调用 atoi 函数 , 将参数 1 字符串数据 , 转为 pid_t 进程号类型 ;

	pid_t target_pid;
	/* 字符串转 int */
	target_pid = atoi(argv[1]);
	if (-1 == target_pid) {
		printf("Can't find the process\\n");
		return -1;
	}

获取进程号之后 , 开始 执行 SO 动态库注入 操作 :

	// 注入 /data/system/debug/libbridge.so 路径的动态库
	inject_remote_process(target_pid, "/data/system/debug/libbridge.so", "load", NULL, 0);

main 函数完整代码 :

int main(int argc, char** argv) {
#if defined(__i386__)  
	/* 正确情况下应该进入该分支 */
	LOGW("__i386__\\n");
#else
	/* 该应用是针对 x86 开发的 , 如果进入到这个分支就出错了 */
	LOGW("__arm__\\n");
#endif
	pid_t target_pid;
	/* 验证 参数个数是否合法 , 如果参数个数不是 2 个 , 报错 */
	if (argc != 2) {
		printf("Usage:%s pid\\n", argv[0]);
		return 0;
	}
	/* 字符串转 int */
	target_pid = atoi(argv[1]);
	if (-1 == target_pid) {
		printf("Can't find the process\\n");
		return -1;
	}
	printf("%s %s\\n", __DATE__, __TIME__);

	// 注入 /data/system/debug/libbridge.so 路径的动态库
	inject_remote_process(target_pid, "/data/system/debug/libbridge.so", "load", NULL, 0);
	return 0;
}

以上是关于Android 逆向Android 进程注入工具开发 ( 注入代码分析 | 注入工具的 main 函数分析 )的主要内容,如果未能解决你的问题,请参考以下文章

Android 逆向Android 进程注入工具开发 ( 编译注入工具 | 编译结果文件说明 | 注入过程说明 )

Android 逆向Android 进程注入工具开发 ( 远程调用总结 | 远程调用注意事项 )

Android 逆向Android 进程注入工具开发 ( SO 进程注入环境及 root 权限获取 | 进程注入时序分析 )

Android 逆向Android 进程注入工具开发 ( 注入代码分析 | 调试进程 ATTACH 附着目标进程 | 读取目标函数寄存器值并存档 )

Android 逆向Android 进程注入工具开发 ( 远程调用 | x86 架构的返回值获取 | arm 架构远程调用 )

Android 逆向Android 进程注入工具开发 ( 注入代码分析 | 远程调用 目标进程中 libc.so 动态库中的 mmap 函数 三 | 等待远程函数执行完毕 | 寄存器获取返回值 )(代