From 4917822364d1cf55ebd3e5243d9724da4a1006a3 Mon Sep 17 00:00:00 2001 From: dqzg12300 Date: Mon, 3 Apr 2023 23:44:46 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AC=AC11=E7=AB=A0=20=E5=86=85=E5=AE=B9?= =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- chapter-11/README.md | 147 ++++++++++++++++++++++++ chapter-11/images/ida_debug_attach.png | Bin 0 -> 12199 bytes chapter-11/images/ida_debug_process.png | Bin 0 -> 18128 bytes 3 files changed, 147 insertions(+) create mode 100644 chapter-11/images/ida_debug_attach.png create mode 100644 chapter-11/images/ida_debug_process.png diff --git a/chapter-11/README.md b/chapter-11/README.md index f596075..69293d6 100644 --- a/chapter-11/README.md +++ b/chapter-11/README.md @@ -2,7 +2,154 @@ ## 11.1 反调试常见手段 +​ 在`Android`逆向分析中,最常见的情况就是攻防的对抗,攻击者通过对样本进行静态分析,以及动态调试等手段,获取想要的信息。而保护方则通过对混淆,以及多种加固方式,来对自己的重要信息进行保护。例如使用加固的手段来干扰攻击者的静态分析,通过检测环境来对抗攻击者注入`hook`函数,添加各种检测调试来阻止攻击者动态分析。 +​ `ptrace`是`Linux`操作系统提供的一个系统调用,它允许一个进程监控另一个进程的执行,并能够在运行时修改它的寄存器和内存等资源。`ptrace`通常被用于调试应用程序、分析破解软件以及实现进程间沙盒隔离等场景。 + +​ 使用`ptrace`来监控目标进程时,需要以`tracer`(追踪者)的身份启动一个新的进程,然后通过`ptrace`函数来请求操作系统将目标进程挂起并转交给`tracer`进程。一旦目标进程被挂起,`tracer`进程就可以读写其虚拟地址空间中的数据、修改寄存器值、单步执行指令等操作。当`tracer`完成了对目标进程的调试操作后,可以通过`ptrace`函数将控制权还原到目标进程上,使其继续执行。 + +​ 由于`ptrace`功能的强大,它也被广泛应用于破解软件、恶意攻击等场景。因此,在一些安全敏感的场合,为了防止恶意攻击者使用`ptrace`来监控和修改进程的行为,需要采取一些反调试的手段来加强保护。 + +### 11.1.1 根据文件检测 + +​ 通过在被保护程序中定期检测其父进程是否为指定的`tracer`进程,可以避免恶意攻击者使用`ptrace`跟踪程序的执行流程。 + +​ 接下来写一个简单的实例来进行测试。`Android Studio`创建`native c++`的项目。修改函数如下。 + +```c++ +#include +#include +#include +#include + +#define LOG_TAG "native-lib" +#define ALOGD(...) __android_log_print(ANDROID_LOG_DEBUG , LOG_TAG, __VA_ARGS__) + +extern "C" JNIEXPORT jstring JNICALL +Java_cn_mik_nativedemo_MainActivity_stringFromJNI( + JNIEnv* env, + jobject /* this */) { + std::string hello = "Hello from C++"; + int ppid= getppid(); + ALOGD("my ppid=%d",ppid); + return env->NewStringUTF(hello.c_str()); +} +``` + +​ 然后添加一个按钮,每次点击时则调用该函数,便于随时观测到`ppid`的变化。 + +```java +Button btn1; +@Override +protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + binding = ActivityMainBinding.inflate(getLayoutInflater()); + setContentView(binding.getRoot()); + + TextView tv = binding.sampleText; + tv.setText(stringFromJNI()); + btn1=findViewById(R.id.button); + btn1.setOnClickListener(v->{ + tv.setText(stringFromJNI()); + }); +} +``` + +​ 在调用该函数时,就会打印其`ppid`(父进程`id`)。运行该函数后输出如下。 + +``` +cn.mik.nativedemo D/native-lib: my ppid=1053 +``` + +​ 然后查看该进程`id`对应哪个进程。 + +``` +adb shell +ps -e|grep 1053 + +// 输出如下 +root 1053 1 14644500 115568 0 0 S zygote64 +``` + +​ 发现该进程是`zygote`进程,说明没有被调试。接下来使用`ida`调试该进程。找到`ida`下的`dbgsrv`目录,将其中的`android_server64`拷贝到`Android`系统中,将调试的端口`23946`转发到本地。并且将该服务启动起来,操作如下。 + +``` +adb push "D:\tools\IDA Pro 7.6\dbgsrv\android_server64" /data/local/tmp/ + +adb forward tcp:23946 tcp:23946 + +adb shell + +cd /data/local/tmp/ + +chmod +x ./android_server64 + +su + +./android_server64 + +``` + +​ 接下来打开`ida`,选择`Debugger->Attach->Remote Arm linux/android debugger`,在`hostname`选项中填本地回环地址`127.0.0.1`,如下图。 + +![image-20230403223624911](.\images\ida_debug_attach.png) + +​ 点击`ok`后,则会展示所有`Android`中的进程,在其中进行过滤,找到目标进程。如下图 + +![image-20230403223830842](.\images\ida_debug_process.png) + +​ 成功挂起调试后,检查日志中的 `ppid`,发现并没有任何变化,依然是`zygote`作为父进程。 + +​ 当使用 `IDA` 进行调试时,`IDA` 会创建一个调试器进程,并将其作为目标进程的父进程。但是,由于目标进程最初是由 `zygote `进程` fork `出来的,因此在查询其父进程` id` 时,仍然会返回` zygote `进程的 `id`。这并不意味着调试器进程没有被正确设置为目标进程的父进程。实际上,在`IDA`调试过程中,目标进程的执行状态确实是由调试器进程所控制的。因此,即使查询到的父进程`id`不正确,也不会影响`IDA`对目标进程的控制和调试操作。 + +​ 尽管查询`ppid`无法判断出进程被调试了,但是依然有其他地方会出现被调试的信息,例如`/proc//status`文件中的字段`TracerPid`,就能看到调试进程的`id`。下面查看该文件。 + +``` +// 没有调试时的文件内容 +Name: .mik.nativedemo +Umask: 0077 +State: S (sleeping) +Tgid: 7759 +Ngid: 0 +Pid: 7759 +PPid: 1053 +TracerPid: 0 + +// ida附加调试后的文件内容 + +Name: .mik.nativedemo +Umask: 0077 +State: t (tracing stop) +Tgid: 7759 +Ngid: 0 +Pid: 7759 +PPid: 1053 +TracerPid: 7525 +``` + +​ 查看该`id`对应哪一个进程。 + +``` +ps -e|grep 7525 + +// 显示结果 +root 7525 7523 10803524 33392 0 0 S android_server64 +``` + +​ 除了`status`文件外,`wchan`文件同样可以用来检测。下面是调试附加前,和附加后的对比。 + +``` +// 附加前 +SyS_epoll_wait + +// 附加后,中断时 +ptrace_stop +``` + +### 11.1.2 根据ptrace的特性检测 + +​ ## 11.2 常见反调试绕过方案 diff --git a/chapter-11/images/ida_debug_attach.png b/chapter-11/images/ida_debug_attach.png new file mode 100644 index 0000000000000000000000000000000000000000..4137164d9a6d96e32549c0cb4171297d4d296d7c GIT binary patch literal 12199 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 wl>V8 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 literal 0 HcmV?d00001