赞
踩
下面列出6种,不定期更新
ptrace 目标进程后可读写目标进程的内存、寄存器,调试
原理:
一个进程只能被ptrace一次,自己ptrace自己占坑
特征:
系统调用,可查看导入表函数是否有 ptrace
绕过:
静态修改检测函数或者hook
扩展:
ida/frida应用此类技术
TracerPid是进程的一个属性值
原理:
不为0表示被调试,TracePid 就是调试该进程的进程的的Pid
特征:
一般需读取 /proc/进程号/status文件
getpid
,文件读取api fget
, 或者java层相关api绕过:
原理:
返回 true表示被调试
特征:
全局搜索字符串 isDebuggerConnected
绕过:
静态修改检测函数或者hook
原理:
根据常见逆向工具的通信端口检测
特征:
一般需读取 /proc/net/tcp 文件,端口为16进制表示
fget
, 或者java层相关api绕过:
高版本安卓不再适用
特征:
特征:
LR(Link Register R14)
一是用来保存子程序返回地址;
二是当异常发生时,LR中保存的值等于异常发生时PC的值减4(或者减2)
ARM状态下是LR-4,而Thumb状态下是LR-2
PC (Program Counter R15) 用于存放下一条指令的地址
通常在子程序返回后,先要将LR中的地址存入PC
SP(数据栈指针 R13)
ARM-Thumb过程调用标准和ARM、Thumb C/C++ 编译器总是使用Full descending类型堆栈
地址最低位如果是1,表示当前指令是Thumb指令,否则为ARM指令
原理:
安卓所有的APP进程是用 Zygote进程启动的。
Xposed替换了 Zygote 进程对应的可执行文件/system/bin/app_process,
每启动一个新的进程,都会先启动xposed替换过的文件,都会加载xposed相关代码。
这样就注入了每一个app进程
dalvik虚拟机在处理的时候有区别,一种是directMethod,即Java世界里面实现的方法,一种是nativeMethod
Xposed在对java方法进行hook时,先将虚拟机里面这个方法的Method改为nativeMethod(其实就是一个标识字段),然后将该方法的nativeFunc指向自己实现的一个native方法,这样方法在调用时,就会调用到这个native方法,接管了控制权
arthook
虚拟机调用方法之ArtMethod
inline hook啦
dex2oat
原理ptrace
frida使用的是动态二进制插桩技术(DBI)
Dobby:跨平台native层进行hook
ios hook框架
EasyHook/detours
magisk工具对boot.img打补丁,在ramdisk中植入新的init程序
“native bridge” (ro.dalvik.vm.native.bridge) to inject zygote
原理:
中间人代理
sslping证书错误
特征:
绕过:
基于libpcap库
libpcap的包捕获机制就是在数据链路层加一个旁路处理。当一个数据包到达网络接口时,libpcap 首先利用已经创建的Socket从链路层驱动程序中获得该数据包的拷贝,再通过Tap函数将数据包发给BPF过滤器。BPF过滤器根据用户已经定义好的过 滤规则对数据包进行逐一匹配,匹配成功则放入内核缓冲区,并传递给用户缓冲区,匹配失败则直接丢弃。如果没有设置过滤规则,所有数据包都将放入内核缓冲 区,并传递给用户层缓冲区。
原始dex做加固处理,在运行时还原内存结构。
(动态加载,类抽取,混淆,vmp)
SO加载流程
正整数的补码是其二进制表示,与原码相同
求负整数的补码,将其原码除符号位外的所有位取反(0变1,1变0,符号位为1不变)后加1
反码跟原码是正数时,一样;负数时,反码就是原码符号位除外,其他位按位取反
base64 md5 tea
需要对常见算法特征熟悉
内存模块:BSS段、数据段、代码段、堆与栈
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。