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

举报
韩曙亮 发表于 2022/01/11 00:21:51 2022/01/11
【摘要】 文章目录 一、注入流程二、注入工具的 main 函数分析 一、注入流程 开始分析 【Android 逆向】Android 进程注入工具开发 ( 编译注入工具 | 编...





一、注入流程



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


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

dumpsys activity top|grep pid

  
 
  • 1

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

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

./tool 2222

  
 
  • 1

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





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



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

#if defined(__i386__)  

  
 
  • 1

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


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

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

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

调用 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;
	}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

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

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

  
 
  • 1
  • 2

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;
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

文章来源: hanshuliang.blog.csdn.net,作者:韩曙亮,版权归原作者所有,如需转载,请联系作者。

原文链接:hanshuliang.blog.csdn.net/article/details/121130441

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。