我学习的这个版本,他的函数和类名 居然是中文。 dump出来是乱码。cycript中也没有办法choose。 这么神奇?how? 拿它有啥办法吗?
runtime dump或者改class dump源码能解决dump乱码的问题。
cycript的话得自己改cy的源码了我估计
你理解一下我上面说的话,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之后,调试就无限循环。怎么判断出的状态啊!!