美文网首页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