美文网首页iOS逆向
iOS 绕过汇编反调试

iOS 绕过汇编反调试

作者: 笑破天 | 来源:发表于2022-08-25 22:57 被阅读0次

    汇编反调试,符号断点断不到,也无法进行hook,只能更改底层汇编对应的 机器码

    在hopper中查看跳转逻辑,找到对应需要更改的地址,用machoview进行更改汇编代码对应的机器码,然后保存二进制,重签名即可。

    1、找逻辑

    查看中断&退出逻辑:hopper中查看入口EntryPoint,采用了sysctl汇编,并根据返回结果进行跳转未知地址0xb5a99000,见下图。记录下地址0x369fc
    找逻辑:1.符号断点ptrace/sysctl/syscall/exit 2.汇编svc

    image.png

    2、修改二进制

    在machoview的Section64(__TEXT,__text)中找到对应地址的指令,第二列data的值即为该条汇编指令的机器码,双击机器码位置即可编辑。汇编转机器码:https://armconverter.com/

    image.png
    注意:1.输入的机器码要倒序 2.tbz跳转的地址是offset 机器码最好先举例验证下正确性。
    // 一些指令的机器码,倒序可以直接点工具右上角GDB/LLDB
    nop 机器码:1F2003D5,倒序:D503201F
    tbz w8, #3, #0x20 机器码:08011836,倒序:36180108
    bl #0x223c238 机器码:8EF08894,倒序:9488F08E
    

    把tbz改为直接跳转bl,计算新的机器码:bl #0x20 -> 08000094 -> 94000008,修改保存。

    3、知识点

    1.svc #0x80
    svc是系统调用,调用号在x16寄存器中,一般传26表示ptrace调用,ptrace方法第一个参数一般传31表示阻止调试。系统调用号可查看#import <sys/syscall.h>
    2.汇编反调试
    asm方式调用反调试代码的话,符号断点断不到,只能改二进制。
    3、绕过思路
    先找符号断点ptrace/sysctl/syscall/exit 。找不到就看汇编svc。
    4、看不懂汇编的笨方法
    自己写demo看它二进制的汇编和目标汇编比较。

    参考:

    使用hopper和machoView修改iOS App
    反调试与绕过的奇淫技巧

    相关文章

      网友评论

        本文标题:iOS 绕过汇编反调试

        本文链接:https://www.haomeiwen.com/subject/khbzgrtx.html