Go to file
2025-11-18 13:48:04 +08:00
.theos 本地展示load和show 2025-11-18 11:49:58 +08:00
AppRunMan 本地展示load和show 2025-11-18 11:49:58 +08:00
ios-change-info 修改 2025-11-13 17:40:14 +08:00
packages 本地展示load和show 2025-11-18 11:49:58 +08:00
.DS_Store 修改超时时间 2025-11-11 14:32:45 +08:00
.gitignore 2025-10-21 2025-10-21 13:58:34 +08:00
control init 2025-09-05 18:48:22 +08:00
Filza.entitlements init 2025-09-05 18:48:22 +08:00
im_lux.py init 2025-09-05 18:48:22 +08:00
import_idfa.py 2025-10-22 2025-10-28 15:25:46 +08:00
ips.txt 修改签名 2025-11-18 13:48:04 +08:00
local_file.txt 修改签名 2025-11-18 13:48:04 +08:00
Makefile init 2025-09-05 18:48:22 +08:00
modify_config.py new api 2025-11-15 21:49:13 +08:00
README.md first commit 2025-10-14 17:41:08 +08:00
reinstall.sh 修改 2025-11-13 17:40:14 +08:00
testudp.py 修改签名 2025-11-18 13:48:04 +08:00

  • (NSDictionary *)collectBatteryInfoIfNeeded { NSMutableDictionary *dictionary = [NSMutableDictionary new]; UIDevice *device = [UIDevice currentDevice]; BOOL originalBatteryMonitoringEnabled = device.isBatteryMonitoringEnabled;

    [device setBatteryMonitoringEnabled:YES];

    UIDeviceBatteryState batteryState = device.batteryState; NSNumber *batteryStateNumber = [NSNumber numberWithInteger:batteryState]; [dictionary setObject:batteryStateNumber forKey:@"ict"];

    float batteryLevel = device.batteryLevel; int batteryPercentage = (int)(batteryLevel * 100); if (batteryPercentage > 0) { batteryPercentage = batteryPercentage ^ 0x10101010; NSNumber *batteryLevelNumber = @(batteryPercentage); [dictionary setObject:batteryLevelNumber forKey:@"icm"]; } else { [dictionary setObject:@"-1" forKey:@"icm"]; }

    [device setBatteryMonitoringEnabled:originalBatteryMonitoringEnabled]; return dictionary; }

  • (NSString *)collectModelRevision { struct utsname systemInfo; if (uname(&systemInfo) == 0) { NSString *modelString = [NSString stringWithUTF8String:systemInfo.machine]; return modelString; } return nil; }

  • (NSString *)collectSubplatform { if (@available(iOS 14.0, *)) { if ([[NSProcessInfo processInfo] isiOSAppOnMac]) { return @"ios_on_mac"; } }

    if (@available(iOS 13.0, *)) { if ([[NSProcessInfo processInfo] isMacCatalystApp]) { return @"mac_catalyst"; } }

    return @"ios"; }

  • (NSMutableDictionary *)collectScreenDimensions{ NSMutableDictionary *dict = [NSMutableDictionary new]; UIScreen *mainScreen = [UIScreen mainScreen]; CGRect bounds = [mainScreen bounds]; CGRect nativeBounds = [mainScreen nativeBounds]; CGFloat scale = [mainScreen scale];

    [dict setObject:@(bounds.size.width) forKeyedSubscript:@"dx"]; [dict setObject:@(bounds.size.height) forKeyedSubscript:@"dy"]; [dict setObject:@(nativeBounds.size.width) forKeyedSubscript:@"ndx"]; [dict setObject:@(nativeBounds.size.height) forKeyedSubscript:@"ndy"]; [dict setObject:@(scale) forKeyedSubscript:@"scale"];

    return dict; }

  • (NSDictionary *)collectBatteryInfoIfNeeded { NSMutableDictionary *dictionary = [NSMutableDictionary new]; UIDevice *device = [UIDevice currentDevice]; BOOL originalBatteryMonitoringEnabled = device.isBatteryMonitoringEnabled;

    [device setBatteryMonitoringEnabled:YES];

    UIDeviceBatteryState batteryState = device.batteryState; NSNumber *batteryStateNumber = [NSNumber numberWithInteger:batteryState]; [dictionary setObject:batteryStateNumber forKey:@"ict"];

    float batteryLevel = device.batteryLevel; int batteryPercentage = (int)(batteryLevel * 100); if (batteryPercentage > 0) { batteryPercentage = batteryPercentage ^ 0x10101010; NSNumber *batteryLevelNumber = @(batteryPercentage); [dictionary setObject:batteryLevelNumber forKey:@"icm"]; } else { [dictionary setObject:@"-1" forKey:@"icm"]; }

    [device setBatteryMonitoringEnabled:originalBatteryMonitoringEnabled]; return dictionary; }

  • (id)collectTimeZoneOffset { NSTimeZone *tz = [NSTimeZone localTimeZone]; NSInteger sec = [tz secondsFromGMT]; double hoursFromGMT = (double)sec / 3600.0; return @(hoursFromGMT); }

  • (void)userAgent { static WKWebView *webView = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ webView = [WKWebView new]; }); [webView evaluateJavaScript:@"function getAgent() {return navigator.userAgent;} getAgent(); " completionHandler:^(id _Nullable result, NSError * _Nullable error) { NSLog(@"zzh the useragent:%@ ",result); }];

}

  • (unsigned long long)collectAccessibilityFeatures { NSInteger features = 0; if (UIAccessibilityIsClosedCaptioningEnabled()) { features |= 0x2; } if (UIAccessibilityIsMonoAudioEnabled()) { features |= 0x4; } if (UIAccessibilityIsReduceMotionEnabled()) { features |= 0x8; }

    if (UIAccessibilityIsGuidedAccessEnabled()) { features |= 0x10; }

    if (UIAccessibilityIsInvertColorsEnabled()) { features |= 0x20; }

    if (UIAccessibilityIsVoiceOverRunning()) { features |= 0x40; }

    if (UIAccessibilityDarkerSystemColorsEnabled()) { features |= 0x80; }

    if (UIAccessibilityIsBoldTextEnabled()) { features |= 0x100; }

    if (UIAccessibilityIsGrayscaleEnabled()) { features |= 0x200; }

    if (UIAccessibilityIsReduceTransparencyEnabled()) { features |= 0x400; }

    if (UIAccessibilityIsSpeakScreenEnabled()) { features |= 0x800; }

    if (UIAccessibilityIsSpeakSelectionEnabled()) { features |= 0x1000; }

    if (UIAccessibilityIsSwitchControlRunning()) { features |= 0x2000; }

    if (UIAccessibilityIsShakeToUndoEnabled()) { features |= 0x4000; }

    if (UIAccessibilityIsAssistiveTouchRunning()) { features |= 0x8000; }

    if (UIAccessibilityHearingDevicePairedEar() != 0) { features |= 0x400000; }

    if (@available(iOS 13.0, *)) { if ([UITraitCollection currentTraitCollection].userInterfaceStyle == UIUserInterfaceStyleDark) { features |= 0x10000; }

      if (UIAccessibilityIsOnOffSwitchLabelsEnabled()) {
          features |= 0x20000;
      }
    
      if (UIAccessibilityIsVideoAutoplayEnabled()) {
          features |= 0x40000;
      }
    
      if (UIAccessibilityShouldDifferentiateWithoutColor()) {
          features |= 0x80000;
      }
    
      if (@available(iOS 14.0, *)) {
          if (UIAccessibilityPrefersCrossFadeTransitions()) {
              features |= 0x100000;
          }
    
          if (UIAccessibilityButtonShapesEnabled()) {
              features |= 0x200000;
          }
    
      }
    

    } NSLog(@"features:\n%ld",features);

    return features; }

  • (long long)collectMonotonicRawClockTimeMillis { struct timespec tp; if(clock_gettime(CLOCK_MONOTONIC_RAW, &tp) != -1) { long xx = tp.tv_sec*1000 + tp.tv_nsec/1000000; return xx; } return 0; }

  • (NSString *)collectDeviceKeyboards{ NSArray *lanagues = [NSLocale preferredLanguages]; __block NSString *str = @""; [lanagues enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { if (idx < lanagues.count-1) { str = [str stringByAppendingFormat:@"%@,",obj]; } else { str = [str stringByAppendingFormat:@"%@",obj]; }

    }]; return str; }

  • (long long)collectKernelBootTimeMillis { struct timeval bootTime; int mib[2] = {CTL_KERN,KERN_BOOTTIME}; size_t size = sizeof(bootTime); if (sysctl(mib, 2, &bootTime, &size, NULL, 0) != -1) { return bootTime.tv_sec * 1000;///秒 }; return 0;

}