freeBuf
objection绕过双进程保护
2023-03-11 22:06:44
所属地 上海

双进程保护的介绍

双进程保护的实现源码: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就可能出现卡死、闪退等问题。

比如,
图片.png
最直观:
图片.png

解决办法

一般双进程保护,先把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

图片.png
之后在使用 objection -g appName explore就不会出问题了。

kali中

kali中我采用pyenv管理python版本,首先需要切换到要修改的python版本,然后在修改objection的源码

查看当前python的site-packages的路径可以使用如下命令查看

python -c "import site;print(site.getsitepackages())"

图片.png
拼接路径如下:

/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

图片.png

参考链接

https://blog.csdn.net/weixin_43843628/article/details/121406847

https://blog.csdn.net/weixin_42453905/article/details/109395414

本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
文章目录