因为ios调试器特别难用,所以ios基本不调试.
1. clutch解密
2. ida逆向.
3. class-dump 头文件
4. cycript 动态分析.
5. 写Tweak,打log验证思路即可.
而且ios上的ptrace基本被阉割. lldb里面调试器的实现也不是通过ptrace来做的.
另外在正规的app里面,调用私有函数,小心过不了苹果的审核~ :).
android上,用fork()然后再ptrace做双进程保护,勉强够用,不过这一切都是纸老虎,安全防护,只有两个字:呵呵~~
ios和android上对抗,基本不对等. app没有root权限,恶意app可以有root.
哪怕安全防护可以有root了,恶意app一样有root,同等权限,没有安全可言.
还是大Windows好,自从加载驱动需要签名证书,敢玩这种内核对抗的,基本被吊销证书.
尤其是数字软件占领了驱动加载的坑,现在基本看不到这种同样具有内核权限的恶意程序了.
大Windows上,玩恶意的,基本也就是绕过下查杀,弹点小广告,赚点流量钱了~~
像这种检测isdebugged标志位,早几百年前就被在Windows的各位同学玩坏了~
现在Windows都玩到VT调试器了~~ 从早期用TRW2000,到OllyDbg,到SoftICE/syser/windbg内核调试再到VT调试,基本玩的都是权限~
权限不对等,基本都是扯淡~~ 一捅就破
另外吐槽下,fork这种蛋疼的机制. *nix 呢,从前是没有多线程这种概念的,所以fork()设计之初也是合理的. 后来参考了solaris/aix里面pthread的设计,*nix引入了多线程. 从此以后 多线程的进程,再来fork(),那就极其蛋疼了,一不小心就要出问题的(deadlock). 所以fork()后再ptrace(),做双进程保护? 再送两个字:呵呵~~
真心要学习大Windows的CreateProcess(),david cutler确实高瞻远瞩
设计fork()的那个年代,计算机还是奢侈品,内存啥的都不够用,copy-on-write也是对的.
估计Ken大爷也不会想到未来会发展成这样,竟然有人敢在多线程的进程中再fork()? 哈哈,ken大爷当年在贝尔实验室的时候,还没多线程呢~~
云风也有一篇专门吐槽fork()的帖子:
极不和谐的 fork 多线程程序