繁体   English   中英

检测Cycript / Substrate或gdb是否附加到iOS应用程序的进程?

[英]Detect if Cycript/Substrate or gdb is attached to an iOS app's process?

我正在构建一个将敏感数据传输到我的服务器的iOS应用程序,我正在签署我的API请求作为一项额外措施。 我想尽可能地进行逆向工程,并且使用Cycript查找某些真实应用程序的签名密钥,我知道通过附加到流程来找到这些密钥并不困难。 我完全清楚,如果有人真的很熟练并且努力尝试,他们最终利用,但我想尽可能地努力,同时仍然方便自己和用户。

我可以检查越狱状态并采取其他措施,或者我可以执行SSL固定,但通过附加到进程并修改内存,两者仍然很容易绕过。

有没有办法检测是否有某些东西 (无论是Cycript,gdb,还是任何可用于破解流程的类似工具)附加到流程中,而不是被App Store拒绝?

编辑:这不是检测iOS应用程序是否在调试器中运行的重复。 该问题与输出更相关,它检查输出流以确定是否有输出流附加到记录器,而我的问题与此无关(并且该检查不包括我的条件)。

gdb检测可以通过链接的stackoverflow问题来实现 - 它使用kstat来确定进程是否正在被调试。 这将检测调试器当前是否附加到进程。

还有一段代码 - 在iOS应用程序中使用宏SEC_IS_BEING_DEBUGGED_RETURN_NIL - 它允许您在代码中的各个位置(它是C / Objective-C)引入一个执行调试器附加检查的宏。

至于检测Cycript,当它针对一个进程运行时,它会在进程中注入一个dylib来处理cycript命令行和进程之间的通信 - 该库的部分名称看起来像cynject 该名称与典型iOS应用程序中存在的任何库类似。 这应该可以通过像( C )这样的小循环来检测:

BOOL hasCynject() {
    int max = _dyld_image_count();
    for (int i = 0; i < max; i++) {
        const char *name = _dyld_get_image_name(i);
        if (name != NULL) {
            if (strstr(name, "cynject") == 0) return YES;
        }
    }
}

同样,给它一个比这更好的名称是可取的,以及混淆你正在测试的字符串。

这些只是可以采取的方法 - 不幸的是,这些只会在运行时以某种方式保护您,如果有人选择指向IDA或其他一些反汇编程序,那么您就不会受到保护。

将调试器检查作为宏实现的原因是您将代码放在代码中的各个位置,因此有人试图修复它必须在各种地方修补应用程序。

基于@ petesh的回答,我发现下面的代码在带有Cycript的越狱手机上达到了我想要的效果。 printf字符串的存在是反向工程师的黄金,所以这段代码只适用于demo / crack-me应用程序。

#include <stdio.h>
#include <string.h>
#include <mach-o/dyld.h>

int main ()
{
        int max = _dyld_image_count();
        for (int i = 0; i < max; i++) {
            const char *name = _dyld_get_image_name(i);
            const char needle[11] = "libcycript";
            char *ret;

            if ((ret = strstr(name, needle)) != NULL){
                printf("%s\nThe substring is: %s\n", name, ret);
            }
        }

    return 0;
}

据我所知,Cycript过程注入可以通过调试符号实现。 因此,如果您删除App Store版本的调试符号(Release配置的默认构建设置),那将有所帮助。

您可以采取的另一个操作,即对App的可用性没有影响,将使用混淆器。 但是,这会导致任何崩溃报告无效,因为即使崩溃报告符号化,您也无法理解符号。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM