问题描述
我的基于 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 (将#修改为@)