《iOS防护10》使用汇编调用系统函数

本文探讨了如何使用汇编代码来调用系统函数,如syscall和ptrace,以此来防止调试器的附加。通过这种方式,可以避免fishhook等工具的干预,并且汇编实现的syscall和ptrace不会触发中断,增强应用的安全性。
摘要由CSDN通过智能技术生成

直接使用系统函数,最终都逃不掉被fishhook勾住的结局。
那我们就用更低层的汇编代码吧。
syscall(26, 31, 0, 0); 可以写成下面的汇编代码:

//下面的汇编代码相当于 syscall(26, 31, 0, 0);
//volatile: 告诉编译器不要优化此段汇编代码
asm volatile (
    "mov x0,  #26\n" //x0,x1,x2,x3寄存器放参数,26是ptrace函数
    "mov x1,  #31\n"
    "mov x2,  #0\n"
    "mov x3,  #0\n"
    "mov x16, #0\n"  //x16寄存器放编号为0的函数,syscall
    "svc #0x80\n"    //这条指令会触发中断(系统级别的跳转),中断根据x16寄存器里面的值,跳转相应的函数
);

这样的话,我们使用汇编代码通过syscall函数进而调用ptrace函数,从而达到阻止调试器附加的目的。而且,添加符号断点syscall和ptrace也是不会产生中断的。

ptrace(PT_DENY_ATTACH, 0, 0, 0); 可以写成下面的汇编代码:

//下面的汇编代码相当于 ptrace(PT_DENY_ATTACH, 0, 0, 0);
//volatile: 告诉编译器不要优化此段汇编代码
asm volatile (
    "mov x0,  #31\n"   //x0,x1,x2,x3寄存器放ptrace函数的参数
    "mov x1,  #0\n"    
    "mov x2,  #0\n"
    "mov x3,  #0\n"
    "mov x16, #26\n"  //x16寄存器放编号为26的函数,ptrace
    "svc #0x80\n"    //这条指令会触发中断(系统级别的跳转),中断根据x16寄存器里面的值,跳转相应的函数
);

exit(0); 可以写成下面的汇编代码:

//下面的汇编代码相当于 ptrace(PT_DENY_ATTACH, 0, 0, 0);
//volatile: 告诉编译器不要优化此段汇编代码
asm volatile (
    "mov x0,     #0\n"    //x0放exit函数的参数
    "mov w16,  #1\n"   //w16寄存器放编号为1的函数,exit
    "svc #0x80\n"    //这条指令会触发中断(系统级别的跳转),中断根据x16寄存器里面的值,跳转相应的函数
);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ilcy流云

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值