隐藏exit,ptrace etc.

C示例

  1. #include <sys/ptrace.h>
  2. #include <stdio.h>
  3. int main()
  4. {
  5. int r;
  6. asm volatile (
  7. "mov r0, #0\n\t" /* PTRACE_TRACEME */
  8. "mov r1, #0\n\t"
  9. "mov r2, #0\n\t"
  10. "mov r3, #0\n\t"
  11. "mov r7, #26\n\t"
  12. "svc #0x00000000\n\t"
  13. "mov %[result], r0"
  14. : [result] "=r" (r)
  15. :
  16. :
  17. );
  18. printf ("Ptrace result : %d\n", r);
  19. test();
  20. while (1);
  21. return 0;
  22. }
  23. void test()
  24. {
  25. int r = ptrace (PTRACE_TRACEME, 0, 0, 0);
  26. printf ("ptrace ret : %d\n", r);
  27. }

运行结果

  1. root@hammerhead:/data/local/tmp # ./a.out
  2. Ptrace result : 0 #asm执行成功
  3. ptrace ret : -1 #ptrace失败,因为已经被attach
  1. root@hammerhead:/ # ps |grep a.out
  2. ps |grep a.out
  3. groot 17282 17273 732 72 00000000 000083cc R ./a.out
  4. root@hammerhead:/ # cat /proc/17282/status
  5. cat /proc/17282/status
  6. Name: a.out
  7. State: R (running)
  8. Tgid: 17282
  9. Pid: 17282
  10. PPid: 17273
  11. TracerPid: 17273 # PTRACE_TRACEME,被父进程跟踪,17282 <- 17273
  12. Uid: 0 0 0 0
  13. Gid: 0 0 0 0

