转换 Objective-C 代码片段以检测对 Xamarin (C#) 的越狱绕过调整

问题描述

我的基于 Xamarin 的 iOS 应用程序不应在越狱设备中运行。这是由于 IS 审计。出于审计目的,我必须实现一种方法来检测越狱状态。我已经实现了越狱检测机制。但是我找不到一种方法来检测是否有人使用越狱绕过方法,例如 A-bypass、阴影调整。然后我从审计团队那里得到了一些 Objective-C 代码片段。我尝试使用绑定库(Sharpie)。但是在我的 Xamarin 项目中出现了 3000 多个错误。我在 Objective-C 方面的经验为零。有没有办法把它转换成 C#?

    NSInteger kernel_value = test();

    if(kernel_value != 2147483650){
        exit(1);

    }else{

        [super viewDidLoad];
        NSLog(@"display Int Value kernel_value : %li",kernel_value);

     }

 

uint32_t test() {
    char* filename = "/var/lib/dpkg/status"; // Checking this file to find jailbreak detection
    volatile uint32_t result = -1;
    
    volatile uint64_t nzcv = 0;
    
#if __arm64__           //inline assembly code
    
    __asm volatile (
                  "mov x0,%[file] \n"
                  "mov x1,0 \n"
                  "mov x16,#5 \n"
                  "svc #42 \n"
                  "mov %w[res],w0 \n"
                  "mrs %[c],nzcv"
                  : [res] "=r"(result),[c] "=r"(nzcv)
                   : [file] "r"(filename)
                   : "x0","x1","x16","memory","cc"
                   );
 #endif
     
    uint32_t cc = (nzcv >> 29) & 1;
     return result | (cc << 31);
 }

 

王凯尔回答后的更新

//  TweakCheck.h
//  TweakCheck

#import <Foundation/Foundation.h>

@interface TweakCheck : NSObject

-(uint32_t)checkMethod;

@end

//  TweakCheck.m
//  TweakCheck

#import "TweakCheck.h"

@implementation TweakCheck

-(uint32_t)checkMethod {  

  char* filename = "/var/lib/dpkg/status"; // Checking this file to find jailbreak

  volatile uint32_t result = -1;

  volatile uint64_t nzcv = 0;
  

#if __arm64__           //inline assembly code

  __asm volatile (

                "mov x0,%[file] \n"

                "mov x1,0 \n"

                "mov x16,#5 \n"

                "svc #42 \n"

                "mov %w[res],w0 \n"

                "mrs %[c],nzcv"

                : [res] "=r"(result),[c] "=r"(nzcv)

                : [file] "r"(filename)

                : "x0","cc"

                );

#endif

  uint32_t cc = (nzcv >> 29) & 1;

  return result | (cc << 31);

}

@end

*如果我不限制绑定的范围,使用 -scope 那么 ApiDeFinition.cs 文件和 Structs.cs 文件会变得太大,并且在 Xamarin 方面也会给我 3000 多个错误。如果我使用 -scope 那么 Structs.cs 不会创建。

使用sharpie后,ApiDefinision.cs文件

using System;
using CoreFoundation;
using Foundation;
using ObjCRuntime;
using Security;

namespace NativeLibrary

{

    // @interface TweakCheck : NSObject

    [BaseType(typeof(NSObject))]

    interface TweakCheck

    {

        // -(uint32_t)checkMethod;

        [Export("checkMethod")]

        uint CheckMethod { get; }

    }

}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)