ios 逆向开发iOS攻防

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

2020-11-04  本文已影响0人  不仅仅是个程序猿

直接使用系统函数,最终都逃不掉被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寄存器里面的值,跳转相应的函数
);
上一篇 下一篇

猜你喜欢

热点阅读