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

Posted 韩曙亮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 逆向Android 进程注入工具开发 ( 注入代码分析 | 远程调用 目标进程中 libc.so 动态库中的 mmap 函数 三 | 等待远程函数执行完毕 | 寄存器获取返回值 )(代相关的知识,希望对你有一定的参考价值。

前言

前置博客 :

本博客进行收尾 , 远程调用 mmap 函数后 , 等待函数执行 , 获取该函数执行的返回值 ;





一、等待远程进程 mmap 函数执行完毕



调用

waitpid(pid, &stat, WUNTRACED)

方法 , 阻塞等待 远程进程 的 mmap 函数执行完毕 , 直到远程进程状态位 WUNTRACED 时 ;

完整代码如下 :

	/* 等待远程调用执行完毕 */
	int stat = 0;
	waitpid(pid, &stat, WUNTRACED);
	while (stat != 0xb7f) {
		if (ptrace_continue(pid) == -1) {
			printf("error\\n");
			return -1;
		}
		waitpid(pid, &stat, WUNTRACED);
	}




二、从寄存器中获取进程返回值



等待远程进程 mmap 函数执行完毕返回后 ,

先调用 ptrace_getregs 方法 ,

ptrace_getregs(target_pid, regs)

获取远程进程的 寄存器信息 ;

然后读取该寄存器数据中的 EAX 寄存器值 , 用于获取远程执行 dlopen 函数的返回值 , 返回的是 libbridge.so 动态库的首地址 ;

/* 读取寄存器返回值 */
long ptrace_retval(struct pt_regs* regs)
{
#if defined(__arm__)  
	return regs->ARM_r0;
#elif defined(__i386__)  
	return regs->eax;
#else  
#error "Not supported"  
#endif  
}




三、博客资源



完整源码下载地址 :

以上是关于Android 逆向Android 进程注入工具开发 ( 注入代码分析 | 远程调用 目标进程中 libc.so 动态库中的 mmap 函数 三 | 等待远程函数执行完毕 | 寄存器获取返回值 )(代的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

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

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

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