第11章优化

This commit is contained in:
dqzg12300 2023-05-20 21:23:06 +08:00
parent 9ca20df7d1
commit b8f0fc5a4b

View File

@ -270,16 +270,16 @@ $ frida -U -p 27507
围绕常见的反调试技术,都有相应的反反调试,也就是反调试绕过技术方案。
1. Hook技术
Hook技术是一种常见的反调试绕过方案。它可以修改目标进程的内存数据与代码绕过应用程序的反调试技术。Hook技术在程序运行时替换函数的实现从而绕过应用程序的反调试技术。例如使用Frida注入程序然后修改进程的调试标志读取接口修改返回的内容即可完成自身的调试标志检测。
1. `Hook`
`Hook`是一种常见的反调试绕过方案。它可以修改目标进程的内存数据与代码,绕过应用程序的反调试技术。`Hook`技术在程序运行时替换函数的实现,从而绕过应用程序的反调试技术。例如,使用`Frida`注入程序,然后修改进程的调试标志读取接口,修改返回的内容,即可完成自身的调试标志检测。
2. 内存修改技术
2. 内存修改
内存修改技术是一种常见的反调试绕过方案,它可以让黑客修改应用程序的内存,从而绕过应用程序的反调试技术。例如,可以使用内存修改工具来修改应用程序的内存,从而绕过应用程序的反调试技术。
3. 反编译技术
反编译技术是一种常见的反调试绕过方案通过分析App程序的代码反编译修改掉代码中的反调试检测逻辑部分从而绕过应用程序的反调试技术。这种技术需要对目标程序进行大量的分析工作结合多个工具执行反编译与重打包在安卓安全技术相对不成熟的时期这种方案被大量使用。目前使用Hook方案与系统级别反反调试技术的场景会更加普遍。
3. 反编译
反编译技术是一种常见的反调试绕过方案,通过分析`App`程序的代码,反编译修改掉代码中的反调试检测逻辑部分,从而绕过应用程序的反调试技术。这种技术需要对目标程序进行大量的分析工作,结合多个工具执行反编译与重打包,在安卓安全技术相对不成熟的时期,这种方案被大量使用。目前,使用`Hook`方案与系统级别反反调试技术的场景会更加普遍。
4. 系统级别反反调试技术
4. 系统级别反反调试
系统级别反反调试技术是一种底层的反调试绕过方案,它通过修改系统反调试相关的代码逻辑,让系统输出程序为非调试状态。这种绕过应用程序的反调试技术比较稳定,且不易被检测,是一种常用的反反调试技术。
@ -288,36 +288,7 @@ Hook技术是一种常见的反调试绕过方案。它可以修改目标进程
了解常见的反调试检测后,就可以对其进行修改,这些修改并不会完美解决反调试的所有问题,主要是处理掉一些常规的检测办法。来尽量减少分析成本。下面开始简单的对几种检测方式进行修改处理。
### 11.3.1 过系统调试检测接口检测
然后修改属性`ro.debuggable`的值让其固定显示为0修改文件`build/make/core/main.mk`,修改代码如下。
```
# ADDITIONAL_SYSTEM_PROPERTIES += ro.debuggable=1
ADDITIONAL_SYSTEM_PROPERTIES += ro.debuggable=0
```
函数`__android_log_is_debuggable``AOSP`中用来快速获取`ro.debuggable`属性的将该函数默认返回值修改为1。修改如下。
```c++
int __android_log_is_debuggable() {
return 1;
// static int is_debuggable = [] {
// char value[PROP_VALUE_MAX] = {};
// return __system_property_get("ro.debuggable", value) > 0 && !strcmp(value, "1");
// }();
//
// return is_debuggable;
}
```
这样修改后的系统代码,检测"ro.debuggable"将永远返回0但不影响我们使用调试相关的能力。
### 11.3.2 过调试标志检测
除此之外,还有多个针对调试标志检测的处理,修改内核文件`fs/proc/array.c`,修改如下。
修改内核文件`fs/proc/array.c`,修改如下。
```c++
static inline void task_state(struct seq_file *m, struct pid_namespace *ns,
@ -415,7 +386,7 @@ static int proc_pid_wchan(struct seq_file *m, struct pid_namespace *ns,
## 11.4 集成反反调试功能
所有这些对系统的修改都是针对不同场景反调试而产生的对应解决方案需要重新编译系统代码。涉及内核代码的部分需要重新编译内核涉及framework的部分编译生成ROM。整个过程可以编写自动化操作脚本将重复性的工作做简化处理。
所有这些对系统的修改,都是针对不同场景反调试而产生的对应解决方案,需要重新编译系统代码。涉及内核代码的部分,需要重新编译内核,涉及`framework`的部分编译生成`ROM`。整个过程可以编写自动化操作脚本,将重复性的工作做简化处理。
在实践过程中,调试与反调试技术都是随时攻防的不断升级实时变化的,例如,有一些软件壳会对系统状态与接口作检测,这个时候,这里介绍的一些公开的方法可能就失效了。这种情况下,需要结合实际,使用安全分析技术,对目标程序做进一步的分析,确定其使用的反调试技术,重新调整系统文件修改点,然后编译打包测试效果。
在实践过程中,调试与反调试技术都是随时攻防的不断升级实时变化的,例如,有一些软件壳会对系统状态与接口作检测,这个时候,这里介绍的一些公开的方法可能就失效了。这种情况下,需要结合实际,使用安全分析技术,对目标程序做进一步的分析,确定其使用的反调试技术,重新调整系统文件修改点,然后编译打包测试效果。