Android双进程保护实现的思考及过程说明
来源:互联网 发布:澳洲社交软件 编辑:程序博客网 时间:2024/05/16 07:54
采用双进程的方式,对父进程进行保护,基于信号的发送和接收,实现相互的保护防止被动态攻击。
双进程进程保护主要功能:
1、保护父进程,ptrace所有线程,防止被附加、调试、暂停;
2、保护子进程,防止被暂停、异常退出;
对应说明图:
不足之处与修补思考:
子进程未被ptrace,可以通过向子进程注入并ptrace PTRACE_DETACH实现解除反附加
改进:
减少对主进程其中一个线程的附加,使子进程能被该线程附加,减去子进程的弱点,但同时却给主进程留下一个坑点。
对应说明图:
针对实现过程的一些说明:
1、为什么子进程可以监听父进程信号?
使用ptrace后,父进程的parent会相应转变为ptrace进程,此时parent不一定等于real_parent。
2、主进程能被ptrace的条件?
主进程需使用prctl函数,设置PR_SET_DUMPABLE为1,prctl(PR_SET_DUMPABLE, 1, 0, 0, 0)
3、隐藏子进程一个小技巧
如果子进程是通过执行可执行文件进行创建的,可以通过直接对参数argv地址内容进行修改,保证子进程的文件名及参数隐藏,有利于干扰动态分析,或者使用 prctl(PR_SET_NAME, new_name);进行修改
4、如何监听不断创建的新线程
ptrace提供了一个PTRACE_SETOPTIONS选项,可以设置监听线程调用一些函数的操作,这些函数包括PTRACE_O_TRACEEXEC | PTRACE_O_TRACECLONE | PTRACE_O_TRACEVFORK | PTRACE_O_TRACEFORK,可以保证当子线程创建时仍然被监听。
5、监听信号
子进程
WIFSIGNALED:监听线程退出
WIFSTOPPED :监听线程暂停及恢复
WIFSTOPPED(status) && WSTOPSIG(status) == SIGSTOP : 新线程被创建完成后,收到的信号,或者遇到断点时
WIFSTOPPED(status) && WSTOPSIG(status) == SIGTRAP : 当一个线程创建另一个线程返回时,收到的信号,此处需注意,此时创建的子线程被暂停,ptrace(PTRACE_GETEVENTMSG, pid, 0, &new_pid)获取新线程ID,并恢复运行
主进程
WIFSIGNALED:监听线程退出
WIFSTOPPED :监听线程暂停及恢复
参考:
http://blog.csdn.net/earbao/article/details/51543816
《深入理解LINUX内核》
- Android双进程保护实现的思考及过程说明
- 双进程保护及实现
- 系统过载及保护的思考
- 流媒体的实现过程思考
- 实例分析双进程保护及其实现
- 【android 】守护进程的实现及进程拉活详解
- Android service进程保护
- Android service进程保护
- Android Binder实现的进程间IPC过程概要
- 关于Android中常驻进程的思考
- 业务进程监控及保护
- 用驱动程序实现要保护的程序的进程
- HOOK ZwTerminateProcess实现进程保护
- SSDT HOOK实现进程保护
- win7x64下实现进程保护
- SSDT Hook实现内核级的进程保护
- SSDT Hook实现内核级的进程保护
- SSDT Hook实现内核级的进程保护
- 160
- 基于Socket的服务端的多线程模式编程案列
- 2017 软件开发薪酬调查:Go 和 Scala 是最赚钱的语言
- 破解的一款抓包工具,debug proxy,教你怎么修改so
- Ubuntu 14.05上编译KODI 17.4
- Android双进程保护实现的思考及过程说明
- WM_SetCursor中 RECT问题
- Android开发入门经典实例
- [算法笔记]——位运算平方根
- SSM综合项目实战(TTSC) -- day03 Nginx,类目选择,新增商品
- python 赋值变量和赋值对象的可变性
- 判断是否唯一
- 搭建及使用K8s集群 <目录>
- AutoCAD 2013 安装错误 microsoft visual C++ 2005 SP1 Redistributable Package(86)