iOS 绕过汇编反调试

汇编反调试,符号断点断不到,也无法进行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
反调试与绕过的奇淫技巧

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容