双进程保护的介绍
双进程保护的实现源码:https://github.com/F8LEFT/AndroidAntiDebugger
双进程保护的作用
采用双进程的方式,对父进程进行保护,基于信号的发送和接收,实现相互的保护防止被动态攻击。
简单的双进程保护就是从原进程再fork一个空进程出来,让逆向分析的时候附加到空进程中导致hook不上
双进程进程保护主要功能:
1、保护父进程,ptrace所有线程,防止被附加、调试、暂停;
2、保护子进程,防止被暂停、异常退出;
frida的两种启动方式:
spawn模式:frida 重新打开一个进程
frida -U -f 包名 -l js路径 --no-pause
attach模式: 附加在当前打开的进程
frida -U -l js路径 --no-pause
双进程的表现
如果app存在双进程保护,那么我们启动objection就可能出现卡死、闪退等问题。
比如,
最直观:
解决办法
一般双进程保护,先把app关掉直接用spawn模式就能附加上。
或者我们也可以尝试修改objection源码来绕过双进程保护。
windows中
找到objection的源码文件,我本地的文件默认路径是C:\Users\Administrator\AppData\Local\Programs\Python\Python39\Lib\site-packages\objection\utils\agent.py
然后修改 inject 函数
if not self.resumed:
debug_print('Resuming PID `{pid}`'.format(pid=self.spawned_pid))
# 多进程的 app 正在 resume 的时候,必须先 sleep 等待一下,否则会让 app 卡死
# resume 成功以后,要让 self.resumed = True,否则后面 import 命令的时候会报错
self.device.resume(self.spawned_pid)
time.sleep(1)
self.resumed = True
之后在使用 objection -g appName explore就不会出问题了。
kali中
kali中我采用pyenv管理python版本,首先需要切换到要修改的python版本,然后在修改objection的源码
查看当前python的site-packages的路径可以使用如下命令查看
python -c "import site;print(site.getsitepackages())"
拼接路径如下:
/root/.pyenv/versions/3.9.0/lib/python3.9/site-packages/objection/utils/agent.py
修改的内容和Windows中一致, import time 然后修改下面代码
if not self.resumed:
debug_print('Resuming PID `{pid}`'.format(pid=self.spawned_pid))
# 多进程的 app 正在 resume 的时候,必须先 sleep 等待一下,否则会让 app 卡死
# resume 成功以后,要让 self.resumed = True,否则后面 import 命令的时候会报错
self.device.resume(self.spawned_pid)
time.sleep(1)
self.resumed = True
参考链接
https://blog.csdn.net/weixin_43843628/article/details/121406847
https://blog.csdn.net/weixin_42453905/article/details/109395414
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)