作者:yueji0j1anke
首发于公号:剑客古月的安全屋
字数:1128
阅读时间: 5min
声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。合法渗透,本文章内容纯属虚构,如遇巧合,纯属意外
目录
-
前言
-
前置知识
-
测试demo开发
-
效果
0x00 前言
本文续接前文,聊聊app攻防-SVC的终极奥义Ptrace+Seccomp,如何用ptrace去hook并修改svc要读取的对象(IO重定向的实现)
0x01 前置知识
1.ARM64寄存器
首先讲讲ARM64常见寄存器
存在x0-x30 31个常见寄存器,x0-x7用于参数传递和返回值,x8通常用作系统调用号,x29用作帧指针,x30存储函数调用返回地址
2.系统调用
syscall是用户与系统调用打交道的接口,通过其可以直杀linux内核态,请求内核执行某些服务的接口,比如文件操作、进程控制、网络通信等,每个对应的系统调用都有唯一的系统编号,不同架构不一样。比如arm64,这里我这样定义
#define __NR_io_setup 0
#define __NR_io_destroy 1
#define __NR_io_submit 2
#define __NR_io_cancel 3
#define __NR_io_getevents 4
#define __NR_setxattr 5
#define __NR_lsetxattr 6
#define __NR_fsetxattr 7
#define __NR_getxattr 8
......
对应调用demo如下
pid_tpid=syscall(SYS_getpid);
printf("Process ID: %dn", pid);
return0;
3.ptrace常用api和常量
ptrace(PTRACE_ATTACH,pid,0,0) ptrace附加进程
ptrace(PTRACE_CONT, pid, (void *)0, 0); 让进程恢复运行
ptrace(PTRACE_DETACH, pid, 0, (void *)SIGCONT); 取消附加
0x02 开发过程
首先肯定是注入进程
我这里选取的思路就直接选取注入app进程试试demo了
intres=ptrace(PTRACE_ATTACH,targetIds[i],0,0);
把输入的app pid对应的所有子进程获取并注入
随后需要拦截syscall调用
ptrace(PTRACE_SYSCALL, pid, 0, 0);
随后等待信号SIGTRAP状态,
满足条件就直接进入调用hook逻辑
if(status>>8==SIGTRAP&&wait_pid==ENTER){
hook(wait_pid);
}
在该函数中,我们需要获取寄存器参数值,方便我们后续转化和io重定向
ptrace(PTRACE_GETREGSET, pid, (void*)NT_PRSTATUS, &io)
其中regs.ARM_x8即是我们对应的系统调用号
对应的取地址操作,这里直接抄的网上函数
voidgetdata(pid_tpid, uint64_taddr, char*str, longsz)
{
inti=0, j=sz/long_size;
char*s=str;
while (i<j) {
*(long*)(s+i*8) =ptrace(PTRACE_PEEKDATA, pid, addr+i*8, NULL);
++i;
}
j=sz%long_size;
if (j!=0) {
*(long*)(s+i*8) =ptrace(PTRACE_PEEKDATA, pid, addr+i*8, NULL);
}
}
回来的str就是我们对应read的对象
把对应的x1寄存器取出替换即可
这部分继续借鉴网上函数(bushi
voidputdata(pid_tpid, uint64_taddr, char*str, longsz)
{
inti=0, j=sz/long_size;
char*s=str;
while (i<j) {
ptrace(PTRACE_POKEDATA, pid, addr+i*8, *(long*)(s+i*8));
++i;
}
j=sz%long_size;
if (j!=0) {
ptrace(PTRACE_POKEDATA, pid, addr+i*8, *(long*)(s+i*8));
}
}
差不多整个流程就结束了....
编译
clang++ -target aarch64-linux-android21 syscall_hook64.cpp -o PtraceHook -static-libstdc++
运行
0x03 效果
boot id值成功被重定向
但存在问题->ptrace之后手机卡死了。。。这可能也是只有hook工具没有修改其的操作工具吧。
后期完善之后把代码贴仓库.。。。
原文始发于微信公众号(剑客古月的安全屋):app攻防-用Ptrace击溃SVC&工具开发篇
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论