汇编代码比对

  1. .text:0000838C EXPORT test
  2. .text:0000838C test
  3. .text:0000838C
  4. .text:0000838C var_8 = -8
  5. .text:0000838C
  6. .text:0000838C STMFD SP!, {R11,LR}
  7. .text:00008390 ADD R11, SP, #4
  8. .text:00008394 SUB SP, SP, #8
  9. .text:00008398 MOV R0, #0 ; request
  10. .text:0000839C MOV R1, #0
  11. .text:000083A0 MOV R2, #0
  12. .text:000083A4 MOV R3, #0
  13. .text:000083A8 BL ptrace @ 可进行elf GOT Hook
  14. .text:000083AC STR R0, [R11,#var_8]
  15. .text:000083B0 LDR R3, =(aPtraceRetD - 0x83BC)
  16. .text:000083B4 ADD R3, PC, R3 ; "ptrace ret : %d\n"
  17. .text:000083B8 MOV R0, R3 ; format
  18. .text:000083BC LDR R1, [R11,#var_8]
  19. .text:000083C0 BL printf
  20. .text:000083C4 SUB SP, R11, #4
  21. .text:000083C8 LDMFD SP!, {R11,PC}
  22. .text:000083C8 ; End of function test

没有ptrace调用, anti - GOT hook

  1. .text:00008344 main ; DATA XREF: _start+50
  2. .text:00008344 ; .got:main_ptr
  3. .text:00008344
  4. .text:00008344 var_8 = -8
  5. .text:00008344
  6. .text:00008344 STMFD SP!, {R11,LR}
  7. .text:00008348 ADD R11, SP, #4
  8. .text:0000834C SUB SP, SP, #8
  9. .text:00008350 MOV R0, #0
  10. .text:00008354 MOV R1, #0
  11. .text:00008358 MOV R2, #0
  12. .text:0000835C MOV R3, #0
  13. .text:00008360 MOV R7, #0x1A
  14. .text:00008364 SVC 0 @ 通过svc中断调用,无法Hook
  15. .text:00008368 MOV R3, R0
  16. .text:0000836C STR R3, [R11,#var_8]
  17. .text:00008370 LDR R3, =(aPtraceResultD - 0x837C)
  18. .text:00008374 ADD R3, PC, R3 ; "Ptrace result : %d\n"
  19. .text:00008378 MOV R0, R3 ; format
  20. .text:0000837C LDR R1, [R11,#var_8]
  21. .text:00008380 BL printf
  22. .text:00008384
  23. .text:00008384 loc_8384 ; CODE XREF: main:loc_8384
  24. .text:00008384 B loc_8384
  25. .text:00008384 ; End of function main

arm svc的更多相关文章

  1. Linux Kernel中断子系统来龙去脉浅析【转】

    转自:http://blog.csdn.net/u011461299/article/details/9772215 版权声明:本文为博主原创文章,未经博主允许不得转载. 一般来说,在一个device ...

  2. Linux最小系统移植之早期打印CONFIG_DEBUG_LL

    一.几个关键宏定义 CONFIG_DEBUG_LL. CONFIG_DEBUG_LL_INCLUDE 容我慢慢道来, 首先要使能早期打印, menuconfig必须选中CONFIG_DEBUG_LL, ...

  3. ARM 中断状态和SVC状态的堆栈切换 (异常)【转】

    转自:http://blog.csdn.net/edwardlulinux/article/details/9261393 版权声明:本文为博主原创文章,未经博主允许不得转载. ARM 中断状态和SV ...

  4. ARM CPU的SVC模式

    关于ARM CPU模式中的SVC Arm中CPU的模式 [第一方面] 系统sys模式 VS 管理svc模式 首先,sys模式和usr模式相比,所用的寄存器组,都是一样的,但是增加了一些访问一些在usr ...

  5. ARM概论(Advanced RISC Machines)

    简介 ARM7是32 位通用微处理器ARM(Advanced RISC Machines)家族中的一员,具有比较低的电源消耗和良好的性价比, 基于(精简指令)RISC结构,指令集和相关的译码机制与微程 ...

  6. arm工作模式笔记

    linux用户态程序即应用程序,在user模式 linux内核运行在svc模式 arm七个模式: usr用户模式 fiq快速中断模式 irq普通中断模式 supervior   svc模式 abort ...

  7. ARM处理器解析

    按图分析: ARM处理器有七种工作模式,为的是形成不同的使用级别,以防造成对系统的破坏.不同模式可以访问的寄存器不同,可以运行的指令不同. (1)user(10000):普通应用程序运行的模式(应用程 ...

  8. 2.2 ARM处理器工作模式

    ARM Architecture Reference Manual Arm 指令框架手册 种工作模式 Processor mode Mode number Description User usr 0 ...

  9. ARM体系结构

    工作模式_ufisaus USR(User) :正常程序的执行状态 FIQ(Fast interrupt) :用于高速数据传输和通道处理 IRQ(Interrupt) :通常的中断处理 SVC(Sup ...

随机推荐

  1. CentOS是哪个版本 CentOS版本信息查看技巧

    root@MyMail ~ # uname Linux root@MyMail ~ # uname -r 2.6.18-164.el5 [root@localhost ~]# uname -a Lin ...

  2. vscode代码保存时自动格式化成ESLint风格(支持VUE)

    一.问题 vscode的默认的代码格式化ctrl+shift+f 无法通过eslint的代码风格检查是一个非常蛋疼的问题 同样在进行vue项目开发的时候,使用eslint代码风格检查是没啥问题的,但是 ...

  3. [LeetCode] 99. Recover Binary Search Tree(复原BST) ☆☆☆☆☆

    Recover Binary Search Tree leetcode java https://leetcode.com/problems/recover-binary-search-tree/di ...

  4. RockerMQ消息消费、重试

    消息中间件—RocketMQ消息消费(一) 消息中间件—RocketMQ消息消费(二)(push模式实现) 消息中间件—RocketMQ消息消费(三)(消息消费重试) MQ中Pull和Push的两种消 ...

  5. 从使用角度看 ReentrantLock 和 Condition

    java 语言中谈到锁,少不了比较一番 synchronized 和 ReentrantLock 的原理,本文不作分析,只是简单介绍一下 ReentrantLock 的用法,从使用中推测其内部的一些原 ...

  6. Oracle使用expdp/impdp导出导入数据

    这里假设已存在数据库用户,并是计划通过该用户导入导出该用户表空间上的数据.(我们这里假定用户名称为ls) 1.创建逻辑目录(数据库命令,sqlplus中执行) Oracle不能直接指定系统目录让他去读 ...

  7. boost库的安装

    1.网上下载boost_1_67_0.zip,解压 2.双击boost_1_67_0/bootstrap.bat文件,生成bjam.exe,b2.exe. 3.打开命令行运行 bjam stage - ...

  8. July_One_Week—linked list

    #include <stdio.h> #include <stdlib.h> typedef struct linklist { unsigned int count; str ...

  9. UVa 10795 - A Different Task 对称, 中间状态, 数位DP 难度: 3

    题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&a ...

  10. python-面向对象增强版

    class Person: def __init__(self, name, id, gender, birth): self.name = name # 实例变量 对象里的变量 self.id = ...