Compare commits
21 Commits
lux-main-1
...
lux-main-n
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
08a70350fc | ||
|
|
0d9c1b0408 | ||
|
|
a04260863e | ||
|
|
354bfd5cb9 | ||
|
|
7df8da9213 | ||
|
|
8c7bd97be9 | ||
|
|
9664d82f73 | ||
|
|
a742b2e811 | ||
|
|
8829cb877b | ||
|
|
8f30ad7e5b | ||
|
|
0fe8a37050 | ||
|
|
437cdc5b1b | ||
|
|
d0495f3a18 | ||
|
|
cbc31d6070 | ||
|
|
73af692ae2 | ||
|
|
9c8108fd5d | ||
|
|
e185710b42 | ||
|
|
112398d2af | ||
|
|
68e6965bc5 | ||
|
|
d28990a768 | ||
|
|
edcb876dec |
@ -6,5 +6,5 @@ Author: XYZShell
|
|||||||
Section: Utilities
|
Section: Utilities
|
||||||
Tag: role::developer
|
Tag: role::developer
|
||||||
Architecture: iphoneos-arm
|
Architecture: iphoneos-arm
|
||||||
Version: 0.0.7-10-68+debug
|
Version: 0.0.7-10-117+debug
|
||||||
Installed-Size: 1624
|
Installed-Size: 1700
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
@ -1 +1 @@
|
|||||||
./packages/com.xyzshell.ioscontrol_0.0.7-10-68+debug_iphoneos-arm.deb
|
./packages/com.xyzshell.ioscontrol_0.0.7-10-117+debug_iphoneos-arm.deb
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
@ -2,184 +2,192 @@
|
|||||||
triple: 'arm64-apple-darwin'
|
triple: 'arm64-apple-darwin'
|
||||||
binary-path: '/Users/mac/workspaces/projects/ios-change/old-ios-hook/.theos/obj/debug/arm64/OhNo.dylib'
|
binary-path: '/Users/mac/workspaces/projects/ios-change/old-ios-hook/.theos/obj/debug/arm64/OhNo.dylib'
|
||||||
relocations:
|
relocations:
|
||||||
- { offset: 0x7D, size: 0x8, addend: 0x0, symName: _settings, symBinAddr: 0x11DF8, symSize: 0x0 }
|
- { offset: 0x51, size: 0x8, addend: 0x0, symName: '__logos_meta_orig$XHooks$ATTrackingManager$trackingAuthorizationStatus', symObjAddr: 0x1EEA0, symBinAddr: 0x121B0, symSize: 0x0 }
|
||||||
- { offset: 0xF0, size: 0x8, addend: 0x0, symName: '__logos_meta_orig$ohno$ATTrackingManager$trackingAuthorizationStatus', symObjAddr: 0x26D20, symBinAddr: 0x11C50, symSize: 0x0 }
|
- { offset: 0xE9, size: 0x8, addend: 0x0, symName: '__logos_meta_orig$XHooks$ATTrackingManager$requestTrackingAuthorizationWithCompletionHandler$', symObjAddr: 0x1EEA8, symBinAddr: 0x121B8, symSize: 0x0 }
|
||||||
- { offset: 0x163, size: 0x8, addend: 0x0, symName: '__logos_meta_orig$ohno$ATTrackingManager$requestTrackingAuthorizationWithCompletionHandler$', symObjAddr: 0x26D28, symBinAddr: 0x11C58, symSize: 0x0 }
|
- { offset: 0x183, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$ASIdentifierManager$advertisingIdentifier', symObjAddr: 0x1EEB0, symBinAddr: 0x121C0, symSize: 0x0 }
|
||||||
- { offset: 0x1FD, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$ASIdentifierManager$advertisingIdentifier', symObjAddr: 0x26D30, symBinAddr: 0x11C60, symSize: 0x0 }
|
- { offset: 0x218, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$ASIdentifierManager$isAdvertisingTrackingEnabled', symObjAddr: 0x1EEB8, symBinAddr: 0x121C8, symSize: 0x0 }
|
||||||
- { offset: 0x27B, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$ASIdentifierManager$isAdvertisingTrackingEnabled', symObjAddr: 0x26D38, symBinAddr: 0x11C68, symSize: 0x0 }
|
- { offset: 0x254, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$UIDevice$identifierForVendor', symObjAddr: 0x1EEC0, symBinAddr: 0x121D0, symSize: 0x0 }
|
||||||
- { offset: 0x2B7, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIDevice$identifierForVendor', symObjAddr: 0x26D40, symBinAddr: 0x11C70, symSize: 0x0 }
|
- { offset: 0x441, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$UIDevice$name', symObjAddr: 0x1EEC8, symBinAddr: 0x121D8, symSize: 0x0 }
|
||||||
- { offset: 0x492, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIDevice$name', symObjAddr: 0x26D48, symBinAddr: 0x11C78, symSize: 0x0 }
|
- { offset: 0x46B, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$UIDevice$model', symObjAddr: 0x1EED0, symBinAddr: 0x121E0, symSize: 0x0 }
|
||||||
- { offset: 0x4BC, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIDevice$model', symObjAddr: 0x26D50, symBinAddr: 0x11C80, symSize: 0x0 }
|
- { offset: 0x480, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$UIDevice$localizedModel', symObjAddr: 0x1EED8, symBinAddr: 0x121E8, symSize: 0x0 }
|
||||||
- { offset: 0x4D1, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIDevice$localizedModel', symObjAddr: 0x26D58, symBinAddr: 0x11C88, symSize: 0x0 }
|
- { offset: 0x495, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$UIDevice$systemName', symObjAddr: 0x1EEE0, symBinAddr: 0x121F0, symSize: 0x0 }
|
||||||
- { offset: 0x4E6, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIDevice$systemName', symObjAddr: 0x26D60, symBinAddr: 0x11C90, symSize: 0x0 }
|
- { offset: 0x4AA, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$UIDevice$systemVersion', symObjAddr: 0x1EEE8, symBinAddr: 0x121F8, symSize: 0x0 }
|
||||||
- { offset: 0x4FB, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIDevice$systemVersion', symObjAddr: 0x26D68, symBinAddr: 0x11C98, symSize: 0x0 }
|
- { offset: 0x4BF, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$UIDevice$batteryState', symObjAddr: 0x1EEF0, symBinAddr: 0x12200, symSize: 0x0 }
|
||||||
- { offset: 0x510, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIDevice$batteryState', symObjAddr: 0x26D70, symBinAddr: 0x11CA0, symSize: 0x0 }
|
- { offset: 0x4E9, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$UIDevice$batteryLevel', symObjAddr: 0x1EEF8, symBinAddr: 0x12208, symSize: 0x0 }
|
||||||
- { offset: 0x53A, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIDevice$batteryLevel', symObjAddr: 0x26D78, symBinAddr: 0x11CA8, symSize: 0x0 }
|
- { offset: 0x513, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$UIDevice$orientation', symObjAddr: 0x1EF00, symBinAddr: 0x12210, symSize: 0x0 }
|
||||||
- { offset: 0x564, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIDevice$orientation', symObjAddr: 0x26D80, symBinAddr: 0x11CB0, symSize: 0x0 }
|
- { offset: 0x53D, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$NSProcessInfo$systemUptime', symObjAddr: 0x1EF08, symBinAddr: 0x12218, symSize: 0x0 }
|
||||||
- { offset: 0x58E, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$NSProcessInfo$systemUptime', symObjAddr: 0x26D88, symBinAddr: 0x11CB8, symSize: 0x0 }
|
- { offset: 0x709, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$NSProcessInfo$physicalMemory', symObjAddr: 0x1EF10, symBinAddr: 0x12220, symSize: 0x0 }
|
||||||
- { offset: 0x738, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$NSProcessInfo$physicalMemory', symObjAddr: 0x26D90, symBinAddr: 0x11CC0, symSize: 0x0 }
|
- { offset: 0x733, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$NSProcessInfo$processorCount', symObjAddr: 0x1EF18, symBinAddr: 0x12228, symSize: 0x0 }
|
||||||
- { offset: 0x762, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$NSProcessInfo$processorCount', symObjAddr: 0x26D98, symBinAddr: 0x11CC8, symSize: 0x0 }
|
- { offset: 0x75D, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$NSProcessInfo$operatingSystemVersion', symObjAddr: 0x1EF20, symBinAddr: 0x12230, symSize: 0x0 }
|
||||||
- { offset: 0x78C, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$NSProcessInfo$operatingSystemVersion', symObjAddr: 0x26DA0, symBinAddr: 0x11CD0, symSize: 0x0 }
|
- { offset: 0x787, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$UIWindow$safeAreaInsets', symObjAddr: 0x1EF28, symBinAddr: 0x12238, symSize: 0x0 }
|
||||||
- { offset: 0x7B6, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIWindow$safeAreaInsets', symObjAddr: 0x26DA8, symBinAddr: 0x11CD8, symSize: 0x0 }
|
- { offset: 0x24B5, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$UIScreen$brightness', symObjAddr: 0x1EF30, symBinAddr: 0x12240, symSize: 0x0 }
|
||||||
- { offset: 0x24E4, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIScreen$brightness', symObjAddr: 0x26DB0, symBinAddr: 0x11CE0, symSize: 0x0 }
|
- { offset: 0x24E4, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$UIScreen$bounds', symObjAddr: 0x1EF38, symBinAddr: 0x12248, symSize: 0x0 }
|
||||||
- { offset: 0x2513, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIScreen$bounds', symObjAddr: 0x26DB8, symBinAddr: 0x11CE8, symSize: 0x0 }
|
- { offset: 0x250E, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$UIScreen$scale', symObjAddr: 0x1EF40, symBinAddr: 0x12250, symSize: 0x0 }
|
||||||
- { offset: 0x253D, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIScreen$scale', symObjAddr: 0x26DC0, symBinAddr: 0x11CF0, symSize: 0x0 }
|
- { offset: 0x2523, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$UIScreen$nativeBounds', symObjAddr: 0x1EF48, symBinAddr: 0x12258, symSize: 0x0 }
|
||||||
- { offset: 0x2552, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIScreen$nativeBounds', symObjAddr: 0x26DC8, symBinAddr: 0x11CF8, symSize: 0x0 }
|
- { offset: 0x2538, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$UIScreen$isCaptured', symObjAddr: 0x1EF50, symBinAddr: 0x12260, symSize: 0x0 }
|
||||||
- { offset: 0x2567, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIScreen$isCaptured', symObjAddr: 0x26DD0, symBinAddr: 0x11D00, symSize: 0x0 }
|
- { offset: 0x2562, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$UIScreen$mirroredScreen', symObjAddr: 0x1EF58, symBinAddr: 0x12268, symSize: 0x0 }
|
||||||
- { offset: 0x2591, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIScreen$mirroredScreen', symObjAddr: 0x26DD8, symBinAddr: 0x11D08, symSize: 0x0 }
|
- { offset: 0x258C, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$UIScreenMode$size', symObjAddr: 0x1EF60, symBinAddr: 0x12270, symSize: 0x0 }
|
||||||
- { offset: 0x25BB, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$AVAudioSession$outputVolume', symObjAddr: 0x26DE0, symBinAddr: 0x11D10, symSize: 0x0 }
|
- { offset: 0x25BB, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$UIStatusBarManager$statusBarFrame', symObjAddr: 0x1EF68, symBinAddr: 0x12278, symSize: 0x0 }
|
||||||
- { offset: 0x25F5, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIScreenMode$size', symObjAddr: 0x26DE8, symBinAddr: 0x11D18, symSize: 0x0 }
|
- { offset: 0x2627, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$AVAudioSession$outputVolume', symObjAddr: 0x1EF70, symBinAddr: 0x12280, symSize: 0x0 }
|
||||||
- { offset: 0x2624, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$NSFileManager$attributesOfFileSystemForPath$error$', symObjAddr: 0x26DF0, symBinAddr: 0x11D20, symSize: 0x0 }
|
- { offset: 0x299C, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$NSFileManager$attributesOfFileSystemForPath$error$', symObjAddr: 0x1EF78, symBinAddr: 0x12288, symSize: 0x0 }
|
||||||
- { offset: 0x274E, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$NSFileManager$fileExistsAtPath$', symObjAddr: 0x26DF8, symBinAddr: 0x11D28, symSize: 0x0 }
|
- { offset: 0x2AC6, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$NSFileManager$fileExistsAtPath$', symObjAddr: 0x1EF80, symBinAddr: 0x12290, symSize: 0x0 }
|
||||||
- { offset: 0x277D, size: 0x8, addend: 0x0, symName: '__logos_meta_orig$ohno$NSLocale$preferredLanguages', symObjAddr: 0x26E00, symBinAddr: 0x11D30, symSize: 0x0 }
|
- { offset: 0x2AF5, size: 0x8, addend: 0x0, symName: '__logos_meta_orig$XHooks$NSLocale$preferredLanguages', symObjAddr: 0x1EF88, symBinAddr: 0x12298, symSize: 0x0 }
|
||||||
- { offset: 0x27A7, size: 0x8, addend: 0x0, symName: '__logos_meta_orig$ohno$NSLocale$currentLocale', symObjAddr: 0x26E08, symBinAddr: 0x11D38, symSize: 0x0 }
|
- { offset: 0x2B1F, size: 0x8, addend: 0x0, symName: '__logos_meta_orig$XHooks$NSLocale$currentLocale', symObjAddr: 0x1EF90, symBinAddr: 0x122A0, symSize: 0x0 }
|
||||||
- { offset: 0x27E6, size: 0x8, addend: 0x0, symName: '__logos_meta_orig$ohno$NSLocale$systemLocale', symObjAddr: 0x26E10, symBinAddr: 0x11D40, symSize: 0x0 }
|
- { offset: 0x2B5E, size: 0x8, addend: 0x0, symName: '__logos_meta_orig$XHooks$NSLocale$systemLocale', symObjAddr: 0x1EF98, symBinAddr: 0x122A8, symSize: 0x0 }
|
||||||
- { offset: 0x27FB, size: 0x8, addend: 0x0, symName: '__logos_meta_orig$ohno$NSTimeZone$localTimeZone', symObjAddr: 0x26E18, symBinAddr: 0x11D48, symSize: 0x0 }
|
- { offset: 0x2B73, size: 0x8, addend: 0x0, symName: '__logos_meta_orig$XHooks$NSTimeZone$localTimeZone', symObjAddr: 0x1EFA0, symBinAddr: 0x122B0, symSize: 0x0 }
|
||||||
- { offset: 0x2854, size: 0x8, addend: 0x0, symName: '__logos_meta_orig$ohno$NSTimeZone$systemTimeZone', symObjAddr: 0x26E20, symBinAddr: 0x11D50, symSize: 0x0 }
|
- { offset: 0x2BCC, size: 0x8, addend: 0x0, symName: '__logos_meta_orig$XHooks$NSTimeZone$systemTimeZone', symObjAddr: 0x1EFA8, symBinAddr: 0x122B8, symSize: 0x0 }
|
||||||
- { offset: 0x2869, size: 0x8, addend: 0x0, symName: '__logos_meta_orig$ohno$NSTimeZone$defaultTimeZone', symObjAddr: 0x26E28, symBinAddr: 0x11D58, symSize: 0x0 }
|
- { offset: 0x2BE1, size: 0x8, addend: 0x0, symName: '__logos_meta_orig$XHooks$NSTimeZone$defaultTimeZone', symObjAddr: 0x1EFB0, symBinAddr: 0x122C0, symSize: 0x0 }
|
||||||
- { offset: 0x287E, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIStatusBarManager$statusBarFrame', symObjAddr: 0x26E30, symBinAddr: 0x11D60, symSize: 0x0 }
|
- { offset: 0x2BF6, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$NSMutableURLRequest$initWithURL$', symObjAddr: 0x1EFB8, symBinAddr: 0x122C8, symSize: 0x0 }
|
||||||
- { offset: 0x28EA, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$NSMutableURLRequest$initWithURL$', symObjAddr: 0x26E38, symBinAddr: 0x11D68, symSize: 0x0 }
|
- { offset: 0x2E93, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$NSMutableURLRequest$setValue$forHTTPHeaderField$', symObjAddr: 0x1EFC0, symBinAddr: 0x122D0, symSize: 0x0 }
|
||||||
- { offset: 0x2B87, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$NSMutableURLRequest$setValue$forHTTPHeaderField$', symObjAddr: 0x26E40, symBinAddr: 0x11D70, symSize: 0x0 }
|
- { offset: 0x2EC8, size: 0x8, addend: 0x0, symName: '__logos_meta_orig$XHooks$NSURLSession$sessionWithConfiguration$', symObjAddr: 0x1EFC8, symBinAddr: 0x122D8, symSize: 0x0 }
|
||||||
- { offset: 0x2BBC, size: 0x8, addend: 0x0, symName: '__logos_meta_orig$ohno$NSURLSession$sessionWithConfiguration$', symObjAddr: 0x26E48, symBinAddr: 0x11D78, symSize: 0x0 }
|
- { offset: 0x35FC, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$NSURLSession$dataTaskWithRequest$completionHandler$', symObjAddr: 0x1EFD0, symBinAddr: 0x122E0, symSize: 0x0 }
|
||||||
- { offset: 0x32F0, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$NSURLSession$dataTaskWithRequest$completionHandler$', symObjAddr: 0x26E50, symBinAddr: 0x11D80, symSize: 0x0 }
|
- { offset: 0x384E, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$WKWebView$evaluateJavaScript$completionHandler$', symObjAddr: 0x1EFD8, symBinAddr: 0x122E8, symSize: 0x0 }
|
||||||
- { offset: 0x3542, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$WKWebView$evaluateJavaScript$completionHandler$', symObjAddr: 0x26E58, symBinAddr: 0x11D88, symSize: 0x0 }
|
- { offset: 0x54B2, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$WKWebView$setCustomUserAgent$', symObjAddr: 0x1EFE0, symBinAddr: 0x122F0, symSize: 0x0 }
|
||||||
- { offset: 0x51A6, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$WKWebView$setCustomUserAgent$', symObjAddr: 0x26E60, symBinAddr: 0x11D90, symSize: 0x0 }
|
- { offset: 0x54DD, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$WKWebView$customUserAgent', symObjAddr: 0x1EFE8, symBinAddr: 0x122F8, symSize: 0x0 }
|
||||||
- { offset: 0x51D1, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$WKWebView$customUserAgent', symObjAddr: 0x26E68, symBinAddr: 0x11D98, symSize: 0x0 }
|
- { offset: 0x5507, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$CTTelephonyNetworkInfo$serviceCurrentRadioAccessTechnology', symObjAddr: 0x1EFF0, symBinAddr: 0x12300, symSize: 0x0 }
|
||||||
- { offset: 0x51FB, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$CTTelephonyNetworkInfo$serviceCurrentRadioAccessTechnology', symObjAddr: 0x26E70, symBinAddr: 0x11DA0, symSize: 0x0 }
|
- { offset: 0x56B7, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$CTTelephonyNetworkInfo$serviceSubscriberCellularProviders', symObjAddr: 0x1EFF8, symBinAddr: 0x12308, symSize: 0x0 }
|
||||||
- { offset: 0x53AB, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$CTTelephonyNetworkInfo$serviceSubscriberCellularProviders', symObjAddr: 0x26E78, symBinAddr: 0x11DA8, symSize: 0x0 }
|
- { offset: 0x56CC, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$CMMotionManager$startGyroUpdatesToQueue$withHandler$', symObjAddr: 0x1F000, symBinAddr: 0x12310, symSize: 0x0 }
|
||||||
- { offset: 0x53C0, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$CMMotionManager$startGyroUpdatesToQueue$withHandler$', symObjAddr: 0x26E80, symBinAddr: 0x11DB0, symSize: 0x0 }
|
- { offset: 0x5C18, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$uname', symObjAddr: 0x1F008, symBinAddr: 0x12318, symSize: 0x0 }
|
||||||
- { offset: 0x590C, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$uname', symObjAddr: 0x26E88, symBinAddr: 0x11DB8, symSize: 0x0 }
|
- { offset: 0x5C9A, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$sysctl', symObjAddr: 0x1F010, symBinAddr: 0x12320, symSize: 0x0 }
|
||||||
- { offset: 0x598E, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$sysctl', symObjAddr: 0x26E90, symBinAddr: 0x11DC0, symSize: 0x0 }
|
- { offset: 0x5CF3, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$sysctlbyname', symObjAddr: 0x1F018, symBinAddr: 0x12328, symSize: 0x0 }
|
||||||
- { offset: 0x59E7, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$sysctlbyname', symObjAddr: 0x26E98, symBinAddr: 0x11DC8, symSize: 0x0 }
|
- { offset: 0x5D2D, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$clock_gettime', symObjAddr: 0x1F020, symBinAddr: 0x12330, symSize: 0x0 }
|
||||||
- { offset: 0x5A21, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$clock_gettime', symObjAddr: 0x26EA0, symBinAddr: 0x11DD0, symSize: 0x0 }
|
- { offset: 0x5DCD, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$getifaddrs', symObjAddr: 0x1F028, symBinAddr: 0x12338, symSize: 0x0 }
|
||||||
- { offset: 0x5AC1, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$getifaddrs', symObjAddr: 0x26EA8, symBinAddr: 0x11DD8, symSize: 0x0 }
|
- { offset: 0x5EAB, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$SCNetworkReachabilityGetFlags', symObjAddr: 0x1F030, symBinAddr: 0x12340, symSize: 0x0 }
|
||||||
- { offset: 0x5B9F, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$SCNetworkReachabilityGetFlags', symObjAddr: 0x26EB0, symBinAddr: 0x11DE0, symSize: 0x0 }
|
- { offset: 0x5F5C, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$UIAccessibilityIsClosedCaptioningEnabled', symObjAddr: 0x1F038, symBinAddr: 0x12348, symSize: 0x0 }
|
||||||
- { offset: 0x5C50, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIAccessibilityIsClosedCaptioningEnabled', symObjAddr: 0x26EB8, symBinAddr: 0x11DE8, symSize: 0x0 }
|
- { offset: 0x5F7E, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$UIAccessibilityIsMonoAudioEnabled', symObjAddr: 0x1F040, symBinAddr: 0x12350, symSize: 0x0 }
|
||||||
- { offset: 0x5C72, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIAccessibilityIsMonoAudioEnabled', symObjAddr: 0x26EC0, symBinAddr: 0x11DF0, symSize: 0x0 }
|
- { offset: 0x6166, size: 0x8, addend: 0x0, symName: _SetupXSLog, symObjAddr: 0x0, symBinAddr: 0x4000, symSize: 0x24 }
|
||||||
- { offset: 0x5E40, size: 0x8, addend: 0x0, symName: _str2uuid, symObjAddr: 0x0, symBinAddr: 0x4000, symSize: 0x64 }
|
- { offset: 0x617B, size: 0x8, addend: 0x0, symName: '-[CustomCMGyroData rotationRate]', symObjAddr: 0x24, symBinAddr: 0x4024, symSize: 0x44 }
|
||||||
- { offset: 0x5E68, size: 0x8, addend: 0x0, symName: _str2int, symObjAddr: 0x64, symBinAddr: 0x4064, symSize: 0x58 }
|
- { offset: 0x61B2, size: 0x8, addend: 0x0, symName: '-[CustomCMGyroData customRotationRate]', symObjAddr: 0x68, symBinAddr: 0x4068, symSize: 0x40 }
|
||||||
- { offset: 0x5E90, size: 0x8, addend: 0x0, symName: _str2float, symObjAddr: 0xBC, symBinAddr: 0x40BC, symSize: 0x54 }
|
- { offset: 0x61E9, size: 0x8, addend: 0x0, symName: '-[CustomCMGyroData setCustomRotationRate:]', symObjAddr: 0xA8, symBinAddr: 0x40A8, symSize: 0x40 }
|
||||||
- { offset: 0x5EB8, size: 0x8, addend: 0x0, symName: _str2double, symObjAddr: 0x110, symBinAddr: 0x4110, symSize: 0x54 }
|
- { offset: 0x6228, size: 0x8, addend: 0x0, symName: __logosLocalCtor_e9c95796, symObjAddr: 0xE8, symBinAddr: 0x40E8, symSize: 0xD38 }
|
||||||
- { offset: 0x5EE0, size: 0x8, addend: 0x0, symName: _str2ull, symObjAddr: 0x164, symBinAddr: 0x4164, symSize: 0x58 }
|
- { offset: 0x64AB, size: 0x8, addend: 0x0, symName: '__logos_meta_method$XHooks$ATTrackingManager$trackingAuthorizationStatus', symObjAddr: 0xE20, symBinAddr: 0x4E20, symSize: 0x80 }
|
||||||
- { offset: 0x5F08, size: 0x8, addend: 0x0, symName: _tryGetVal, symObjAddr: 0x1BC, symBinAddr: 0x41BC, symSize: 0x190 }
|
- { offset: 0x6515, size: 0x8, addend: 0x0, symName: '__logos_meta_method$XHooks$ATTrackingManager$requestTrackingAuthorizationWithCompletionHandler$', symObjAddr: 0xEA0, symBinAddr: 0x4EA0, symSize: 0x150 }
|
||||||
- { offset: 0x5F62, size: 0x8, addend: 0x0, symName: _str2chars, symObjAddr: 0x34C, symBinAddr: 0x434C, symSize: 0x6C }
|
- { offset: 0x6577, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$ASIdentifierManager$advertisingIdentifier', symObjAddr: 0xFF0, symBinAddr: 0x4FF0, symSize: 0x110 }
|
||||||
- { offset: 0x5F98, size: 0x8, addend: 0x0, symName: '-[CustomCMGyroData rotationRate]', symObjAddr: 0x3B8, symBinAddr: 0x43B8, symSize: 0x44 }
|
- { offset: 0x65BB, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$ASIdentifierManager$isAdvertisingTrackingEnabled', symObjAddr: 0x1100, symBinAddr: 0x5100, symSize: 0x70 }
|
||||||
- { offset: 0x5FCF, size: 0x8, addend: 0x0, symName: '-[CustomCMGyroData customRotationRate]', symObjAddr: 0x3FC, symBinAddr: 0x43FC, symSize: 0x40 }
|
- { offset: 0x65FF, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$UIDevice$identifierForVendor', symObjAddr: 0x1170, symBinAddr: 0x5170, symSize: 0x110 }
|
||||||
- { offset: 0x6006, size: 0x8, addend: 0x0, symName: '-[CustomCMGyroData setCustomRotationRate:]', symObjAddr: 0x43C, symBinAddr: 0x443C, symSize: 0x40 }
|
- { offset: 0x6643, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$UIDevice$name', symObjAddr: 0x1280, symBinAddr: 0x5280, symSize: 0x110 }
|
||||||
- { offset: 0x6045, size: 0x8, addend: 0x0, symName: __logosLocalCtor_e2ef2056, symObjAddr: 0x47C, symBinAddr: 0x447C, symSize: 0xD0C }
|
- { offset: 0x6687, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$UIDevice$model', symObjAddr: 0x1390, symBinAddr: 0x5390, symSize: 0x34 }
|
||||||
- { offset: 0x62E8, size: 0x8, addend: 0x0, symName: '__logos_meta_method$ohno$ATTrackingManager$trackingAuthorizationStatus', symObjAddr: 0x1188, symBinAddr: 0x5188, symSize: 0x130 }
|
- { offset: 0x66BD, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$UIDevice$localizedModel', symObjAddr: 0x13C4, symBinAddr: 0x53C4, symSize: 0x34 }
|
||||||
- { offset: 0x6349, size: 0x8, addend: 0x0, symName: '__logos_meta_method$ohno$ATTrackingManager$requestTrackingAuthorizationWithCompletionHandler$', symObjAddr: 0x12B8, symBinAddr: 0x52B8, symSize: 0x1BC }
|
- { offset: 0x66F3, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$UIDevice$systemName', symObjAddr: 0x13F8, symBinAddr: 0x53F8, symSize: 0x34 }
|
||||||
- { offset: 0x63B0, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$ASIdentifierManager$advertisingIdentifier', symObjAddr: 0x1474, symBinAddr: 0x5474, symSize: 0x158 }
|
- { offset: 0x6729, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$UIDevice$systemVersion', symObjAddr: 0x142C, symBinAddr: 0x542C, symSize: 0x110 }
|
||||||
- { offset: 0x63F9, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$ASIdentifierManager$isAdvertisingTrackingEnabled', symObjAddr: 0x15CC, symBinAddr: 0x55CC, symSize: 0xF4 }
|
- { offset: 0x676D, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$UIDevice$batteryState', symObjAddr: 0x153C, symBinAddr: 0x553C, symSize: 0x9C }
|
||||||
- { offset: 0x6442, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIDevice$identifierForVendor', symObjAddr: 0x16C0, symBinAddr: 0x56C0, symSize: 0x158 }
|
- { offset: 0x67B1, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$UIDevice$batteryLevel', symObjAddr: 0x15D8, symBinAddr: 0x55D8, symSize: 0xA0 }
|
||||||
- { offset: 0x648B, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIDevice$name', symObjAddr: 0x1818, symBinAddr: 0x5818, symSize: 0x158 }
|
- { offset: 0x67F5, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$UIDevice$orientation', symObjAddr: 0x1678, symBinAddr: 0x5678, symSize: 0x18 }
|
||||||
- { offset: 0x64D4, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIDevice$model', symObjAddr: 0x1970, symBinAddr: 0x5970, symSize: 0x34 }
|
- { offset: 0x682B, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$NSProcessInfo$systemUptime', symObjAddr: 0x1690, symBinAddr: 0x5690, symSize: 0xA4 }
|
||||||
- { offset: 0x650A, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIDevice$localizedModel', symObjAddr: 0x19A4, symBinAddr: 0x59A4, symSize: 0x34 }
|
- { offset: 0x687D, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$NSProcessInfo$physicalMemory', symObjAddr: 0x1734, symBinAddr: 0x5734, symSize: 0xA0 }
|
||||||
- { offset: 0x6540, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIDevice$systemName', symObjAddr: 0x19D8, symBinAddr: 0x59D8, symSize: 0x34 }
|
- { offset: 0x68C1, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$NSProcessInfo$processorCount', symObjAddr: 0x17D4, symBinAddr: 0x57D4, symSize: 0xA0 }
|
||||||
- { offset: 0x6576, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIDevice$systemVersion', symObjAddr: 0x1A0C, symBinAddr: 0x5A0C, symSize: 0x158 }
|
- { offset: 0x6905, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$NSProcessInfo$operatingSystemVersion', symObjAddr: 0x1874, symBinAddr: 0x5874, symSize: 0x468 }
|
||||||
- { offset: 0x65BF, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIDevice$batteryState', symObjAddr: 0x1B64, symBinAddr: 0x5B64, symSize: 0xF0 }
|
- { offset: 0x6987, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$UIWindow$safeAreaInsets', symObjAddr: 0x1CDC, symBinAddr: 0x5CDC, symSize: 0x170 }
|
||||||
- { offset: 0x6608, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIDevice$batteryLevel', symObjAddr: 0x1C54, symBinAddr: 0x5C54, symSize: 0xF0 }
|
- { offset: 0x6A04, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$UIScreen$brightness', symObjAddr: 0x1E4C, symBinAddr: 0x5E4C, symSize: 0xA0 }
|
||||||
- { offset: 0x6651, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIDevice$orientation', symObjAddr: 0x1D44, symBinAddr: 0x5D44, symSize: 0x18 }
|
- { offset: 0x6A48, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$UIScreen$bounds', symObjAddr: 0x1EEC, symBinAddr: 0x5EEC, symSize: 0x174 }
|
||||||
- { offset: 0x6687, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$NSProcessInfo$systemUptime', symObjAddr: 0x1D5C, symBinAddr: 0x5D5C, symSize: 0xF0 }
|
- { offset: 0x6AB7, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$UIScreen$scale', symObjAddr: 0x2060, symBinAddr: 0x6060, symSize: 0xA0 }
|
||||||
- { offset: 0x66D0, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$NSProcessInfo$physicalMemory', symObjAddr: 0x1E4C, symBinAddr: 0x5E4C, symSize: 0x110 }
|
- { offset: 0x6AFB, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$UIScreen$nativeBounds', symObjAddr: 0x2100, symBinAddr: 0x6100, symSize: 0x174 }
|
||||||
- { offset: 0x6719, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$NSProcessInfo$processorCount', symObjAddr: 0x1F5C, symBinAddr: 0x5F5C, symSize: 0xF0 }
|
- { offset: 0x6B6A, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$UIScreen$isCaptured', symObjAddr: 0x2274, symBinAddr: 0x6274, symSize: 0x1C }
|
||||||
- { offset: 0x6766, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$NSProcessInfo$operatingSystemVersion', symObjAddr: 0x204C, symBinAddr: 0x604C, symSize: 0x614 }
|
- { offset: 0x6BA0, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$UIScreen$mirroredScreen', symObjAddr: 0x2290, symBinAddr: 0x6290, symSize: 0x18 }
|
||||||
- { offset: 0x67F4, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIWindow$safeAreaInsets', symObjAddr: 0x2660, symBinAddr: 0x6660, symSize: 0x214 }
|
- { offset: 0x6BD6, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$UIScreenMode$size', symObjAddr: 0x22A8, symBinAddr: 0x62A8, symSize: 0x154 }
|
||||||
- { offset: 0x6842, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIScreen$brightness', symObjAddr: 0x2874, symBinAddr: 0x6874, symSize: 0xF0 }
|
- { offset: 0x6C44, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$UIStatusBarManager$statusBarFrame', symObjAddr: 0x23FC, symBinAddr: 0x63FC, symSize: 0x190 }
|
||||||
- { offset: 0x688F, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIScreen$bounds', symObjAddr: 0x2964, symBinAddr: 0x6964, symSize: 0x12C }
|
- { offset: 0x6CB3, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$AVAudioSession$outputVolume', symObjAddr: 0x258C, symBinAddr: 0x658C, symSize: 0xA0 }
|
||||||
- { offset: 0x68DD, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIScreen$scale', symObjAddr: 0x2A90, symBinAddr: 0x6A90, symSize: 0xF0 }
|
- { offset: 0x6CFB, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$NSFileManager$attributesOfFileSystemForPath$error$', symObjAddr: 0x262C, symBinAddr: 0x662C, symSize: 0x280 }
|
||||||
- { offset: 0x692A, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIScreen$nativeBounds', symObjAddr: 0x2B80, symBinAddr: 0x6B80, symSize: 0x12C }
|
- { offset: 0x6D9D, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$NSFileManager$fileExistsAtPath$', symObjAddr: 0x28AC, symBinAddr: 0x68AC, symSize: 0x37C }
|
||||||
- { offset: 0x6978, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIScreen$isCaptured', symObjAddr: 0x2CAC, symBinAddr: 0x6CAC, symSize: 0x1C }
|
- { offset: 0x6E08, size: 0x8, addend: 0x0, symName: '__logos_meta_method$XHooks$NSLocale$preferredLanguages', symObjAddr: 0x2C28, symBinAddr: 0x6C28, symSize: 0x7C }
|
||||||
- { offset: 0x69B1, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIScreen$mirroredScreen', symObjAddr: 0x2CC8, symBinAddr: 0x6CC8, symSize: 0x18 }
|
- { offset: 0x6E41, size: 0x8, addend: 0x0, symName: '__logos_meta_method$XHooks$NSLocale$currentLocale', symObjAddr: 0x2CA4, symBinAddr: 0x6CA4, symSize: 0xD4 }
|
||||||
- { offset: 0x69EA, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$AVAudioSession$outputVolume', symObjAddr: 0x2CE0, symBinAddr: 0x6CE0, symSize: 0xF0 }
|
- { offset: 0x6E89, size: 0x8, addend: 0x0, symName: '__logos_meta_method$XHooks$NSLocale$systemLocale', symObjAddr: 0x2D78, symBinAddr: 0x6D78, symSize: 0xD4 }
|
||||||
- { offset: 0x6A37, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIScreenMode$size', symObjAddr: 0x2DD0, symBinAddr: 0x6DD0, symSize: 0x104 }
|
- { offset: 0x6ED1, size: 0x8, addend: 0x0, symName: '__logos_meta_method$XHooks$NSTimeZone$localTimeZone', symObjAddr: 0x2E4C, symBinAddr: 0x6E4C, symSize: 0xD8 }
|
||||||
- { offset: 0x6A85, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$NSFileManager$attributesOfFileSystemForPath$error$', symObjAddr: 0x2ED4, symBinAddr: 0x6ED4, symSize: 0x248 }
|
- { offset: 0x6F19, size: 0x8, addend: 0x0, symName: '__logos_meta_method$XHooks$NSTimeZone$systemTimeZone', symObjAddr: 0x2F24, symBinAddr: 0x6F24, symSize: 0xD8 }
|
||||||
- { offset: 0x6B09, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$NSFileManager$fileExistsAtPath$', symObjAddr: 0x311C, symBinAddr: 0x711C, symSize: 0x3A0 }
|
- { offset: 0x6F61, size: 0x8, addend: 0x0, symName: '__logos_meta_method$XHooks$NSTimeZone$defaultTimeZone', symObjAddr: 0x2FFC, symBinAddr: 0x6FFC, symSize: 0xD8 }
|
||||||
- { offset: 0x6B74, size: 0x8, addend: 0x0, symName: '__logos_meta_method$ohno$NSLocale$preferredLanguages', symObjAddr: 0x34BC, symBinAddr: 0x74BC, symSize: 0x88 }
|
- { offset: 0x6FA9, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$NSMutableURLRequest$initWithURL$', symObjAddr: 0x30D4, symBinAddr: 0x70D4, symSize: 0x13C }
|
||||||
- { offset: 0x6BAD, size: 0x8, addend: 0x0, symName: '__logos_meta_method$ohno$NSLocale$currentLocale', symObjAddr: 0x3544, symBinAddr: 0x7544, symSize: 0x138 }
|
- { offset: 0x7006, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$NSMutableURLRequest$setValue$forHTTPHeaderField$', symObjAddr: 0x3210, symBinAddr: 0x7210, symSize: 0x13C }
|
||||||
- { offset: 0x6BFA, size: 0x8, addend: 0x0, symName: '__logos_meta_method$ohno$NSLocale$systemLocale', symObjAddr: 0x367C, symBinAddr: 0x767C, symSize: 0x138 }
|
- { offset: 0x707D, size: 0x8, addend: 0x0, symName: '__logos_meta_method$XHooks$NSURLSession$sessionWithConfiguration$', symObjAddr: 0x334C, symBinAddr: 0x734C, symSize: 0x160 }
|
||||||
- { offset: 0x6C47, size: 0x8, addend: 0x0, symName: '__logos_meta_method$ohno$NSTimeZone$localTimeZone', symObjAddr: 0x37B4, symBinAddr: 0x77B4, symSize: 0x138 }
|
- { offset: 0x70D4, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$NSURLSession$dataTaskWithRequest$completionHandler$', symObjAddr: 0x34AC, symBinAddr: 0x74AC, symSize: 0x134 }
|
||||||
- { offset: 0x6C94, size: 0x8, addend: 0x0, symName: '__logos_meta_method$ohno$NSTimeZone$systemTimeZone', symObjAddr: 0x38EC, symBinAddr: 0x78EC, symSize: 0x138 }
|
- { offset: 0x7149, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$WKWebView$evaluateJavaScript$completionHandler$', symObjAddr: 0x35E0, symBinAddr: 0x75E0, symSize: 0x100 }
|
||||||
- { offset: 0x6CE1, size: 0x8, addend: 0x0, symName: '__logos_meta_method$ohno$NSTimeZone$defaultTimeZone', symObjAddr: 0x3A24, symBinAddr: 0x7A24, symSize: 0x138 }
|
- { offset: 0x71AB, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$WKWebView$setCustomUserAgent$', symObjAddr: 0x36E0, symBinAddr: 0x76E0, symSize: 0xEC }
|
||||||
- { offset: 0x6D2E, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIStatusBarManager$statusBarFrame', symObjAddr: 0x3B5C, symBinAddr: 0x7B5C, symSize: 0x12C }
|
- { offset: 0x71FE, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$WKWebView$customUserAgent', symObjAddr: 0x37CC, symBinAddr: 0x77CC, symSize: 0x110 }
|
||||||
- { offset: 0x6D7C, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$NSMutableURLRequest$initWithURL$', symObjAddr: 0x3C88, symBinAddr: 0x7C88, symSize: 0x134 }
|
- { offset: 0x7246, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$CTTelephonyNetworkInfo$serviceCurrentRadioAccessTechnology', symObjAddr: 0x38DC, symBinAddr: 0x78DC, symSize: 0x3AC }
|
||||||
- { offset: 0x6DC4, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$NSMutableURLRequest$setValue$forHTTPHeaderField$', symObjAddr: 0x3DBC, symBinAddr: 0x7DBC, symSize: 0x18C }
|
- { offset: 0x72ED, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$CTTelephonyNetworkInfo$serviceSubscriberCellularProviders', symObjAddr: 0x3C88, symBinAddr: 0x7C88, symSize: 0x6C8 }
|
||||||
- { offset: 0x6E2C, size: 0x8, addend: 0x0, symName: '__logos_meta_method$ohno$NSURLSession$sessionWithConfiguration$', symObjAddr: 0x3F48, symBinAddr: 0x7F48, symSize: 0xF4 }
|
- { offset: 0x7394, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$CMMotionManager$startGyroUpdatesToQueue$withHandler$', symObjAddr: 0x4350, symBinAddr: 0x8350, symSize: 0x150 }
|
||||||
- { offset: 0x6E74, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$NSURLSession$dataTaskWithRequest$completionHandler$', symObjAddr: 0x403C, symBinAddr: 0x803C, symSize: 0x134 }
|
- { offset: 0x73F6, size: 0x8, addend: 0x0, symName: '__logos_function$XHooks$uname', symObjAddr: 0x44A0, symBinAddr: 0x84A0, symSize: 0xFC }
|
||||||
- { offset: 0x6EDA, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$WKWebView$evaluateJavaScript$completionHandler$', symObjAddr: 0x4170, symBinAddr: 0x8170, symSize: 0x1F0 }
|
- { offset: 0x745C, size: 0x8, addend: 0x0, symName: '__logos_function$XHooks$sysctl', symObjAddr: 0x459C, symBinAddr: 0x859C, symSize: 0x350 }
|
||||||
- { offset: 0x6F42, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$WKWebView$setCustomUserAgent$', symObjAddr: 0x4360, symBinAddr: 0x8360, symSize: 0x140 }
|
- { offset: 0x7559, size: 0x8, addend: 0x0, symName: '__logos_function$XHooks$sysctlbyname', symObjAddr: 0x48EC, symBinAddr: 0x88EC, symSize: 0x2B4 }
|
||||||
- { offset: 0x6F9B, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$WKWebView$customUserAgent', symObjAddr: 0x44A0, symBinAddr: 0x84A0, symSize: 0x12C }
|
- { offset: 0x768F, size: 0x8, addend: 0x0, symName: '__logos_function$XHooks$clock_gettime', symObjAddr: 0x4BA0, symBinAddr: 0x8BA0, symSize: 0x50 }
|
||||||
- { offset: 0x6FE8, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$CTTelephonyNetworkInfo$serviceCurrentRadioAccessTechnology', symObjAddr: 0x45CC, symBinAddr: 0x85CC, symSize: 0x170 }
|
- { offset: 0x76D7, size: 0x8, addend: 0x0, symName: '__logos_function$XHooks$getifaddrs', symObjAddr: 0x4BF0, symBinAddr: 0x8BF0, symSize: 0x614 }
|
||||||
- { offset: 0x703F, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$CTTelephonyNetworkInfo$serviceSubscriberCellularProviders', symObjAddr: 0x473C, symBinAddr: 0x873C, symSize: 0x170 }
|
- { offset: 0x7857, size: 0x8, addend: 0x0, symName: '__logos_function$XHooks$SCNetworkReachabilityGetFlags', symObjAddr: 0x5204, symBinAddr: 0x9204, symSize: 0x78 }
|
||||||
- { offset: 0x7096, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$CMMotionManager$startGyroUpdatesToQueue$withHandler$', symObjAddr: 0x48AC, symBinAddr: 0x88AC, symSize: 0x150 }
|
- { offset: 0x789F, size: 0x8, addend: 0x0, symName: __logosLocalDtor_2e2d985c, symObjAddr: 0x527C, symBinAddr: 0x927C, symSize: 0x64 }
|
||||||
- { offset: 0x70F8, size: 0x8, addend: 0x0, symName: '__logos_function$ohno$uname', symObjAddr: 0x49FC, symBinAddr: 0x89FC, symSize: 0x88 }
|
- { offset: 0x78E3, size: 0x8, addend: 0x0, symName: '____logos_meta_method$XHooks$ATTrackingManager$requestTrackingAuthorizationWithCompletionHandler$_block_invoke', symObjAddr: 0x52E0, symBinAddr: 0x92E0, symSize: 0x50 }
|
||||||
- { offset: 0x7131, size: 0x8, addend: 0x0, symName: '__logos_function$ohno$sysctl', symObjAddr: 0x4A84, symBinAddr: 0x8A84, symSize: 0x410 }
|
- { offset: 0x792D, size: 0x8, addend: 0x0, symName: ___copy_helper_block_e8_32b, symObjAddr: 0x5330, symBinAddr: 0x9330, symSize: 0x38 }
|
||||||
- { offset: 0x721E, size: 0x8, addend: 0x0, symName: '__logos_function$ohno$sysctlbyname', symObjAddr: 0x4E94, symBinAddr: 0x8E94, symSize: 0x428 }
|
- { offset: 0x7951, size: 0x8, addend: 0x0, symName: ___destroy_helper_block_e8_32s, symObjAddr: 0x5368, symBinAddr: 0x9368, symSize: 0x2C }
|
||||||
- { offset: 0x731C, size: 0x8, addend: 0x0, symName: '__logos_function$ohno$clock_gettime', symObjAddr: 0x52BC, symBinAddr: 0x92BC, symSize: 0x5C }
|
- { offset: 0x796D, size: 0x8, addend: 0x0, symName: _UIEdgeInsetsMake, symObjAddr: 0x5394, symBinAddr: 0x9394, symSize: 0x4C }
|
||||||
- { offset: 0x7364, size: 0x8, addend: 0x0, symName: '__logos_function$ohno$getifaddrs', symObjAddr: 0x5318, symBinAddr: 0x9318, symSize: 0x698 }
|
- { offset: 0x79CD, size: 0x8, addend: 0x0, symName: _CGRectMake, symObjAddr: 0x53E0, symBinAddr: 0x93E0, symSize: 0x4C }
|
||||||
- { offset: 0x74EA, size: 0x8, addend: 0x0, symName: '__logos_function$ohno$SCNetworkReachabilityGetFlags', symObjAddr: 0x59B0, symBinAddr: 0x99B0, symSize: 0x84 }
|
- { offset: 0x7A33, size: 0x8, addend: 0x0, symName: _CGSizeMake, symObjAddr: 0x542C, symBinAddr: 0x942C, symSize: 0x2C }
|
||||||
- { offset: 0x7532, size: 0x8, addend: 0x0, symName: __logosLocalDtor_9db639d6, symObjAddr: 0x5A34, symBinAddr: 0x9A34, symSize: 0x28 }
|
- { offset: 0x7A7B, size: 0x8, addend: 0x0, symName: '____logos_method$XHooks$NSFileManager$fileExistsAtPath$_block_invoke', symObjAddr: 0x5458, symBinAddr: 0x9458, symSize: 0x9C }
|
||||||
- { offset: 0x7576, size: 0x8, addend: 0x0, symName: '____logos_meta_method$ohno$ATTrackingManager$trackingAuthorizationStatus_block_invoke', symObjAddr: 0x5A5C, symBinAddr: 0x9A5C, symSize: 0x80 }
|
- { offset: 0x7B05, size: 0x8, addend: 0x0, symName: ___copy_helper_block_e8_32s, symObjAddr: 0x54F4, symBinAddr: 0x94F4, symSize: 0x38 }
|
||||||
- { offset: 0x75C3, size: 0x8, addend: 0x0, symName: ___copy_helper_block_e8_32r, symObjAddr: 0x5ADC, symBinAddr: 0x9ADC, symSize: 0x38 }
|
- { offset: 0x7B29, size: 0x8, addend: 0x0, symName: '____logos_method$XHooks$CMMotionManager$startGyroUpdatesToQueue$withHandler$_block_invoke', symObjAddr: 0x552C, symBinAddr: 0x952C, symSize: 0x10C }
|
||||||
- { offset: 0x75E7, size: 0x8, addend: 0x0, symName: ___destroy_helper_block_e8_32r, symObjAddr: 0x5B14, symBinAddr: 0x9B14, symSize: 0x2C }
|
- { offset: 0x7BAF, size: 0x8, addend: 0x0, symName: _randomRadiansPerSecond, symObjAddr: 0x5638, symBinAddr: 0x9638, symSize: 0x44 }
|
||||||
- { offset: 0x7603, size: 0x8, addend: 0x0, symName: '____logos_meta_method$ohno$ATTrackingManager$requestTrackingAuthorizationWithCompletionHandler$_block_invoke', symObjAddr: 0x5B40, symBinAddr: 0x9B40, symSize: 0x80 }
|
- { offset: 0x7BD9, size: 0x8, addend: 0x0, symName: _modifyInterfaceIP, symObjAddr: 0x567C, symBinAddr: 0x967C, symSize: 0x140 }
|
||||||
- { offset: 0x7650, size: 0x8, addend: 0x0, symName: '____logos_meta_method$ohno$ATTrackingManager$requestTrackingAuthorizationWithCompletionHandler$_block_invoke_2', symObjAddr: 0x5BC0, symBinAddr: 0x9BC0, symSize: 0x58 }
|
- { offset: 0x7C6C, size: 0x8, addend: 0x0, symName: _createInterface, symObjAddr: 0x57BC, symBinAddr: 0x97BC, symSize: 0x3C8 }
|
||||||
- { offset: 0x76A0, size: 0x8, addend: 0x0, symName: ___copy_helper_block_e8_32b40r, symObjAddr: 0x5C18, symBinAddr: 0x9C18, symSize: 0x58 }
|
- { offset: 0x7D15, size: 0x8, addend: 0x0, symName: '__logos_function$XHooks$UIAccessibilityIsClosedCaptioningEnabled', symObjAddr: 0x5B84, symBinAddr: 0x9B84, symSize: 0xC }
|
||||||
- { offset: 0x76C4, size: 0x8, addend: 0x0, symName: ___destroy_helper_block_e8_32s40r, symObjAddr: 0x5C70, symBinAddr: 0x9C70, symSize: 0x40 }
|
- { offset: 0x7D2F, size: 0x8, addend: 0x0, symName: '__logos_function$XHooks$UIAccessibilityIsMonoAudioEnabled', symObjAddr: 0x5B90, symBinAddr: 0x9B90, symSize: 0xC }
|
||||||
- { offset: 0x76E0, size: 0x8, addend: 0x0, symName: ___Block_byref_object_copy_, symObjAddr: 0x5CB0, symBinAddr: 0x9CB0, symSize: 0x54 }
|
- { offset: 0x7D49, size: 0x8, addend: 0x0, symName: ___GLOBAL_init_65535, symObjAddr: 0x5D6C, symBinAddr: 0x9B9C, symSize: 0x28 }
|
||||||
- { offset: 0x7704, size: 0x8, addend: 0x0, symName: ___Block_byref_object_dispose_, symObjAddr: 0x5D04, symBinAddr: 0x9D04, symSize: 0x2C }
|
- { offset: 0x7FCF, size: 0x8, addend: 0x0, symName: _XSLogSetupLogWithFilePath, symObjAddr: 0x0, symBinAddr: 0x9BC4, symSize: 0x100 }
|
||||||
- { offset: 0x7720, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$ASIdentifierManager$advertisingIdentifier_block_invoke', symObjAddr: 0x5D30, symBinAddr: 0x9D30, symSize: 0x80 }
|
- { offset: 0x7FE8, size: 0x8, addend: 0x0, symName: _kLogFilePath, symObjAddr: 0xE38, symBinAddr: 0x12198, symSize: 0x0 }
|
||||||
- { offset: 0x776D, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$ASIdentifierManager$isAdvertisingTrackingEnabled_block_invoke', symObjAddr: 0x5DB0, symBinAddr: 0x9DB0, symSize: 0x9C }
|
- { offset: 0x804F, size: 0x8, addend: 0x0, symName: _XSLogSetupLogWithFilePath, symObjAddr: 0x0, symBinAddr: 0x9BC4, symSize: 0x100 }
|
||||||
- { offset: 0x77D6, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$UIDevice$identifierForVendor_block_invoke', symObjAddr: 0x5E4C, symBinAddr: 0x9E4C, symSize: 0x80 }
|
- { offset: 0x8070, size: 0x8, addend: 0x0, symName: _XSLogSetupLogWithFilePath.onceToken, symObjAddr: 0x3DE8, symBinAddr: 0x12358, symSize: 0x0 }
|
||||||
- { offset: 0x7823, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$UIDevice$name_block_invoke', symObjAddr: 0x5ECC, symBinAddr: 0x9ECC, symSize: 0x64 }
|
- { offset: 0x8115, size: 0x8, addend: 0x0, symName: _logFileHandle, symObjAddr: 0x3DF8, symBinAddr: 0x12368, symSize: 0x0 }
|
||||||
- { offset: 0x7870, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$UIDevice$systemVersion_block_invoke', symObjAddr: 0x5F30, symBinAddr: 0x9F30, symSize: 0x64 }
|
- { offset: 0x8195, size: 0x8, addend: 0x0, symName: _logQueue, symObjAddr: 0x3DF0, symBinAddr: 0x12360, symSize: 0x0 }
|
||||||
- { offset: 0x78BD, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$UIDevice$batteryState_block_invoke', symObjAddr: 0x5F94, symBinAddr: 0x9F94, symSize: 0x70 }
|
- { offset: 0x81BA, size: 0x8, addend: 0x0, symName: _kMaxFileSize, symObjAddr: 0xE40, symBinAddr: 0x121A0, symSize: 0x0 }
|
||||||
- { offset: 0x7926, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$UIDevice$batteryLevel_block_invoke', symObjAddr: 0x6004, symBinAddr: 0xA004, symSize: 0x64 }
|
- { offset: 0x81CF, size: 0x8, addend: 0x0, symName: _logCount, symObjAddr: 0x3E00, symBinAddr: 0x12370, symSize: 0x0 }
|
||||||
- { offset: 0x7973, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$NSProcessInfo$systemUptime_block_invoke', symObjAddr: 0x6068, symBinAddr: 0xA068, symSize: 0x88 }
|
- { offset: 0x82ED, size: 0x8, addend: 0x0, symName: ___XSLogSetupLogWithFilePath_block_invoke, symObjAddr: 0x100, symBinAddr: 0x9CC4, symSize: 0x84 }
|
||||||
- { offset: 0x79DC, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$NSProcessInfo$physicalMemory_block_invoke', symObjAddr: 0x60F0, symBinAddr: 0xA0F0, symSize: 0x74 }
|
- { offset: 0x8337, size: 0x8, addend: 0x0, symName: _setupLogFileHandle, symObjAddr: 0x184, symBinAddr: 0x9D48, symSize: 0x180 }
|
||||||
- { offset: 0x7A45, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$NSProcessInfo$processorCount_block_invoke', symObjAddr: 0x6164, symBinAddr: 0xA164, symSize: 0x74 }
|
- { offset: 0x835B, size: 0x8, addend: 0x0, symName: _XSLogSetupLogWithFileName, symObjAddr: 0x368, symBinAddr: 0x9EC8, symSize: 0x94 }
|
||||||
- { offset: 0x7AB3, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$NSProcessInfo$operatingSystemVersion_block_invoke', symObjAddr: 0x61D8, symBinAddr: 0xA1D8, symSize: 0x64 }
|
- { offset: 0x838D, size: 0x8, addend: 0x0, symName: _getLogFilePath, symObjAddr: 0x3FC, symBinAddr: 0x9F5C, symSize: 0xEC }
|
||||||
- { offset: 0x7B04, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$UIWindow$safeAreaInsets_block_invoke', symObjAddr: 0x623C, symBinAddr: 0xA23C, symSize: 0x160 }
|
- { offset: 0x83DF, size: 0x8, addend: 0x0, symName: _XSLogRedirectNSLog, symObjAddr: 0x4E8, symBinAddr: 0xA048, symSize: 0xC0 }
|
||||||
- { offset: 0x7B81, size: 0x8, addend: 0x0, symName: _UIEdgeInsetsMake, symObjAddr: 0x639C, symBinAddr: 0xA39C, symSize: 0x4C }
|
- { offset: 0x8411, size: 0x8, addend: 0x0, symName: _XSLogMessage, symObjAddr: 0x5A8, symBinAddr: 0xA108, symSize: 0xFC }
|
||||||
- { offset: 0x7BE1, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$UIScreen$brightness_block_invoke', symObjAddr: 0x63E8, symBinAddr: 0xA3E8, symSize: 0x78 }
|
- { offset: 0x8452, size: 0x8, addend: 0x0, symName: ___XSLogMessage_block_invoke, symObjAddr: 0x6A4, symBinAddr: 0xA204, symSize: 0x2CC }
|
||||||
- { offset: 0x7C4F, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$UIScreen$bounds_block_invoke', symObjAddr: 0x6460, symBinAddr: 0xA460, symSize: 0x12C }
|
- { offset: 0x84DE, size: 0x8, addend: 0x0, symName: _checkAndRollLogFile, symObjAddr: 0x970, symBinAddr: 0xA4D0, symSize: 0x298 }
|
||||||
- { offset: 0x7CEB, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$UIScreen$scale_block_invoke', symObjAddr: 0x658C, symBinAddr: 0xA58C, symSize: 0x78 }
|
- { offset: 0x8CEF, size: 0x8, addend: 0x0, symName: '+[XHookSettingsManager sharedManager]', symObjAddr: 0x0, symBinAddr: 0xA768, symSize: 0x7C }
|
||||||
- { offset: 0x7D59, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$UIScreen$nativeBounds_block_invoke', symObjAddr: 0x6604, symBinAddr: 0xA604, symSize: 0x12C }
|
- { offset: 0x8CFC, size: 0x8, addend: 0x0, symName: '+[XHookSettingsManager sharedManager]', symObjAddr: 0x0, symBinAddr: 0xA768, symSize: 0x7C }
|
||||||
- { offset: 0x7DF5, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$AVAudioSession$outputVolume_block_invoke', symObjAddr: 0x6730, symBinAddr: 0xA730, symSize: 0x78 }
|
- { offset: 0x8D25, size: 0x8, addend: 0x0, symName: _sharedManager.manager, symObjAddr: 0x6DA8, symBinAddr: 0x12378, symSize: 0x0 }
|
||||||
- { offset: 0x7E63, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$UIScreenMode$size_block_invoke', symObjAddr: 0x67A8, symBinAddr: 0xA7A8, symSize: 0x118 }
|
- { offset: 0x8D3A, size: 0x8, addend: 0x0, symName: _sharedManager.onceToken, symObjAddr: 0x6DB0, symBinAddr: 0x12380, symSize: 0x0 }
|
||||||
- { offset: 0x7EFE, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$NSFileManager$attributesOfFileSystemForPath$error$_block_invoke', symObjAddr: 0x68C0, symBinAddr: 0xA8C0, symSize: 0xB0 }
|
- { offset: 0x9246, size: 0x8, addend: 0x0, symName: '___37+[XHookSettingsManager sharedManager]_block_invoke', symObjAddr: 0x7C, symBinAddr: 0xA7E4, symSize: 0x54 }
|
||||||
- { offset: 0x7F66, size: 0x8, addend: 0x0, symName: ___copy_helper_block_e8_32s, symObjAddr: 0x6970, symBinAddr: 0xA970, symSize: 0x38 }
|
- { offset: 0x926E, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager init]', symObjAddr: 0xD0, symBinAddr: 0xA838, symSize: 0xB0 }
|
||||||
- { offset: 0x7F8A, size: 0x8, addend: 0x0, symName: ___destroy_helper_block_e8_32s, symObjAddr: 0x69A8, symBinAddr: 0xA9A8, symSize: 0x2C }
|
- { offset: 0x92A4, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager resetToDefaults]', symObjAddr: 0x180, symBinAddr: 0xA8E8, symSize: 0x184 }
|
||||||
- { offset: 0x7FA6, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$NSFileManager$attributesOfFileSystemForPath$error$_block_invoke.252', symObjAddr: 0x69D4, symBinAddr: 0xA9D4, symSize: 0xB0 }
|
- { offset: 0x92D6, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager parseString:defaultValue:]', symObjAddr: 0x304, symBinAddr: 0xAA6C, symSize: 0xD8 }
|
||||||
- { offset: 0x800E, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$NSFileManager$fileExistsAtPath$_block_invoke', symObjAddr: 0x6A84, symBinAddr: 0xAA84, symSize: 0x9C }
|
- { offset: 0x9328, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager parseInteger:defaultValue:]', symObjAddr: 0x3DC, symBinAddr: 0xAB44, symSize: 0x100 }
|
||||||
- { offset: 0x8098, size: 0x8, addend: 0x0, symName: '____logos_meta_method$ohno$NSLocale$currentLocale_block_invoke', symObjAddr: 0x6B20, symBinAddr: 0xAB20, symSize: 0xB0 }
|
- { offset: 0x937A, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager parseFloat:defaultValue:]', symObjAddr: 0x4DC, symBinAddr: 0xAC44, symSize: 0x100 }
|
||||||
- { offset: 0x8106, size: 0x8, addend: 0x0, symName: '____logos_meta_method$ohno$NSLocale$systemLocale_block_invoke', symObjAddr: 0x6BD0, symBinAddr: 0xABD0, symSize: 0xB0 }
|
- { offset: 0x93CC, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager parseDouble:defaultValue:]', symObjAddr: 0x5DC, symBinAddr: 0xAD44, symSize: 0x100 }
|
||||||
- { offset: 0x8174, size: 0x8, addend: 0x0, symName: '____logos_meta_method$ohno$NSTimeZone$localTimeZone_block_invoke', symObjAddr: 0x6C80, symBinAddr: 0xAC80, symSize: 0xB4 }
|
- { offset: 0x941E, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager parseULL:defaultValue:]', symObjAddr: 0x6DC, symBinAddr: 0xAE44, symSize: 0x100 }
|
||||||
- { offset: 0x81E2, size: 0x8, addend: 0x0, symName: '____logos_meta_method$ohno$NSTimeZone$systemTimeZone_block_invoke', symObjAddr: 0x6D34, symBinAddr: 0xAD34, symSize: 0xB4 }
|
- { offset: 0x9470, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager parseUUID:]', symObjAddr: 0x7DC, symBinAddr: 0xAF44, symSize: 0xAC }
|
||||||
- { offset: 0x8250, size: 0x8, addend: 0x0, symName: '____logos_meta_method$ohno$NSTimeZone$defaultTimeZone_block_invoke', symObjAddr: 0x6DE8, symBinAddr: 0xADE8, symSize: 0xB4 }
|
- { offset: 0x94B4, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager parseDictionary:]', symObjAddr: 0x888, symBinAddr: 0xAFF0, symSize: 0xA4 }
|
||||||
- { offset: 0x82BE, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$UIStatusBarManager$statusBarFrame_block_invoke', symObjAddr: 0x6E9C, symBinAddr: 0xAE9C, symSize: 0xE0 }
|
- { offset: 0x94F8, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager parseArray:]', symObjAddr: 0x92C, symBinAddr: 0xB094, symSize: 0xA4 }
|
||||||
- { offset: 0x834A, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$NSMutableURLRequest$initWithURL$_block_invoke', symObjAddr: 0x6F7C, symBinAddr: 0xAF7C, symSize: 0x68 }
|
- { offset: 0x953C, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager loadSettingsFromPath:]', symObjAddr: 0x9D0, symBinAddr: 0xB138, symSize: 0x300 }
|
||||||
- { offset: 0x8395, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$NSMutableURLRequest$setValue$forHTTPHeaderField$_block_invoke', symObjAddr: 0x6FE4, symBinAddr: 0xAFE4, symSize: 0x64 }
|
- { offset: 0x95DD, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager parseSettings:]', symObjAddr: 0xCD0, symBinAddr: 0xB438, symSize: 0xAB4 }
|
||||||
- { offset: 0x83E6, size: 0x8, addend: 0x0, symName: '____logos_meta_method$ohno$NSURLSession$sessionWithConfiguration$_block_invoke', symObjAddr: 0x7048, symBinAddr: 0xB048, symSize: 0xDC }
|
- { offset: 0x962B, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager cleanup]', symObjAddr: 0x1784, symBinAddr: 0xBEEC, symSize: 0x2C }
|
||||||
- { offset: 0x8431, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$NSURLSession$dataTaskWithRequest$completionHandler$_block_invoke', symObjAddr: 0x7124, symBinAddr: 0xB124, symSize: 0x68 }
|
- { offset: 0x965D, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager shouldHookApp:]', symObjAddr: 0x17B0, symBinAddr: 0xBF18, symSize: 0xA8 }
|
||||||
- { offset: 0x847C, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$WKWebView$evaluateJavaScript$completionHandler$_block_invoke', symObjAddr: 0x718C, symBinAddr: 0xB18C, symSize: 0x64 }
|
- { offset: 0x96A1, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager isLoaded]', symObjAddr: 0x1858, symBinAddr: 0xBFC0, symSize: 0x20 }
|
||||||
- { offset: 0x84CD, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$WKWebView$setCustomUserAgent$_block_invoke', symObjAddr: 0x71F0, symBinAddr: 0xB1F0, symSize: 0x64 }
|
- { offset: 0x96D7, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager idfa]', symObjAddr: 0x1878, symBinAddr: 0xBFE0, symSize: 0x1C }
|
||||||
- { offset: 0x851E, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$WKWebView$customUserAgent_block_invoke', symObjAddr: 0x7254, symBinAddr: 0xB254, symSize: 0x64 }
|
- { offset: 0x970D, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager idfv]', symObjAddr: 0x1894, symBinAddr: 0xBFFC, symSize: 0x1C }
|
||||||
- { offset: 0x856F, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$CTTelephonyNetworkInfo$serviceCurrentRadioAccessTechnology_block_invoke', symObjAddr: 0x72B8, symBinAddr: 0xB2B8, symSize: 0x268 }
|
- { offset: 0x9743, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager deviceName]', symObjAddr: 0x18B0, symBinAddr: 0xC018, symSize: 0x1C }
|
||||||
- { offset: 0x8617, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$CTTelephonyNetworkInfo$serviceSubscriberCellularProviders_block_invoke', symObjAddr: 0x7520, symBinAddr: 0xB520, symSize: 0x36C }
|
- { offset: 0x9779, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager osVersion]', symObjAddr: 0x18CC, symBinAddr: 0xC034, symSize: 0x1C }
|
||||||
- { offset: 0x86BF, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$CMMotionManager$startGyroUpdatesToQueue$withHandler$_block_invoke', symObjAddr: 0x788C, symBinAddr: 0xB88C, symSize: 0x15C }
|
- { offset: 0x97AF, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager productStr]', symObjAddr: 0x18E8, symBinAddr: 0xC050, symSize: 0x1C }
|
||||||
- { offset: 0x8764, size: 0x8, addend: 0x0, symName: ___copy_helper_block_e8_32b, symObjAddr: 0x79E8, symBinAddr: 0xB9E8, symSize: 0x38 }
|
- { offset: 0x97E5, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager hwModel]', symObjAddr: 0x1904, symBinAddr: 0xC06C, symSize: 0x1C }
|
||||||
- { offset: 0x8788, size: 0x8, addend: 0x0, symName: _randomRadiansPerSecond, symObjAddr: 0x7A20, symBinAddr: 0xBA20, symSize: 0x44 }
|
- { offset: 0x981B, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager trackingStatus]', symObjAddr: 0x1920, symBinAddr: 0xC088, symSize: 0x1C }
|
||||||
- { offset: 0x87B2, size: 0x8, addend: 0x0, symName: '____logos_function$ohno$uname_block_invoke', symObjAddr: 0x7A64, symBinAddr: 0xBA64, symSize: 0xB0 }
|
- { offset: 0x9851, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager physicalMemory]', symObjAddr: 0x193C, symBinAddr: 0xC0A4, symSize: 0x1C }
|
||||||
- { offset: 0x881B, size: 0x8, addend: 0x0, symName: '____logos_function$ohno$sysctl_block_invoke', symObjAddr: 0x7B14, symBinAddr: 0xBB14, symSize: 0x78 }
|
- { offset: 0x9887, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager cpuCore]', symObjAddr: 0x1958, symBinAddr: 0xC0C0, symSize: 0x1C }
|
||||||
- { offset: 0x8883, size: 0x8, addend: 0x0, symName: '____logos_function$ohno$sysctl_block_invoke_2', symObjAddr: 0x7B8C, symBinAddr: 0xBB8C, symSize: 0x68 }
|
- { offset: 0x98BD, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager systemUptimeOffset]', symObjAddr: 0x1974, symBinAddr: 0xC0DC, symSize: 0x1C }
|
||||||
- { offset: 0x88D4, size: 0x8, addend: 0x0, symName: '____logos_function$ohno$sysctlbyname_block_invoke', symObjAddr: 0x7BF4, symBinAddr: 0xBBF4, symSize: 0xC0 }
|
- { offset: 0x98F3, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager kernBootTimeOffset]', symObjAddr: 0x1990, symBinAddr: 0xC0F8, symSize: 0x1C }
|
||||||
- { offset: 0x893A, size: 0x8, addend: 0x0, symName: '____logos_function$ohno$sysctlbyname_block_invoke_2', symObjAddr: 0x7CB4, symBinAddr: 0xBCB4, symSize: 0xC0 }
|
- { offset: 0x9929, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager batteryState]', symObjAddr: 0x19AC, symBinAddr: 0xC114, symSize: 0x1C }
|
||||||
- { offset: 0x89A0, size: 0x8, addend: 0x0, symName: '____logos_function$ohno$getifaddrs_block_invoke', symObjAddr: 0x7D74, symBinAddr: 0xBD74, symSize: 0x8C }
|
- { offset: 0x995F, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager batteryLevel]', symObjAddr: 0x19C8, symBinAddr: 0xC130, symSize: 0x1C }
|
||||||
- { offset: 0x89F1, size: 0x8, addend: 0x0, symName: _modifyInterfaceIP, symObjAddr: 0x7E00, symBinAddr: 0xBE00, symSize: 0x16C }
|
- { offset: 0x9995, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager screenBrightness]', symObjAddr: 0x19E4, symBinAddr: 0xC14C, symSize: 0x1C }
|
||||||
- { offset: 0x8A84, size: 0x8, addend: 0x0, symName: _createInterface, symObjAddr: 0x7F6C, symBinAddr: 0xBF6C, symSize: 0x3F4 }
|
- { offset: 0x99CB, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager screenScale]', symObjAddr: 0x1A00, symBinAddr: 0xC168, symSize: 0x1C }
|
||||||
- { offset: 0x8B2D, size: 0x8, addend: 0x0, symName: '__logos_function$ohno$UIAccessibilityIsClosedCaptioningEnabled', symObjAddr: 0x8360, symBinAddr: 0xC360, symSize: 0xC }
|
- { offset: 0x9A01, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager screenBounds]', symObjAddr: 0x1A1C, symBinAddr: 0xC184, symSize: 0x1C }
|
||||||
- { offset: 0x8B47, size: 0x8, addend: 0x0, symName: '__logos_function$ohno$UIAccessibilityIsMonoAudioEnabled', symObjAddr: 0x836C, symBinAddr: 0xC36C, symSize: 0xC }
|
- { offset: 0x9A37, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager safeAreaInsets]', symObjAddr: 0x1A38, symBinAddr: 0xC1A0, symSize: 0x1C }
|
||||||
- { offset: 0x8B61, size: 0x8, addend: 0x0, symName: _cleanup, symObjAddr: 0x8378, symBinAddr: 0xC378, symSize: 0x38 }
|
- { offset: 0x9A6D, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager diskSize]', symObjAddr: 0x1A54, symBinAddr: 0xC1BC, symSize: 0x1C }
|
||||||
- { offset: 0x8B77, size: 0x8, addend: 0x0, symName: ___GLOBAL_init_65535, symObjAddr: 0x8960, symBinAddr: 0xC3B0, symSize: 0x28 }
|
- { offset: 0x9AA3, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager diskFreeSize]', symObjAddr: 0x1A70, symBinAddr: 0xC1D8, symSize: 0x1C }
|
||||||
|
- { offset: 0x9AD9, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager outputVolume]', symObjAddr: 0x1A8C, symBinAddr: 0xC1F4, symSize: 0x1C }
|
||||||
|
- { offset: 0x9B0F, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager userAgent]', symObjAddr: 0x1AA8, symBinAddr: 0xC210, symSize: 0x1C }
|
||||||
|
- { offset: 0x9B45, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager networkInterfacesInfo]', symObjAddr: 0x1AC4, symBinAddr: 0xC22C, symSize: 0x1C }
|
||||||
|
- { offset: 0x9B7B, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager simInfo]', symObjAddr: 0x1AE0, symBinAddr: 0xC248, symSize: 0x1C }
|
||||||
|
- { offset: 0x9BB1, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager locale]', symObjAddr: 0x1AFC, symBinAddr: 0xC264, symSize: 0x1C }
|
||||||
|
- { offset: 0x9BE7, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager timeZone]', symObjAddr: 0x1B18, symBinAddr: 0xC280, symSize: 0x1C }
|
||||||
|
- { offset: 0x9C1D, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager apps]', symObjAddr: 0x1B34, symBinAddr: 0xC29C, symSize: 0x1C }
|
||||||
|
- { offset: 0x9C53, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager .cxx_destruct]', symObjAddr: 0x1B50, symBinAddr: 0xC2B8, symSize: 0x108 }
|
||||||
...
|
...
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
@ -2,184 +2,192 @@
|
|||||||
triple: 'arm64e-apple-darwin'
|
triple: 'arm64e-apple-darwin'
|
||||||
binary-path: '/Users/mac/workspaces/projects/ios-change/old-ios-hook/.theos/obj/debug/arm64e/OhNo.dylib'
|
binary-path: '/Users/mac/workspaces/projects/ios-change/old-ios-hook/.theos/obj/debug/arm64e/OhNo.dylib'
|
||||||
relocations:
|
relocations:
|
||||||
- { offset: 0x7D, size: 0x8, addend: 0x0, symName: _settings, symBinAddr: 0x14610, symSize: 0x0 }
|
- { offset: 0x51, size: 0x8, addend: 0x0, symName: '__logos_meta_orig$XHooks$ATTrackingManager$trackingAuthorizationStatus', symObjAddr: 0x1F4A0, symBinAddr: 0x14D00, symSize: 0x0 }
|
||||||
- { offset: 0xF0, size: 0x8, addend: 0x0, symName: '__logos_meta_orig$ohno$ATTrackingManager$trackingAuthorizationStatus', symObjAddr: 0x27998, symBinAddr: 0x14468, symSize: 0x0 }
|
- { offset: 0xE9, size: 0x8, addend: 0x0, symName: '__logos_meta_orig$XHooks$ATTrackingManager$requestTrackingAuthorizationWithCompletionHandler$', symObjAddr: 0x1F4A8, symBinAddr: 0x14D08, symSize: 0x0 }
|
||||||
- { offset: 0x163, size: 0x8, addend: 0x0, symName: '__logos_meta_orig$ohno$ATTrackingManager$requestTrackingAuthorizationWithCompletionHandler$', symObjAddr: 0x279A0, symBinAddr: 0x14470, symSize: 0x0 }
|
- { offset: 0x183, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$ASIdentifierManager$advertisingIdentifier', symObjAddr: 0x1F4B0, symBinAddr: 0x14D10, symSize: 0x0 }
|
||||||
- { offset: 0x1FD, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$ASIdentifierManager$advertisingIdentifier', symObjAddr: 0x279A8, symBinAddr: 0x14478, symSize: 0x0 }
|
- { offset: 0x218, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$ASIdentifierManager$isAdvertisingTrackingEnabled', symObjAddr: 0x1F4B8, symBinAddr: 0x14D18, symSize: 0x0 }
|
||||||
- { offset: 0x27B, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$ASIdentifierManager$isAdvertisingTrackingEnabled', symObjAddr: 0x279B0, symBinAddr: 0x14480, symSize: 0x0 }
|
- { offset: 0x254, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$UIDevice$identifierForVendor', symObjAddr: 0x1F4C0, symBinAddr: 0x14D20, symSize: 0x0 }
|
||||||
- { offset: 0x2B7, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIDevice$identifierForVendor', symObjAddr: 0x279B8, symBinAddr: 0x14488, symSize: 0x0 }
|
- { offset: 0x441, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$UIDevice$name', symObjAddr: 0x1F4C8, symBinAddr: 0x14D28, symSize: 0x0 }
|
||||||
- { offset: 0x492, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIDevice$name', symObjAddr: 0x279C0, symBinAddr: 0x14490, symSize: 0x0 }
|
- { offset: 0x46B, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$UIDevice$model', symObjAddr: 0x1F4D0, symBinAddr: 0x14D30, symSize: 0x0 }
|
||||||
- { offset: 0x4BC, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIDevice$model', symObjAddr: 0x279C8, symBinAddr: 0x14498, symSize: 0x0 }
|
- { offset: 0x480, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$UIDevice$localizedModel', symObjAddr: 0x1F4D8, symBinAddr: 0x14D38, symSize: 0x0 }
|
||||||
- { offset: 0x4D1, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIDevice$localizedModel', symObjAddr: 0x279D0, symBinAddr: 0x144A0, symSize: 0x0 }
|
- { offset: 0x495, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$UIDevice$systemName', symObjAddr: 0x1F4E0, symBinAddr: 0x14D40, symSize: 0x0 }
|
||||||
- { offset: 0x4E6, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIDevice$systemName', symObjAddr: 0x279D8, symBinAddr: 0x144A8, symSize: 0x0 }
|
- { offset: 0x4AA, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$UIDevice$systemVersion', symObjAddr: 0x1F4E8, symBinAddr: 0x14D48, symSize: 0x0 }
|
||||||
- { offset: 0x4FB, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIDevice$systemVersion', symObjAddr: 0x279E0, symBinAddr: 0x144B0, symSize: 0x0 }
|
- { offset: 0x4BF, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$UIDevice$batteryState', symObjAddr: 0x1F4F0, symBinAddr: 0x14D50, symSize: 0x0 }
|
||||||
- { offset: 0x510, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIDevice$batteryState', symObjAddr: 0x279E8, symBinAddr: 0x144B8, symSize: 0x0 }
|
- { offset: 0x4E9, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$UIDevice$batteryLevel', symObjAddr: 0x1F4F8, symBinAddr: 0x14D58, symSize: 0x0 }
|
||||||
- { offset: 0x53A, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIDevice$batteryLevel', symObjAddr: 0x279F0, symBinAddr: 0x144C0, symSize: 0x0 }
|
- { offset: 0x513, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$UIDevice$orientation', symObjAddr: 0x1F500, symBinAddr: 0x14D60, symSize: 0x0 }
|
||||||
- { offset: 0x564, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIDevice$orientation', symObjAddr: 0x279F8, symBinAddr: 0x144C8, symSize: 0x0 }
|
- { offset: 0x53D, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$NSProcessInfo$systemUptime', symObjAddr: 0x1F508, symBinAddr: 0x14D68, symSize: 0x0 }
|
||||||
- { offset: 0x58E, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$NSProcessInfo$systemUptime', symObjAddr: 0x27A00, symBinAddr: 0x144D0, symSize: 0x0 }
|
- { offset: 0x709, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$NSProcessInfo$physicalMemory', symObjAddr: 0x1F510, symBinAddr: 0x14D70, symSize: 0x0 }
|
||||||
- { offset: 0x738, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$NSProcessInfo$physicalMemory', symObjAddr: 0x27A08, symBinAddr: 0x144D8, symSize: 0x0 }
|
- { offset: 0x733, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$NSProcessInfo$processorCount', symObjAddr: 0x1F518, symBinAddr: 0x14D78, symSize: 0x0 }
|
||||||
- { offset: 0x762, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$NSProcessInfo$processorCount', symObjAddr: 0x27A10, symBinAddr: 0x144E0, symSize: 0x0 }
|
- { offset: 0x75D, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$NSProcessInfo$operatingSystemVersion', symObjAddr: 0x1F520, symBinAddr: 0x14D80, symSize: 0x0 }
|
||||||
- { offset: 0x78C, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$NSProcessInfo$operatingSystemVersion', symObjAddr: 0x27A18, symBinAddr: 0x144E8, symSize: 0x0 }
|
- { offset: 0x787, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$UIWindow$safeAreaInsets', symObjAddr: 0x1F528, symBinAddr: 0x14D88, symSize: 0x0 }
|
||||||
- { offset: 0x7B6, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIWindow$safeAreaInsets', symObjAddr: 0x27A20, symBinAddr: 0x144F0, symSize: 0x0 }
|
- { offset: 0x24B5, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$UIScreen$brightness', symObjAddr: 0x1F530, symBinAddr: 0x14D90, symSize: 0x0 }
|
||||||
- { offset: 0x24E4, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIScreen$brightness', symObjAddr: 0x27A28, symBinAddr: 0x144F8, symSize: 0x0 }
|
- { offset: 0x24E4, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$UIScreen$bounds', symObjAddr: 0x1F538, symBinAddr: 0x14D98, symSize: 0x0 }
|
||||||
- { offset: 0x2513, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIScreen$bounds', symObjAddr: 0x27A30, symBinAddr: 0x14500, symSize: 0x0 }
|
- { offset: 0x250E, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$UIScreen$scale', symObjAddr: 0x1F540, symBinAddr: 0x14DA0, symSize: 0x0 }
|
||||||
- { offset: 0x253D, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIScreen$scale', symObjAddr: 0x27A38, symBinAddr: 0x14508, symSize: 0x0 }
|
- { offset: 0x2523, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$UIScreen$nativeBounds', symObjAddr: 0x1F548, symBinAddr: 0x14DA8, symSize: 0x0 }
|
||||||
- { offset: 0x2552, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIScreen$nativeBounds', symObjAddr: 0x27A40, symBinAddr: 0x14510, symSize: 0x0 }
|
- { offset: 0x2538, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$UIScreen$isCaptured', symObjAddr: 0x1F550, symBinAddr: 0x14DB0, symSize: 0x0 }
|
||||||
- { offset: 0x2567, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIScreen$isCaptured', symObjAddr: 0x27A48, symBinAddr: 0x14518, symSize: 0x0 }
|
- { offset: 0x2562, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$UIScreen$mirroredScreen', symObjAddr: 0x1F558, symBinAddr: 0x14DB8, symSize: 0x0 }
|
||||||
- { offset: 0x2591, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIScreen$mirroredScreen', symObjAddr: 0x27A50, symBinAddr: 0x14520, symSize: 0x0 }
|
- { offset: 0x258C, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$UIScreenMode$size', symObjAddr: 0x1F560, symBinAddr: 0x14DC0, symSize: 0x0 }
|
||||||
- { offset: 0x25BB, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$AVAudioSession$outputVolume', symObjAddr: 0x27A58, symBinAddr: 0x14528, symSize: 0x0 }
|
- { offset: 0x25BB, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$UIStatusBarManager$statusBarFrame', symObjAddr: 0x1F568, symBinAddr: 0x14DC8, symSize: 0x0 }
|
||||||
- { offset: 0x25F5, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIScreenMode$size', symObjAddr: 0x27A60, symBinAddr: 0x14530, symSize: 0x0 }
|
- { offset: 0x2627, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$AVAudioSession$outputVolume', symObjAddr: 0x1F570, symBinAddr: 0x14DD0, symSize: 0x0 }
|
||||||
- { offset: 0x2624, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$NSFileManager$attributesOfFileSystemForPath$error$', symObjAddr: 0x27A68, symBinAddr: 0x14538, symSize: 0x0 }
|
- { offset: 0x299C, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$NSFileManager$attributesOfFileSystemForPath$error$', symObjAddr: 0x1F578, symBinAddr: 0x14DD8, symSize: 0x0 }
|
||||||
- { offset: 0x274E, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$NSFileManager$fileExistsAtPath$', symObjAddr: 0x27A70, symBinAddr: 0x14540, symSize: 0x0 }
|
- { offset: 0x2AC6, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$NSFileManager$fileExistsAtPath$', symObjAddr: 0x1F580, symBinAddr: 0x14DE0, symSize: 0x0 }
|
||||||
- { offset: 0x277D, size: 0x8, addend: 0x0, symName: '__logos_meta_orig$ohno$NSLocale$preferredLanguages', symObjAddr: 0x27A78, symBinAddr: 0x14548, symSize: 0x0 }
|
- { offset: 0x2AF5, size: 0x8, addend: 0x0, symName: '__logos_meta_orig$XHooks$NSLocale$preferredLanguages', symObjAddr: 0x1F588, symBinAddr: 0x14DE8, symSize: 0x0 }
|
||||||
- { offset: 0x27A7, size: 0x8, addend: 0x0, symName: '__logos_meta_orig$ohno$NSLocale$currentLocale', symObjAddr: 0x27A80, symBinAddr: 0x14550, symSize: 0x0 }
|
- { offset: 0x2B1F, size: 0x8, addend: 0x0, symName: '__logos_meta_orig$XHooks$NSLocale$currentLocale', symObjAddr: 0x1F590, symBinAddr: 0x14DF0, symSize: 0x0 }
|
||||||
- { offset: 0x27E6, size: 0x8, addend: 0x0, symName: '__logos_meta_orig$ohno$NSLocale$systemLocale', symObjAddr: 0x27A88, symBinAddr: 0x14558, symSize: 0x0 }
|
- { offset: 0x2B5E, size: 0x8, addend: 0x0, symName: '__logos_meta_orig$XHooks$NSLocale$systemLocale', symObjAddr: 0x1F598, symBinAddr: 0x14DF8, symSize: 0x0 }
|
||||||
- { offset: 0x27FB, size: 0x8, addend: 0x0, symName: '__logos_meta_orig$ohno$NSTimeZone$localTimeZone', symObjAddr: 0x27A90, symBinAddr: 0x14560, symSize: 0x0 }
|
- { offset: 0x2B73, size: 0x8, addend: 0x0, symName: '__logos_meta_orig$XHooks$NSTimeZone$localTimeZone', symObjAddr: 0x1F5A0, symBinAddr: 0x14E00, symSize: 0x0 }
|
||||||
- { offset: 0x2854, size: 0x8, addend: 0x0, symName: '__logos_meta_orig$ohno$NSTimeZone$systemTimeZone', symObjAddr: 0x27A98, symBinAddr: 0x14568, symSize: 0x0 }
|
- { offset: 0x2BCC, size: 0x8, addend: 0x0, symName: '__logos_meta_orig$XHooks$NSTimeZone$systemTimeZone', symObjAddr: 0x1F5A8, symBinAddr: 0x14E08, symSize: 0x0 }
|
||||||
- { offset: 0x2869, size: 0x8, addend: 0x0, symName: '__logos_meta_orig$ohno$NSTimeZone$defaultTimeZone', symObjAddr: 0x27AA0, symBinAddr: 0x14570, symSize: 0x0 }
|
- { offset: 0x2BE1, size: 0x8, addend: 0x0, symName: '__logos_meta_orig$XHooks$NSTimeZone$defaultTimeZone', symObjAddr: 0x1F5B0, symBinAddr: 0x14E10, symSize: 0x0 }
|
||||||
- { offset: 0x287E, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIStatusBarManager$statusBarFrame', symObjAddr: 0x27AA8, symBinAddr: 0x14578, symSize: 0x0 }
|
- { offset: 0x2BF6, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$NSMutableURLRequest$initWithURL$', symObjAddr: 0x1F5B8, symBinAddr: 0x14E18, symSize: 0x0 }
|
||||||
- { offset: 0x28EA, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$NSMutableURLRequest$initWithURL$', symObjAddr: 0x27AB0, symBinAddr: 0x14580, symSize: 0x0 }
|
- { offset: 0x2E93, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$NSMutableURLRequest$setValue$forHTTPHeaderField$', symObjAddr: 0x1F5C0, symBinAddr: 0x14E20, symSize: 0x0 }
|
||||||
- { offset: 0x2B87, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$NSMutableURLRequest$setValue$forHTTPHeaderField$', symObjAddr: 0x27AB8, symBinAddr: 0x14588, symSize: 0x0 }
|
- { offset: 0x2EC8, size: 0x8, addend: 0x0, symName: '__logos_meta_orig$XHooks$NSURLSession$sessionWithConfiguration$', symObjAddr: 0x1F5C8, symBinAddr: 0x14E28, symSize: 0x0 }
|
||||||
- { offset: 0x2BBC, size: 0x8, addend: 0x0, symName: '__logos_meta_orig$ohno$NSURLSession$sessionWithConfiguration$', symObjAddr: 0x27AC0, symBinAddr: 0x14590, symSize: 0x0 }
|
- { offset: 0x35FC, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$NSURLSession$dataTaskWithRequest$completionHandler$', symObjAddr: 0x1F5D0, symBinAddr: 0x14E30, symSize: 0x0 }
|
||||||
- { offset: 0x32F0, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$NSURLSession$dataTaskWithRequest$completionHandler$', symObjAddr: 0x27AC8, symBinAddr: 0x14598, symSize: 0x0 }
|
- { offset: 0x384E, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$WKWebView$evaluateJavaScript$completionHandler$', symObjAddr: 0x1F5D8, symBinAddr: 0x14E38, symSize: 0x0 }
|
||||||
- { offset: 0x3542, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$WKWebView$evaluateJavaScript$completionHandler$', symObjAddr: 0x27AD0, symBinAddr: 0x145A0, symSize: 0x0 }
|
- { offset: 0x54B2, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$WKWebView$setCustomUserAgent$', symObjAddr: 0x1F5E0, symBinAddr: 0x14E40, symSize: 0x0 }
|
||||||
- { offset: 0x51A6, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$WKWebView$setCustomUserAgent$', symObjAddr: 0x27AD8, symBinAddr: 0x145A8, symSize: 0x0 }
|
- { offset: 0x54DD, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$WKWebView$customUserAgent', symObjAddr: 0x1F5E8, symBinAddr: 0x14E48, symSize: 0x0 }
|
||||||
- { offset: 0x51D1, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$WKWebView$customUserAgent', symObjAddr: 0x27AE0, symBinAddr: 0x145B0, symSize: 0x0 }
|
- { offset: 0x5507, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$CTTelephonyNetworkInfo$serviceCurrentRadioAccessTechnology', symObjAddr: 0x1F5F0, symBinAddr: 0x14E50, symSize: 0x0 }
|
||||||
- { offset: 0x51FB, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$CTTelephonyNetworkInfo$serviceCurrentRadioAccessTechnology', symObjAddr: 0x27AE8, symBinAddr: 0x145B8, symSize: 0x0 }
|
- { offset: 0x56B7, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$CTTelephonyNetworkInfo$serviceSubscriberCellularProviders', symObjAddr: 0x1F5F8, symBinAddr: 0x14E58, symSize: 0x0 }
|
||||||
- { offset: 0x53AB, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$CTTelephonyNetworkInfo$serviceSubscriberCellularProviders', symObjAddr: 0x27AF0, symBinAddr: 0x145C0, symSize: 0x0 }
|
- { offset: 0x56CC, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$CMMotionManager$startGyroUpdatesToQueue$withHandler$', symObjAddr: 0x1F600, symBinAddr: 0x14E60, symSize: 0x0 }
|
||||||
- { offset: 0x53C0, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$CMMotionManager$startGyroUpdatesToQueue$withHandler$', symObjAddr: 0x27AF8, symBinAddr: 0x145C8, symSize: 0x0 }
|
- { offset: 0x5C18, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$uname', symObjAddr: 0x1F608, symBinAddr: 0x14E68, symSize: 0x0 }
|
||||||
- { offset: 0x590C, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$uname', symObjAddr: 0x27B00, symBinAddr: 0x145D0, symSize: 0x0 }
|
- { offset: 0x5C9A, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$sysctl', symObjAddr: 0x1F610, symBinAddr: 0x14E70, symSize: 0x0 }
|
||||||
- { offset: 0x598E, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$sysctl', symObjAddr: 0x27B08, symBinAddr: 0x145D8, symSize: 0x0 }
|
- { offset: 0x5CF3, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$sysctlbyname', symObjAddr: 0x1F618, symBinAddr: 0x14E78, symSize: 0x0 }
|
||||||
- { offset: 0x59E7, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$sysctlbyname', symObjAddr: 0x27B10, symBinAddr: 0x145E0, symSize: 0x0 }
|
- { offset: 0x5D2D, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$clock_gettime', symObjAddr: 0x1F620, symBinAddr: 0x14E80, symSize: 0x0 }
|
||||||
- { offset: 0x5A21, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$clock_gettime', symObjAddr: 0x27B18, symBinAddr: 0x145E8, symSize: 0x0 }
|
- { offset: 0x5DCD, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$getifaddrs', symObjAddr: 0x1F628, symBinAddr: 0x14E88, symSize: 0x0 }
|
||||||
- { offset: 0x5AC1, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$getifaddrs', symObjAddr: 0x27B20, symBinAddr: 0x145F0, symSize: 0x0 }
|
- { offset: 0x5EAB, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$SCNetworkReachabilityGetFlags', symObjAddr: 0x1F630, symBinAddr: 0x14E90, symSize: 0x0 }
|
||||||
- { offset: 0x5B9F, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$SCNetworkReachabilityGetFlags', symObjAddr: 0x27B28, symBinAddr: 0x145F8, symSize: 0x0 }
|
- { offset: 0x5F5C, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$UIAccessibilityIsClosedCaptioningEnabled', symObjAddr: 0x1F638, symBinAddr: 0x14E98, symSize: 0x0 }
|
||||||
- { offset: 0x5C50, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIAccessibilityIsClosedCaptioningEnabled', symObjAddr: 0x27B30, symBinAddr: 0x14600, symSize: 0x0 }
|
- { offset: 0x5F7E, size: 0x8, addend: 0x0, symName: '__logos_orig$XHooks$UIAccessibilityIsMonoAudioEnabled', symObjAddr: 0x1F640, symBinAddr: 0x14EA0, symSize: 0x0 }
|
||||||
- { offset: 0x5C72, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIAccessibilityIsMonoAudioEnabled', symObjAddr: 0x27B38, symBinAddr: 0x14608, symSize: 0x0 }
|
- { offset: 0x6166, size: 0x8, addend: 0x0, symName: _SetupXSLog, symObjAddr: 0x0, symBinAddr: 0x4000, symSize: 0x28 }
|
||||||
- { offset: 0x5E40, size: 0x8, addend: 0x0, symName: _str2uuid, symObjAddr: 0x0, symBinAddr: 0x4000, symSize: 0x78 }
|
- { offset: 0x617B, size: 0x8, addend: 0x0, symName: '-[CustomCMGyroData rotationRate]', symObjAddr: 0x28, symBinAddr: 0x4028, symSize: 0x48 }
|
||||||
- { offset: 0x5E68, size: 0x8, addend: 0x0, symName: _str2int, symObjAddr: 0x78, symBinAddr: 0x4078, symSize: 0x5C }
|
- { offset: 0x61B2, size: 0x8, addend: 0x0, symName: '-[CustomCMGyroData customRotationRate]', symObjAddr: 0x70, symBinAddr: 0x4070, symSize: 0x40 }
|
||||||
- { offset: 0x5E90, size: 0x8, addend: 0x0, symName: _str2float, symObjAddr: 0xD4, symBinAddr: 0x40D4, symSize: 0x58 }
|
- { offset: 0x61E9, size: 0x8, addend: 0x0, symName: '-[CustomCMGyroData setCustomRotationRate:]', symObjAddr: 0xB0, symBinAddr: 0x40B0, symSize: 0x40 }
|
||||||
- { offset: 0x5EB8, size: 0x8, addend: 0x0, symName: _str2double, symObjAddr: 0x12C, symBinAddr: 0x412C, symSize: 0x58 }
|
- { offset: 0x6228, size: 0x8, addend: 0x0, symName: __logosLocalCtor_e9c95796, symObjAddr: 0xF0, symBinAddr: 0x40F0, symSize: 0x1018 }
|
||||||
- { offset: 0x5EE0, size: 0x8, addend: 0x0, symName: _str2ull, symObjAddr: 0x184, symBinAddr: 0x4184, symSize: 0x5C }
|
- { offset: 0x64AB, size: 0x8, addend: 0x0, symName: '__logos_meta_method$XHooks$ATTrackingManager$trackingAuthorizationStatus', symObjAddr: 0x1108, symBinAddr: 0x5108, symSize: 0x84 }
|
||||||
- { offset: 0x5F08, size: 0x8, addend: 0x0, symName: _tryGetVal, symObjAddr: 0x1E0, symBinAddr: 0x41E0, symSize: 0x198 }
|
- { offset: 0x6515, size: 0x8, addend: 0x0, symName: '__logos_meta_method$XHooks$ATTrackingManager$requestTrackingAuthorizationWithCompletionHandler$', symObjAddr: 0x118C, symBinAddr: 0x518C, symSize: 0x16C }
|
||||||
- { offset: 0x5F62, size: 0x8, addend: 0x0, symName: _str2chars, symObjAddr: 0x378, symBinAddr: 0x4378, symSize: 0x70 }
|
- { offset: 0x6577, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$ASIdentifierManager$advertisingIdentifier', symObjAddr: 0x12F8, symBinAddr: 0x52F8, symSize: 0x124 }
|
||||||
- { offset: 0x5F98, size: 0x8, addend: 0x0, symName: '-[CustomCMGyroData rotationRate]', symObjAddr: 0x3E8, symBinAddr: 0x43E8, symSize: 0x48 }
|
- { offset: 0x65BB, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$ASIdentifierManager$isAdvertisingTrackingEnabled', symObjAddr: 0x141C, symBinAddr: 0x541C, symSize: 0x74 }
|
||||||
- { offset: 0x5FCF, size: 0x8, addend: 0x0, symName: '-[CustomCMGyroData customRotationRate]', symObjAddr: 0x430, symBinAddr: 0x4430, symSize: 0x40 }
|
- { offset: 0x65FF, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$UIDevice$identifierForVendor', symObjAddr: 0x1490, symBinAddr: 0x5490, symSize: 0x124 }
|
||||||
- { offset: 0x6006, size: 0x8, addend: 0x0, symName: '-[CustomCMGyroData setCustomRotationRate:]', symObjAddr: 0x470, symBinAddr: 0x4470, symSize: 0x40 }
|
- { offset: 0x6643, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$UIDevice$name', symObjAddr: 0x15B4, symBinAddr: 0x55B4, symSize: 0x124 }
|
||||||
- { offset: 0x6045, size: 0x8, addend: 0x0, symName: __logosLocalCtor_e2ef2056, symObjAddr: 0x4B0, symBinAddr: 0x44B0, symSize: 0xFEC }
|
- { offset: 0x6687, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$UIDevice$model', symObjAddr: 0x16D8, symBinAddr: 0x56D8, symSize: 0x38 }
|
||||||
- { offset: 0x62E8, size: 0x8, addend: 0x0, symName: '__logos_meta_method$ohno$ATTrackingManager$trackingAuthorizationStatus', symObjAddr: 0x149C, symBinAddr: 0x549C, symSize: 0x14C }
|
- { offset: 0x66BD, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$UIDevice$localizedModel', symObjAddr: 0x1710, symBinAddr: 0x5710, symSize: 0x38 }
|
||||||
- { offset: 0x6349, size: 0x8, addend: 0x0, symName: '__logos_meta_method$ohno$ATTrackingManager$requestTrackingAuthorizationWithCompletionHandler$', symObjAddr: 0x15E8, symBinAddr: 0x55E8, symSize: 0x1F0 }
|
- { offset: 0x66F3, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$UIDevice$systemName', symObjAddr: 0x1748, symBinAddr: 0x5748, symSize: 0x38 }
|
||||||
- { offset: 0x63B0, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$ASIdentifierManager$advertisingIdentifier', symObjAddr: 0x17D8, symBinAddr: 0x57D8, symSize: 0x198 }
|
- { offset: 0x6729, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$UIDevice$systemVersion', symObjAddr: 0x1780, symBinAddr: 0x5780, symSize: 0x124 }
|
||||||
- { offset: 0x63F9, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$ASIdentifierManager$isAdvertisingTrackingEnabled', symObjAddr: 0x1970, symBinAddr: 0x5970, symSize: 0x110 }
|
- { offset: 0x676D, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$UIDevice$batteryState', symObjAddr: 0x18A4, symBinAddr: 0x58A4, symSize: 0xA0 }
|
||||||
- { offset: 0x6442, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIDevice$identifierForVendor', symObjAddr: 0x1A80, symBinAddr: 0x5A80, symSize: 0x198 }
|
- { offset: 0x67B1, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$UIDevice$batteryLevel', symObjAddr: 0x1944, symBinAddr: 0x5944, symSize: 0xA4 }
|
||||||
- { offset: 0x648B, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIDevice$name', symObjAddr: 0x1C18, symBinAddr: 0x5C18, symSize: 0x198 }
|
- { offset: 0x67F5, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$UIDevice$orientation', symObjAddr: 0x19E8, symBinAddr: 0x59E8, symSize: 0x18 }
|
||||||
- { offset: 0x64D4, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIDevice$model', symObjAddr: 0x1DB0, symBinAddr: 0x5DB0, symSize: 0x38 }
|
- { offset: 0x682B, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$NSProcessInfo$systemUptime', symObjAddr: 0x1A00, symBinAddr: 0x5A00, symSize: 0xA8 }
|
||||||
- { offset: 0x650A, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIDevice$localizedModel', symObjAddr: 0x1DE8, symBinAddr: 0x5DE8, symSize: 0x38 }
|
- { offset: 0x687D, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$NSProcessInfo$physicalMemory', symObjAddr: 0x1AA8, symBinAddr: 0x5AA8, symSize: 0xA4 }
|
||||||
- { offset: 0x6540, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIDevice$systemName', symObjAddr: 0x1E20, symBinAddr: 0x5E20, symSize: 0x38 }
|
- { offset: 0x68C1, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$NSProcessInfo$processorCount', symObjAddr: 0x1B4C, symBinAddr: 0x5B4C, symSize: 0xA4 }
|
||||||
- { offset: 0x6576, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIDevice$systemVersion', symObjAddr: 0x1E58, symBinAddr: 0x5E58, symSize: 0x198 }
|
- { offset: 0x6905, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$NSProcessInfo$operatingSystemVersion', symObjAddr: 0x1BF0, symBinAddr: 0x5BF0, symSize: 0x46C }
|
||||||
- { offset: 0x65BF, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIDevice$batteryState', symObjAddr: 0x1FF0, symBinAddr: 0x5FF0, symSize: 0x10C }
|
- { offset: 0x6987, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$UIWindow$safeAreaInsets', symObjAddr: 0x205C, symBinAddr: 0x605C, symSize: 0x174 }
|
||||||
- { offset: 0x6608, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIDevice$batteryLevel', symObjAddr: 0x20FC, symBinAddr: 0x60FC, symSize: 0x10C }
|
- { offset: 0x6A04, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$UIScreen$brightness', symObjAddr: 0x21D0, symBinAddr: 0x61D0, symSize: 0xA4 }
|
||||||
- { offset: 0x6651, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIDevice$orientation', symObjAddr: 0x2208, symBinAddr: 0x6208, symSize: 0x18 }
|
- { offset: 0x6A48, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$UIScreen$bounds', symObjAddr: 0x2274, symBinAddr: 0x6274, symSize: 0x178 }
|
||||||
- { offset: 0x6687, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$NSProcessInfo$systemUptime', symObjAddr: 0x2220, symBinAddr: 0x6220, symSize: 0x10C }
|
- { offset: 0x6AB7, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$UIScreen$scale', symObjAddr: 0x23EC, symBinAddr: 0x63EC, symSize: 0xA4 }
|
||||||
- { offset: 0x66D0, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$NSProcessInfo$physicalMemory', symObjAddr: 0x232C, symBinAddr: 0x632C, symSize: 0x12C }
|
- { offset: 0x6AFB, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$UIScreen$nativeBounds', symObjAddr: 0x2490, symBinAddr: 0x6490, symSize: 0x178 }
|
||||||
- { offset: 0x6719, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$NSProcessInfo$processorCount', symObjAddr: 0x2458, symBinAddr: 0x6458, symSize: 0x10C }
|
- { offset: 0x6B6A, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$UIScreen$isCaptured', symObjAddr: 0x2608, symBinAddr: 0x6608, symSize: 0x1C }
|
||||||
- { offset: 0x6766, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$NSProcessInfo$operatingSystemVersion', symObjAddr: 0x2564, symBinAddr: 0x6564, symSize: 0x644 }
|
- { offset: 0x6BA0, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$UIScreen$mirroredScreen', symObjAddr: 0x2624, symBinAddr: 0x6624, symSize: 0x18 }
|
||||||
- { offset: 0x67F4, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIWindow$safeAreaInsets', symObjAddr: 0x2BA8, symBinAddr: 0x6BA8, symSize: 0x230 }
|
- { offset: 0x6BD6, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$UIScreenMode$size', symObjAddr: 0x263C, symBinAddr: 0x663C, symSize: 0x158 }
|
||||||
- { offset: 0x6842, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIScreen$brightness', symObjAddr: 0x2DD8, symBinAddr: 0x6DD8, symSize: 0x10C }
|
- { offset: 0x6C44, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$UIStatusBarManager$statusBarFrame', symObjAddr: 0x2794, symBinAddr: 0x6794, symSize: 0x194 }
|
||||||
- { offset: 0x688F, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIScreen$bounds', symObjAddr: 0x2EE4, symBinAddr: 0x6EE4, symSize: 0x148 }
|
- { offset: 0x6CB3, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$AVAudioSession$outputVolume', symObjAddr: 0x2928, symBinAddr: 0x6928, symSize: 0xA4 }
|
||||||
- { offset: 0x68DD, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIScreen$scale', symObjAddr: 0x302C, symBinAddr: 0x702C, symSize: 0x10C }
|
- { offset: 0x6CFB, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$NSFileManager$attributesOfFileSystemForPath$error$', symObjAddr: 0x29CC, symBinAddr: 0x69CC, symSize: 0x294 }
|
||||||
- { offset: 0x692A, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIScreen$nativeBounds', symObjAddr: 0x3138, symBinAddr: 0x7138, symSize: 0x148 }
|
- { offset: 0x6D9D, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$NSFileManager$fileExistsAtPath$', symObjAddr: 0x2C60, symBinAddr: 0x6C60, symSize: 0x398 }
|
||||||
- { offset: 0x6978, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIScreen$isCaptured', symObjAddr: 0x3280, symBinAddr: 0x7280, symSize: 0x1C }
|
- { offset: 0x6E08, size: 0x8, addend: 0x0, symName: '__logos_meta_method$XHooks$NSLocale$preferredLanguages', symObjAddr: 0x2FF8, symBinAddr: 0x6FF8, symSize: 0x80 }
|
||||||
- { offset: 0x69B1, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIScreen$mirroredScreen', symObjAddr: 0x329C, symBinAddr: 0x729C, symSize: 0x18 }
|
- { offset: 0x6E41, size: 0x8, addend: 0x0, symName: '__logos_meta_method$XHooks$NSLocale$currentLocale', symObjAddr: 0x3078, symBinAddr: 0x7078, symSize: 0xE8 }
|
||||||
- { offset: 0x69EA, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$AVAudioSession$outputVolume', symObjAddr: 0x32B4, symBinAddr: 0x72B4, symSize: 0x10C }
|
- { offset: 0x6E89, size: 0x8, addend: 0x0, symName: '__logos_meta_method$XHooks$NSLocale$systemLocale', symObjAddr: 0x3160, symBinAddr: 0x7160, symSize: 0xE8 }
|
||||||
- { offset: 0x6A37, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIScreenMode$size', symObjAddr: 0x33C0, symBinAddr: 0x73C0, symSize: 0x120 }
|
- { offset: 0x6ED1, size: 0x8, addend: 0x0, symName: '__logos_meta_method$XHooks$NSTimeZone$localTimeZone', symObjAddr: 0x3248, symBinAddr: 0x7248, symSize: 0xEC }
|
||||||
- { offset: 0x6A85, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$NSFileManager$attributesOfFileSystemForPath$error$', symObjAddr: 0x34E0, symBinAddr: 0x74E0, symSize: 0x28C }
|
- { offset: 0x6F19, size: 0x8, addend: 0x0, symName: '__logos_meta_method$XHooks$NSTimeZone$systemTimeZone', symObjAddr: 0x3334, symBinAddr: 0x7334, symSize: 0xEC }
|
||||||
- { offset: 0x6B09, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$NSFileManager$fileExistsAtPath$', symObjAddr: 0x376C, symBinAddr: 0x776C, symSize: 0x3BC }
|
- { offset: 0x6F61, size: 0x8, addend: 0x0, symName: '__logos_meta_method$XHooks$NSTimeZone$defaultTimeZone', symObjAddr: 0x3420, symBinAddr: 0x7420, symSize: 0xEC }
|
||||||
- { offset: 0x6B74, size: 0x8, addend: 0x0, symName: '__logos_meta_method$ohno$NSLocale$preferredLanguages', symObjAddr: 0x3B28, symBinAddr: 0x7B28, symSize: 0x8C }
|
- { offset: 0x6FA9, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$NSMutableURLRequest$initWithURL$', symObjAddr: 0x350C, symBinAddr: 0x750C, symSize: 0x140 }
|
||||||
- { offset: 0x6BAD, size: 0x8, addend: 0x0, symName: '__logos_meta_method$ohno$NSLocale$currentLocale', symObjAddr: 0x3BB4, symBinAddr: 0x7BB4, symSize: 0x178 }
|
- { offset: 0x7006, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$NSMutableURLRequest$setValue$forHTTPHeaderField$', symObjAddr: 0x364C, symBinAddr: 0x764C, symSize: 0x140 }
|
||||||
- { offset: 0x6BFA, size: 0x8, addend: 0x0, symName: '__logos_meta_method$ohno$NSLocale$systemLocale', symObjAddr: 0x3D2C, symBinAddr: 0x7D2C, symSize: 0x178 }
|
- { offset: 0x707D, size: 0x8, addend: 0x0, symName: '__logos_meta_method$XHooks$NSURLSession$sessionWithConfiguration$', symObjAddr: 0x378C, symBinAddr: 0x778C, symSize: 0x174 }
|
||||||
- { offset: 0x6C47, size: 0x8, addend: 0x0, symName: '__logos_meta_method$ohno$NSTimeZone$localTimeZone', symObjAddr: 0x3EA4, symBinAddr: 0x7EA4, symSize: 0x178 }
|
- { offset: 0x70D4, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$NSURLSession$dataTaskWithRequest$completionHandler$', symObjAddr: 0x3900, symBinAddr: 0x7900, symSize: 0x148 }
|
||||||
- { offset: 0x6C94, size: 0x8, addend: 0x0, symName: '__logos_meta_method$ohno$NSTimeZone$systemTimeZone', symObjAddr: 0x401C, symBinAddr: 0x801C, symSize: 0x178 }
|
- { offset: 0x7149, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$WKWebView$evaluateJavaScript$completionHandler$', symObjAddr: 0x3A48, symBinAddr: 0x7A48, symSize: 0x104 }
|
||||||
- { offset: 0x6CE1, size: 0x8, addend: 0x0, symName: '__logos_meta_method$ohno$NSTimeZone$defaultTimeZone', symObjAddr: 0x4194, symBinAddr: 0x8194, symSize: 0x178 }
|
- { offset: 0x71AB, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$WKWebView$setCustomUserAgent$', symObjAddr: 0x3B4C, symBinAddr: 0x7B4C, symSize: 0xF0 }
|
||||||
- { offset: 0x6D2E, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIStatusBarManager$statusBarFrame', symObjAddr: 0x430C, symBinAddr: 0x830C, symSize: 0x148 }
|
- { offset: 0x71FE, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$WKWebView$customUserAgent', symObjAddr: 0x3C3C, symBinAddr: 0x7C3C, symSize: 0x124 }
|
||||||
- { offset: 0x6D7C, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$NSMutableURLRequest$initWithURL$', symObjAddr: 0x4454, symBinAddr: 0x8454, symSize: 0x150 }
|
- { offset: 0x7246, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$CTTelephonyNetworkInfo$serviceCurrentRadioAccessTechnology', symObjAddr: 0x3D60, symBinAddr: 0x7D60, symSize: 0x3C0 }
|
||||||
- { offset: 0x6DC4, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$NSMutableURLRequest$setValue$forHTTPHeaderField$', symObjAddr: 0x45A4, symBinAddr: 0x85A4, symSize: 0x1BC }
|
- { offset: 0x72ED, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$CTTelephonyNetworkInfo$serviceSubscriberCellularProviders', symObjAddr: 0x4120, symBinAddr: 0x8120, symSize: 0x6DC }
|
||||||
- { offset: 0x6E2C, size: 0x8, addend: 0x0, symName: '__logos_meta_method$ohno$NSURLSession$sessionWithConfiguration$', symObjAddr: 0x4760, symBinAddr: 0x8760, symSize: 0x120 }
|
- { offset: 0x7394, size: 0x8, addend: 0x0, symName: '__logos_method$XHooks$CMMotionManager$startGyroUpdatesToQueue$withHandler$', symObjAddr: 0x47FC, symBinAddr: 0x87FC, symSize: 0x16C }
|
||||||
- { offset: 0x6E74, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$NSURLSession$dataTaskWithRequest$completionHandler$', symObjAddr: 0x4880, symBinAddr: 0x8880, symSize: 0x160 }
|
- { offset: 0x73F6, size: 0x8, addend: 0x0, symName: '__logos_function$XHooks$uname', symObjAddr: 0x4968, symBinAddr: 0x8968, symSize: 0x100 }
|
||||||
- { offset: 0x6EDA, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$WKWebView$evaluateJavaScript$completionHandler$', symObjAddr: 0x49E0, symBinAddr: 0x89E0, symSize: 0x21C }
|
- { offset: 0x745C, size: 0x8, addend: 0x0, symName: '__logos_function$XHooks$sysctl', symObjAddr: 0x4A68, symBinAddr: 0x8A68, symSize: 0x354 }
|
||||||
- { offset: 0x6F42, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$WKWebView$setCustomUserAgent$', symObjAddr: 0x4BFC, symBinAddr: 0x8BFC, symSize: 0x170 }
|
- { offset: 0x7559, size: 0x8, addend: 0x0, symName: '__logos_function$XHooks$sysctlbyname', symObjAddr: 0x4DBC, symBinAddr: 0x8DBC, symSize: 0x2B8 }
|
||||||
- { offset: 0x6F9B, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$WKWebView$customUserAgent', symObjAddr: 0x4D6C, symBinAddr: 0x8D6C, symSize: 0x16C }
|
- { offset: 0x768F, size: 0x8, addend: 0x0, symName: '__logos_function$XHooks$clock_gettime', symObjAddr: 0x5074, symBinAddr: 0x9074, symSize: 0x54 }
|
||||||
- { offset: 0x6FE8, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$CTTelephonyNetworkInfo$serviceCurrentRadioAccessTechnology', symObjAddr: 0x4ED8, symBinAddr: 0x8ED8, symSize: 0x19C }
|
- { offset: 0x76D7, size: 0x8, addend: 0x0, symName: '__logos_function$XHooks$getifaddrs', symObjAddr: 0x50C8, symBinAddr: 0x90C8, symSize: 0x618 }
|
||||||
- { offset: 0x703F, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$CTTelephonyNetworkInfo$serviceSubscriberCellularProviders', symObjAddr: 0x5074, symBinAddr: 0x9074, symSize: 0x19C }
|
- { offset: 0x7857, size: 0x8, addend: 0x0, symName: '__logos_function$XHooks$SCNetworkReachabilityGetFlags', symObjAddr: 0x56E0, symBinAddr: 0x96E0, symSize: 0x7C }
|
||||||
- { offset: 0x7096, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$CMMotionManager$startGyroUpdatesToQueue$withHandler$', symObjAddr: 0x5210, symBinAddr: 0x9210, symSize: 0x16C }
|
- { offset: 0x789F, size: 0x8, addend: 0x0, symName: __logosLocalDtor_2e2d985c, symObjAddr: 0x575C, symBinAddr: 0x975C, symSize: 0x68 }
|
||||||
- { offset: 0x70F8, size: 0x8, addend: 0x0, symName: '__logos_function$ohno$uname', symObjAddr: 0x537C, symBinAddr: 0x937C, symSize: 0xA4 }
|
- { offset: 0x78E3, size: 0x8, addend: 0x0, symName: '____logos_meta_method$XHooks$ATTrackingManager$requestTrackingAuthorizationWithCompletionHandler$_block_invoke', symObjAddr: 0x57C4, symBinAddr: 0x97C4, symSize: 0x58 }
|
||||||
- { offset: 0x7131, size: 0x8, addend: 0x0, symName: '__logos_function$ohno$sysctl', symObjAddr: 0x5420, symBinAddr: 0x9420, symSize: 0x458 }
|
- { offset: 0x792D, size: 0x8, addend: 0x0, symName: ___copy_helper_block_e8_32b, symObjAddr: 0x581C, symBinAddr: 0x981C, symSize: 0x3C }
|
||||||
- { offset: 0x721E, size: 0x8, addend: 0x0, symName: '__logos_function$ohno$sysctlbyname', symObjAddr: 0x5878, symBinAddr: 0x9878, symSize: 0x47C }
|
- { offset: 0x7951, size: 0x8, addend: 0x0, symName: ___destroy_helper_block_e8_32s, symObjAddr: 0x5858, symBinAddr: 0x9858, symSize: 0x30 }
|
||||||
- { offset: 0x731C, size: 0x8, addend: 0x0, symName: '__logos_function$ohno$clock_gettime', symObjAddr: 0x5CF4, symBinAddr: 0x9CF4, symSize: 0x60 }
|
- { offset: 0x796D, size: 0x8, addend: 0x0, symName: _UIEdgeInsetsMake, symObjAddr: 0x5888, symBinAddr: 0x9888, symSize: 0x4C }
|
||||||
- { offset: 0x7364, size: 0x8, addend: 0x0, symName: '__logos_function$ohno$getifaddrs', symObjAddr: 0x5D54, symBinAddr: 0x9D54, symSize: 0x6C4 }
|
- { offset: 0x79CD, size: 0x8, addend: 0x0, symName: _CGRectMake, symObjAddr: 0x58D4, symBinAddr: 0x98D4, symSize: 0x4C }
|
||||||
- { offset: 0x74EA, size: 0x8, addend: 0x0, symName: '__logos_function$ohno$SCNetworkReachabilityGetFlags', symObjAddr: 0x6418, symBinAddr: 0xA418, symSize: 0x88 }
|
- { offset: 0x7A33, size: 0x8, addend: 0x0, symName: _CGSizeMake, symObjAddr: 0x5920, symBinAddr: 0x9920, symSize: 0x2C }
|
||||||
- { offset: 0x7532, size: 0x8, addend: 0x0, symName: __logosLocalDtor_9db639d6, symObjAddr: 0x64A0, symBinAddr: 0xA4A0, symSize: 0x2C }
|
- { offset: 0x7A7B, size: 0x8, addend: 0x0, symName: '____logos_method$XHooks$NSFileManager$fileExistsAtPath$_block_invoke', symObjAddr: 0x594C, symBinAddr: 0x994C, symSize: 0xA0 }
|
||||||
- { offset: 0x7576, size: 0x8, addend: 0x0, symName: '____logos_meta_method$ohno$ATTrackingManager$trackingAuthorizationStatus_block_invoke', symObjAddr: 0x64CC, symBinAddr: 0xA4CC, symSize: 0x84 }
|
- { offset: 0x7B05, size: 0x8, addend: 0x0, symName: ___copy_helper_block_e8_32s, symObjAddr: 0x59EC, symBinAddr: 0x99EC, symSize: 0x3C }
|
||||||
- { offset: 0x75C3, size: 0x8, addend: 0x0, symName: ___copy_helper_block_e8_32r, symObjAddr: 0x6550, symBinAddr: 0xA550, symSize: 0x3C }
|
- { offset: 0x7B29, size: 0x8, addend: 0x0, symName: '____logos_method$XHooks$CMMotionManager$startGyroUpdatesToQueue$withHandler$_block_invoke', symObjAddr: 0x5A28, symBinAddr: 0x9A28, symSize: 0x114 }
|
||||||
- { offset: 0x75E7, size: 0x8, addend: 0x0, symName: ___destroy_helper_block_e8_32r, symObjAddr: 0x658C, symBinAddr: 0xA58C, symSize: 0x30 }
|
- { offset: 0x7BAF, size: 0x8, addend: 0x0, symName: _randomRadiansPerSecond, symObjAddr: 0x5B3C, symBinAddr: 0x9B3C, symSize: 0x48 }
|
||||||
- { offset: 0x7603, size: 0x8, addend: 0x0, symName: '____logos_meta_method$ohno$ATTrackingManager$requestTrackingAuthorizationWithCompletionHandler$_block_invoke', symObjAddr: 0x65BC, symBinAddr: 0xA5BC, symSize: 0x84 }
|
- { offset: 0x7BD9, size: 0x8, addend: 0x0, symName: _modifyInterfaceIP, symObjAddr: 0x5B84, symBinAddr: 0x9B84, symSize: 0x144 }
|
||||||
- { offset: 0x7650, size: 0x8, addend: 0x0, symName: '____logos_meta_method$ohno$ATTrackingManager$requestTrackingAuthorizationWithCompletionHandler$_block_invoke_2', symObjAddr: 0x6640, symBinAddr: 0xA640, symSize: 0x60 }
|
- { offset: 0x7C6C, size: 0x8, addend: 0x0, symName: _createInterface, symObjAddr: 0x5CC8, symBinAddr: 0x9CC8, symSize: 0x3CC }
|
||||||
- { offset: 0x76A0, size: 0x8, addend: 0x0, symName: ___copy_helper_block_e8_32b40r, symObjAddr: 0x66A0, symBinAddr: 0xA6A0, symSize: 0x5C }
|
- { offset: 0x7D15, size: 0x8, addend: 0x0, symName: '__logos_function$XHooks$UIAccessibilityIsClosedCaptioningEnabled', symObjAddr: 0x6094, symBinAddr: 0xA094, symSize: 0xC }
|
||||||
- { offset: 0x76C4, size: 0x8, addend: 0x0, symName: ___destroy_helper_block_e8_32s40r, symObjAddr: 0x66FC, symBinAddr: 0xA6FC, symSize: 0x44 }
|
- { offset: 0x7D2F, size: 0x8, addend: 0x0, symName: '__logos_function$XHooks$UIAccessibilityIsMonoAudioEnabled', symObjAddr: 0x60A0, symBinAddr: 0xA0A0, symSize: 0xC }
|
||||||
- { offset: 0x76E0, size: 0x8, addend: 0x0, symName: ___Block_byref_object_copy_, symObjAddr: 0x6740, symBinAddr: 0xA740, symSize: 0x58 }
|
- { offset: 0x7D49, size: 0x8, addend: 0x0, symName: ___GLOBAL_init_65535, symObjAddr: 0x6284, symBinAddr: 0xA0AC, symSize: 0x34 }
|
||||||
- { offset: 0x7704, size: 0x8, addend: 0x0, symName: ___Block_byref_object_dispose_, symObjAddr: 0x6798, symBinAddr: 0xA798, symSize: 0x30 }
|
- { offset: 0x7FCF, size: 0x8, addend: 0x0, symName: _XSLogSetupLogWithFilePath, symObjAddr: 0x0, symBinAddr: 0xA0E0, symSize: 0x11C }
|
||||||
- { offset: 0x7720, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$ASIdentifierManager$advertisingIdentifier_block_invoke', symObjAddr: 0x67C8, symBinAddr: 0xA7C8, symSize: 0x84 }
|
- { offset: 0x7FE8, size: 0x8, addend: 0x0, symName: _kLogFilePath, symObjAddr: 0xEA8, symBinAddr: 0x14CF0, symSize: 0x0 }
|
||||||
- { offset: 0x776D, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$ASIdentifierManager$isAdvertisingTrackingEnabled_block_invoke', symObjAddr: 0x684C, symBinAddr: 0xA84C, symSize: 0xA0 }
|
- { offset: 0x804F, size: 0x8, addend: 0x0, symName: _XSLogSetupLogWithFilePath, symObjAddr: 0x0, symBinAddr: 0xA0E0, symSize: 0x11C }
|
||||||
- { offset: 0x77D6, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$UIDevice$identifierForVendor_block_invoke', symObjAddr: 0x68EC, symBinAddr: 0xA8EC, symSize: 0x84 }
|
- { offset: 0x8070, size: 0x8, addend: 0x0, symName: _XSLogSetupLogWithFilePath.onceToken, symObjAddr: 0x3E60, symBinAddr: 0x14EA8, symSize: 0x0 }
|
||||||
- { offset: 0x7823, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$UIDevice$name_block_invoke', symObjAddr: 0x6970, symBinAddr: 0xA970, symSize: 0x68 }
|
- { offset: 0x8115, size: 0x8, addend: 0x0, symName: _logFileHandle, symObjAddr: 0x3E70, symBinAddr: 0x14EB8, symSize: 0x0 }
|
||||||
- { offset: 0x7870, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$UIDevice$systemVersion_block_invoke', symObjAddr: 0x69D8, symBinAddr: 0xA9D8, symSize: 0x68 }
|
- { offset: 0x8195, size: 0x8, addend: 0x0, symName: _logQueue, symObjAddr: 0x3E68, symBinAddr: 0x14EB0, symSize: 0x0 }
|
||||||
- { offset: 0x78BD, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$UIDevice$batteryState_block_invoke', symObjAddr: 0x6A40, symBinAddr: 0xAA40, symSize: 0x74 }
|
- { offset: 0x81BA, size: 0x8, addend: 0x0, symName: _kMaxFileSize, symObjAddr: 0xEB0, symBinAddr: 0x14CF8, symSize: 0x0 }
|
||||||
- { offset: 0x7926, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$UIDevice$batteryLevel_block_invoke', symObjAddr: 0x6AB4, symBinAddr: 0xAAB4, symSize: 0x68 }
|
- { offset: 0x81CF, size: 0x8, addend: 0x0, symName: _logCount, symObjAddr: 0x3E78, symBinAddr: 0x14EC0, symSize: 0x0 }
|
||||||
- { offset: 0x7973, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$NSProcessInfo$systemUptime_block_invoke', symObjAddr: 0x6B1C, symBinAddr: 0xAB1C, symSize: 0x8C }
|
- { offset: 0x82ED, size: 0x8, addend: 0x0, symName: ___XSLogSetupLogWithFilePath_block_invoke, symObjAddr: 0x11C, symBinAddr: 0xA1FC, symSize: 0x88 }
|
||||||
- { offset: 0x79DC, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$NSProcessInfo$physicalMemory_block_invoke', symObjAddr: 0x6BA8, symBinAddr: 0xABA8, symSize: 0x78 }
|
- { offset: 0x8337, size: 0x8, addend: 0x0, symName: _setupLogFileHandle, symObjAddr: 0x1A4, symBinAddr: 0xA284, symSize: 0x184 }
|
||||||
- { offset: 0x7A45, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$NSProcessInfo$processorCount_block_invoke', symObjAddr: 0x6C20, symBinAddr: 0xAC20, symSize: 0x78 }
|
- { offset: 0x835B, size: 0x8, addend: 0x0, symName: _XSLogSetupLogWithFileName, symObjAddr: 0x394, symBinAddr: 0xA408, symSize: 0x98 }
|
||||||
- { offset: 0x7AB3, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$NSProcessInfo$operatingSystemVersion_block_invoke', symObjAddr: 0x6C98, symBinAddr: 0xAC98, symSize: 0x68 }
|
- { offset: 0x838D, size: 0x8, addend: 0x0, symName: _getLogFilePath, symObjAddr: 0x42C, symBinAddr: 0xA4A0, symSize: 0x100 }
|
||||||
- { offset: 0x7B04, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$UIWindow$safeAreaInsets_block_invoke', symObjAddr: 0x6D00, symBinAddr: 0xAD00, symSize: 0x164 }
|
- { offset: 0x83DF, size: 0x8, addend: 0x0, symName: _XSLogRedirectNSLog, symObjAddr: 0x52C, symBinAddr: 0xA5A0, symSize: 0xC4 }
|
||||||
- { offset: 0x7B81, size: 0x8, addend: 0x0, symName: _UIEdgeInsetsMake, symObjAddr: 0x6E64, symBinAddr: 0xAE64, symSize: 0x4C }
|
- { offset: 0x8411, size: 0x8, addend: 0x0, symName: _XSLogMessage, symObjAddr: 0x5F0, symBinAddr: 0xA664, symSize: 0x118 }
|
||||||
- { offset: 0x7BE1, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$UIScreen$brightness_block_invoke', symObjAddr: 0x6EB0, symBinAddr: 0xAEB0, symSize: 0x7C }
|
- { offset: 0x8452, size: 0x8, addend: 0x0, symName: ___XSLogMessage_block_invoke, symObjAddr: 0x708, symBinAddr: 0xA77C, symSize: 0x2D0 }
|
||||||
- { offset: 0x7C4F, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$UIScreen$bounds_block_invoke', symObjAddr: 0x6F2C, symBinAddr: 0xAF2C, symSize: 0x130 }
|
- { offset: 0x84DE, size: 0x8, addend: 0x0, symName: _checkAndRollLogFile, symObjAddr: 0x9D8, symBinAddr: 0xAA4C, symSize: 0x29C }
|
||||||
- { offset: 0x7CEB, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$UIScreen$scale_block_invoke', symObjAddr: 0x705C, symBinAddr: 0xB05C, symSize: 0x7C }
|
- { offset: 0x8CEF, size: 0x8, addend: 0x0, symName: '+[XHookSettingsManager sharedManager]', symObjAddr: 0x0, symBinAddr: 0xACE8, symSize: 0x90 }
|
||||||
- { offset: 0x7D59, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$UIScreen$nativeBounds_block_invoke', symObjAddr: 0x70D8, symBinAddr: 0xB0D8, symSize: 0x130 }
|
- { offset: 0x8CFC, size: 0x8, addend: 0x0, symName: '+[XHookSettingsManager sharedManager]', symObjAddr: 0x0, symBinAddr: 0xACE8, symSize: 0x90 }
|
||||||
- { offset: 0x7DF5, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$AVAudioSession$outputVolume_block_invoke', symObjAddr: 0x7208, symBinAddr: 0xB208, symSize: 0x7C }
|
- { offset: 0x8D25, size: 0x8, addend: 0x0, symName: _sharedManager.manager, symObjAddr: 0x6E40, symBinAddr: 0x14EC8, symSize: 0x0 }
|
||||||
- { offset: 0x7E63, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$UIScreenMode$size_block_invoke', symObjAddr: 0x7284, symBinAddr: 0xB284, symSize: 0x11C }
|
- { offset: 0x8D3A, size: 0x8, addend: 0x0, symName: _sharedManager.onceToken, symObjAddr: 0x6E48, symBinAddr: 0x14ED0, symSize: 0x0 }
|
||||||
- { offset: 0x7EFE, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$NSFileManager$attributesOfFileSystemForPath$error$_block_invoke', symObjAddr: 0x73A0, symBinAddr: 0xB3A0, symSize: 0xB4 }
|
- { offset: 0x9246, size: 0x8, addend: 0x0, symName: '___37+[XHookSettingsManager sharedManager]_block_invoke', symObjAddr: 0x90, symBinAddr: 0xAD78, symSize: 0x58 }
|
||||||
- { offset: 0x7F66, size: 0x8, addend: 0x0, symName: ___copy_helper_block_e8_32s, symObjAddr: 0x7454, symBinAddr: 0xB454, symSize: 0x3C }
|
- { offset: 0x926E, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager init]', symObjAddr: 0xE8, symBinAddr: 0xADD0, symSize: 0xB4 }
|
||||||
- { offset: 0x7F8A, size: 0x8, addend: 0x0, symName: ___destroy_helper_block_e8_32s, symObjAddr: 0x7490, symBinAddr: 0xB490, symSize: 0x30 }
|
- { offset: 0x92A4, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager resetToDefaults]', symObjAddr: 0x19C, symBinAddr: 0xAE84, symSize: 0x188 }
|
||||||
- { offset: 0x7FA6, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$NSFileManager$attributesOfFileSystemForPath$error$_block_invoke.315', symObjAddr: 0x74C0, symBinAddr: 0xB4C0, symSize: 0xB4 }
|
- { offset: 0x92D6, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager parseString:defaultValue:]', symObjAddr: 0x324, symBinAddr: 0xB00C, symSize: 0xEC }
|
||||||
- { offset: 0x800E, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$NSFileManager$fileExistsAtPath$_block_invoke', symObjAddr: 0x7574, symBinAddr: 0xB574, symSize: 0xA0 }
|
- { offset: 0x9328, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager parseInteger:defaultValue:]', symObjAddr: 0x410, symBinAddr: 0xB0F8, symSize: 0x104 }
|
||||||
- { offset: 0x8098, size: 0x8, addend: 0x0, symName: '____logos_meta_method$ohno$NSLocale$currentLocale_block_invoke', symObjAddr: 0x7614, symBinAddr: 0xB614, symSize: 0xB4 }
|
- { offset: 0x937A, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager parseFloat:defaultValue:]', symObjAddr: 0x514, symBinAddr: 0xB1FC, symSize: 0x104 }
|
||||||
- { offset: 0x8106, size: 0x8, addend: 0x0, symName: '____logos_meta_method$ohno$NSLocale$systemLocale_block_invoke', symObjAddr: 0x76C8, symBinAddr: 0xB6C8, symSize: 0xB4 }
|
- { offset: 0x93CC, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager parseDouble:defaultValue:]', symObjAddr: 0x618, symBinAddr: 0xB300, symSize: 0x104 }
|
||||||
- { offset: 0x8174, size: 0x8, addend: 0x0, symName: '____logos_meta_method$ohno$NSTimeZone$localTimeZone_block_invoke', symObjAddr: 0x777C, symBinAddr: 0xB77C, symSize: 0xB8 }
|
- { offset: 0x941E, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager parseULL:defaultValue:]', symObjAddr: 0x71C, symBinAddr: 0xB404, symSize: 0x104 }
|
||||||
- { offset: 0x81E2, size: 0x8, addend: 0x0, symName: '____logos_meta_method$ohno$NSTimeZone$systemTimeZone_block_invoke', symObjAddr: 0x7834, symBinAddr: 0xB834, symSize: 0xB8 }
|
- { offset: 0x9470, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager parseUUID:]', symObjAddr: 0x820, symBinAddr: 0xB508, symSize: 0xC0 }
|
||||||
- { offset: 0x8250, size: 0x8, addend: 0x0, symName: '____logos_meta_method$ohno$NSTimeZone$defaultTimeZone_block_invoke', symObjAddr: 0x78EC, symBinAddr: 0xB8EC, symSize: 0xB8 }
|
- { offset: 0x94B4, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager parseDictionary:]', symObjAddr: 0x8E0, symBinAddr: 0xB5C8, symSize: 0xB8 }
|
||||||
- { offset: 0x82BE, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$UIStatusBarManager$statusBarFrame_block_invoke', symObjAddr: 0x79A4, symBinAddr: 0xB9A4, symSize: 0xE4 }
|
- { offset: 0x94F8, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager parseArray:]', symObjAddr: 0x998, symBinAddr: 0xB680, symSize: 0xB8 }
|
||||||
- { offset: 0x834A, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$NSMutableURLRequest$initWithURL$_block_invoke', symObjAddr: 0x7A88, symBinAddr: 0xBA88, symSize: 0x6C }
|
- { offset: 0x953C, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager loadSettingsFromPath:]', symObjAddr: 0xA50, symBinAddr: 0xB738, symSize: 0x304 }
|
||||||
- { offset: 0x8395, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$NSMutableURLRequest$setValue$forHTTPHeaderField$_block_invoke', symObjAddr: 0x7AF4, symBinAddr: 0xBAF4, symSize: 0x68 }
|
- { offset: 0x95DD, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager parseSettings:]', symObjAddr: 0xD54, symBinAddr: 0xBA3C, symSize: 0xAB8 }
|
||||||
- { offset: 0x83E6, size: 0x8, addend: 0x0, symName: '____logos_meta_method$ohno$NSURLSession$sessionWithConfiguration$_block_invoke', symObjAddr: 0x7B5C, symBinAddr: 0xBB5C, symSize: 0xE0 }
|
- { offset: 0x962B, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager cleanup]', symObjAddr: 0x180C, symBinAddr: 0xC4F4, symSize: 0x30 }
|
||||||
- { offset: 0x8431, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$NSURLSession$dataTaskWithRequest$completionHandler$_block_invoke', symObjAddr: 0x7C3C, symBinAddr: 0xBC3C, symSize: 0x6C }
|
- { offset: 0x965D, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager shouldHookApp:]', symObjAddr: 0x183C, symBinAddr: 0xC524, symSize: 0xAC }
|
||||||
- { offset: 0x847C, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$WKWebView$evaluateJavaScript$completionHandler$_block_invoke', symObjAddr: 0x7CA8, symBinAddr: 0xBCA8, symSize: 0x68 }
|
- { offset: 0x96A1, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager isLoaded]', symObjAddr: 0x18E8, symBinAddr: 0xC5D0, symSize: 0x20 }
|
||||||
- { offset: 0x84CD, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$WKWebView$setCustomUserAgent$_block_invoke', symObjAddr: 0x7D10, symBinAddr: 0xBD10, symSize: 0x68 }
|
- { offset: 0x96D7, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager idfa]', symObjAddr: 0x1908, symBinAddr: 0xC5F0, symSize: 0x1C }
|
||||||
- { offset: 0x851E, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$WKWebView$customUserAgent_block_invoke', symObjAddr: 0x7D78, symBinAddr: 0xBD78, symSize: 0x68 }
|
- { offset: 0x970D, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager idfv]', symObjAddr: 0x1924, symBinAddr: 0xC60C, symSize: 0x1C }
|
||||||
- { offset: 0x856F, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$CTTelephonyNetworkInfo$serviceCurrentRadioAccessTechnology_block_invoke', symObjAddr: 0x7DE0, symBinAddr: 0xBDE0, symSize: 0x26C }
|
- { offset: 0x9743, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager deviceName]', symObjAddr: 0x1940, symBinAddr: 0xC628, symSize: 0x1C }
|
||||||
- { offset: 0x8617, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$CTTelephonyNetworkInfo$serviceSubscriberCellularProviders_block_invoke', symObjAddr: 0x804C, symBinAddr: 0xC04C, symSize: 0x370 }
|
- { offset: 0x9779, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager osVersion]', symObjAddr: 0x195C, symBinAddr: 0xC644, symSize: 0x1C }
|
||||||
- { offset: 0x86BF, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$CMMotionManager$startGyroUpdatesToQueue$withHandler$_block_invoke', symObjAddr: 0x83BC, symBinAddr: 0xC3BC, symSize: 0x164 }
|
- { offset: 0x97AF, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager productStr]', symObjAddr: 0x1978, symBinAddr: 0xC660, symSize: 0x1C }
|
||||||
- { offset: 0x8764, size: 0x8, addend: 0x0, symName: ___copy_helper_block_e8_32b, symObjAddr: 0x8520, symBinAddr: 0xC520, symSize: 0x3C }
|
- { offset: 0x97E5, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager hwModel]', symObjAddr: 0x1994, symBinAddr: 0xC67C, symSize: 0x1C }
|
||||||
- { offset: 0x8788, size: 0x8, addend: 0x0, symName: _randomRadiansPerSecond, symObjAddr: 0x855C, symBinAddr: 0xC55C, symSize: 0x48 }
|
- { offset: 0x981B, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager trackingStatus]', symObjAddr: 0x19B0, symBinAddr: 0xC698, symSize: 0x1C }
|
||||||
- { offset: 0x87B2, size: 0x8, addend: 0x0, symName: '____logos_function$ohno$uname_block_invoke', symObjAddr: 0x85A4, symBinAddr: 0xC5A4, symSize: 0xB4 }
|
- { offset: 0x9851, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager physicalMemory]', symObjAddr: 0x19CC, symBinAddr: 0xC6B4, symSize: 0x1C }
|
||||||
- { offset: 0x881B, size: 0x8, addend: 0x0, symName: '____logos_function$ohno$sysctl_block_invoke', symObjAddr: 0x8658, symBinAddr: 0xC658, symSize: 0x7C }
|
- { offset: 0x9887, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager cpuCore]', symObjAddr: 0x19E8, symBinAddr: 0xC6D0, symSize: 0x1C }
|
||||||
- { offset: 0x8883, size: 0x8, addend: 0x0, symName: '____logos_function$ohno$sysctl_block_invoke_2', symObjAddr: 0x86D4, symBinAddr: 0xC6D4, symSize: 0x6C }
|
- { offset: 0x98BD, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager systemUptimeOffset]', symObjAddr: 0x1A04, symBinAddr: 0xC6EC, symSize: 0x1C }
|
||||||
- { offset: 0x88D4, size: 0x8, addend: 0x0, symName: '____logos_function$ohno$sysctlbyname_block_invoke', symObjAddr: 0x8740, symBinAddr: 0xC740, symSize: 0xC4 }
|
- { offset: 0x98F3, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager kernBootTimeOffset]', symObjAddr: 0x1A20, symBinAddr: 0xC708, symSize: 0x1C }
|
||||||
- { offset: 0x893A, size: 0x8, addend: 0x0, symName: '____logos_function$ohno$sysctlbyname_block_invoke_2', symObjAddr: 0x8804, symBinAddr: 0xC804, symSize: 0xC4 }
|
- { offset: 0x9929, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager batteryState]', symObjAddr: 0x1A3C, symBinAddr: 0xC724, symSize: 0x1C }
|
||||||
- { offset: 0x89A0, size: 0x8, addend: 0x0, symName: '____logos_function$ohno$getifaddrs_block_invoke', symObjAddr: 0x88C8, symBinAddr: 0xC8C8, symSize: 0x90 }
|
- { offset: 0x995F, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager batteryLevel]', symObjAddr: 0x1A58, symBinAddr: 0xC740, symSize: 0x1C }
|
||||||
- { offset: 0x89F1, size: 0x8, addend: 0x0, symName: _modifyInterfaceIP, symObjAddr: 0x8958, symBinAddr: 0xC958, symSize: 0x170 }
|
- { offset: 0x9995, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager screenBrightness]', symObjAddr: 0x1A74, symBinAddr: 0xC75C, symSize: 0x1C }
|
||||||
- { offset: 0x8A84, size: 0x8, addend: 0x0, symName: _createInterface, symObjAddr: 0x8AC8, symBinAddr: 0xCAC8, symSize: 0x3F8 }
|
- { offset: 0x99CB, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager screenScale]', symObjAddr: 0x1A90, symBinAddr: 0xC778, symSize: 0x1C }
|
||||||
- { offset: 0x8B2D, size: 0x8, addend: 0x0, symName: '__logos_function$ohno$UIAccessibilityIsClosedCaptioningEnabled', symObjAddr: 0x8EC0, symBinAddr: 0xCEC0, symSize: 0xC }
|
- { offset: 0x9A01, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager screenBounds]', symObjAddr: 0x1AAC, symBinAddr: 0xC794, symSize: 0x1C }
|
||||||
- { offset: 0x8B47, size: 0x8, addend: 0x0, symName: '__logos_function$ohno$UIAccessibilityIsMonoAudioEnabled', symObjAddr: 0x8ECC, symBinAddr: 0xCECC, symSize: 0xC }
|
- { offset: 0x9A37, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager safeAreaInsets]', symObjAddr: 0x1AC8, symBinAddr: 0xC7B0, symSize: 0x1C }
|
||||||
- { offset: 0x8B61, size: 0x8, addend: 0x0, symName: _cleanup, symObjAddr: 0x8ED8, symBinAddr: 0xCED8, symSize: 0x3C }
|
- { offset: 0x9A6D, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager diskSize]', symObjAddr: 0x1AE4, symBinAddr: 0xC7CC, symSize: 0x1C }
|
||||||
- { offset: 0x8B77, size: 0x8, addend: 0x0, symName: ___GLOBAL_init_65535, symObjAddr: 0x94F0, symBinAddr: 0xCF14, symSize: 0x34 }
|
- { offset: 0x9AA3, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager diskFreeSize]', symObjAddr: 0x1B00, symBinAddr: 0xC7E8, symSize: 0x1C }
|
||||||
|
- { offset: 0x9AD9, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager outputVolume]', symObjAddr: 0x1B1C, symBinAddr: 0xC804, symSize: 0x1C }
|
||||||
|
- { offset: 0x9B0F, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager userAgent]', symObjAddr: 0x1B38, symBinAddr: 0xC820, symSize: 0x1C }
|
||||||
|
- { offset: 0x9B45, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager networkInterfacesInfo]', symObjAddr: 0x1B54, symBinAddr: 0xC83C, symSize: 0x1C }
|
||||||
|
- { offset: 0x9B7B, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager simInfo]', symObjAddr: 0x1B70, symBinAddr: 0xC858, symSize: 0x1C }
|
||||||
|
- { offset: 0x9BB1, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager locale]', symObjAddr: 0x1B8C, symBinAddr: 0xC874, symSize: 0x1C }
|
||||||
|
- { offset: 0x9BE7, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager timeZone]', symObjAddr: 0x1BA8, symBinAddr: 0xC890, symSize: 0x1C }
|
||||||
|
- { offset: 0x9C1D, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager apps]', symObjAddr: 0x1BC4, symBinAddr: 0xC8AC, symSize: 0x1C }
|
||||||
|
- { offset: 0x9C53, size: 0x8, addend: 0x0, symName: '-[XHookSettingsManager .cxx_destruct]', symObjAddr: 0x1BE0, symBinAddr: 0xC8C8, symSize: 0x10C }
|
||||||
...
|
...
|
||||||
|
|||||||
@ -1 +1 @@
|
|||||||
68
|
117
|
||||||
@ -10,7 +10,7 @@ TWEAK_NAME = AppRunMan
|
|||||||
|
|
||||||
AppRunMan_FRAMEWORKS = CoreLocation CFNetwork CoreTelephony Security UIKit IOSurface JavaScriptCore network
|
AppRunMan_FRAMEWORKS = CoreLocation CFNetwork CoreTelephony Security UIKit IOSurface JavaScriptCore network
|
||||||
AppRunMan_PRIVATE_FRAMEWORKS = IOKit
|
AppRunMan_PRIVATE_FRAMEWORKS = IOKit
|
||||||
AppRunMan_FILES = Tweak.x $(wildcard server/*.m) $(wildcard server/GCD/*.m)
|
AppRunMan_FILES = Tweak.x XSLog.m $(wildcard server/*.m) $(wildcard server/GCD/*.m)
|
||||||
AppRunMan_LDFLAGS = -v
|
AppRunMan_LDFLAGS = -v
|
||||||
AppRunMan_CFLAGS = -Wno-error -Wno-module-import-in-extern-c -fobjc-arc
|
AppRunMan_CFLAGS = -Wno-error -Wno-module-import-in-extern-c -fobjc-arc
|
||||||
|
|
||||||
|
|||||||
@ -4,13 +4,28 @@
|
|||||||
#import <SpringBoard/SBApplication.h>
|
#import <SpringBoard/SBApplication.h>
|
||||||
#import <SpringBoard/SBWorkspace.h>
|
#import <SpringBoard/SBWorkspace.h>
|
||||||
#import <SpringBoard/SBApplicationController.h>
|
#import <SpringBoard/SBApplicationController.h>
|
||||||
|
#import <unistd.h> // 为了 getpid()
|
||||||
|
|
||||||
#import <UIKit/UIKit.h>
|
#import <UIKit/UIKit.h>
|
||||||
#import <objc/runtime.h>
|
#import <objc/runtime.h>
|
||||||
|
|
||||||
#import "server/MySimpleServer.h"
|
#import "server/MySimpleServer.h"
|
||||||
#import "server/FloatingWindow.h"
|
#import "server/FloatingWindow.h"
|
||||||
|
#import "XSLog.h"
|
||||||
|
|
||||||
|
__attribute__((constructor)) static void SetupXSLog() {
|
||||||
|
XSLogSetupLogWithFilePath(@"/var/mobile/Documents/AppRunMain.log", 50 * 1024 * 1024);
|
||||||
|
XSLogRedirectNSLog();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 一次性服务器启动封装
|
||||||
|
static void startServerOnce(void) {
|
||||||
|
static dispatch_once_t onceToken;
|
||||||
|
dispatch_once(&onceToken, ^{
|
||||||
|
NSLog(@"[AppRunMan] start app server (pid=%d)", getpid());
|
||||||
|
startSimpleServer();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
@interface UIWindow (FloatingWindow)
|
@interface UIWindow (FloatingWindow)
|
||||||
@end
|
@end
|
||||||
@ -35,8 +50,6 @@
|
|||||||
objc_setAssociatedObject(self, @selector(addFloatingWindow), floatingWindow, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
|
objc_setAssociatedObject(self, @selector(addFloatingWindow), floatingWindow, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
%group all
|
%group all
|
||||||
@ -47,17 +60,18 @@
|
|||||||
{
|
{
|
||||||
%orig;
|
%orig;
|
||||||
|
|
||||||
// 延迟启动服务器,让系统UI完全加载
|
// 延迟启动服务器,让系统UI完全加载
|
||||||
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)),
|
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)),
|
||||||
dispatch_get_main_queue(), ^{
|
dispatch_get_main_queue(), ^{
|
||||||
startSimpleServer();
|
// 改为一次性启动
|
||||||
|
startServerOnce();
|
||||||
});
|
});
|
||||||
|
|
||||||
@autoreleasepool {
|
@autoreleasepool {
|
||||||
// 延迟添加悬浮窗,给系统UI足够的启动时间
|
// 延迟添加悬浮窗,给系统UI足够的启动时间
|
||||||
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)),
|
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)),
|
||||||
dispatch_get_main_queue(), ^{
|
dispatch_get_main_queue(), ^{
|
||||||
// 添加保护机制
|
// 添加保护机制
|
||||||
@try {
|
@try {
|
||||||
if (@available(iOS 13.0, *)) {
|
if (@available(iOS 13.0, *)) {
|
||||||
// iOS 13+ 使用 UIWindowScene
|
// iOS 13+ 使用 UIWindowScene
|
||||||
@ -95,7 +109,6 @@
|
|||||||
// 清理悬浮窗
|
// 清理悬浮窗
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
%end
|
%end
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -109,15 +122,16 @@
|
|||||||
return dict;
|
return dict;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
%end
|
%end
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
%end
|
%end
|
||||||
|
|
||||||
|
%ctor {
|
||||||
%ctor{
|
// 使用一次性保护,避免 dylib 被重复装载时重复执行
|
||||||
NSLog(@"start app server");
|
static dispatch_once_t onceToken;
|
||||||
%init(all);
|
dispatch_once(&onceToken, ^{
|
||||||
|
NSLog(@"[AppRunMan] %ctor init (pid=%d)", getpid());
|
||||||
|
%init(all);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
22
AppRunMan/XSLog.h
Normal file
22
AppRunMan/XSLog.h
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
|
||||||
|
/// @param logFileName 日志文件名
|
||||||
|
/// @param maxFileSize 日志文件最大大小(字节),超过此大小将创建新文件
|
||||||
|
void XSLogSetupLogWithFileName(NSString *logFileName, unsigned long long maxFileSize);
|
||||||
|
|
||||||
|
/// @param logFilePath 日志文件路径
|
||||||
|
/// @param maxFileSize 日志文件最大大小(字节),超过此大小将创建新文件
|
||||||
|
void XSLogSetupLogWithFilePath(NSString *logFilePath, unsigned long long maxFileSize);
|
||||||
|
|
||||||
|
|
||||||
|
void XSLogMessage(NSString *format, ...) __attribute__((format(NSString, 1, 2)));
|
||||||
|
|
||||||
|
void XSLogRedirectNSLog(void);
|
||||||
|
|
||||||
|
// 定义一个宏,方便替换NSLog
|
||||||
|
#define XSLog(format, ...) XSLogMessage((format), ##__VA_ARGS__)
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
||||||
162
AppRunMan/XSLog.m
Normal file
162
AppRunMan/XSLog.m
Normal file
@ -0,0 +1,162 @@
|
|||||||
|
#import "XSLog.h"
|
||||||
|
|
||||||
|
static NSString *kLogFilePath = @"app.log";
|
||||||
|
static unsigned long long kMaxFileSize = 10 * 1024 * 1024; // 10 MB
|
||||||
|
static NSFileHandle *logFileHandle;
|
||||||
|
static dispatch_queue_t logQueue;
|
||||||
|
static int logCount = 0; // 用于控制滚动检查频率
|
||||||
|
static const int kLogCheckFrequency = 100; // 每100条日志检查一次文件大小
|
||||||
|
|
||||||
|
// 内部函数声明
|
||||||
|
static void setupLogFileHandle(NSString *logFilePath);
|
||||||
|
static void checkAndRollLogFile(NSString *logFilePath);
|
||||||
|
static NSString *getLogFilePath(NSString *logFileName);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void XSLogSetupLogWithFilePath(NSString *logFilePath,
|
||||||
|
unsigned long long maxFileSize) {
|
||||||
|
static dispatch_once_t onceToken;
|
||||||
|
dispatch_once(&onceToken, ^{
|
||||||
|
kLogFilePath = logFilePath;
|
||||||
|
kMaxFileSize = maxFileSize;
|
||||||
|
logQueue = dispatch_queue_create("com.yourcompany.app.logQueue",
|
||||||
|
DISPATCH_QUEUE_SERIAL);
|
||||||
|
|
||||||
|
// 初始化文件句柄
|
||||||
|
setupLogFileHandle(logFilePath);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void XSLogSetupLogWithFileName(NSString *logFileName,
|
||||||
|
unsigned long long maxFileSize) {
|
||||||
|
kLogFilePath = getLogFilePath(logFileName);
|
||||||
|
XSLogSetupLogWithFilePath(kLogFilePath,maxFileSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
static NSString *getLogFilePath(NSString *logFileName) {
|
||||||
|
// 获取Documents目录路径
|
||||||
|
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
|
||||||
|
NSUserDomainMask, YES);
|
||||||
|
NSString *documentsDirectory = [paths firstObject];
|
||||||
|
NSString *logFilePath =
|
||||||
|
[documentsDirectory stringByAppendingPathComponent:logFileName];
|
||||||
|
return logFilePath;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void setupLogFileHandle(NSString *logFilePath) {
|
||||||
|
// 检查文件大小,如果超过最大值则进行滚动
|
||||||
|
checkAndRollLogFile(logFilePath);
|
||||||
|
|
||||||
|
// 关闭旧的句柄(如果存在)
|
||||||
|
if (logFileHandle) {
|
||||||
|
[logFileHandle closeFile];
|
||||||
|
logFileHandle = nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 打开文件句柄
|
||||||
|
logFileHandle = [NSFileHandle fileHandleForWritingAtPath:logFilePath];
|
||||||
|
if (!logFileHandle) {
|
||||||
|
// 如果文件不存在,则创建
|
||||||
|
[[NSFileManager defaultManager] createFileAtPath:logFilePath
|
||||||
|
contents:nil
|
||||||
|
attributes:nil];
|
||||||
|
logFileHandle = [NSFileHandle fileHandleForWritingAtPath:logFilePath];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (logFileHandle) {
|
||||||
|
// 将文件句柄移动到文件末尾
|
||||||
|
[logFileHandle seekToEndOfFile];
|
||||||
|
} else {
|
||||||
|
fprintf(stderr, "Error: Could not open log file for writing.\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void checkAndRollLogFile(NSString *logFilePath) {
|
||||||
|
NSFileManager *fileManager = [NSFileManager defaultManager];
|
||||||
|
if ([fileManager fileExistsAtPath:logFilePath]) {
|
||||||
|
NSError *error = nil;
|
||||||
|
NSDictionary *fileAttributes =
|
||||||
|
[fileManager attributesOfItemAtPath:logFilePath error:&error];
|
||||||
|
if (fileAttributes) {
|
||||||
|
unsigned long long fileSize = [fileAttributes fileSize];
|
||||||
|
if (fileSize > kMaxFileSize) {
|
||||||
|
// 文件过大,进行滚动
|
||||||
|
NSString *backupFilePath =
|
||||||
|
[logFilePath stringByAppendingString:@".bak"];
|
||||||
|
[fileManager removeItemAtPath:backupFilePath
|
||||||
|
error:nil]; // 移除旧的备份文件
|
||||||
|
[fileManager moveItemAtPath:logFilePath
|
||||||
|
toPath:backupFilePath
|
||||||
|
error:&error]; // 将当前文件备份
|
||||||
|
if (error) {
|
||||||
|
fprintf(stderr, "Error rolling log file: %s\n",
|
||||||
|
error.localizedDescription.UTF8String);
|
||||||
|
}
|
||||||
|
// 创建新的空日志文件
|
||||||
|
[fileManager createFileAtPath:logFilePath contents:nil attributes:nil];
|
||||||
|
// 重新设置文件句柄
|
||||||
|
setupLogFileHandle(kLogFilePath);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
fprintf(stderr, "Error getting file attributes: %s\n",
|
||||||
|
error.localizedDescription.UTF8String);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void XSLogRedirectNSLog(void) {
|
||||||
|
if (logFileHandle) {
|
||||||
|
int fd = [logFileHandle fileDescriptor];
|
||||||
|
if (fd != -1) {
|
||||||
|
// 将标准错误输出重定向到日志文件
|
||||||
|
if (dup2(fd, STDERR_FILENO) == -1) {
|
||||||
|
fprintf(stderr, "Error redirecting stderr to log file.\n");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
fprintf(stderr, "Error: logFileHandle has an invalid file descriptor.\n");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
fprintf(stderr, "Error: logFileHandle is not initialized. Cannot redirect stderr.\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void XSLogMessage(NSString *format, ...) {
|
||||||
|
va_list args;
|
||||||
|
va_start(args, format);
|
||||||
|
NSString *message = [[NSString alloc] initWithFormat:format arguments:args];
|
||||||
|
va_end(args);
|
||||||
|
|
||||||
|
dispatch_async(logQueue, ^{
|
||||||
|
// 获取当前时间
|
||||||
|
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
|
||||||
|
dateFormatter.dateFormat = @"yyyy-MM-dd HH:mm:ss.SSS";
|
||||||
|
NSString *timestamp = [dateFormatter stringFromDate:[NSDate date]];
|
||||||
|
|
||||||
|
// 格式化日志消息
|
||||||
|
NSString *logString =
|
||||||
|
[NSString stringWithFormat:@"%@ %@\n", timestamp, message];
|
||||||
|
|
||||||
|
// 将日志写入文件
|
||||||
|
NSData *data = [logString dataUsingEncoding:NSUTF8StringEncoding];
|
||||||
|
if (logFileHandle) {
|
||||||
|
@try {
|
||||||
|
[logFileHandle writeData:data];
|
||||||
|
// 每次写入后,递增计数器
|
||||||
|
logCount++;
|
||||||
|
// 每隔 kLogCheckFrequency 条日志检查一次文件大小
|
||||||
|
if (logCount >= kLogCheckFrequency) {
|
||||||
|
logCount = 0; // 重置计数器
|
||||||
|
checkAndRollLogFile(kLogFilePath);
|
||||||
|
}
|
||||||
|
} @catch (NSException *exception) {
|
||||||
|
fprintf(stderr, "Error writing to log file: %s\n",
|
||||||
|
exception.reason.UTF8String);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 同时输出到控制台,以便调试
|
||||||
|
fprintf(stderr, "%s", [logString UTF8String]);
|
||||||
|
});
|
||||||
|
}
|
||||||
@ -16,6 +16,9 @@
|
|||||||
#import <Foundation/Foundation.h>
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
@interface FloatingWindow () {
|
@interface FloatingWindow () {
|
||||||
|
NSMutableArray *loadTimestamps;
|
||||||
|
NSMutableArray *showTimestamps;
|
||||||
|
NSTimer *updateTimer;
|
||||||
}
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
@ -38,7 +41,7 @@
|
|||||||
action:@selector(detectPan:)];
|
action:@selector(detectPan:)];
|
||||||
[self addGestureRecognizer:panRecognizer];
|
[self addGestureRecognizer:panRecognizer];
|
||||||
|
|
||||||
self.backgroundColor = RGB(193, 41, 48); // RGB(85, 172, 119);
|
self.backgroundColor = [UIColor grayColor]; // 默认灰色背景
|
||||||
self.layer.cornerRadius = 10;
|
self.layer.cornerRadius = 10;
|
||||||
self.clipsToBounds = YES;
|
self.clipsToBounds = YES;
|
||||||
|
|
||||||
@ -46,12 +49,145 @@
|
|||||||
[self updateInfo];
|
[self updateInfo];
|
||||||
self.http = [[XSHttpHelper alloc] init];
|
self.http = [[XSHttpHelper alloc] init];
|
||||||
[[MyEventBus sharedInstance] registerSubscriber:self];
|
[[MyEventBus sharedInstance] registerSubscriber:self];
|
||||||
|
|
||||||
|
loadTimestamps = [[NSMutableArray alloc] init];
|
||||||
|
showTimestamps = [[NSMutableArray alloc] init];
|
||||||
|
|
||||||
|
[self startUpdatingCounts]; // 启动定时任务
|
||||||
}
|
}
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)dealloc {
|
- (void)dealloc {
|
||||||
[[MyEventBus sharedInstance] unregisterSubscriber:self];
|
[[MyEventBus sharedInstance] unregisterSubscriber:self];
|
||||||
|
[self stopUpdatingCounts]; // 停止定时任务
|
||||||
|
}
|
||||||
|
|
||||||
|
// 定时任务方法
|
||||||
|
- (void)startUpdatingCounts {
|
||||||
|
updateTimer = [NSTimer scheduledTimerWithTimeInterval:5.0
|
||||||
|
target:self
|
||||||
|
selector:@selector(updateCounts)
|
||||||
|
userInfo:nil
|
||||||
|
repeats:YES];
|
||||||
|
[[NSRunLoop mainRunLoop] addTimer:updateTimer forMode:NSRunLoopCommonModes];
|
||||||
|
}
|
||||||
|
|
||||||
|
// 停止定时任务
|
||||||
|
- (void)stopUpdatingCounts {
|
||||||
|
if ([updateTimer isValid]) {
|
||||||
|
[updateTimer invalidate];
|
||||||
|
updateTimer = nil;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新文件夹中的文件数量
|
||||||
|
- (void)updateCounts {
|
||||||
|
NSString *loadDir = @"/User/Documents/ad/load";
|
||||||
|
NSString *showDir = @"/User/Documents/ad/show";
|
||||||
|
NSInteger loadCount = [self countAndCleanFilesInDirectory:loadDir];
|
||||||
|
NSInteger showCount = [self countAndCleanFilesInDirectory:showDir];
|
||||||
|
|
||||||
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
|
self.infoLabel.text = [NSString stringWithFormat:@"S:%@ / L:%@", @(showCount), @(loadCount)];
|
||||||
|
[self updateBackgroundColorByShowCount:showCount];
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// 统计文件数量并删除一小时前的文件
|
||||||
|
- (NSInteger)countAndCleanFilesInDirectory:(NSString *)directoryPath {
|
||||||
|
NSFileManager *fileManager = [NSFileManager defaultManager];
|
||||||
|
NSArray *files = [fileManager contentsOfDirectoryAtPath:directoryPath error:nil];
|
||||||
|
NSDate *oneHourAgo = [NSDate dateWithTimeIntervalSinceNow:-3600];
|
||||||
|
NSInteger count = 0;
|
||||||
|
|
||||||
|
for (NSString *file in files) {
|
||||||
|
NSString *filePath = [directoryPath stringByAppendingPathComponent:file];
|
||||||
|
NSDictionary *attributes = [fileManager attributesOfItemAtPath:filePath error:nil];
|
||||||
|
NSDate *modificationDate = attributes[NSFileModificationDate];
|
||||||
|
|
||||||
|
if ([modificationDate compare:oneHourAgo] == NSOrderedDescending) {
|
||||||
|
count++;
|
||||||
|
} else {
|
||||||
|
[fileManager removeItemAtPath:filePath error:nil]; // 删除过期文件
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 添加清理过期数据的辅助方法
|
||||||
|
- (void)cleanExpiredTimestamps:(NSMutableArray *)timestamps {
|
||||||
|
NSDate *now = [NSDate date];
|
||||||
|
NSTimeInterval oneHourAgo = [now timeIntervalSince1970] - 3600; // 3600秒 = 1小时
|
||||||
|
|
||||||
|
NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(NSDate *timestamp, NSDictionary *bindings) {
|
||||||
|
return [timestamp timeIntervalSince1970] > oneHourAgo;
|
||||||
|
}];
|
||||||
|
|
||||||
|
NSArray *validTimestamps = [timestamps filteredArrayUsingPredicate:predicate];
|
||||||
|
[timestamps removeAllObjects];
|
||||||
|
[timestamps addObjectsFromArray:validTimestamps];
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新背景颜色
|
||||||
|
- (void)updateBackgroundColorByShowCount:(NSInteger)showCount {
|
||||||
|
UIColor *color;
|
||||||
|
|
||||||
|
if (showCount < 80) {
|
||||||
|
// 蓝色 #07A6E4
|
||||||
|
color = [UIColor colorWithRed:7/255.0 green:166/255.0 blue:228/255.0 alpha:1.0];
|
||||||
|
} else if (showCount < 160) {
|
||||||
|
// 红色 #D92727
|
||||||
|
color = [UIColor colorWithRed:217/255.0 green:39/255.0 blue:39/255.0 alpha:1.0];
|
||||||
|
} else if (showCount < 240) {
|
||||||
|
// 橙黄 #EF811C
|
||||||
|
color = [UIColor colorWithRed:239/255.0 green:129/255.0 blue:28/255.0 alpha:1.0];
|
||||||
|
} else {
|
||||||
|
// 绿色 #08C951
|
||||||
|
color = [UIColor colorWithRed:8/255.0 green:201/255.0 blue:81/255.0 alpha:1.0];
|
||||||
|
}
|
||||||
|
|
||||||
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
|
self.backgroundColor = color;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// 添加 onEventLoad 方法
|
||||||
|
- (void)onEventLoad:(id)data {
|
||||||
|
@synchronized(loadTimestamps) {
|
||||||
|
[loadTimestamps addObject:[NSDate date]];
|
||||||
|
[self cleanExpiredTimestamps:loadTimestamps];
|
||||||
|
|
||||||
|
NSInteger loadCount = loadTimestamps.count;
|
||||||
|
NSInteger showCount = showTimestamps.count;
|
||||||
|
|
||||||
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
|
self.infoLabel.text = [NSString stringWithFormat:@"S:%@ / L:%@", @(showCount), @(loadCount)];
|
||||||
|
});
|
||||||
|
|
||||||
|
NSLog(@"Load event: total in last hour = %ld", (long)loadCount);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 添加 onEventShow 方法
|
||||||
|
- (void)onEventShow:(id)data {
|
||||||
|
@synchronized(showTimestamps) {
|
||||||
|
[showTimestamps addObject:[NSDate date]];
|
||||||
|
[self cleanExpiredTimestamps:showTimestamps];
|
||||||
|
|
||||||
|
NSInteger showCount = showTimestamps.count;
|
||||||
|
NSInteger loadCount = loadTimestamps.count;
|
||||||
|
|
||||||
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
|
self.infoLabel.text = [NSString stringWithFormat:@"S:%@ / L:%@", @(showCount), @(loadCount)];
|
||||||
|
});
|
||||||
|
|
||||||
|
// 根据 show 数量更新背景颜色
|
||||||
|
[self updateBackgroundColorByShowCount:showCount];
|
||||||
|
|
||||||
|
NSLog(@"Show event: total in last hour = %ld", (long)showCount);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)setupUI {
|
- (void)setupUI {
|
||||||
@ -130,48 +266,6 @@
|
|||||||
self.deviceTypeLabel.text = @"unknow";
|
self.deviceTypeLabel.text = @"unknow";
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)onEventUpdateInfo:(id)data {
|
|
||||||
__weak typeof(self) weakSelf = self;
|
|
||||||
if (data) {
|
|
||||||
dispatch_async(dispatch_get_main_queue(), ^{
|
|
||||||
NSDictionary *dic = data;
|
|
||||||
int loadNum = 0;
|
|
||||||
int showNum = 0;
|
|
||||||
int r = 25;
|
|
||||||
int g = 118;
|
|
||||||
int b = 210;
|
|
||||||
|
|
||||||
NSNumber *load = dic[@"loadCount"];
|
|
||||||
if (load && ![load isEqual:[NSNull null]]) {
|
|
||||||
loadNum = [load intValue];
|
|
||||||
}
|
|
||||||
|
|
||||||
NSNumber *show = dic[@"showCount"];
|
|
||||||
if (show && ![show isEqual:[NSNull null]]) {
|
|
||||||
showNum = [show intValue];
|
|
||||||
}
|
|
||||||
|
|
||||||
NSNumber *color_r = dic[@"color_r"];
|
|
||||||
if (color_r && ![color_r isEqual:[NSNull null]]) {
|
|
||||||
r = [color_r intValue];
|
|
||||||
}
|
|
||||||
|
|
||||||
NSNumber *color_g = dic[@"color_g"];
|
|
||||||
if (color_g && ![color_g isEqual:[NSNull null]]) {
|
|
||||||
g = [color_g intValue];
|
|
||||||
}
|
|
||||||
|
|
||||||
NSNumber *color_b = dic[@"color_b"];
|
|
||||||
if (color_b && ![color_b isEqual:[NSNull null]]) {
|
|
||||||
b = [color_b intValue];
|
|
||||||
}
|
|
||||||
|
|
||||||
self.backgroundColor = RGB(r, g, b); // RGB(85, 172, 119);
|
|
||||||
self.infoLabel.text = [NSString stringWithFormat:@"S:%@ / L:%@", @(showNum), @(loadNum)];
|
|
||||||
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)onEventUpdateStatus:(id)data {
|
- (void)onEventUpdateStatus:(id)data {
|
||||||
__weak typeof(self) weakSelf = self;
|
__weak typeof(self) weakSelf = self;
|
||||||
|
|||||||
@ -23,4 +23,8 @@
|
|||||||
|
|
||||||
+(instancetype)sharedInstance;
|
+(instancetype)sharedInstance;
|
||||||
|
|
||||||
|
- (BOOL)isHeartbeatActive;
|
||||||
|
- (void)restartHeartbeat;
|
||||||
|
- (void)stopHeartbeat;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
@ -93,6 +93,22 @@
|
|||||||
dispatch_resume(_timer);
|
dispatch_resume(_timer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (BOOL)isHeartbeatActive {
|
||||||
|
// 检查心跳是否处于活动状态
|
||||||
|
return _timer != nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)restartHeartbeat {
|
||||||
|
// 重新启动心跳
|
||||||
|
[self stopHeartbeat];
|
||||||
|
[self start];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)stopHeartbeat {
|
||||||
|
// 停止心跳
|
||||||
|
[self stop];
|
||||||
|
}
|
||||||
|
|
||||||
- (void) checkxxx {
|
- (void) checkxxx {
|
||||||
NSDate *last = [[XSPhoneConfig sharedInstance] GetLastOverTime];
|
NSDate *last = [[XSPhoneConfig sharedInstance] GetLastOverTime];
|
||||||
NSDate *date2 = [NSDate date];
|
NSDate *date2 = [NSDate date];
|
||||||
@ -108,35 +124,23 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
- (void) ping {
|
- (void)ping {
|
||||||
@try {
|
@try {
|
||||||
if (!self->iphone || !self->http) return;
|
if (!self->iphone || !self->http) return;
|
||||||
|
|
||||||
NSString *server = self->iphone.ServerURL;
|
NSString *server = self->iphone.MainServerURL;
|
||||||
if (!server.length) {
|
if (!server.length) {
|
||||||
NSLog(@"Invalid server URL");
|
NSLog(@"Invalid server URL");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
NSString *url = [NSString stringWithFormat:@"%@/ios/top_selection/heartbeat", server];
|
NSString *url = [NSString stringWithFormat:@"%@/ios/top_selection/heartbeat", server];
|
||||||
|
if (!url) {
|
||||||
|
NSLog(@"Invalid URL for heartbeat");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
dispatch_async(self->_workQueue, ^{
|
||||||
{
|
|
||||||
"deviceId": "string",
|
|
||||||
"ip": "string",
|
|
||||||
"appId": "string",
|
|
||||||
"apps": [
|
|
||||||
"string"
|
|
||||||
],
|
|
||||||
"name": "string",
|
|
||||||
"message": "string",
|
|
||||||
"status": "string",
|
|
||||||
"life": true
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
//self.status = [[XSConsole sharedInstance] status];
|
|
||||||
//self.appId = [[XSJsGlobalContext sharedInstance] get:@"ad_appid"];
|
|
||||||
@synchronized (self) {
|
|
||||||
if ([self.status isEqualToString:@"运行中"]) {
|
if ([self.status isEqualToString:@"运行中"]) {
|
||||||
self->lastStop = [NSDate date];
|
self->lastStop = [NSDate date];
|
||||||
}
|
}
|
||||||
@ -146,53 +150,31 @@
|
|||||||
NSTimeInterval elapsed = [curRunTime timeIntervalSinceDate:self->lastStop];
|
NSTimeInterval elapsed = [curRunTime timeIntervalSinceDate:self->lastStop];
|
||||||
if (elapsed > 60 * 10 && !myadTaskManualStop) {
|
if (elapsed > 60 * 10 && !myadTaskManualStop) {
|
||||||
self->lastStop = [NSDate date];
|
self->lastStop = [NSDate date];
|
||||||
dispatch_async(_workQueue, ^{
|
dispatch_async(self->_workQueue, ^{
|
||||||
[[MyAdTask2Mangger sharedInstance] start];
|
[[MyAdTask2Mangger sharedInstance] start];
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
|
|
||||||
|
self.name = self->iphone.IPhoneName ?: @"";
|
||||||
|
self.deviceId = self->iphone.DeviceId ?: @"";
|
||||||
|
self.ip = [[XSPhoneInfo sharedInstance] IPAddress] ?: @"";
|
||||||
|
self.remoteIp = [[XSPhoneInfo sharedInstance] remoteIp] ?: @"";
|
||||||
|
self.diskSize = [[XSPhoneInfo sharedInstance] IPhoneStatus] ?: @"";
|
||||||
|
self.message = @"251202-nt-02";
|
||||||
|
|
||||||
self.name = self->iphone.IPhoneName;
|
|
||||||
self.deviceId = self->iphone.DeviceId;
|
|
||||||
self.ip = [[XSPhoneInfo sharedInstance] IPAddress];
|
|
||||||
self.remoteIp = [[XSPhoneInfo sharedInstance] remoteIp];
|
|
||||||
self.diskSize = [[XSPhoneInfo sharedInstance] IPhoneStatus];
|
|
||||||
self.message = @"251106-nt";
|
|
||||||
// 构建请求数据
|
|
||||||
NSDictionary *heartbeatData = [self constructHeartbeatData];
|
NSDictionary *heartbeatData = [self constructHeartbeatData];
|
||||||
if (!heartbeatData) {
|
if (!heartbeatData) {
|
||||||
NSLog(@"Failed to construct heartbeat data");
|
NSLog(@"Failed to construct heartbeat data");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
pushInfo(1,
|
|
||||||
[XSHelper dic2Json:dic],
|
|
||||||
^(NSString *data) {
|
|
||||||
if (data) {
|
|
||||||
NSLog(@"XS- log: %@", data);
|
|
||||||
[[XSPhoneConfig sharedInstance] SetLastOverTime: [NSDate date]];
|
|
||||||
} else {
|
|
||||||
NSLog(@"XS- heart beat error");
|
|
||||||
//[self checkxxx];
|
|
||||||
}
|
|
||||||
},^(NSError *err) {
|
|
||||||
NSLog(@"XS- %@", err);
|
|
||||||
//[self checkxxx];
|
|
||||||
});
|
|
||||||
*/
|
|
||||||
|
|
||||||
// 发送请求
|
|
||||||
[self sendHeartbeat:heartbeatData toURL:url];
|
[self sendHeartbeat:heartbeatData toURL:url];
|
||||||
// 检查任务
|
|
||||||
// [self checkAndPerformTasks];
|
|
||||||
|
|
||||||
} @catch (NSException *exception) {
|
} @catch (NSException *exception) {
|
||||||
NSLog(@"XS- app run man ping error: %@", exception);
|
NSLog(@"XS- app run man ping error: %@", exception);
|
||||||
} @finally {
|
} @finally {
|
||||||
NSLog(@"XS- ping end");
|
NSLog(@"XS- ping end");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)sendHeartbeat:(NSDictionary *)data toURL:(NSString *)url {
|
- (void)sendHeartbeat:(NSDictionary *)data toURL:(NSString *)url {
|
||||||
@ -202,7 +184,7 @@
|
|||||||
NSLog(@"Heartbeat success: %@", json);
|
NSLog(@"Heartbeat success: %@", json);
|
||||||
NSDictionary *dic = [XSHelper json2Dictionary:json];
|
NSDictionary *dic = [XSHelper json2Dictionary:json];
|
||||||
NSDictionary *json_data = dic[@"data"];
|
NSDictionary *json_data = dic[@"data"];
|
||||||
[[MyEventBus sharedInstance] postEvent:@"UpdateInfo" withObject:json_data];
|
// [[MyEventBus sharedInstance] postEvent:@"UpdateInfo" withObject:json_data];
|
||||||
} else {
|
} else {
|
||||||
NSLog(@"Empty heartbeat response");
|
NSLog(@"Empty heartbeat response");
|
||||||
}
|
}
|
||||||
|
|||||||
@ -47,10 +47,10 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
- (NSString *)cmdUrl {
|
- (NSString *)cmdUrl {
|
||||||
return [NSString stringWithFormat:@"%@%@", _config.ServerURL, CMD];
|
return [NSString stringWithFormat:@"%@%@", _config.MainServerURL, CMD];
|
||||||
}
|
}
|
||||||
- (NSString *)cmdResUrl {
|
- (NSString *)cmdResUrl {
|
||||||
return [NSString stringWithFormat:@"%@%@", _config.ServerURL, CMD_RES];
|
return [NSString stringWithFormat:@"%@%@", _config.MainServerURL, CMD_RES];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) start {
|
- (void) start {
|
||||||
@ -113,54 +113,60 @@
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) executeTask: (NSDictionary*)dic {
|
- (void)executeTask:(NSDictionary *)dic {
|
||||||
if ([dic objectForKey:@"cmd"]) {
|
if (!dic || ![dic objectForKey:@"cmd"]) {
|
||||||
NSString *cmd = dic[@"cmd"];
|
NSLog(@"Invalid task dictionary");
|
||||||
NSString *taskId = dic[@"taskId"];
|
return;
|
||||||
if ([cmd isEqual:@"EDIT_NAME"]) {
|
}
|
||||||
[self executeEditName:taskId data:dic[@"cmdData"]];
|
NSString *cmd = dic[@"cmd"];
|
||||||
return;
|
NSString *taskId = dic[@"taskId"];
|
||||||
}
|
if (!cmd || !taskId) {
|
||||||
if ([cmd isEqual:@"UPLOAD_APPS"]) {
|
NSLog(@"Missing command or taskId");
|
||||||
[self executeUploadApps:taskId data:dic[@"cmdData"]];
|
return;
|
||||||
return;
|
}
|
||||||
}
|
if ([cmd isEqual:@"EDIT_NAME"]) {
|
||||||
if ([cmd isEqual:@"START"]) {
|
[self executeEditName:taskId data:dic[@"cmdData"]];
|
||||||
[self executeStart:taskId data:dic[@"cmdData"]];
|
return;
|
||||||
return;
|
}
|
||||||
}
|
if ([cmd isEqual:@"UPLOAD_APPS"]) {
|
||||||
if ([cmd isEqual:@"STOP"]) {
|
[self executeUploadApps:taskId data:dic[@"cmdData"]];
|
||||||
[self executeStop:taskId data:dic[@"cmdData"]];
|
return;
|
||||||
return;
|
}
|
||||||
}
|
if ([cmd isEqual:@"START"]) {
|
||||||
if ([cmd isEqual:@"SCREENSHOT"]) {
|
[self executeStart:taskId data:dic[@"cmdData"]];
|
||||||
[self executeScreenshot:taskId data:dic[@"cmdData"]];
|
return;
|
||||||
return;
|
}
|
||||||
}
|
if ([cmd isEqual:@"STOP"]) {
|
||||||
if ([cmd isEqual:@"UNLOCK"]) {
|
[self executeStop:taskId data:dic[@"cmdData"]];
|
||||||
[self executeUnlock:taskId data:dic[@"cmdData"]];
|
return;
|
||||||
return;
|
}
|
||||||
}
|
if ([cmd isEqual:@"SCREENSHOT"]) {
|
||||||
if ([cmd isEqual:@"RESTART_SYSTEM"]) {
|
[self executeScreenshot:taskId data:dic[@"cmdData"]];
|
||||||
[self executeRestart:taskId data:dic[@"cmdData"]];
|
return;
|
||||||
return;
|
}
|
||||||
}
|
if ([cmd isEqual:@"UNLOCK"]) {
|
||||||
if ([cmd isEqual:@"RESTART"]) {
|
[self executeUnlock:taskId data:dic[@"cmdData"]];
|
||||||
[self executeReboot:taskId data:dic[@"cmdData"]];
|
return;
|
||||||
return;
|
}
|
||||||
}
|
if ([cmd isEqual:@"RESTART_SYSTEM"]) {
|
||||||
if ([cmd isEqual:@"TOUCH"]) {
|
[self executeRestart:taskId data:dic[@"cmdData"]];
|
||||||
[self executeTouch:taskId data:dic[@"cmdData"]];
|
return;
|
||||||
return;
|
}
|
||||||
}
|
if ([cmd isEqual:@"RESTART"]) {
|
||||||
if ([cmd isEqual:@"KEY"]) {
|
[self executeReboot:taskId data:dic[@"cmdData"]];
|
||||||
[self executeKey:taskId data:dic[@"cmdData"]];
|
return;
|
||||||
return;
|
}
|
||||||
}
|
if ([cmd isEqual:@"TOUCH"]) {
|
||||||
if ([cmd isEqual:@"UPDATE_KEY"]) {
|
[self executeTouch:taskId data:dic[@"cmdData"]];
|
||||||
[self executeUpdateKey:taskId data:dic[@"cmdData"]];
|
return;
|
||||||
return;
|
}
|
||||||
}
|
if ([cmd isEqual:@"KEY"]) {
|
||||||
|
[self executeKey:taskId data:dic[@"cmdData"]];
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if ([cmd isEqual:@"UPDATE_KEY"]) {
|
||||||
|
[self executeUpdateKey:taskId data:dic[@"cmdData"]];
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -14,8 +14,6 @@
|
|||||||
#import "XSPhoneConfig.h"
|
#import "XSPhoneConfig.h"
|
||||||
#import "XSPhoneInfo.h"
|
#import "XSPhoneInfo.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void pushAdTaskLog(AdTaskLogData *data) {
|
void pushAdTaskLog(AdTaskLogData *data) {
|
||||||
NSDictionary *dic = @{
|
NSDictionary *dic = @{
|
||||||
@"taskId": data->taskId,
|
@"taskId": data->taskId,
|
||||||
@ -88,31 +86,69 @@ BOOL needAdContinue(NSString *appid, NSString *idfa, NSNumber *maxEcpm) {
|
|||||||
return [dic[@"data"] isEqual:@(true)];
|
return [dic[@"data"] isEqual:@(true)];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void getChangeInfoWithRetry(NSString *idfa, ChangeDataSaveCallback callback, error_callback errorCallback, int retryCount) {
|
||||||
|
if (retryCount <= 0) {
|
||||||
|
NSLog(@"getChangeInfo failed after maximum retries");
|
||||||
|
if (errorCallback) {
|
||||||
|
errorCallback([NSError errorWithDomain:@"getChangeInfo" code:-1 userInfo:@{NSLocalizedDescriptionKey: @"Maximum retry attempts reached"}]);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
void getChangeInfo(NSString *idfa, ChangeDataSaveCallback callback, error_callback errorCallback) {
|
|
||||||
XSPhoneConfig *config = [XSPhoneConfig sharedInstance];
|
XSPhoneConfig *config = [XSPhoneConfig sharedInstance];
|
||||||
NSString *url = [config GetFullServerURL:[NSString stringWithFormat:@"ios/top_selection/get_change_data?id=%@&idfa=%@", [config IPhoneName], idfa ?: @""]];
|
NSString *url = [config GetFullServerURL:@"ios/top_selection/get_change_data_json"];
|
||||||
XSHttpHelper *http = [[XSHttpHelper alloc] init];
|
XSHttpHelper *http = [[XSHttpHelper alloc] init];
|
||||||
[http doGET:url withCallback:^(NSData *jsonData) {
|
NSDictionary *dic = @{
|
||||||
NSDictionary *data = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:nil];
|
@"packageName": [config PackageName],
|
||||||
|
@"washParam": @([config WashParam]),
|
||||||
|
};
|
||||||
|
NSString *json = [XSHelper dic2Json:dic];
|
||||||
|
|
||||||
|
NSLog(@"getChangeInfo: Attempting request, retries left: %d", retryCount);
|
||||||
|
|
||||||
|
[http doPOST:url json:json withCallback:^(NSData *jsonData) {
|
||||||
|
NSError *jsonError = nil;
|
||||||
|
NSDictionary *data = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&jsonError];
|
||||||
|
if (jsonError) {
|
||||||
|
NSLog(@"getChangeInfo: JSON parsing error: %@, retrying...", jsonError);
|
||||||
|
// 添加延迟重试
|
||||||
|
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
|
||||||
|
getChangeInfoWithRetry(idfa, callback, errorCallback, retryCount - 1);
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (data && [data objectForKey:@"data"]) {
|
if (data && [data objectForKey:@"data"]) {
|
||||||
NSDictionary *_data = data[@"data"];
|
NSDictionary *_data = data[@"data"];
|
||||||
if(_data && ![_data isEqual:[NSNull null]]) {
|
if (_data && ![_data isEqual:[NSNull null]]) {
|
||||||
|
NSLog(@"getChangeInfo: Successfully received data");
|
||||||
callback(_data);
|
callback(_data);
|
||||||
|
} else {
|
||||||
|
NSLog(@"getChangeInfo: Invalid data received, retrying...");
|
||||||
|
// 添加延迟重试
|
||||||
|
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
|
||||||
|
getChangeInfoWithRetry(idfa, callback, errorCallback, retryCount - 1);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if(errorCallback) {
|
NSLog(@"getChangeInfo: No data received, retrying...");
|
||||||
errorCallback(nil);
|
// 添加延迟重试
|
||||||
}
|
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
|
||||||
|
getChangeInfoWithRetry(idfa, callback, errorCallback, retryCount - 1);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
} withError:^(NSError *err) {
|
} withError:^(NSError *err) {
|
||||||
NSLog(@"XS- log- get data: %@", err);
|
NSLog(@"getChangeInfo error: %@, retrying... (%d retries left)", err, retryCount - 1);
|
||||||
if(errorCallback) {
|
// 添加延迟重试
|
||||||
errorCallback(err);
|
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
|
||||||
}
|
getChangeInfoWithRetry(idfa, callback, errorCallback, retryCount - 1);
|
||||||
|
});
|
||||||
}];
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
// 包装函数,默认重试 3 次
|
||||||
|
void getChangeInfo(NSString *idfa, ChangeDataSaveCallback callback, error_callback errorCallback) {
|
||||||
|
getChangeInfoWithRetry(idfa, callback, errorCallback, 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
void _newgetChangeInfo(NSString *idfa, ChangeDataSaveCallback callback, error_callback errorCallback) {
|
void _newgetChangeInfo(NSString *idfa, ChangeDataSaveCallback callback, error_callback errorCallback) {
|
||||||
@ -143,63 +179,111 @@ void _newgetChangeInfo(NSString *idfa, ChangeDataSaveCallback callback, error_ca
|
|||||||
errorCallback(err);
|
errorCallback(err);
|
||||||
}
|
}
|
||||||
}];
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
static dispatch_queue_t XSFileIOQueue() {
|
||||||
|
static dispatch_queue_t q;
|
||||||
|
static dispatch_once_t onceToken;
|
||||||
|
dispatch_once(&onceToken, ^{
|
||||||
|
q = dispatch_queue_create("com.xs.fileio.queue", DISPATCH_QUEUE_SERIAL);
|
||||||
|
});
|
||||||
|
return q;
|
||||||
|
}
|
||||||
|
|
||||||
|
static id XSFilterJSONValue(id obj) {
|
||||||
|
if (obj == [NSNull null]) return nil;
|
||||||
|
if ([obj isKindOfClass:[NSDictionary class]]) {
|
||||||
|
NSMutableDictionary *md = [NSMutableDictionary dictionary];
|
||||||
|
[(NSDictionary *)obj enumerateKeysAndObjectsUsingBlock:^(id key, id value, BOOL *stop) {
|
||||||
|
if (![key isKindOfClass:[NSString class]]) return;
|
||||||
|
id v = XSFilterJSONValue(value);
|
||||||
|
if (v) md[key] = v;
|
||||||
|
}];
|
||||||
|
return md;
|
||||||
|
}
|
||||||
|
if ([obj isKindOfClass:[NSArray class]]) {
|
||||||
|
NSMutableArray *ma = [NSMutableArray array];
|
||||||
|
for (id v in (NSArray *)obj) {
|
||||||
|
id nv = XSFilterJSONValue(v);
|
||||||
|
[ma addObject:nv ?: [NSNull null]];
|
||||||
|
}
|
||||||
|
return ma;
|
||||||
|
}
|
||||||
|
// 允许的基础类型
|
||||||
|
if ([obj isKindOfClass:[NSString class]] ||
|
||||||
|
[obj isKindOfClass:[NSNumber class]]) {
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
// 其他类型转字符串以避免序列化失败
|
||||||
|
return [obj description];
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL saveChangeDataFile(NSDictionary *data) {
|
BOOL saveChangeDataFile(NSDictionary *data) {
|
||||||
if (!data || ![data isKindOfClass:[NSDictionary class]]) {
|
if (!data || ![data isKindOfClass:[NSDictionary class]]) {
|
||||||
NSLog(@"Invalid data input");
|
NSLog(@"[saveChangeDataFile] Invalid data input: %@", data);
|
||||||
return NO;
|
return NO;
|
||||||
}
|
}
|
||||||
|
|
||||||
@try {
|
__block BOOL result = NO;
|
||||||
NSString *bundleId = @"org.xyzshell.NotNil";
|
__block NSError *writeError = nil;
|
||||||
NSString *plistPath = [NSString stringWithFormat:@"/var/mobile/Library/Preferences/%@.plist", bundleId];
|
|
||||||
|
|
||||||
// 使用同步锁保证线程安全
|
dispatch_sync(XSFileIOQueue(), ^{
|
||||||
@synchronized(NSFileManager.defaultManager) {
|
@try {
|
||||||
NSMutableDictionary *tempDic = [NSMutableDictionary new];
|
NSString *jsonPath = @"/var/mobile/Documents/changeapp.json";
|
||||||
|
NSString *dirPath = [jsonPath stringByDeletingLastPathComponent];
|
||||||
|
|
||||||
// 安全地遍历字典
|
NSError *dirErr = nil;
|
||||||
[data enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
|
if (![[NSFileManager defaultManager] fileExistsAtPath:dirPath]) {
|
||||||
if (![key isKindOfClass:[NSString class]]) return;
|
[[NSFileManager defaultManager] createDirectoryAtPath:dirPath
|
||||||
|
withIntermediateDirectories:YES
|
||||||
if (obj == [NSNull null]) {
|
attributes:@{NSFileProtectionKey: NSFileProtectionNone}
|
||||||
tempDic[key] = nil;
|
error:&dirErr];
|
||||||
} else if ([obj isKindOfClass:[NSDictionary class]]) {
|
if (dirErr) {
|
||||||
NSMutableDictionary *newDic = [NSMutableDictionary new];
|
NSLog(@"[saveChangeDataFile] Failed to create directory %@, error: %@", dirPath, dirErr);
|
||||||
[(NSDictionary *)obj enumerateKeysAndObjectsUsingBlock:^(id key1, id obj1, BOOL *stop1) {
|
return;
|
||||||
if (![key1 isKindOfClass:[NSString class]]) return;
|
|
||||||
newDic[key1] = (obj1 == [NSNull null]) ? nil : obj1;
|
|
||||||
}];
|
|
||||||
tempDic[key] = [newDic copy];
|
|
||||||
} else {
|
|
||||||
tempDic[key] = obj;
|
|
||||||
}
|
|
||||||
}];
|
|
||||||
|
|
||||||
// 创建目录
|
|
||||||
NSError *error;
|
|
||||||
NSString *dirPath = [plistPath stringByDeletingLastPathComponent];
|
|
||||||
if (![NSFileManager.defaultManager fileExistsAtPath:dirPath]) {
|
|
||||||
if (![NSFileManager.defaultManager createDirectoryAtPath:dirPath
|
|
||||||
withIntermediateDirectories:YES
|
|
||||||
attributes:nil
|
|
||||||
error:&error]) {
|
|
||||||
NSLog(@"Failed to create directory: %@", error);
|
|
||||||
return NO;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 写入文件
|
NSDictionary *filtered = XSFilterJSONValue(data);
|
||||||
BOOL y = [tempDic writeToFile:plistPath atomically:YES];
|
if (!filtered || ![NSJSONSerialization isValidJSONObject:filtered]) {
|
||||||
NSLog(@"XS- save change file: %@", @(y));
|
NSLog(@"[saveChangeDataFile] JSON object invalid after filtering: %@", filtered);
|
||||||
return y;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
NSError *jsonError = nil;
|
||||||
|
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:filtered
|
||||||
|
options:0
|
||||||
|
error:&jsonError];
|
||||||
|
if (jsonError || !jsonData) {
|
||||||
|
NSLog(@"[saveChangeDataFile] Error serializing to JSON: %@", jsonError);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
NSURL *fileURL = [NSURL fileURLWithPath:jsonPath];
|
||||||
|
result = [jsonData writeToURL:fileURL
|
||||||
|
options:NSDataWritingAtomic
|
||||||
|
error:&writeError];
|
||||||
|
|
||||||
|
NSString *idfa = data[@"idfa"];
|
||||||
|
NSLog(@"XS- save change file: %@; idfa:%@; path:%@",
|
||||||
|
@(result), idfa, jsonPath);
|
||||||
|
/*
|
||||||
|
if (!result) {
|
||||||
|
struct rlimit limit;
|
||||||
|
getrlimit(RLIMIT_NOFILE, &limit);
|
||||||
|
NSLog(@"soft limit: %llu, hard limit: %llu", limit.rlim_cur, limit.rlim_max);
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
} @catch (NSException *exception) {
|
||||||
|
NSLog(@"[saveChangeDataFile] Exception: %@", exception);
|
||||||
|
result = NO;
|
||||||
}
|
}
|
||||||
} @catch (NSException *exception) {
|
});
|
||||||
NSLog(@"Error saving change data: %@", exception);
|
|
||||||
return NO;
|
if (writeError) {
|
||||||
|
NSLog(@"[saveChangeDataFile] Write error: %@", writeError);
|
||||||
}
|
}
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
AdLoadInfo getAdLoadInfo(NSDictionary *request) {
|
AdLoadInfo getAdLoadInfo(NSDictionary *request) {
|
||||||
@ -331,7 +415,6 @@ void logMessage(NSString *message) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void uncaughtExceptionHandler(NSException *exception) {
|
void uncaughtExceptionHandler(NSException *exception) {
|
||||||
NSArray *callStack = [exception callStackSymbols];
|
NSArray *callStack = [exception callStackSymbols];
|
||||||
NSString *reason = [exception reason];
|
NSString *reason = [exception reason];
|
||||||
@ -348,6 +431,7 @@ void uncaughtExceptionHandler(NSException *exception) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void signalHandler(int signal) {
|
void signalHandler(int signal) {
|
||||||
|
/*
|
||||||
NSMutableString *crashLog = [NSMutableString string];
|
NSMutableString *crashLog = [NSMutableString string];
|
||||||
[crashLog appendFormat:@"Signal %d was raised.\n", signal];
|
[crashLog appendFormat:@"Signal %d was raised.\n", signal];
|
||||||
|
|
||||||
@ -361,11 +445,19 @@ void signalHandler(int signal) {
|
|||||||
|
|
||||||
free(strs);
|
free(strs);
|
||||||
|
|
||||||
NSLog(@"Crash: %@", crashLog);
|
NSLog(@"SpringBoard crash:%@", crashLog);
|
||||||
logMessage(crashLog);
|
*/
|
||||||
|
const char *signalName = strsignal(signal);
|
||||||
|
write(STDERR_FILENO, "Signal received: ", 17);
|
||||||
|
write(STDERR_FILENO, signalName, strlen(signalName));
|
||||||
|
write(STDERR_FILENO, "\n", 1);
|
||||||
|
// 设置标志位,通知主线程处理
|
||||||
|
// 避免在信号处理函数中调用复杂逻辑
|
||||||
|
_exit(signal);
|
||||||
|
|
||||||
// 这里你可以将崩溃信息保存到文件或发送到服务器
|
// 这里你可以将崩溃信息保存到文件或发送到服务器
|
||||||
|
|
||||||
pushIphoneLog(crashLog);
|
// pushIphoneLog(crashLog);
|
||||||
}
|
}
|
||||||
|
|
||||||
void registerSignalHandler(void) {
|
void registerSignalHandler(void) {
|
||||||
|
|||||||
@ -29,8 +29,12 @@ BOOL myadTaskManualStop = NO;
|
|||||||
NSString *dataId;
|
NSString *dataId;
|
||||||
NSString *remoteIp;
|
NSString *remoteIp;
|
||||||
NSString *country;
|
NSString *country;
|
||||||
|
dispatch_source_t _appendCheckTimer; // 新增定时器
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@property (nonatomic, assign) NSTimeInterval lastAppSwitchTime; // 新增属性
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@implementation MyAdTask2Mangger
|
@implementation MyAdTask2Mangger
|
||||||
@ -55,6 +59,7 @@ BOOL myadTaskManualStop = NO;
|
|||||||
self->screen_w = device_screen_width;
|
self->screen_w = device_screen_width;
|
||||||
self->screen_h = device_screen_height;
|
self->screen_h = device_screen_height;
|
||||||
self->adAfter = 1000;
|
self->adAfter = 1000;
|
||||||
|
self.lastAppSwitchTime = 0; // 初始化为0
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
return nil;
|
return nil;
|
||||||
@ -104,7 +109,7 @@ BOOL myadTaskManualStop = NO;
|
|||||||
__weak typeof(self) weakSelf = self;
|
__weak typeof(self) weakSelf = self;
|
||||||
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(beforeSec * NSEC_PER_SEC)),
|
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(beforeSec * NSEC_PER_SEC)),
|
||||||
self.manQueue, ^{
|
self.manQueue, ^{
|
||||||
[weakSelf touchAppTask:0];
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
return close;
|
return close;
|
||||||
@ -115,7 +120,15 @@ BOOL myadTaskManualStop = NO;
|
|||||||
}
|
}
|
||||||
|
|
||||||
- (void)setRemoteInfo {
|
- (void)setRemoteInfo {
|
||||||
|
if (self->country != nil && ![self->country isEqual:@""]) {
|
||||||
|
NSLog(@"Country info already set, skipping remote info update.");
|
||||||
|
return; // 如果国家信息已存在,则跳过更新
|
||||||
|
}
|
||||||
NSString *url = @"https://ipapi.co/json/";
|
NSString *url = @"https://ipapi.co/json/";
|
||||||
|
if (!url) {
|
||||||
|
NSLog(@"Invalid URL for remote info");
|
||||||
|
return;
|
||||||
|
}
|
||||||
XSHttpHelper *http = [[XSHttpHelper alloc] init];
|
XSHttpHelper *http = [[XSHttpHelper alloc] init];
|
||||||
__weak typeof(self) weakSelf = self;
|
__weak typeof(self) weakSelf = self;
|
||||||
[http doGET:url withCallback:^(NSData *data) {
|
[http doGET:url withCallback:^(NSData *data) {
|
||||||
@ -132,6 +145,10 @@ BOOL myadTaskManualStop = NO;
|
|||||||
}
|
}
|
||||||
NSString *isoCode = dic[@"country_code"];
|
NSString *isoCode = dic[@"country_code"];
|
||||||
NSString *ip = dic[@"ip"];
|
NSString *ip = dic[@"ip"];
|
||||||
|
if (!isoCode || !ip) {
|
||||||
|
NSLog(@"Invalid data received for remote info");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
__strong typeof(weakSelf) strongSelf = weakSelf;
|
__strong typeof(weakSelf) strongSelf = weakSelf;
|
||||||
if (!strongSelf) return;
|
if (!strongSelf) return;
|
||||||
@ -191,55 +208,76 @@ BOOL myadTaskManualStop = NO;
|
|||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL)onEnd:(NSDictionary *)dic {
|
// 新增方法:检查并处理 append 文件
|
||||||
NSNumber *maxEcpm = dic[@"max_ecpm"];
|
- (void)checkAppendFile {
|
||||||
int sec = self->adAfter / 1000;
|
NSString *appendDirPath = @"/var/mobile/Documents/ad/append";
|
||||||
__weak typeof(self) weakSelf = self;
|
NSFileManager *fileManager = [NSFileManager defaultManager];
|
||||||
if([maxEcpm doubleValue] <= 0.0) {
|
BOOL isDir = NO;
|
||||||
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, sec * NSEC_PER_SEC), self.manQueue, ^{
|
if ([fileManager fileExistsAtPath:appendDirPath isDirectory:&isDir] && isDir) {
|
||||||
@autoreleasepool {
|
NSArray *files = [fileManager contentsOfDirectoryAtPath:appendDirPath error:nil];
|
||||||
[weakSelf startApp];
|
if (files.count > 0) {
|
||||||
|
BOOL allDeleted = YES;
|
||||||
|
for (NSString *file in files) {
|
||||||
|
NSString *filePath = [appendDirPath stringByAppendingPathComponent:file];
|
||||||
|
NSError *error = nil;
|
||||||
|
[fileManager removeItemAtPath:filePath error:&error];
|
||||||
|
if (error) {
|
||||||
|
NSLog(@"Failed to delete file: %@, error: %@", filePath, error);
|
||||||
|
allDeleted = NO;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (allDeleted) {
|
||||||
|
NSLog(@"append directory has files, deleted all, calling onEnd");
|
||||||
|
[self onEnd:nil];
|
||||||
}
|
}
|
||||||
});
|
|
||||||
return NO;
|
|
||||||
}
|
|
||||||
BOOL res = needAdContinue(self->taskAppId, self->_lastIdfa, maxEcpm);
|
|
||||||
if(res) {
|
|
||||||
return YES;
|
|
||||||
}
|
|
||||||
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, sec * NSEC_PER_SEC), self.manQueue, ^{
|
|
||||||
@autoreleasepool {
|
|
||||||
[weakSelf startApp];
|
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)onEnd:(NSDictionary *)dic {
|
||||||
|
@autoreleasepool {
|
||||||
|
if (self->taskAppId) {
|
||||||
|
[self appKill:self->taskAppId];
|
||||||
|
}
|
||||||
|
[self startApp];
|
||||||
|
}
|
||||||
return NO;
|
return NO;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)startApp {
|
- (void)startApp {
|
||||||
@autoreleasepool {
|
@autoreleasepool {
|
||||||
if(!self->running){
|
if (!self->running) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
self->lastRun = [NSDate date];
|
self->lastRun = [NSDate date];
|
||||||
if (self->country == nil || [self->country isEqual:NULL] || [self->country isEqual:@""]) {
|
|
||||||
[self setRemoteInfo];
|
|
||||||
self->lastGetCountry = [NSDate date];
|
|
||||||
} else {
|
|
||||||
NSDate *curRunTime = [NSDate date];
|
|
||||||
NSTimeInterval elapsed = [curRunTime timeIntervalSinceDate:self->lastGetCountry];
|
|
||||||
if (elapsed >= 300) {
|
|
||||||
[self setRemoteInfo];
|
|
||||||
self->lastGetCountry = [NSDate date];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
NSDate *startTime = [NSDate date];
|
||||||
|
NSLog(@"getChangeInfo started at: %@", startTime);
|
||||||
__weak typeof(self) weakSelf = self;
|
__weak typeof(self) weakSelf = self;
|
||||||
getChangeInfo(self->_lastIdfa, ^(NSDictionary *dic) {
|
getChangeInfo(self->_lastIdfa ?: @"", ^(NSDictionary *dic) {
|
||||||
|
if (!dic) {
|
||||||
|
NSLog(@"getChangeInfo returned nil dictionary");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
NSDate *endTime = [NSDate date];
|
||||||
|
NSTimeInterval duration = [endTime timeIntervalSinceDate:startTime];
|
||||||
|
NSLog(@"getChangeInfo completed at: %@, duration: %.2f seconds", endTime, duration);
|
||||||
dispatch_async(weakSelf.manQueue, ^{
|
dispatch_async(weakSelf.manQueue, ^{
|
||||||
[weakSelf onChangeInfo:dic];
|
[weakSelf onChangeInfo:dic];
|
||||||
});
|
});
|
||||||
}, ^(NSError *err) {
|
}, ^(NSError *err) {
|
||||||
|
NSDate *endTime = [NSDate date];
|
||||||
|
NSTimeInterval duration = [endTime timeIntervalSinceDate:startTime];
|
||||||
|
NSLog(@"getChangeInfo completed at: %@, duration: %.2f seconds", endTime, duration);
|
||||||
NSLog(@"XS- startTask NSError is null, %@", err);
|
NSLog(@"XS- startTask NSError is null, %@", err);
|
||||||
|
[weakSelf showStatus:[NSString stringWithFormat:@"getChangeInfo error after 5s restart: %@", err.description]];
|
||||||
|
// 延迟重新启动App
|
||||||
|
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), weakSelf.manQueue, ^{
|
||||||
|
__strong typeof(weakSelf) strongSelf = weakSelf;
|
||||||
|
if (strongSelf && strongSelf->running) { // 确保任务未被停止
|
||||||
|
[strongSelf startApp];
|
||||||
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -250,17 +288,38 @@ BOOL myadTaskManualStop = NO;
|
|||||||
[[IPhoneHertbeat sharedInstance] setStatus:@"运行中"];
|
[[IPhoneHertbeat sharedInstance] setStatus:@"运行中"];
|
||||||
[self startApp];
|
[self startApp];
|
||||||
__weak typeof(self) weakSelf = self;
|
__weak typeof(self) weakSelf = self;
|
||||||
|
// 确保Timer在重新启动前被取消
|
||||||
if (!_timer) {
|
if (_timer) {
|
||||||
_timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, self.manQueue);
|
dispatch_source_cancel(_timer);
|
||||||
dispatch_source_set_timer(_timer, dispatch_time(DISPATCH_TIME_NOW, 0), 10 * NSEC_PER_SEC, 1 * NSEC_PER_SEC);
|
_timer = nil;
|
||||||
dispatch_source_set_event_handler(_timer, ^{
|
|
||||||
@autoreleasepool {
|
|
||||||
[weakSelf proc];
|
|
||||||
}
|
|
||||||
});
|
|
||||||
dispatch_resume(_timer);
|
|
||||||
}
|
}
|
||||||
|
// 使用 dispatch_source 创建timer
|
||||||
|
_timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, self.manQueue);
|
||||||
|
dispatch_source_set_timer(_timer, dispatch_time(DISPATCH_TIME_NOW, 0), 10 * NSEC_PER_SEC, 1 * NSEC_PER_SEC);
|
||||||
|
dispatch_source_set_event_handler(_timer, ^{
|
||||||
|
@autoreleasepool {
|
||||||
|
[weakSelf proc];
|
||||||
|
// 检查心跳状态
|
||||||
|
if (![[IPhoneHertbeat sharedInstance] isHeartbeatActive]) {
|
||||||
|
NSLog(@"Heartbeat inactive, restarting...");
|
||||||
|
[[IPhoneHertbeat sharedInstance] restartHeartbeat];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
dispatch_resume(_timer);
|
||||||
|
|
||||||
|
// 新增定时器,每秒检查 append 文件
|
||||||
|
if (_appendCheckTimer) {
|
||||||
|
dispatch_source_cancel(_appendCheckTimer);
|
||||||
|
_appendCheckTimer = nil;
|
||||||
|
}
|
||||||
|
_appendCheckTimer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, self.manQueue);
|
||||||
|
dispatch_source_set_timer(_appendCheckTimer, dispatch_time(DISPATCH_TIME_NOW, 0), 1 * NSEC_PER_SEC, 0);
|
||||||
|
dispatch_source_set_event_handler(_appendCheckTimer, ^{
|
||||||
|
[weakSelf checkAppendFile];
|
||||||
|
});
|
||||||
|
dispatch_resume(_appendCheckTimer);
|
||||||
|
|
||||||
[[MyEventBus sharedInstance] postEvent:@"UpdateRunStatus" withObject:@(YES)];
|
[[MyEventBus sharedInstance] postEvent:@"UpdateRunStatus" withObject:@(YES)];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -272,25 +331,25 @@ BOOL myadTaskManualStop = NO;
|
|||||||
NSLog(@"XS- MyAdTaskManager proc");
|
NSLog(@"XS- MyAdTaskManager proc");
|
||||||
NSDate* curRunTime = [NSDate date];
|
NSDate* curRunTime = [NSDate date];
|
||||||
NSTimeInterval elapsed = [curRunTime timeIntervalSinceDate:self->lastRun];
|
NSTimeInterval elapsed = [curRunTime timeIntervalSinceDate:self->lastRun];
|
||||||
|
BOOL washParam = [[XSPhoneConfig sharedInstance] WashParam];
|
||||||
|
if (elapsed >= 80) {
|
||||||
|
//[self onStop];
|
||||||
|
[self startApp];
|
||||||
|
|
||||||
if (elapsed >= 100) {
|
}
|
||||||
[self start];
|
if (!washParam) {
|
||||||
} else {
|
NSString* appId = [ self frontMostAppId];
|
||||||
NSString* appId = [self frontMostAppId];
|
|
||||||
|
|
||||||
if (![appId isEqual:self->taskAppId]) {
|
if (![appId isEqual: self->taskAppId]) {
|
||||||
|
// 引入冷却时间,避免频繁切换应用
|
||||||
[self appKill:appId];
|
[self appKill:appId];
|
||||||
|
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), self.manQueue, ^{
|
||||||
// ⭐️ 修复: 先转为strong再使用
|
[self appRun:self->taskAppId];
|
||||||
__weak typeof(self) weakSelf = self;
|
self.lastAppSwitchTime = [NSDate timeIntervalSinceReferenceDate]; // 更新切换时间
|
||||||
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC), self.manQueue, ^{
|
|
||||||
__strong typeof(weakSelf) strongSelf = weakSelf;
|
|
||||||
if (!strongSelf) return;
|
|
||||||
|
|
||||||
[strongSelf appRun:strongSelf->taskAppId];
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSString *)toggle {
|
- (NSString *)toggle {
|
||||||
@ -310,9 +369,50 @@ BOOL myadTaskManualStop = NO;
|
|||||||
dispatch_source_cancel(_timer);
|
dispatch_source_cancel(_timer);
|
||||||
_timer = nil;
|
_timer = nil;
|
||||||
}
|
}
|
||||||
|
// 停止 append 文件定时器
|
||||||
|
if (_appendCheckTimer) {
|
||||||
|
dispatch_source_cancel(_appendCheckTimer);
|
||||||
|
_appendCheckTimer = nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[IPhoneHertbeat sharedInstance] stopHeartbeat]; // 确保心跳停止
|
||||||
[[MyEventBus sharedInstance] postEvent:@"UpdateRunStatus" withObject:@(NO)];
|
[[MyEventBus sharedInstance] postEvent:@"UpdateRunStatus" withObject:@(NO)];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (NSString *)getSystemInfo {
|
||||||
|
void *buffer = NULL;
|
||||||
|
NSString *result = nil;
|
||||||
|
|
||||||
|
// 设置 sysctl 的 mib 参数
|
||||||
|
// 0x100000006LL 拆分为两个 int: {6, 1}
|
||||||
|
// 高32位是1 (0x1), 低32位是6 (0x6)
|
||||||
|
int mib[2];
|
||||||
|
mib[0] = 6; // CTL_HW
|
||||||
|
mib[1] = 1; // HW_MACHINE
|
||||||
|
|
||||||
|
size_t size = 100;
|
||||||
|
|
||||||
|
// 第一次调用获取实际需要的缓冲区大小
|
||||||
|
// #import <sys/sysctl.h>
|
||||||
|
sysctl(mib, 2, NULL, &size, NULL, 0);
|
||||||
|
|
||||||
|
// 分配内存
|
||||||
|
buffer = malloc(size);
|
||||||
|
|
||||||
|
if (buffer != NULL) {
|
||||||
|
// 第二次调用获取实际数据
|
||||||
|
sysctl(mib, 2, buffer, &size, NULL, 0);
|
||||||
|
|
||||||
|
// 转换为 NSString
|
||||||
|
result = [NSString stringWithUTF8String:(const char *)buffer];
|
||||||
|
|
||||||
|
// 释放内存
|
||||||
|
free(buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
- (void)onChangeInfo:(NSDictionary *)dic {
|
- (void)onChangeInfo:(NSDictionary *)dic {
|
||||||
NSString* t_idfa = [self getStr:@"idfa" dic:dic];
|
NSString* t_idfa = [self getStr:@"idfa" dic:dic];
|
||||||
if (![XSHelper strIsEmpty:t_idfa]) {
|
if (![XSHelper strIsEmpty:t_idfa]) {
|
||||||
@ -347,36 +447,27 @@ BOOL myadTaskManualStop = NO;
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
NSDictionary *workerInfo = dic[@"workerInfo"];
|
|
||||||
if(workerInfo && ![workerInfo isEqual:[NSNull null]]) {
|
|
||||||
|
|
||||||
} else {
|
|
||||||
NSLog(@"XS- startTask workerInfo is null");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
int t_workType = [self getInt:@"workType" dic:workerInfo];
|
|
||||||
if (t_workType > -99) {
|
|
||||||
self->workType = t_workType;
|
|
||||||
} else {
|
|
||||||
NSLog(@"XS- startTask workType is null");
|
|
||||||
}
|
|
||||||
|
|
||||||
__weak typeof(self) weakSelf = self;
|
__weak typeof(self) weakSelf = self;
|
||||||
[self restart:^{
|
[self restart:^{
|
||||||
__strong typeof(weakSelf) strongSelf = weakSelf;
|
__strong typeof(weakSelf) strongSelf = weakSelf;
|
||||||
if (!strongSelf) return;
|
if (!strongSelf) return;
|
||||||
|
|
||||||
saveChangeDataFile(dic);
|
void (^saveBlock)(void) = ^{
|
||||||
strongSelf->running = YES;
|
if (saveChangeDataFile(dic)) {
|
||||||
|
// 成功,执行后续流程
|
||||||
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC),
|
strongSelf->running = YES;
|
||||||
strongSelf.manQueue, ^{
|
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.1 * NSEC_PER_SEC),
|
||||||
__strong typeof(weakSelf) strongSelf2 = weakSelf;
|
strongSelf.manQueue, ^{
|
||||||
if (!strongSelf2) return;
|
__strong typeof(weakSelf) strongSelf2 = weakSelf;
|
||||||
|
if (!strongSelf2) return;
|
||||||
[strongSelf2 appRun:strongSelf2->taskAppId];
|
[strongSelf2 appRun:strongSelf2->taskAppId];
|
||||||
});
|
});
|
||||||
|
} else {
|
||||||
|
NSLog(@"XS- saveChangeDataFile failed");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
saveBlock();
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -404,45 +495,38 @@ BOOL myadTaskManualStop = NO;
|
|||||||
tempBfaceDictKey = [[NSMutableDictionary alloc] init];
|
tempBfaceDictKey = [[NSMutableDictionary alloc] init];
|
||||||
}
|
}
|
||||||
NSString *serverUrl = [[XSPhoneConfig sharedInstance] ServerURL];
|
NSString *serverUrl = [[XSPhoneConfig sharedInstance] ServerURL];
|
||||||
|
BOOL washParam = [[XSPhoneConfig sharedInstance] WashParam];
|
||||||
[tempBfaceDictKey setValue:@"http://127.0.0.1:6000" forKey:@"adbrush_local_url"];
|
|
||||||
[tempBfaceDictKey setValue:serverUrl forKey:@"adbrush_base_url"];
|
[tempBfaceDictKey setValue:serverUrl forKey:@"adbrush_base_url"];
|
||||||
__weak typeof(self) weakSelf = self;
|
[tempBfaceDictKey setValue:@(washParam) forKey:@"washParam"];
|
||||||
getLowEcpm(^(NSNumber *lowEcpm) {
|
// [tempBfaceDictKey setValue:lowEcpm forKey:@"adbrush_ecpm"];
|
||||||
__strong typeof(weakSelf) strongSelf = weakSelf;
|
if(self->linkId) {
|
||||||
if (!strongSelf) return;
|
[tempBfaceDictKey setValue:self->linkId forKey:@"linkId"];
|
||||||
|
} else {
|
||||||
|
NSString *linkId = [[NSUUID UUID] UUIDString];
|
||||||
|
[tempBfaceDictKey setValue:linkId forKey:@"linkId"];
|
||||||
|
}
|
||||||
|
|
||||||
BOOL washParam = strongSelf->workType == 0 ? YES : NO;
|
if(self->dataId) {
|
||||||
[tempBfaceDictKey setValue:@(washParam) forKey:@"washParam"];
|
[tempBfaceDictKey setValue:self->dataId forKey:@"dataId"];
|
||||||
[tempBfaceDictKey setValue:lowEcpm forKey:@"adbrush_ecpm"];
|
} else {
|
||||||
if(strongSelf->linkId) {
|
[tempBfaceDictKey setValue:@"0" forKey:@"dataId"];
|
||||||
[tempBfaceDictKey setValue:strongSelf->linkId forKey:@"linkId"];
|
}
|
||||||
} else {
|
if(self->remoteIp) {
|
||||||
NSString *linkId = [[NSUUID UUID] UUIDString];
|
[tempBfaceDictKey setValue:self->remoteIp forKey:@"remoteIp"];
|
||||||
[tempBfaceDictKey setValue:linkId forKey:@"linkId"];
|
}
|
||||||
}
|
uint16_t udp_port = [XUDPServer sharedInstance].udp_port;
|
||||||
|
[tempBfaceDictKey setValue:@(udp_port) forKey:@"udp_port"];
|
||||||
|
[tempBfaceDictKey setValue:[self getSystemInfo] forKey:@"device_model"];
|
||||||
|
|
||||||
if(strongSelf->dataId) {
|
NSLog(@"XS- resetApp 1");
|
||||||
[tempBfaceDictKey setValue:strongSelf->dataId forKey:@"dataId"];
|
NSMutableDictionary *tempAppInfo = [[NSMutableDictionary alloc] init];
|
||||||
} else {
|
[tempAppInfo setValue:tempBfaceDictKey forKey:@"bfaceDictKey"];
|
||||||
NSString *dataId = @"0";
|
|
||||||
[tempBfaceDictKey setValue:dataId forKey:@"dataId"];
|
|
||||||
}
|
|
||||||
if(strongSelf->remoteIp) {
|
|
||||||
[tempBfaceDictKey setValue:strongSelf->remoteIp forKey:@"remoteIp"];
|
|
||||||
}
|
|
||||||
uint16_t udp_port = [XUDPServer sharedInstance].udp_port;
|
|
||||||
[tempBfaceDictKey setValue:@(udp_port) forKey:@"udp_port"];
|
|
||||||
|
|
||||||
NSLog(@"XS- resetApp 1");
|
XSClearAll(appId);
|
||||||
NSMutableDictionary *tempAppInfo = [[NSMutableDictionary alloc] init];
|
|
||||||
[tempAppInfo setValue:tempBfaceDictKey forKey:@"bfaceDictKey"];
|
|
||||||
|
|
||||||
XSClearAll(appId);
|
XSSaveAppInfo(tempAppInfo, appInfoPath);
|
||||||
|
callback();
|
||||||
|
|
||||||
XSSaveAppInfo(tempAppInfo, appInfoPath);
|
|
||||||
callback();
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSString *)frontMostAppId {
|
- (NSString *)frontMostAppId {
|
||||||
@ -461,99 +545,38 @@ BOOL myadTaskManualStop = NO;
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)tap:(int)i x:(int)x y:(int)y {
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)restart:(OnEndCallback)callback {
|
- (void)restart:(OnEndCallback)callback {
|
||||||
__weak typeof(self) weakSelf = self;
|
@synchronized (self) {
|
||||||
dispatch_async(self.manQueue, ^{
|
__weak typeof(self) weakSelf = self;
|
||||||
@try {
|
dispatch_async(self.manQueue, ^{
|
||||||
__strong typeof(weakSelf) strongSelf = weakSelf;
|
@try {
|
||||||
if (!strongSelf) return;
|
__strong typeof(weakSelf) strongSelf = weakSelf;
|
||||||
|
if (!strongSelf) return;
|
||||||
|
|
||||||
[weakSelf appKill:@"com.apple.AppStore"];
|
[weakSelf appKill:@"com.apple.AppStore"];
|
||||||
[weakSelf appKill:@"com.apple.mobilesafari"];
|
[weakSelf appKill:@"com.apple.mobilesafari"];
|
||||||
if (strongSelf->taskAppId && ![strongSelf->taskAppId isEqual:[NSNull null]] && [strongSelf->taskAppId length] > 0) {
|
if (strongSelf->taskAppId && ![strongSelf->taskAppId isEqual:[NSNull null]] && [strongSelf->taskAppId length] > 0) {
|
||||||
[weakSelf appKill:strongSelf->taskAppId];
|
[weakSelf appKill:strongSelf->taskAppId];
|
||||||
[weakSelf unlock];
|
|
||||||
|
|
||||||
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC),
|
|
||||||
strongSelf.manQueue, ^{
|
|
||||||
[weakSelf unlock];
|
[weakSelf unlock];
|
||||||
[weakSelf resetApp:strongSelf->taskAppId callback:callback];
|
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), strongSelf.manQueue, ^{
|
||||||
});
|
[weakSelf unlock];
|
||||||
|
[weakSelf resetApp:strongSelf->taskAppId callback:callback];
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} @catch (NSException *exception) {
|
||||||
|
NSLog(@"Error in restart: %@", exception);
|
||||||
}
|
}
|
||||||
} @catch (NSException *exception) {
|
});
|
||||||
NSLog(@"Error in restart: %@", exception);
|
}
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)rndTouchApp {
|
- (void)rndTouchApp {
|
||||||
int times = [XSHelper random:2 and:4];
|
int times = [XSHelper random:2 and:4];
|
||||||
[self _rndTouchAppRecursive:0 totalTimes:times];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)_rndTouchAppRecursive:(int)currentIndex totalTimes:(int)times {
|
|
||||||
if (currentIndex >= times) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
int x = [XSHelper random:40 and:screen_w - 20];
|
|
||||||
int y = [XSHelper random:50 and:screen_h - 240];
|
|
||||||
NSString* appId = [self frontMostAppId];
|
|
||||||
|
|
||||||
if ([appId isEqual:self->taskAppId]) {
|
|
||||||
[self tap:1 x:x y:y];
|
|
||||||
|
|
||||||
__weak typeof(self) weakSelf = self;
|
|
||||||
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.002 * NSEC_PER_SEC)),
|
|
||||||
self.manQueue, ^{
|
|
||||||
[weakSelf _rndTouchAppRecursive:currentIndex + 1 totalTimes:times];
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)touchAppTask:(int)beforeTouch {
|
|
||||||
__weak typeof(self) weakSelf = self;
|
|
||||||
|
|
||||||
double delaySec = beforeTouch;
|
|
||||||
|
|
||||||
void (^touchBlock)(void) = ^{
|
|
||||||
[weakSelf rndTouchApp];
|
|
||||||
|
|
||||||
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 2 * NSEC_PER_SEC),
|
|
||||||
weakSelf.manQueue, ^{
|
|
||||||
__strong typeof(weakSelf) strongSelf = weakSelf;
|
|
||||||
if (!strongSelf) return;
|
|
||||||
|
|
||||||
int x = [XSHelper random:40 and:strongSelf->screen_w - 20];
|
|
||||||
int y = [XSHelper random:50 and:strongSelf->screen_h - 240];
|
|
||||||
[strongSelf tap:1 x:x y:y];
|
|
||||||
|
|
||||||
NSString* appId = [strongSelf frontMostAppId];
|
|
||||||
|
|
||||||
if (![appId isEqual:strongSelf->taskAppId]) {
|
|
||||||
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC),
|
|
||||||
strongSelf.manQueue, ^{
|
|
||||||
__strong typeof(weakSelf) strongSelf2 = weakSelf;
|
|
||||||
if (!strongSelf2) return;
|
|
||||||
|
|
||||||
[strongSelf2 appRun:strongSelf2->taskAppId];
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
[strongSelf appRun:strongSelf->taskAppId];
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
if (delaySec > 0) {
|
|
||||||
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delaySec * NSEC_PER_SEC)),
|
|
||||||
self.manQueue, touchBlock);
|
|
||||||
} else {
|
|
||||||
touchBlock();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSString*)getStr:(NSString *)key dic:(NSDictionary*)dic {
|
- (NSString*)getStr:(NSString *)key dic:(NSDictionary*)dic {
|
||||||
NSLog(@"getStr: %@", key);
|
NSLog(@"getStr: %@", key);
|
||||||
|
|||||||
@ -35,34 +35,21 @@ void startSimpleServer(void) {
|
|||||||
// 在主队列初始化关键服务
|
// 在主队列初始化关键服务
|
||||||
dispatch_async(dispatch_get_main_queue(), ^{
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
[[IPhoneHertbeat sharedInstance] start];
|
[[IPhoneHertbeat sharedInstance] start];
|
||||||
[[IosSystemCmd sharedInstance] start];
|
// [[IosSystemCmd sharedInstance] start];
|
||||||
});
|
});
|
||||||
|
|
||||||
// 在服务器队列中处理服务器相关操作
|
// 在服务器队列中处理服务器相关操作
|
||||||
dispatch_async(serverQueue, ^{
|
dispatch_async(serverQueue, ^{
|
||||||
@autoreleasepool {
|
@autoreleasepool {
|
||||||
// 初始化发送者ID
|
|
||||||
// 启动日志
|
|
||||||
pushIphoneLog(@"on start simple server!!!");
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 完成日志
|
|
||||||
pushIphoneLog(@"on start simple server -ok");
|
|
||||||
|
|
||||||
// 服务器端
|
// 服务器端
|
||||||
// MessagePortServer *server = [[MessagePortServer alloc] init];
|
// MessagePortServer *server = [[MessagePortServer alloc] init];
|
||||||
// [server startServer];
|
// [server startServer];
|
||||||
XUDPServer *udpserver = [XUDPServer sharedInstance];
|
XUDPServer *udpserver = [XUDPServer sharedInstance];
|
||||||
[udpserver start];
|
[udpserver start];
|
||||||
// 创建运行循环
|
// 移除显式运行NSRunLoop,让GCDAsyncUdpSocket在自己的队列中管理
|
||||||
NSRunLoop *runLoop = [NSRunLoop currentRunLoop];
|
// NSRunLoop *runLoop = [NSRunLoop currentRunLoop];
|
||||||
|
// [runLoop addPort:[NSPort port] forMode:NSDefaultRunLoopMode];
|
||||||
// 添加一个端口来保持运行循环活跃
|
// [runLoop run];
|
||||||
[runLoop addPort:[NSPort port] forMode:NSDefaultRunLoopMode];
|
|
||||||
|
|
||||||
// 运行循环
|
|
||||||
[runLoop run];
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@ -9,6 +9,7 @@
|
|||||||
#import "XSHelper.h"
|
#import "XSHelper.h"
|
||||||
#import "XSHackIos.h"
|
#import "XSHackIos.h"
|
||||||
#import "MyAdTask2.h"
|
#import "MyAdTask2.h"
|
||||||
|
#import "MyEventBus.h"
|
||||||
|
|
||||||
#import "UDPHandler.h"
|
#import "UDPHandler.h"
|
||||||
|
|
||||||
@ -68,10 +69,12 @@
|
|||||||
return [XSHelper dic2Json:resData];
|
return [XSHelper dic2Json:resData];
|
||||||
}
|
}
|
||||||
else if([XSHelper isMatch:@"^/adtask/show" test:path]) {
|
else if([XSHelper isMatch:@"^/adtask/show" test:path]) {
|
||||||
MyAdTask2Mangger *ad = [MyAdTask2Mangger sharedInstance];
|
|
||||||
NSDictionary *rq = dic[@"body"];
|
[[MyEventBus sharedInstance] postEvent:@"Show" withObject:nil];
|
||||||
int close = [ad onShow:rq];
|
return [XSHelper dic2Json:resData];
|
||||||
[resData setValue:@(close) forKey:@"close"];
|
}
|
||||||
|
else if([XSHelper isMatch:@"^/adtask/load" test:path]) {
|
||||||
|
[[MyEventBus sharedInstance] postEvent:@"Load" withObject:nil];
|
||||||
return [XSHelper dic2Json:resData];
|
return [XSHelper dic2Json:resData];
|
||||||
}
|
}
|
||||||
else if([XSHelper isMatch:@"^/adtask/end" test:path]) {
|
else if([XSHelper isMatch:@"^/adtask/end" test:path]) {
|
||||||
|
|||||||
@ -22,42 +22,25 @@
|
|||||||
/**
|
/**
|
||||||
获取当前应用
|
获取当前应用
|
||||||
*/
|
*/
|
||||||
SBApplication* XSGetFrontMostApplication(void)
|
SBApplication* XSGetFrontMostApplication(void) {
|
||||||
{
|
|
||||||
//TODO: might cause problem here. Both _accessibilityFrontMostApplication failed or front most application springboard will cause app be nil.
|
|
||||||
__block id app = nil;
|
__block id app = nil;
|
||||||
NSLog(@"XS- getFrontMostApplication");
|
NSLog(@"XS- getFrontMostApplication");
|
||||||
|
|
||||||
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
|
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
|
||||||
dispatch_sync(dispatch_get_main_queue(), ^{
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
@try{
|
@try {
|
||||||
|
|
||||||
SpringBoard *springboard = (SpringBoard *)[UIApplication sharedApplication];
|
SpringBoard *springboard = (SpringBoard *)[UIApplication sharedApplication];
|
||||||
//SpringBoard *springboard = (SpringBoard*)[%c(SpringBoard) sharedApplication];
|
|
||||||
if ([springboard respondsToSelector:@selector(_accessibilityFrontMostApplication)]) {
|
if ([springboard respondsToSelector:@selector(_accessibilityFrontMostApplication)]) {
|
||||||
app = [springboard performSelector:@selector(_accessibilityFrontMostApplication)];
|
app = [springboard _accessibilityFrontMostApplication];
|
||||||
NSLog(@"XS- Simulated home button press, %@", app);
|
|
||||||
}
|
}
|
||||||
// app = [springboard _accessibilityFrontMostApplication];
|
} @catch (NSException *exception) {
|
||||||
//NSLog(@"com.zjx.springboard: app: %@, id: %@", app, [app displayIdentifier]);
|
NSLog(@"XS- Debug: %@", exception.reason);
|
||||||
|
|
||||||
}
|
|
||||||
@catch (NSException *exception) {
|
|
||||||
NSLog(@"XS-: Debug: %@", exception.reason);
|
|
||||||
}
|
}
|
||||||
dispatch_semaphore_signal(semaphore);
|
dispatch_semaphore_signal(semaphore);
|
||||||
});
|
});
|
||||||
// 设置超时时间为5秒
|
|
||||||
dispatch_time_t timeout = dispatch_time(DISPATCH_TIME_NOW, 5 * NSEC_PER_SEC);
|
|
||||||
|
|
||||||
// 等待信号量,最多等待5秒
|
if (dispatch_semaphore_wait(semaphore, dispatch_time(DISPATCH_TIME_NOW, 5 * NSEC_PER_SEC)) != 0) {
|
||||||
long result = dispatch_semaphore_wait(semaphore, timeout);
|
NSLog(@"XSGetFrontMostApplication timeout");
|
||||||
|
|
||||||
if (result == 0) {
|
|
||||||
// 在超时之前收到了信号
|
|
||||||
NSLog(@"XSGetFrontMostApplication end");
|
|
||||||
} else {
|
|
||||||
// 超时
|
|
||||||
NSLog(@"XSGetFrontMostApplication 等待超时");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return app;
|
return app;
|
||||||
@ -189,9 +172,27 @@ int kill2(NSString *appexe) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int XSKillAppByName(NSString *pkgName){
|
int XSKillAppByName(NSString *pkgName) {
|
||||||
NSString* appexe = XSGetAppExecutable(pkgName);
|
NSString *appexe = XSGetAppExecutable(pkgName);
|
||||||
return kill2(appexe);
|
if (!appexe) {
|
||||||
|
NSLog(@"App executable not found for package: %@", pkgName);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// NSString *cmd = [NSString stringWithFormat:@"/usr/bin/killall -9 %@", appexe];
|
||||||
|
const char *cmdStr = [appexe UTF8String];
|
||||||
|
// char *argv[] = {"/usr/bin/killall", "-9", (char *)app, NULL};
|
||||||
|
char *appStr = strdup(cmdStr);
|
||||||
|
// int r = c(appStr, NULL, NULL);
|
||||||
|
char *argv[] = {
|
||||||
|
"/usr/bin/killall",
|
||||||
|
"-9",
|
||||||
|
appStr,
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
int r = XSRuncmd(argv); // 这条路径内部有 waitpid,不会留僵尸
|
||||||
|
free(appStr);
|
||||||
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -690,45 +691,31 @@ void XSCleanSafari(void) {
|
|||||||
void XSCleanKeychain(void) {
|
void XSCleanKeychain(void) {
|
||||||
NSFileManager* man = [NSFileManager defaultManager];
|
NSFileManager* man = [NSFileManager defaultManager];
|
||||||
if ([man fileExistsAtPath:@"/var/Keychains/keychain-2.db"]) {
|
if ([man fileExistsAtPath:@"/var/Keychains/keychain-2.db"]) {
|
||||||
|
|
||||||
/*
|
|
||||||
char *cpCmd = "/usr/bin/cp";
|
|
||||||
if ([man fileExistsAtPath:@"/bin/cp"]) {
|
|
||||||
cpCmd = "/bin/cp";
|
|
||||||
}
|
|
||||||
|
|
||||||
char *cmds[] = {
|
|
||||||
cpCmd,
|
|
||||||
"/var/Keychains/keychain-2.db",
|
|
||||||
"/tmp/",
|
|
||||||
NULL
|
|
||||||
};
|
|
||||||
*/
|
|
||||||
// XSRuncmd(cmds);
|
|
||||||
|
|
||||||
XSSystem("cp /var/Keychains/keychain-2.db /tmp/");
|
XSSystem("cp /var/Keychains/keychain-2.db /tmp/");
|
||||||
sqlite3* ppDb;
|
sqlite3* ppDb = NULL;
|
||||||
char cmd[256];
|
char cmd[256];
|
||||||
if (0 == sqlite3_open("/tmp/keychain-2.db", &ppDb)) {
|
int rc = sqlite3_open("/tmp/keychain-2.db", &ppDb);
|
||||||
|
if (rc == SQLITE_OK && ppDb) {
|
||||||
strcpy(cmd, "DELETE FROM cert WHERE agrp<>'apple' and agrp not like '%apple%' and agrp <> 'ichat' and agrp <>'lockdown-identities'");
|
strcpy(cmd, "DELETE FROM cert WHERE agrp<>'apple' and agrp not like '%apple%' and agrp <> 'ichat' and agrp <>'lockdown-identities'");
|
||||||
sqlite3_exec(ppDb, cmd, 0, 0, 0);
|
sqlite3_exec(ppDb, cmd, 0, 0, 0);
|
||||||
strcpy(cmd, "DELETE FROM keys WHERE agrp<>'apple' and agrp not like '%apple%' and agrp <> 'ichat' and agrp <>'lockdown-identities'");
|
strcpy(cmd, "DELETE FROM keys WHERE agrp<>'apple' and agrp not like '%apple%' and agrp <> 'ichat' and agrp <>'lockdown-identities'");
|
||||||
sqlite3_exec(ppDb, cmd, 0, 0, 0);
|
sqlite3_exec(ppDb, cmd, 0, 0, 0);
|
||||||
strcpy(cmd, "DELETE FROM inet WHERE agrp<>'apple' and agrp not like '%apple%' and agrp <> 'ichat' and agrp <>'lockdown-identities'");
|
strcpy(cmd, "DELETE FROM inet WHERE agrp<>'apple' and agrp not like '%apple%' and agrp <> 'ichat' and agrp <>'lockdown-identities'");
|
||||||
sqlite3_exec(ppDb, cmd, 0, 0, 0);
|
sqlite3_exec(ppDb, cmd, 0, 0, 0);
|
||||||
/*
|
|
||||||
char *cmds1[] = {
|
// 关键:关闭数据库,释放 /private/var/tmp/keychain-2.db 句柄
|
||||||
cpCmd,
|
sqlite3_close(ppDb);
|
||||||
"/tmp/keychain-2.*",
|
ppDb = NULL;
|
||||||
"/var/Keychains/",
|
|
||||||
NULL
|
|
||||||
};
|
|
||||||
*/
|
|
||||||
//XSRuncmd(cmds1);
|
|
||||||
|
|
||||||
XSSystem("cp /tmp/keychain-2.* /var/Keychains/");
|
XSSystem("cp /tmp/keychain-2.* /var/Keychains/");
|
||||||
|
} else {
|
||||||
|
// 打开失败也要确保关闭
|
||||||
|
if (ppDb) {
|
||||||
|
sqlite3_close(ppDb);
|
||||||
|
ppDb = NULL;
|
||||||
|
}
|
||||||
|
NSLog(@"XSCleanKeychain: sqlite3_open failed: %d", rc);
|
||||||
}
|
}
|
||||||
//free(cpCmd);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1178,62 +1165,68 @@ BOOL verifyEntitlement(NSString *entitlementName) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
pid_t system2(const char * command, int * infp, int * outfp)
|
pid_t system2(const char *command, int *infp, int *outfp) {
|
||||||
{
|
if (!command || strlen(command) == 0) {
|
||||||
|
NSLog(@"system2: Invalid command");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
int p_stdin[2];
|
int p_stdin[2];
|
||||||
int p_stdout[2];
|
int p_stdout[2];
|
||||||
pid_t pid;
|
pid_t pid;
|
||||||
|
|
||||||
if (pipe(p_stdin) == -1)
|
if (pipe(p_stdin) == -1) {
|
||||||
|
NSLog(@"system2: Failed to create stdin pipe: %s", strerror(errno));
|
||||||
return -1;
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
if (pipe(p_stdout) == -1) {
|
if (pipe(p_stdout) == -1) {
|
||||||
|
NSLog(@"system2: Failed to create stdout pipe: %s", strerror(errno));
|
||||||
close(p_stdin[0]);
|
close(p_stdin[0]);
|
||||||
close(p_stdin[1]);
|
close(p_stdin[1]);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
pid = fork();
|
posix_spawn_file_actions_t actions;
|
||||||
|
posix_spawn_file_actions_init(&actions);
|
||||||
|
posix_spawn_file_actions_adddup2(&actions, p_stdin[0], STDIN_FILENO);
|
||||||
|
posix_spawn_file_actions_adddup2(&actions, p_stdout[1], STDOUT_FILENO);
|
||||||
|
// 子进程中关闭不需要的端
|
||||||
|
posix_spawn_file_actions_addclose(&actions, p_stdin[1]);
|
||||||
|
posix_spawn_file_actions_addclose(&actions, p_stdout[0]);
|
||||||
|
|
||||||
if (pid < 0) {
|
char *argv[] = {"/bin/sh", "-c", (char *)command, NULL};
|
||||||
close(p_stdin[0]);
|
int status = posix_spawn(&pid, "/bin/sh", &actions, NULL, argv, environ);
|
||||||
|
|
||||||
|
posix_spawn_file_actions_destroy(&actions);
|
||||||
|
|
||||||
|
// 父进程关闭不需要的端
|
||||||
|
close(p_stdin[0]); // 子进程的读端
|
||||||
|
close(p_stdout[1]); // 子进程的写端
|
||||||
|
|
||||||
|
if (status != 0) {
|
||||||
|
NSLog(@"system2: posix_spawn failed with status %d", status);
|
||||||
close(p_stdin[1]);
|
close(p_stdin[1]);
|
||||||
close(p_stdout[0]);
|
close(p_stdout[0]);
|
||||||
close(p_stdout[1]);
|
return -1;
|
||||||
return pid;
|
|
||||||
} else if (pid == 0) {
|
|
||||||
close(p_stdin[1]);
|
|
||||||
dup2(p_stdin[0], 0);
|
|
||||||
close(p_stdout[0]);
|
|
||||||
dup2(p_stdout[1], 1);
|
|
||||||
dup2(open("/dev/null", O_RDONLY), 2);
|
|
||||||
/// Close all other descriptors for the safety sake.
|
|
||||||
for (int i = 3; i < 4096; ++i)
|
|
||||||
close(i);
|
|
||||||
|
|
||||||
setsid();
|
|
||||||
execl("/bin/sh", "sh", "-c", command, NULL);
|
|
||||||
_exit(1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
close(p_stdin[0]);
|
// 返回父进程需要的文件描述符
|
||||||
close(p_stdout[1]);
|
if (infp) {
|
||||||
|
*infp = p_stdin[1]; // 父进程写入到子进程的stdin
|
||||||
if (infp == NULL) {
|
|
||||||
close(p_stdin[1]);
|
|
||||||
} else {
|
} else {
|
||||||
*infp = p_stdin[1];
|
close(p_stdin[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (outfp == NULL) {
|
if (outfp) {
|
||||||
close(p_stdout[0]);
|
*outfp = p_stdout[0]; // 父进程从子进程的stdout读取
|
||||||
} else {
|
} else {
|
||||||
*outfp = p_stdout[0];
|
close(p_stdout[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pid > 0)
|
if (pid > 0) {
|
||||||
{
|
int status = 0;
|
||||||
waitpid(pid, NULL, 0);
|
waitpid(pid, &status, 0);
|
||||||
}
|
}
|
||||||
return pid;
|
return pid;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -18,11 +18,15 @@ typedef void (^rt_str_callback)(NSString*);
|
|||||||
// @property (nonatomic, strong) NSURLSession *session;
|
// @property (nonatomic, strong) NSURLSession *session;
|
||||||
@property (nonatomic, strong) NSURLSessionDataTask *dataTask;
|
@property (nonatomic, strong) NSURLSessionDataTask *dataTask;
|
||||||
@property (nonatomic, strong) NSURLSessionDataTask *postDataTask;
|
@property (nonatomic, strong) NSURLSessionDataTask *postDataTask;
|
||||||
|
@property (nonatomic, assign) NSTimeInterval timeoutInterval; // 新增超时属性
|
||||||
|
|
||||||
- (void) doGET: (NSString*) urlStr withCallback:(request_callback) callback withError: (error_callback) errorCallback;
|
- (void) doGET: (NSString*) urlStr withCallback:(request_callback) callback withError: (error_callback) errorCallback;
|
||||||
- (NSData *) doGET: (NSString*) urlStr;
|
- (NSData *) doGET: (NSString*) urlStr;
|
||||||
- (void) doPOST: (NSString*) urlStr json: (NSString *)json withCallback:(request_callback) callback withError: (error_callback) errorCallback;
|
- (void) doPOST: (NSString*) urlStr json: (NSString *)json withCallback:(request_callback) callback withError: (error_callback) errorCallback;
|
||||||
- (NSData*) doPOST:(NSString *)urlStr json:(NSString *)json;
|
- (NSData*) doPOST:(NSString *)urlStr json:(NSString *)json;
|
||||||
|
- (void)cancelAllRequests; // 新增取消所有请求方法
|
||||||
|
- (void)cancelCurrentGETRequest; // 新增取消当前GET请求方法
|
||||||
|
- (void)cancelCurrentPOSTRequest; // 新增取消当前POST请求方法
|
||||||
- (void)requestNetworkPermissions;
|
- (void)requestNetworkPermissions;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
|||||||
@ -55,6 +55,8 @@ didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge
|
|||||||
-(instancetype)init {
|
-(instancetype)init {
|
||||||
if (self = [super init]) {
|
if (self = [super init]) {
|
||||||
apikey = [[XSPhoneConfig sharedInstance] ApiKey];
|
apikey = [[XSPhoneConfig sharedInstance] ApiKey];
|
||||||
|
self.timeoutInterval = 15.0; // 默认超时时间15秒
|
||||||
|
// 移除重用 session 的创建
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
return nil;
|
return nil;
|
||||||
@ -69,11 +71,16 @@ didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge
|
|||||||
NSURL *url = [NSURL URLWithString:urlStr];
|
NSURL *url = [NSURL URLWithString:urlStr];
|
||||||
|
|
||||||
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url
|
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url
|
||||||
cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:5];
|
cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:self.timeoutInterval];
|
||||||
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
|
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
|
||||||
[request setValue:self->apikey forHTTPHeaderField:@"apikey"];
|
[request setValue:self->apikey forHTTPHeaderField:@"apikey"];
|
||||||
|
|
||||||
NSURLSession *session = [NSURLSession sessionWithoutSSLValidation];// [NSURLSession sharedSession];
|
// 每次请求创建新 session
|
||||||
|
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
|
||||||
|
configuration.timeoutIntervalForRequest = self.timeoutInterval;
|
||||||
|
configuration.timeoutIntervalForResource = self.timeoutInterval;
|
||||||
|
NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration delegate:[[SSLBypassDelegate alloc] init] delegateQueue:nil];
|
||||||
|
|
||||||
self.dataTask = [session dataTaskWithRequest:request
|
self.dataTask = [session dataTaskWithRequest:request
|
||||||
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error)
|
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error)
|
||||||
{
|
{
|
||||||
@ -92,7 +99,6 @@ didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge
|
|||||||
NSLog(@"XS- http get exception error,%@", exception);
|
NSLog(@"XS- http get exception error,%@", exception);
|
||||||
errorCallback(XSErrorFromException(exception));
|
errorCallback(XSErrorFromException(exception));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSData *) doGET: (NSString*) urlStr {
|
- (NSData *) doGET: (NSString*) urlStr {
|
||||||
@ -104,10 +110,10 @@ didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge
|
|||||||
} withError:^(NSError *err) {
|
} withError:^(NSError *err) {
|
||||||
dispatch_semaphore_signal(semaphore);
|
dispatch_semaphore_signal(semaphore);
|
||||||
}];
|
}];
|
||||||
// 设置超时时间为5秒
|
// 设置超时时间为self.timeoutInterval
|
||||||
dispatch_time_t timeout = dispatch_time(DISPATCH_TIME_NOW, 5 * NSEC_PER_SEC);
|
dispatch_time_t timeout = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(self.timeoutInterval * NSEC_PER_SEC));
|
||||||
|
|
||||||
// 等待信号量,最多等待5秒
|
// 等待信号量
|
||||||
long result = dispatch_semaphore_wait(semaphore, timeout);
|
long result = dispatch_semaphore_wait(semaphore, timeout);
|
||||||
|
|
||||||
if (result == 0) {
|
if (result == 0) {
|
||||||
@ -116,6 +122,8 @@ didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge
|
|||||||
} else {
|
} else {
|
||||||
// 超时
|
// 超时
|
||||||
NSLog(@"doGET 等待超时");
|
NSLog(@"doGET 等待超时");
|
||||||
|
// 取消请求,避免资源浪费
|
||||||
|
[self.dataTask cancel];
|
||||||
}
|
}
|
||||||
return _data;
|
return _data;
|
||||||
}
|
}
|
||||||
@ -124,7 +132,8 @@ didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge
|
|||||||
@try {
|
@try {
|
||||||
NSLog(@"XS- doPOST:%@", urlStr);
|
NSLog(@"XS- doPOST:%@", urlStr);
|
||||||
NSURL *url = [NSURL URLWithString:urlStr];
|
NSURL *url = [NSURL URLWithString:urlStr];
|
||||||
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
|
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url
|
||||||
|
cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:self.timeoutInterval]; // 统一超时设置
|
||||||
[request setHTTPMethod:@"POST"];
|
[request setHTTPMethod:@"POST"];
|
||||||
|
|
||||||
// 设置请求头
|
// 设置请求头
|
||||||
@ -135,7 +144,11 @@ didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge
|
|||||||
NSData *bodyData = [XSHelper str2Data:json];
|
NSData *bodyData = [XSHelper str2Data:json];
|
||||||
[request setHTTPBody:bodyData];
|
[request setHTTPBody:bodyData];
|
||||||
|
|
||||||
NSURLSession *session = [NSURLSession sessionWithoutSSLValidation];//[NSURLSession sharedSession];
|
// 每次请求创建新 session
|
||||||
|
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
|
||||||
|
configuration.timeoutIntervalForRequest = self.timeoutInterval;
|
||||||
|
configuration.timeoutIntervalForResource = self.timeoutInterval;
|
||||||
|
NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration delegate:[[SSLBypassDelegate alloc] init] delegateQueue:nil];
|
||||||
|
|
||||||
self.postDataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
|
self.postDataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
|
||||||
if (error) {
|
if (error) {
|
||||||
@ -163,10 +176,10 @@ didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge
|
|||||||
} withError:^(NSError *err) {
|
} withError:^(NSError *err) {
|
||||||
dispatch_semaphore_signal(semaphore);
|
dispatch_semaphore_signal(semaphore);
|
||||||
}];
|
}];
|
||||||
// 设置超时时间为5秒
|
// 设置超时时间为self.timeoutInterval
|
||||||
dispatch_time_t timeout = dispatch_time(DISPATCH_TIME_NOW, 5 * NSEC_PER_SEC);
|
dispatch_time_t timeout = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(self.timeoutInterval * NSEC_PER_SEC));
|
||||||
|
|
||||||
// 等待信号量,最多等待5秒
|
// 等待信号量
|
||||||
long result = dispatch_semaphore_wait(semaphore, timeout);
|
long result = dispatch_semaphore_wait(semaphore, timeout);
|
||||||
|
|
||||||
if (result == 0) {
|
if (result == 0) {
|
||||||
@ -175,6 +188,8 @@ didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge
|
|||||||
} else {
|
} else {
|
||||||
// 超时
|
// 超时
|
||||||
NSLog(@"do POST 等待超时");
|
NSLog(@"do POST 等待超时");
|
||||||
|
// 取消请求,避免资源浪费
|
||||||
|
[self.postDataTask cancel];
|
||||||
}
|
}
|
||||||
return _data;
|
return _data;
|
||||||
}
|
}
|
||||||
@ -203,4 +218,21 @@ didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge
|
|||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)cancelAllRequests {
|
||||||
|
[self.dataTask cancel];
|
||||||
|
[self.postDataTask cancel];
|
||||||
|
self.dataTask = nil;
|
||||||
|
self.postDataTask = nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)cancelCurrentGETRequest {
|
||||||
|
[self.dataTask cancel];
|
||||||
|
self.dataTask = nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)cancelCurrentPOSTRequest {
|
||||||
|
[self.postDataTask cancel];
|
||||||
|
self.postDataTask = nil;
|
||||||
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
@ -38,6 +38,9 @@
|
|||||||
|
|
||||||
- (void) reLoad;
|
- (void) reLoad;
|
||||||
|
|
||||||
|
- (NSString *) PackageName;
|
||||||
|
- (BOOL) WashParam;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -197,6 +197,18 @@ static NSString *_configPath = @"/User/OhNoData/config001.plist";
|
|||||||
return [self GetMyConfigStrVal:@"IpDevName" defVal:@"IPhone_001"];
|
return [self GetMyConfigStrVal:@"IpDevName" defVal:@"IPhone_001"];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (NSString *)PackageName {
|
||||||
|
return [self GetMyConfigStrVal:@"PackageName" defVal:@"com.example.myapp"];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL) SetPackageName: (NSString*) name {
|
||||||
|
return [self SetConfigItem:@"PackageName" Val:name];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL) WashParam {
|
||||||
|
return [self GetLongVal:@"WashParam" defVal:0] == 1;
|
||||||
|
}
|
||||||
|
|
||||||
- (NSString *)DeviceId {
|
- (NSString *)DeviceId {
|
||||||
NSString *res = [self GetMyConfigStrVal:@"deviceId" defVal:@""];
|
NSString *res = [self GetMyConfigStrVal:@"deviceId" defVal:@""];
|
||||||
if (res.length == 0) {
|
if (res.length == 0) {
|
||||||
@ -214,9 +226,7 @@ static NSString *_configPath = @"/User/OhNoData/config001.plist";
|
|||||||
}
|
}
|
||||||
|
|
||||||
- (NSString *)MainServerURL {
|
- (NSString *)MainServerURL {
|
||||||
return [self GetMyConfigStrVal:@"ServerURL" defVal:@"http://192.168.40.8:8080"];
|
return [self GetMyConfigStrVal:@"MainServerURL" defVal:@"http://192.168.40.8:8080"];
|
||||||
//return [self GetMyConfigStrVal:@"MainServerURL" defVal:@"http://172.30.8.111:8100"];
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSString *)ServerURL {
|
- (NSString *)ServerURL {
|
||||||
|
|||||||
@ -492,7 +492,7 @@
|
|||||||
|
|
||||||
- (void)scheduleRestart {
|
- (void)scheduleRestart {
|
||||||
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5.0 * NSEC_PER_SEC)),
|
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5.0 * NSEC_PER_SEC)),
|
||||||
serverQueue, ^{
|
self->serverQueue, ^{ // 这里改为 serverQueue
|
||||||
[self start];
|
[self start];
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
87
batch_ssh.sh
Normal file
87
batch_ssh.sh
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# 执行命令
|
||||||
|
command="dpg -i /User/Downloads/251128-nt-01.deb"
|
||||||
|
|
||||||
|
# 直接展开IP命令
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.210.82" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.210.212" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.208.208" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.208.75" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.206.193" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.208.164" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.201.158" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.206.181" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.208.80" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.208.251" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.206.73" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.201.245" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.201.242" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.210.142" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.210.126" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.208.132" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.206.192" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.206.197" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.201.80" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.206.118" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.210.253" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.206.216" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.210.177" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.210.218" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.201.235" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.210.196" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.206.202" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.201.134" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.206.222" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.201.225" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.208.241" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.206.148" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.210.227" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.210.139" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.208.104" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.201.71" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.210.244" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.201.102" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.208.166" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.210.221" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.206.161" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.208.117" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.210.224" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.206.94" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.208.235" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.201.172" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.208.88" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.210.189" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.201.135" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.206.117" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.201.195" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.206.236" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.208.77" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.206.135" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.210.90" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.208.136" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.206.184" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.208.79" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.210.96" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.201.138" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.208.212" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.206.105" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.210.110" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.206.249" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.210.248" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.210.211" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.201.92" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.201.150" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.201.227" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.206.186" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.208.81" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.201.247" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.208.182" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.201.216" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.208.120" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.201.88" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.201.202" "$command" &
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@172.25.208.250" "$command" &
|
||||||
|
|
||||||
|
wait # 等待所有后台进程完成
|
||||||
|
echo "All commands executed"
|
||||||
41
execute_command.py
Normal file
41
execute_command.py
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
import paramiko
|
||||||
|
|
||||||
|
# 设置SSH连接参数
|
||||||
|
port = 22
|
||||||
|
username = 'root'
|
||||||
|
password = 'alpine'
|
||||||
|
|
||||||
|
def execute_command(hostname: str, command: str):
|
||||||
|
# 创建SSH客户端
|
||||||
|
client = paramiko.SSHClient()
|
||||||
|
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
|
||||||
|
# 连接SSH服务端
|
||||||
|
client.connect(hostname, port, username, password)
|
||||||
|
|
||||||
|
# 执行命令
|
||||||
|
stdin, stdout, stderr = client.exec_command(command)
|
||||||
|
output = stdout.read().decode('utf-8')
|
||||||
|
error = stderr.read().decode('utf-8')
|
||||||
|
|
||||||
|
print(f"主机 {hostname} 执行命令: {command}")
|
||||||
|
if output:
|
||||||
|
print("输出:", output)
|
||||||
|
if error:
|
||||||
|
print("错误:", error)
|
||||||
|
|
||||||
|
# 关闭连接
|
||||||
|
client.close()
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
ips1 = []
|
||||||
|
with open("./ips.txt", 'r') as f:
|
||||||
|
ips1 = [i.strip() for i in f.readlines()]
|
||||||
|
|
||||||
|
command = 'ls -l' # 替换为实际要执行的命令
|
||||||
|
|
||||||
|
for hostname in ips1:
|
||||||
|
try:
|
||||||
|
print(hostname)
|
||||||
|
execute_command(hostname, command)
|
||||||
|
except Exception as e:
|
||||||
|
print(e)
|
||||||
@ -14,7 +14,7 @@ TWEAK_NAME = OhNo
|
|||||||
|
|
||||||
|
|
||||||
OhNo_FRAMEWORKS = CoreLocation CFNetwork CoreTelephony Security
|
OhNo_FRAMEWORKS = CoreLocation CFNetwork CoreTelephony Security
|
||||||
OhNo_FILES = Tweak.x $(wildcard server/*.m) $(wildcard server/Core/*.m)
|
OhNo_FILES = Tweak.x XSLog.m XHookSettingsManager.m
|
||||||
OhNo_CFLAGS = -Wno-error -Wno-module-import-in-extern-c -fobjc-arc
|
OhNo_CFLAGS = -Wno-error -Wno-module-import-in-extern-c -fobjc-arc
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -1,28 +0,0 @@
|
|||||||
#import <Metal/Metal.h>
|
|
||||||
#import <objc/runtime.h>
|
|
||||||
|
|
||||||
@interface CustomMTLDevice : NSObject <MTLDevice>
|
|
||||||
@property (nonatomic, strong) id<MTLDevice> originalDevice;
|
|
||||||
@property (nonatomic, strong) NSString *customName;
|
|
||||||
- (instancetype)initWithOriginalDevice:(id<MTLDevice>)device customName:(NSString *)name;
|
|
||||||
@end
|
|
||||||
|
|
||||||
@implementation CustomMTLDevice
|
|
||||||
|
|
||||||
- (instancetype)initWithOriginalDevice:(id<MTLDevice>)device customName:(NSString *)name {
|
|
||||||
if (self = [super init]) {
|
|
||||||
_originalDevice = device;
|
|
||||||
_customName = name;
|
|
||||||
}
|
|
||||||
return self;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSString *)name {
|
|
||||||
return self.customName ?: [self.originalDevice name];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (id)forwardingTargetForSelector:(SEL)aSelector {
|
|
||||||
return self.originalDevice;
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
|
||||||
File diff suppressed because it is too large
Load Diff
70
ios-change-info/XHookSettingsManager.h
Normal file
70
ios-change-info/XHookSettingsManager.h
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
//
|
||||||
|
// XHookSettingsManager.h
|
||||||
|
// 配置管理器 - 头文件
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
|
||||||
|
@interface XHookSettingsManager : NSObject
|
||||||
|
|
||||||
|
@property (nonatomic, assign, readonly) BOOL isLoaded;
|
||||||
|
|
||||||
|
// 单例
|
||||||
|
+ (instancetype)sharedManager;
|
||||||
|
|
||||||
|
// 加载配置
|
||||||
|
- (BOOL)loadSettingsFromPath:(NSString *)path;
|
||||||
|
- (void)cleanup;
|
||||||
|
|
||||||
|
// 设备信息
|
||||||
|
@property (nonatomic, strong, readonly) NSUUID *idfa;
|
||||||
|
@property (nonatomic, strong, readonly) NSUUID *idfv;
|
||||||
|
@property (nonatomic, copy, readonly) NSString *deviceName;
|
||||||
|
@property (nonatomic, copy, readonly) NSString *osVersion;
|
||||||
|
@property (nonatomic, copy, readonly) NSString *productStr;
|
||||||
|
@property (nonatomic, copy, readonly) NSString *hwModel;
|
||||||
|
@property (nonatomic, assign, readonly) NSUInteger trackingStatus;
|
||||||
|
|
||||||
|
// 系统信息
|
||||||
|
@property (nonatomic, assign, readonly) unsigned long long physicalMemory;
|
||||||
|
@property (nonatomic, assign, readonly) NSUInteger cpuCore;
|
||||||
|
@property (nonatomic, assign, readonly) double systemUptimeOffset;
|
||||||
|
@property (nonatomic, assign, readonly) NSInteger kernBootTimeOffset;
|
||||||
|
|
||||||
|
// 电池信息
|
||||||
|
@property (nonatomic, assign, readonly) UIDeviceBatteryState batteryState;
|
||||||
|
@property (nonatomic, assign, readonly) float batteryLevel;
|
||||||
|
|
||||||
|
// 屏幕信息
|
||||||
|
@property (nonatomic, assign, readonly) CGFloat screenBrightness;
|
||||||
|
@property (nonatomic, assign, readonly) CGFloat screenScale;
|
||||||
|
@property (nonatomic, strong, readonly) NSDictionary *screenBounds;
|
||||||
|
@property (nonatomic, strong, readonly) NSDictionary *safeAreaInsets;
|
||||||
|
|
||||||
|
// 磁盘信息
|
||||||
|
@property (nonatomic, assign, readonly) unsigned long long diskSize;
|
||||||
|
@property (nonatomic, assign, readonly) unsigned long long diskFreeSize;
|
||||||
|
|
||||||
|
// 音频
|
||||||
|
@property (nonatomic, assign, readonly) float outputVolume;
|
||||||
|
|
||||||
|
// 网络信息
|
||||||
|
@property (nonatomic, copy, readonly) NSString *userAgent;
|
||||||
|
@property (nonatomic, strong, readonly) NSDictionary *networkInterfacesInfo;
|
||||||
|
@property (nonatomic, strong, readonly) NSDictionary *simInfo;
|
||||||
|
|
||||||
|
// 本地化
|
||||||
|
@property (nonatomic, copy, readonly) NSString *locale;
|
||||||
|
@property (nonatomic, copy, readonly) NSString *timeZone;
|
||||||
|
|
||||||
|
// 应用列表
|
||||||
|
@property (nonatomic, strong, readonly) NSArray *apps;
|
||||||
|
|
||||||
|
- (BOOL)shouldHookApp:(NSString *)bundleIdentifier;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
// 便捷宏
|
||||||
|
#define XHookSettings [XHookSettingsManager sharedManager]
|
||||||
|
|
||||||
232
ios-change-info/XHookSettingsManager.m
Normal file
232
ios-change-info/XHookSettingsManager.m
Normal file
@ -0,0 +1,232 @@
|
|||||||
|
//
|
||||||
|
// XHookSettingsManager.m
|
||||||
|
// 配置管理器 - 实现
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "XHookSettingsManager.h"
|
||||||
|
|
||||||
|
@implementation XHookSettingsManager
|
||||||
|
|
||||||
|
+ (instancetype)sharedManager {
|
||||||
|
static XHookSettingsManager *manager = nil;
|
||||||
|
static dispatch_once_t onceToken;
|
||||||
|
dispatch_once(&onceToken, ^{
|
||||||
|
manager = [[XHookSettingsManager alloc] init];
|
||||||
|
});
|
||||||
|
return manager;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (instancetype)init {
|
||||||
|
self = [super init];
|
||||||
|
if (self) {
|
||||||
|
[self resetToDefaults];
|
||||||
|
}
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)resetToDefaults {
|
||||||
|
_isLoaded = NO;
|
||||||
|
|
||||||
|
// 设备信息默认值
|
||||||
|
_idfa = nil;
|
||||||
|
_idfv = nil;
|
||||||
|
_deviceName = nil;
|
||||||
|
_osVersion = nil;
|
||||||
|
_productStr = @"iPhone14,2";
|
||||||
|
_hwModel = nil;
|
||||||
|
_trackingStatus = 3; // 默认已授权
|
||||||
|
|
||||||
|
// 系统信息默认值
|
||||||
|
_physicalMemory = 0;
|
||||||
|
_cpuCore = 0;
|
||||||
|
_systemUptimeOffset = -1.0;
|
||||||
|
_kernBootTimeOffset = 0;
|
||||||
|
|
||||||
|
// 电池信息默认值
|
||||||
|
_batteryState = UIDeviceBatteryStateUnknown;
|
||||||
|
_batteryLevel = -1.0f;
|
||||||
|
|
||||||
|
// 屏幕信息默认值
|
||||||
|
_screenBrightness = -1.0;
|
||||||
|
_screenScale = -1.0;
|
||||||
|
_screenBounds = nil;
|
||||||
|
_safeAreaInsets = nil;
|
||||||
|
|
||||||
|
// 磁盘信息默认值
|
||||||
|
_diskSize = 0;
|
||||||
|
_diskFreeSize = 0;
|
||||||
|
|
||||||
|
// 音频默认值
|
||||||
|
_outputVolume = -1.0f;
|
||||||
|
|
||||||
|
// 网络信息默认值
|
||||||
|
_userAgent = nil;
|
||||||
|
_networkInterfacesInfo = nil;
|
||||||
|
_simInfo = nil;
|
||||||
|
|
||||||
|
// 本地化默认值
|
||||||
|
_locale = nil;
|
||||||
|
_timeZone = nil;
|
||||||
|
|
||||||
|
// 应用列表默认值
|
||||||
|
_apps = nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 解析辅助方法
|
||||||
|
|
||||||
|
- (NSString *)parseString:(id)value defaultValue:(NSString *)defaultValue {
|
||||||
|
if ([value isKindOfClass:[NSString class]]) {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
return defaultValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSInteger)parseInteger:(id)value defaultValue:(NSInteger)defaultValue {
|
||||||
|
if ([value isKindOfClass:[NSString class]]) {
|
||||||
|
return [value integerValue];
|
||||||
|
} else if ([value isKindOfClass:[NSNumber class]]) {
|
||||||
|
return [value integerValue];
|
||||||
|
}
|
||||||
|
return defaultValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (float)parseFloat:(id)value defaultValue:(float)defaultValue {
|
||||||
|
if ([value isKindOfClass:[NSString class]]) {
|
||||||
|
return [value floatValue];
|
||||||
|
} else if ([value isKindOfClass:[NSNumber class]]) {
|
||||||
|
return [value floatValue];
|
||||||
|
}
|
||||||
|
return defaultValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (double)parseDouble:(id)value defaultValue:(double)defaultValue {
|
||||||
|
if ([value isKindOfClass:[NSString class]]) {
|
||||||
|
return [value doubleValue];
|
||||||
|
} else if ([value isKindOfClass:[NSNumber class]]) {
|
||||||
|
return [value doubleValue];
|
||||||
|
}
|
||||||
|
return defaultValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (unsigned long long)parseULL:(id)value defaultValue:(unsigned long long)defaultValue {
|
||||||
|
if ([value isKindOfClass:[NSString class]]) {
|
||||||
|
return [value longLongValue];
|
||||||
|
} else if ([value isKindOfClass:[NSNumber class]]) {
|
||||||
|
return [value unsignedLongLongValue];
|
||||||
|
}
|
||||||
|
return defaultValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSUUID *)parseUUID:(id)value {
|
||||||
|
if ([value isKindOfClass:[NSString class]]) {
|
||||||
|
return [[NSUUID alloc] initWithUUIDString:value];
|
||||||
|
}
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSDictionary *)parseDictionary:(id)value {
|
||||||
|
if ([value isKindOfClass:[NSDictionary class]]) {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSArray *)parseArray:(id)value {
|
||||||
|
if ([value isKindOfClass:[NSArray class]]) {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 加载配置
|
||||||
|
|
||||||
|
- (BOOL)loadSettingsFromPath:(NSString *)path {
|
||||||
|
@try {
|
||||||
|
NSFileManager *fileManager = [NSFileManager defaultManager];
|
||||||
|
if (![fileManager fileExistsAtPath:path]) {
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
|
||||||
|
NSData *jsonData = [NSData dataWithContentsOfFile:path];
|
||||||
|
if (!jsonData) {
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
|
||||||
|
NSError *error = nil;
|
||||||
|
NSDictionary *settings = [NSJSONSerialization JSONObjectWithData:jsonData options:kNilOptions error:&error];
|
||||||
|
if (error || !settings || ![settings isKindOfClass:[NSDictionary class]]) {
|
||||||
|
NSLog(@"XHookSettingsManager: Error parsing JSON: %@", error);
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 解析并初始化所有属性
|
||||||
|
[self parseSettings:settings];
|
||||||
|
|
||||||
|
_isLoaded = YES;
|
||||||
|
return YES;
|
||||||
|
} @catch (NSException *exception) {
|
||||||
|
NSLog(@"XHookSettingsManager: Exception loading settings: %@", exception);
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)parseSettings:(NSDictionary *)settings {
|
||||||
|
// 设备信息
|
||||||
|
_idfa = [self parseUUID:settings[@"idfa"]];
|
||||||
|
_idfv = [self parseUUID:settings[@"idfv"]];
|
||||||
|
_deviceName = [self parseString:settings[@"deviceName"] defaultValue:nil];
|
||||||
|
_osVersion = [self parseString:settings[@"osVersion"] defaultValue:nil];
|
||||||
|
_productStr = [self parseString:settings[@"productStr"] defaultValue:@"iPhone14,2"];
|
||||||
|
_hwModel = [self parseString:settings[@"hwModel"] defaultValue:nil];
|
||||||
|
_trackingStatus = [self parseInteger:settings[@"trackingStatus"] defaultValue:3];
|
||||||
|
|
||||||
|
// 系统信息
|
||||||
|
_physicalMemory = [self parseULL:settings[@"physicalMemory"] defaultValue:0];
|
||||||
|
_cpuCore = [self parseInteger:settings[@"cpuCore"] defaultValue:0];
|
||||||
|
_systemUptimeOffset = [self parseDouble:settings[@"systemUptime"] defaultValue:-1.0];
|
||||||
|
_kernBootTimeOffset = [self parseInteger:settings[@"kernBootTime"] defaultValue:0];
|
||||||
|
|
||||||
|
// 电池信息
|
||||||
|
NSInteger batteryStateVal = [self parseInteger:settings[@"batteryState"] defaultValue:-1];
|
||||||
|
_batteryState = (batteryStateVal >= 0) ? (UIDeviceBatteryState)batteryStateVal : UIDeviceBatteryStateUnknown;
|
||||||
|
_batteryLevel = [self parseFloat:settings[@"batteryLevel"] defaultValue:-1.0f];
|
||||||
|
|
||||||
|
// 屏幕信息
|
||||||
|
_screenBrightness = [self parseDouble:settings[@"screenBrightness"] defaultValue:-1.0];
|
||||||
|
_screenScale = [self parseDouble:settings[@"screenScale"] defaultValue:-1.0];
|
||||||
|
_screenBounds = [self parseDictionary:settings[@"screenBounds"]];
|
||||||
|
_safeAreaInsets = [self parseDictionary:settings[@"safeAreaInsets"]];
|
||||||
|
|
||||||
|
// 磁盘信息
|
||||||
|
_diskSize = [self parseULL:settings[@"diskSize"] defaultValue:0];
|
||||||
|
_diskFreeSize = [self parseULL:settings[@"diskFreeSize"] defaultValue:0];
|
||||||
|
|
||||||
|
// 音频
|
||||||
|
_outputVolume = [self parseFloat:settings[@"outputVolume"] defaultValue:-1.0f];
|
||||||
|
|
||||||
|
// 网络信息
|
||||||
|
_userAgent = [self parseString:settings[@"userAgent"] defaultValue:nil];
|
||||||
|
_networkInterfacesInfo = [self parseDictionary:settings[@"networkInterfacesInfo"]];
|
||||||
|
_simInfo = [self parseDictionary:settings[@"simInfo"]];
|
||||||
|
|
||||||
|
// 本地化
|
||||||
|
_locale = [self parseString:settings[@"locale"] defaultValue:nil];
|
||||||
|
_timeZone = [self parseString:settings[@"timeZone"] defaultValue:nil];
|
||||||
|
|
||||||
|
// 应用列表
|
||||||
|
_apps = [self parseArray:settings[@"apps"]];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)cleanup {
|
||||||
|
[self resetToDefaults];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 应用检查
|
||||||
|
|
||||||
|
- (BOOL)shouldHookApp:(NSString *)bundleIdentifier {
|
||||||
|
if (!bundleIdentifier || !_apps) return NO;
|
||||||
|
return [_apps containsObject:bundleIdentifier];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
22
ios-change-info/XSLog.h
Normal file
22
ios-change-info/XSLog.h
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
|
||||||
|
/// @param logFileName 日志文件名
|
||||||
|
/// @param maxFileSize 日志文件最大大小(字节),超过此大小将创建新文件
|
||||||
|
void XSLogSetupLogWithFileName(NSString *logFileName, unsigned long long maxFileSize);
|
||||||
|
|
||||||
|
/// @param logFilePath 日志文件路径
|
||||||
|
/// @param maxFileSize 日志文件最大大小(字节),超过此大小将创建新文件
|
||||||
|
void XSLogSetupLogWithFilePath(NSString *logFilePath, unsigned long long maxFileSize);
|
||||||
|
|
||||||
|
|
||||||
|
void XSLogMessage(NSString *format, ...) __attribute__((format(NSString, 1, 2)));
|
||||||
|
|
||||||
|
void XSLogRedirectNSLog(void);
|
||||||
|
|
||||||
|
// 定义一个宏,方便替换NSLog
|
||||||
|
#define XSLog(format, ...) XSLogMessage((format), ##__VA_ARGS__)
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
||||||
162
ios-change-info/XSLog.m
Normal file
162
ios-change-info/XSLog.m
Normal file
@ -0,0 +1,162 @@
|
|||||||
|
#import "XSLog.h"
|
||||||
|
|
||||||
|
static NSString *kLogFilePath = @"app.log";
|
||||||
|
static unsigned long long kMaxFileSize = 10 * 1024 * 1024; // 10 MB
|
||||||
|
static NSFileHandle *logFileHandle;
|
||||||
|
static dispatch_queue_t logQueue;
|
||||||
|
static int logCount = 0; // 用于控制滚动检查频率
|
||||||
|
static const int kLogCheckFrequency = 100; // 每100条日志检查一次文件大小
|
||||||
|
|
||||||
|
// 内部函数声明
|
||||||
|
static void setupLogFileHandle(NSString *logFilePath);
|
||||||
|
static void checkAndRollLogFile(NSString *logFilePath);
|
||||||
|
static NSString *getLogFilePath(NSString *logFileName);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void XSLogSetupLogWithFilePath(NSString *logFilePath,
|
||||||
|
unsigned long long maxFileSize) {
|
||||||
|
static dispatch_once_t onceToken;
|
||||||
|
dispatch_once(&onceToken, ^{
|
||||||
|
kLogFilePath = logFilePath;
|
||||||
|
kMaxFileSize = maxFileSize;
|
||||||
|
logQueue = dispatch_queue_create("com.yourcompany.app.logQueue",
|
||||||
|
DISPATCH_QUEUE_SERIAL);
|
||||||
|
|
||||||
|
// 初始化文件句柄
|
||||||
|
setupLogFileHandle(logFilePath);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void XSLogSetupLogWithFileName(NSString *logFileName,
|
||||||
|
unsigned long long maxFileSize) {
|
||||||
|
kLogFilePath = getLogFilePath(logFileName);
|
||||||
|
XSLogSetupLogWithFilePath(kLogFilePath,maxFileSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
static NSString *getLogFilePath(NSString *logFileName) {
|
||||||
|
// 获取Documents目录路径
|
||||||
|
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
|
||||||
|
NSUserDomainMask, YES);
|
||||||
|
NSString *documentsDirectory = [paths firstObject];
|
||||||
|
NSString *logFilePath =
|
||||||
|
[documentsDirectory stringByAppendingPathComponent:logFileName];
|
||||||
|
return logFilePath;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void setupLogFileHandle(NSString *logFilePath) {
|
||||||
|
// 检查文件大小,如果超过最大值则进行滚动
|
||||||
|
checkAndRollLogFile(logFilePath);
|
||||||
|
|
||||||
|
// 关闭旧的句柄(如果存在)
|
||||||
|
if (logFileHandle) {
|
||||||
|
[logFileHandle closeFile];
|
||||||
|
logFileHandle = nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 打开文件句柄
|
||||||
|
logFileHandle = [NSFileHandle fileHandleForWritingAtPath:logFilePath];
|
||||||
|
if (!logFileHandle) {
|
||||||
|
// 如果文件不存在,则创建
|
||||||
|
[[NSFileManager defaultManager] createFileAtPath:logFilePath
|
||||||
|
contents:nil
|
||||||
|
attributes:nil];
|
||||||
|
logFileHandle = [NSFileHandle fileHandleForWritingAtPath:logFilePath];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (logFileHandle) {
|
||||||
|
// 将文件句柄移动到文件末尾
|
||||||
|
[logFileHandle seekToEndOfFile];
|
||||||
|
} else {
|
||||||
|
fprintf(stderr, "Error: Could not open log file for writing.\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void checkAndRollLogFile(NSString *logFilePath) {
|
||||||
|
NSFileManager *fileManager = [NSFileManager defaultManager];
|
||||||
|
if ([fileManager fileExistsAtPath:logFilePath]) {
|
||||||
|
NSError *error = nil;
|
||||||
|
NSDictionary *fileAttributes =
|
||||||
|
[fileManager attributesOfItemAtPath:logFilePath error:&error];
|
||||||
|
if (fileAttributes) {
|
||||||
|
unsigned long long fileSize = [fileAttributes fileSize];
|
||||||
|
if (fileSize > kMaxFileSize) {
|
||||||
|
// 文件过大,进行滚动
|
||||||
|
NSString *backupFilePath =
|
||||||
|
[logFilePath stringByAppendingString:@".bak"];
|
||||||
|
[fileManager removeItemAtPath:backupFilePath
|
||||||
|
error:nil]; // 移除旧的备份文件
|
||||||
|
[fileManager moveItemAtPath:logFilePath
|
||||||
|
toPath:backupFilePath
|
||||||
|
error:&error]; // 将当前文件备份
|
||||||
|
if (error) {
|
||||||
|
fprintf(stderr, "Error rolling log file: %s\n",
|
||||||
|
error.localizedDescription.UTF8String);
|
||||||
|
}
|
||||||
|
// 创建新的空日志文件
|
||||||
|
[fileManager createFileAtPath:logFilePath contents:nil attributes:nil];
|
||||||
|
// 重新设置文件句柄
|
||||||
|
setupLogFileHandle(kLogFilePath);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
fprintf(stderr, "Error getting file attributes: %s\n",
|
||||||
|
error.localizedDescription.UTF8String);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void XSLogRedirectNSLog(void) {
|
||||||
|
if (logFileHandle) {
|
||||||
|
int fd = [logFileHandle fileDescriptor];
|
||||||
|
if (fd != -1) {
|
||||||
|
// 将标准错误输出重定向到日志文件
|
||||||
|
if (dup2(fd, STDERR_FILENO) == -1) {
|
||||||
|
fprintf(stderr, "Error redirecting stderr to log file.\n");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
fprintf(stderr, "Error: logFileHandle has an invalid file descriptor.\n");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
fprintf(stderr, "Error: logFileHandle is not initialized. Cannot redirect stderr.\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void XSLogMessage(NSString *format, ...) {
|
||||||
|
va_list args;
|
||||||
|
va_start(args, format);
|
||||||
|
NSString *message = [[NSString alloc] initWithFormat:format arguments:args];
|
||||||
|
va_end(args);
|
||||||
|
|
||||||
|
dispatch_async(logQueue, ^{
|
||||||
|
// 获取当前时间
|
||||||
|
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
|
||||||
|
dateFormatter.dateFormat = @"yyyy-MM-dd HH:mm:ss.SSS";
|
||||||
|
NSString *timestamp = [dateFormatter stringFromDate:[NSDate date]];
|
||||||
|
|
||||||
|
// 格式化日志消息
|
||||||
|
NSString *logString =
|
||||||
|
[NSString stringWithFormat:@"%@ %@\n", timestamp, message];
|
||||||
|
|
||||||
|
// 将日志写入文件
|
||||||
|
NSData *data = [logString dataUsingEncoding:NSUTF8StringEncoding];
|
||||||
|
if (logFileHandle) {
|
||||||
|
@try {
|
||||||
|
[logFileHandle writeData:data];
|
||||||
|
// 每次写入后,递增计数器
|
||||||
|
logCount++;
|
||||||
|
// 每隔 kLogCheckFrequency 条日志检查一次文件大小
|
||||||
|
if (logCount >= kLogCheckFrequency) {
|
||||||
|
logCount = 0; // 重置计数器
|
||||||
|
checkAndRollLogFile(kLogFilePath);
|
||||||
|
}
|
||||||
|
} @catch (NSException *exception) {
|
||||||
|
fprintf(stderr, "Error writing to log file: %s\n",
|
||||||
|
exception.reason.UTF8String);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 同时输出到控制台,以便调试
|
||||||
|
fprintf(stderr, "%s", [logString UTF8String]);
|
||||||
|
});
|
||||||
|
}
|
||||||
30
ips.txt
30
ips.txt
@ -1,10 +1,20 @@
|
|||||||
192.168.1.15
|
172.30.8.124
|
||||||
192.168.1.19
|
172.29.109.24
|
||||||
192.168.1.18
|
172.30.8.125
|
||||||
192.168.1.20
|
172.29.109.32
|
||||||
192.168.1.11
|
172.29.109.11
|
||||||
192.168.1.21
|
172.29.109.16
|
||||||
192.168.1.14
|
172.29.108.16
|
||||||
192.168.1.16
|
172.29.109.31
|
||||||
192.168.1.13
|
172.29.109.14
|
||||||
192.168.1.17
|
172.29.109.33
|
||||||
|
172.29.109.21
|
||||||
|
172.29.109.27
|
||||||
|
172.29.109.28
|
||||||
|
172.29.108.19
|
||||||
|
172.29.109.20
|
||||||
|
172.29.109.12
|
||||||
|
172.29.109.19
|
||||||
|
172.25.201.136
|
||||||
|
172.29.109.13
|
||||||
|
172.29.109.15
|
||||||
|
|||||||
22
local_file.txt
Normal file
22
local_file.txt
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>IpDevName</key>
|
||||||
|
<string>ImagePixel</string>
|
||||||
|
<key>MainServerURL</key>
|
||||||
|
<string>http://192.168.40.8:8080</string>
|
||||||
|
<key>PackageName</key>
|
||||||
|
<string>com.imagePixelFactory.imagePixelFactory</string>
|
||||||
|
<key>ServerURL</key>
|
||||||
|
<string>https://nks-api.i.explore-sun.com</string>
|
||||||
|
<key>WashParam</key>
|
||||||
|
<false/>
|
||||||
|
<key>deviceId</key>
|
||||||
|
<string>8DCA89B4-6D3F-4FAA-8388-61758B11B555</string>
|
||||||
|
<key>lastReboot</key>
|
||||||
|
<integer>1761185614</integer>
|
||||||
|
<key>senderId</key>
|
||||||
|
<integer>4294968678</integer>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
62
modify_config.py
Normal file
62
modify_config.py
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
import paramiko
|
||||||
|
import os
|
||||||
|
import plistlib
|
||||||
|
|
||||||
|
# 设置SSH连接参数
|
||||||
|
# hostname = '172.30.104.18'
|
||||||
|
port = 22
|
||||||
|
username = 'root'
|
||||||
|
password = 'alpine'
|
||||||
|
# packagename = 'com.funny.prank.call'
|
||||||
|
|
||||||
|
def moveRemote(hostname:str, name:str,pkg:str, serverurl:str, wash:bool=False):
|
||||||
|
# 创建SSH传输通道
|
||||||
|
transport = paramiko.Transport((hostname, port))
|
||||||
|
transport.set_keepalive(5)
|
||||||
|
# 连接SSH服务端,以用户名和密码进行认证
|
||||||
|
transport.connect(username=username, password=password)
|
||||||
|
|
||||||
|
# 创建SFTP客户端
|
||||||
|
sftp = paramiko.SFTPClient.from_transport(transport)
|
||||||
|
|
||||||
|
# 上传本地文件到远程主机
|
||||||
|
local_path = 'local_file.txt'
|
||||||
|
remote_path = '/User/OhNoData/config001.plist'
|
||||||
|
# sftp.put(local_path, remote_path)
|
||||||
|
sftp.get(remote_path, local_path)
|
||||||
|
|
||||||
|
|
||||||
|
with open(local_path, 'rb') as fp:
|
||||||
|
configPlist = plistlib.load(fp)
|
||||||
|
configPlist['IpDevName'] = name
|
||||||
|
configPlist['ServerURL'] = serverurl
|
||||||
|
configPlist['PackageName'] = pkg
|
||||||
|
configPlist['WashParam'] = wash
|
||||||
|
configPlist['MainServerURL'] = "http://192.168.40.8:8080"
|
||||||
|
|
||||||
|
with open(local_path, 'wb') as fp:
|
||||||
|
plistlib.dump(configPlist, fp)
|
||||||
|
|
||||||
|
print(configPlist)
|
||||||
|
|
||||||
|
# 上传本地文件到远程主机
|
||||||
|
sftp.put(local_path, remote_path)
|
||||||
|
|
||||||
|
# 关闭SFTP连接
|
||||||
|
sftp.close()
|
||||||
|
|
||||||
|
# 关闭SSH传输通道
|
||||||
|
transport.close()
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
ips1 = []
|
||||||
|
with open("./ips.txt", 'r') as f:
|
||||||
|
ips1 = [i.strip() for i in f.readlines()]
|
||||||
|
|
||||||
|
|
||||||
|
for it in ips1:
|
||||||
|
try:
|
||||||
|
print(it)
|
||||||
|
moveRemote(it,"ImagePixel", 'com.imagePixelFactory.imagePixelFactory', "https://nks-api.i.explore-sun.com", False)
|
||||||
|
except Exception as e:
|
||||||
|
print(e)
|
||||||
42
myssh.sh
Normal file
42
myssh.sh
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# 函数:复制文件到所有IP机器
|
||||||
|
# 用法: copy_to_ips <source_file> <destination_path>
|
||||||
|
copy_to_ips() {
|
||||||
|
local source_file=$1
|
||||||
|
local dest_path=$2
|
||||||
|
while IFS= read -r ip; do
|
||||||
|
ip=$(echo "$ip" | tr -d '\r') # 移除DOS换行符
|
||||||
|
if [ -n "$ip" ]; then
|
||||||
|
echo "Copying $source_file to $ip:$dest_path"
|
||||||
|
sshpass -p alpine scp -o StrictHostKeyChecking=no "$source_file" "root@$ip:$dest_path"
|
||||||
|
fi
|
||||||
|
done < ips.txt
|
||||||
|
}
|
||||||
|
|
||||||
|
# 函数:在所有IP机器上执行命令
|
||||||
|
# 用法: execute_on_ips <command>
|
||||||
|
execute_on_ips() {
|
||||||
|
local command=$1
|
||||||
|
if [ ! -f ips.txt ]; then
|
||||||
|
echo "Error: ips.txt not found"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
echo "Total lines in ips.txt: $(wc -l < ips.txt)"
|
||||||
|
while IFS= read -r ip; do
|
||||||
|
ip=$(echo "$ip" | tr -d '\r') # 移除DOS换行符
|
||||||
|
echo "Read IP: '$ip'"
|
||||||
|
if [ -n "$ip" ]; then
|
||||||
|
echo "Processing IP: $ip"
|
||||||
|
echo "Executing on $ip: $command"
|
||||||
|
sshpass -p alpine ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "root@$ip" "$command" || echo "Failed to execute on $ip"
|
||||||
|
else
|
||||||
|
echo "Skipping empty line"
|
||||||
|
fi
|
||||||
|
done < ips.txt
|
||||||
|
echo "Finished processing all IPs"
|
||||||
|
}
|
||||||
|
|
||||||
|
# 示例用法(可注释掉)
|
||||||
|
# copy_to_ips ./251128-nt-01.deb /User/Downlodas
|
||||||
|
execute_on_ips "killall -9 SpringBoard"
|
||||||
BIN
packages/20251110-nt.deb
Normal file
BIN
packages/20251110-nt.deb
Normal file
Binary file not shown.
BIN
packages/20251114-nt-newapi.deb
Normal file
BIN
packages/20251114-nt-newapi.deb
Normal file
Binary file not shown.
BIN
packages/20251118-nt-newapi.deb
Normal file
BIN
packages/20251118-nt-newapi.deb
Normal file
Binary file not shown.
BIN
packages/20251119-nt-newapi.deb
Normal file
BIN
packages/20251119-nt-newapi.deb
Normal file
Binary file not shown.
BIN
packages/20251121-nt-newapi.deb
Normal file
BIN
packages/20251121-nt-newapi.deb
Normal file
Binary file not shown.
BIN
packages/20251121-nt-newapi1.deb
Normal file
BIN
packages/20251121-nt-newapi1.deb
Normal file
Binary file not shown.
BIN
packages/20251121-nt-newapi2.deb
Normal file
BIN
packages/20251121-nt-newapi2.deb
Normal file
Binary file not shown.
BIN
packages/251125-06.deb
Normal file
BIN
packages/251125-06.deb
Normal file
Binary file not shown.
BIN
packages/251127-nt-01.deb
Normal file
BIN
packages/251127-nt-01.deb
Normal file
Binary file not shown.
BIN
packages/251128-nt-01.deb
Normal file
BIN
packages/251128-nt-01.deb
Normal file
Binary file not shown.
BIN
packages/251128-nt-02.deb
Normal file
BIN
packages/251128-nt-02.deb
Normal file
Binary file not shown.
BIN
packages/251201-nt-01.deb
Normal file
BIN
packages/251201-nt-01.deb
Normal file
Binary file not shown.
BIN
packages/251202-nt-01.deb
Normal file
BIN
packages/251202-nt-01.deb
Normal file
Binary file not shown.
BIN
packages/test.deb
Normal file
BIN
packages/test.deb
Normal file
Binary file not shown.
9
reinstall.sh
Executable file
9
reinstall.sh
Executable file
@ -0,0 +1,9 @@
|
|||||||
|
rm ./packages/test.deb
|
||||||
|
make clean
|
||||||
|
make
|
||||||
|
make package
|
||||||
|
mv ./packages/com.xyzshell.ios*.deb ./packages/test.deb
|
||||||
|
echo "Rebuild finished."
|
||||||
|
sshpass -p alpine pscp -l root -A -h ./ips.txt ./packages/test.deb /User/Downloads/
|
||||||
|
sshpass -p alpine pssh -l root -A -ih ./ips.txt "dpkg -i /User/Downloads/test.deb"
|
||||||
|
sshpass -p alpine pssh -l root -A -ih ./ips.txt "killall -9 SpringBoard"
|
||||||
23
testudp.py
Normal file
23
testudp.py
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
import socket
|
||||||
|
|
||||||
|
|
||||||
|
data = """
|
||||||
|
{
|
||||||
|
"url": "/start",
|
||||||
|
}
|
||||||
|
""".encode('utf-8')
|
||||||
|
|
||||||
|
with open('./ips.txt', 'r') as f:
|
||||||
|
for ip in f.readlines():
|
||||||
|
print(ip.strip())
|
||||||
|
try:
|
||||||
|
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||||
|
s.settimeout(5)
|
||||||
|
# 发送数据:
|
||||||
|
s.sendto(data, (ip.strip(), 6001))
|
||||||
|
# 接收数据:
|
||||||
|
print(s.recv(1024).decode('utf-8'))
|
||||||
|
s.close()
|
||||||
|
except Exception as e:
|
||||||
|
print(e)
|
||||||
|
|
||||||
42
upload_file.py
Normal file
42
upload_file.py
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
import paramiko
|
||||||
|
|
||||||
|
# 设置SSH连接参数
|
||||||
|
port = 22
|
||||||
|
username = 'root'
|
||||||
|
password = 'alpine'
|
||||||
|
|
||||||
|
def upload_file(hostname: str, local_path: str, remote_path: str):
|
||||||
|
# 创建SSH传输通道
|
||||||
|
transport = paramiko.Transport((hostname, port))
|
||||||
|
transport.set_keepalive(5)
|
||||||
|
# 连接SSH服务端,以用户名和密码进行认证
|
||||||
|
transport.connect(username=username, password=password)
|
||||||
|
|
||||||
|
# 创建SFTP客户端
|
||||||
|
sftp = paramiko.SFTPClient.from_transport(transport)
|
||||||
|
|
||||||
|
# 上传本地文件到远程主机
|
||||||
|
sftp.put(local_path, remote_path)
|
||||||
|
|
||||||
|
print(f"文件 {local_path} 已上传到 {hostname}:{remote_path}")
|
||||||
|
|
||||||
|
# 关闭SFTP连接
|
||||||
|
sftp.close()
|
||||||
|
|
||||||
|
# 关闭SSH传输通道
|
||||||
|
transport.close()
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
ips1 = []
|
||||||
|
with open("./ips.txt", 'r') as f:
|
||||||
|
ips1 = [i.strip() for i in f.readlines()]
|
||||||
|
|
||||||
|
local_path = 'local_file.txt' # 本地文件路径
|
||||||
|
remote_path = '/remote/path/to/file.txt' # 远程文件路径
|
||||||
|
|
||||||
|
for hostname in ips1:
|
||||||
|
try:
|
||||||
|
print(hostname)
|
||||||
|
upload_file(hostname, local_path, remote_path)
|
||||||
|
except Exception as e:
|
||||||
|
print(e)
|
||||||
Loading…
Reference in New Issue
Block a user