我的客户做了五次测试,他给了我们关于根检测的反馈。
因此,我使用RootBeer android来修复根检测。在他们的自述文件中,他们强调根检测是“猫和老鼠的游戏”。
一旦我们交付了新版本的根检测,我们的客户给了我们反馈,他可以破坏根检测使用frida。但IMHO,这是挂钩,而不是生根。
如果有人能给我解释一下挂钩和生根的区别,以及他们之间是否有关系,我会很高兴的。
发布于 2021-02-15 01:58:29
根是一个术语,用于获取系统上的根权限。检测使您的系统扎根的攻击者是非常困难的,因为根用户通常可以做它想做的任何事情,包括篡改日志或修改安全软件和配置。根是一个非常宽泛的术语,可以包含很多东西。攻击系统的人可能会用钩子来隐藏他的存在。
挂钩是黑客经常使用的一种特定技术(尽管在调试中也有一席之地)。它通常需要用一个“虚拟”函数替换一个目标函数,该函数充当包装器,包含在将参数传递给“原始”函数之前计算或修改参数的代码,甚至整个替换原始函数。下面是一个共享对象的示例源代码,该对象从名为libexample的虚构库is_password_correct()中挂起一个函数。如果密码为ActivateBackdoor!,则绕过常规密码检查,并返回true。
#include <dlfcn.h>
#include <string.h>
bool is_password_correct(char *pass)
{
static bool (*original_function)(char *);
void *handle;
if (!original_function) {
handle = dlopen("/usr/lib/libexample.so", RTLD_LAZY|RTLD_LOCAL);
original_function = dlsym(handle, "is_password_correct");
dlclose(handle);
}
return strcmp(pass, "ActivateBackdoor!") ? original_function(pass) : true;
}这不是唯一一种功能挂钩。您还可以挂接其他API 就像系统一样。
发布于 2021-01-14 17:48:38
引用维基百科的话:
在计算机编程中,挂钩一词包括一系列技术,用于通过拦截功能调用或消息或在软件组件之间传递的事件来改变或增强操作系统、应用程序或其他软件组件的行为。处理这些被截获的函数调用、事件或消息的代码称为钩子。
因此,您的客户端只是绕过根检测功能,将该特定函数与frida挂钩并更改其返回值。根通常涉及获取系统上的根权限,而不是函数或库上的根权限。
https://security.stackexchange.com/questions/243320
复制相似问题