Ptrace 已经hook,寄存器也给设置好。 依然错误码 status=45(0x0000002d)

我学习的这个版本,他的函数和类名 居然是中文。 dump出来是乱码。cycript中也没有办法choose。 这么神奇?how? 拿它有啥办法吗?
image

runtime dump或者改class dump源码能解决dump乱码的问题。

cycript的话得自己改cy的源码了我估计

1 个赞

你理解一下我上面说的话,md只是hook了ptrace这个函数,但这个函数最后是通过svc 0x80来实现它的功能的。你贴的汇编就相当于自己实现了一个汇编级的ptrace 31 0 0 0 ,所以他hook的函数跟这个没关系

您的这句话,我又晕了。还是没理解,我肯定这有块知识点没通。
md只是hook了ptrace这个函数, dlsym和asm{ ptrace 31} 都不起作用? 那hook了啥啊?

他是怎么做到用中文命名方法和类名到。 还能使得hopper能解析,python和cycript解析的字符串都是乱码

我再自己补充一些知识,提高一些再来请教。少问一些小白问题。 真诚感谢,感谢您的悉心解答和指导!!

你要知道什么叫system call, 系统库里的ptrace也只是通过svc 0x80做了一次系统调用, 真正的ptrace实现在内核, 真正的入口是svc 0x80, 系统库的ptrace只是入口之一

嗯,懂了懂了。 系统库里有个ptrace函数1,对内核真正的ptrace函数2通过svc 0x80调用。 而asm{ptrace 31} 也是直接调用函数2,所以hook函数1没有用。

(感谢解答。 请问这些知识去哪里能系统的补充)

ps. 我把所有的svc 0x80都nop了。仍然没起作用。
通过启动时候断点b ptrace,修改寄存器x0和直接thread return 0没有用。发现就一直在ptrace中循环。无限调用ptrace。请问这是为什么?

如果app通过方式1调用了的话还是有用的

直接上md的tweak就替代了这部分工作。

这只是python/cycript/classdump本身的bug而已

尝试一:去掉ptrace和 svc #80 已经没用,一旦发现是调试,app就在自定义的一个类的load方法中进入一个无限循环的状态,无限调用ptrace。这是通过什么标志发现的? 折腾好几天了。而且把那段代码塞得无限庞大,只要进入了ida都显示太大。

尝试二:把所有的svc 0x80全部替换nop,ptrace也用MD,然后打包到手机手机上,运行之后,用debugserver *:1234 -a的方式去连接,还是Segmentation fault: 11

尝试三:
把所有的svc 0x80全部替换nop
b ptrace
breakpoint command add
thread return 0
Done
会在dylb中的doModInitFunctions方法中无限循环,


如果修改寄存器跳过无限循环,如下图,还是45错误

尝试4
https://peterpan980927.cn/2018/04/17/反动态调试保护的实现和破解/
大神的logos 结果如下: 无限循环,然后崩溃

准备尝试5
去尝试hookzz,我已经知道的最后一个办法了。 实在不知道为什么,正常运行可以。屏蔽掉ptrace之后,调试就无限循环。怎么判断出的状态啊!!