微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决转换 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 举报,一经查实,本站将立刻删除。