Compare commits
3 Commits
lux-main-1
...
log
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3f9c1a759c | ||
|
|
b316ce61d8 | ||
|
|
dcc61d3aab |
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,2 +1,3 @@
|
||||
.DS_Store
|
||||
.theos/
|
||||
packages/*.deb
|
||||
@ -1,10 +0,0 @@
|
||||
Package: com.xyzshell.ioscontrol
|
||||
Name: XYZShell iOS Control
|
||||
Description: XYZShell iOS Control Main Application
|
||||
Maintainer: XYZShell
|
||||
Author: XYZShell
|
||||
Section: Utilities
|
||||
Tag: role::developer
|
||||
Architecture: iphoneos-arm
|
||||
Version: 0.0.7-10-68+debug
|
||||
Installed-Size: 1624
|
||||
Binary file not shown.
@ -1 +0,0 @@
|
||||
{ Filter = { Bundles = ( "com.apple.springboard" ); }; }
|
||||
Binary file not shown.
@ -1 +0,0 @@
|
||||
{ Filter = { Bundles = ( "com.apple.UIKit" ); }; }
|
||||
@ -1 +0,0 @@
|
||||
./packages/com.xyzshell.ioscontrol_0.0.7-10-68+debug_iphoneos-arm.deb
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,20 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>English</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.apple.xcode.dsym.AppRunMan.dylib</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>dSYM</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.0</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1</string>
|
||||
</dict>
|
||||
</plist>
|
||||
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
@ -1,20 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>English</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.apple.xcode.dsym.OhNo.dylib</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>dSYM</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.0</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1</string>
|
||||
</dict>
|
||||
</plist>
|
||||
Binary file not shown.
@ -1,185 +0,0 @@
|
||||
---
|
||||
triple: 'arm64-apple-darwin'
|
||||
binary-path: '/Users/mac/workspaces/projects/ios-change/old-ios-hook/.theos/obj/debug/arm64/OhNo.dylib'
|
||||
relocations:
|
||||
- { offset: 0x7D, size: 0x8, addend: 0x0, symName: _settings, symBinAddr: 0x11DF8, symSize: 0x0 }
|
||||
- { offset: 0xF0, size: 0x8, addend: 0x0, symName: '__logos_meta_orig$ohno$ATTrackingManager$trackingAuthorizationStatus', symObjAddr: 0x26D20, symBinAddr: 0x11C50, symSize: 0x0 }
|
||||
- { offset: 0x163, size: 0x8, addend: 0x0, symName: '__logos_meta_orig$ohno$ATTrackingManager$requestTrackingAuthorizationWithCompletionHandler$', symObjAddr: 0x26D28, symBinAddr: 0x11C58, symSize: 0x0 }
|
||||
- { offset: 0x1FD, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$ASIdentifierManager$advertisingIdentifier', symObjAddr: 0x26D30, symBinAddr: 0x11C60, symSize: 0x0 }
|
||||
- { offset: 0x27B, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$ASIdentifierManager$isAdvertisingTrackingEnabled', symObjAddr: 0x26D38, symBinAddr: 0x11C68, symSize: 0x0 }
|
||||
- { offset: 0x2B7, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIDevice$identifierForVendor', symObjAddr: 0x26D40, symBinAddr: 0x11C70, symSize: 0x0 }
|
||||
- { offset: 0x492, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIDevice$name', symObjAddr: 0x26D48, symBinAddr: 0x11C78, symSize: 0x0 }
|
||||
- { offset: 0x4BC, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIDevice$model', symObjAddr: 0x26D50, symBinAddr: 0x11C80, symSize: 0x0 }
|
||||
- { offset: 0x4D1, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIDevice$localizedModel', symObjAddr: 0x26D58, symBinAddr: 0x11C88, symSize: 0x0 }
|
||||
- { offset: 0x4E6, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIDevice$systemName', symObjAddr: 0x26D60, symBinAddr: 0x11C90, symSize: 0x0 }
|
||||
- { offset: 0x4FB, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIDevice$systemVersion', symObjAddr: 0x26D68, symBinAddr: 0x11C98, symSize: 0x0 }
|
||||
- { offset: 0x510, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIDevice$batteryState', symObjAddr: 0x26D70, symBinAddr: 0x11CA0, symSize: 0x0 }
|
||||
- { offset: 0x53A, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIDevice$batteryLevel', symObjAddr: 0x26D78, symBinAddr: 0x11CA8, symSize: 0x0 }
|
||||
- { offset: 0x564, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIDevice$orientation', symObjAddr: 0x26D80, symBinAddr: 0x11CB0, symSize: 0x0 }
|
||||
- { offset: 0x58E, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$NSProcessInfo$systemUptime', symObjAddr: 0x26D88, symBinAddr: 0x11CB8, symSize: 0x0 }
|
||||
- { offset: 0x738, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$NSProcessInfo$physicalMemory', symObjAddr: 0x26D90, symBinAddr: 0x11CC0, symSize: 0x0 }
|
||||
- { offset: 0x762, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$NSProcessInfo$processorCount', symObjAddr: 0x26D98, symBinAddr: 0x11CC8, symSize: 0x0 }
|
||||
- { offset: 0x78C, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$NSProcessInfo$operatingSystemVersion', symObjAddr: 0x26DA0, symBinAddr: 0x11CD0, symSize: 0x0 }
|
||||
- { offset: 0x7B6, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIWindow$safeAreaInsets', symObjAddr: 0x26DA8, symBinAddr: 0x11CD8, symSize: 0x0 }
|
||||
- { offset: 0x24E4, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIScreen$brightness', symObjAddr: 0x26DB0, symBinAddr: 0x11CE0, symSize: 0x0 }
|
||||
- { offset: 0x2513, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIScreen$bounds', symObjAddr: 0x26DB8, symBinAddr: 0x11CE8, symSize: 0x0 }
|
||||
- { offset: 0x253D, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIScreen$scale', symObjAddr: 0x26DC0, symBinAddr: 0x11CF0, symSize: 0x0 }
|
||||
- { offset: 0x2552, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIScreen$nativeBounds', symObjAddr: 0x26DC8, symBinAddr: 0x11CF8, symSize: 0x0 }
|
||||
- { offset: 0x2567, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIScreen$isCaptured', symObjAddr: 0x26DD0, symBinAddr: 0x11D00, symSize: 0x0 }
|
||||
- { offset: 0x2591, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIScreen$mirroredScreen', symObjAddr: 0x26DD8, symBinAddr: 0x11D08, symSize: 0x0 }
|
||||
- { offset: 0x25BB, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$AVAudioSession$outputVolume', symObjAddr: 0x26DE0, symBinAddr: 0x11D10, symSize: 0x0 }
|
||||
- { offset: 0x25F5, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIScreenMode$size', symObjAddr: 0x26DE8, symBinAddr: 0x11D18, symSize: 0x0 }
|
||||
- { offset: 0x2624, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$NSFileManager$attributesOfFileSystemForPath$error$', symObjAddr: 0x26DF0, symBinAddr: 0x11D20, symSize: 0x0 }
|
||||
- { offset: 0x274E, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$NSFileManager$fileExistsAtPath$', symObjAddr: 0x26DF8, symBinAddr: 0x11D28, symSize: 0x0 }
|
||||
- { offset: 0x277D, size: 0x8, addend: 0x0, symName: '__logos_meta_orig$ohno$NSLocale$preferredLanguages', symObjAddr: 0x26E00, symBinAddr: 0x11D30, symSize: 0x0 }
|
||||
- { offset: 0x27A7, size: 0x8, addend: 0x0, symName: '__logos_meta_orig$ohno$NSLocale$currentLocale', symObjAddr: 0x26E08, symBinAddr: 0x11D38, symSize: 0x0 }
|
||||
- { offset: 0x27E6, size: 0x8, addend: 0x0, symName: '__logos_meta_orig$ohno$NSLocale$systemLocale', symObjAddr: 0x26E10, symBinAddr: 0x11D40, symSize: 0x0 }
|
||||
- { offset: 0x27FB, size: 0x8, addend: 0x0, symName: '__logos_meta_orig$ohno$NSTimeZone$localTimeZone', symObjAddr: 0x26E18, symBinAddr: 0x11D48, symSize: 0x0 }
|
||||
- { offset: 0x2854, size: 0x8, addend: 0x0, symName: '__logos_meta_orig$ohno$NSTimeZone$systemTimeZone', symObjAddr: 0x26E20, symBinAddr: 0x11D50, symSize: 0x0 }
|
||||
- { offset: 0x2869, size: 0x8, addend: 0x0, symName: '__logos_meta_orig$ohno$NSTimeZone$defaultTimeZone', symObjAddr: 0x26E28, symBinAddr: 0x11D58, symSize: 0x0 }
|
||||
- { offset: 0x287E, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIStatusBarManager$statusBarFrame', symObjAddr: 0x26E30, symBinAddr: 0x11D60, symSize: 0x0 }
|
||||
- { offset: 0x28EA, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$NSMutableURLRequest$initWithURL$', symObjAddr: 0x26E38, symBinAddr: 0x11D68, symSize: 0x0 }
|
||||
- { offset: 0x2B87, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$NSMutableURLRequest$setValue$forHTTPHeaderField$', symObjAddr: 0x26E40, symBinAddr: 0x11D70, symSize: 0x0 }
|
||||
- { offset: 0x2BBC, size: 0x8, addend: 0x0, symName: '__logos_meta_orig$ohno$NSURLSession$sessionWithConfiguration$', symObjAddr: 0x26E48, symBinAddr: 0x11D78, symSize: 0x0 }
|
||||
- { offset: 0x32F0, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$NSURLSession$dataTaskWithRequest$completionHandler$', symObjAddr: 0x26E50, symBinAddr: 0x11D80, symSize: 0x0 }
|
||||
- { offset: 0x3542, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$WKWebView$evaluateJavaScript$completionHandler$', symObjAddr: 0x26E58, symBinAddr: 0x11D88, symSize: 0x0 }
|
||||
- { offset: 0x51A6, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$WKWebView$setCustomUserAgent$', symObjAddr: 0x26E60, symBinAddr: 0x11D90, symSize: 0x0 }
|
||||
- { offset: 0x51D1, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$WKWebView$customUserAgent', symObjAddr: 0x26E68, symBinAddr: 0x11D98, symSize: 0x0 }
|
||||
- { offset: 0x51FB, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$CTTelephonyNetworkInfo$serviceCurrentRadioAccessTechnology', symObjAddr: 0x26E70, symBinAddr: 0x11DA0, symSize: 0x0 }
|
||||
- { offset: 0x53AB, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$CTTelephonyNetworkInfo$serviceSubscriberCellularProviders', symObjAddr: 0x26E78, symBinAddr: 0x11DA8, symSize: 0x0 }
|
||||
- { offset: 0x53C0, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$CMMotionManager$startGyroUpdatesToQueue$withHandler$', symObjAddr: 0x26E80, symBinAddr: 0x11DB0, symSize: 0x0 }
|
||||
- { offset: 0x590C, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$uname', symObjAddr: 0x26E88, symBinAddr: 0x11DB8, symSize: 0x0 }
|
||||
- { offset: 0x598E, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$sysctl', symObjAddr: 0x26E90, symBinAddr: 0x11DC0, symSize: 0x0 }
|
||||
- { offset: 0x59E7, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$sysctlbyname', symObjAddr: 0x26E98, symBinAddr: 0x11DC8, symSize: 0x0 }
|
||||
- { offset: 0x5A21, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$clock_gettime', symObjAddr: 0x26EA0, symBinAddr: 0x11DD0, symSize: 0x0 }
|
||||
- { offset: 0x5AC1, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$getifaddrs', symObjAddr: 0x26EA8, symBinAddr: 0x11DD8, symSize: 0x0 }
|
||||
- { offset: 0x5B9F, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$SCNetworkReachabilityGetFlags', symObjAddr: 0x26EB0, symBinAddr: 0x11DE0, symSize: 0x0 }
|
||||
- { offset: 0x5C50, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIAccessibilityIsClosedCaptioningEnabled', symObjAddr: 0x26EB8, symBinAddr: 0x11DE8, symSize: 0x0 }
|
||||
- { offset: 0x5C72, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIAccessibilityIsMonoAudioEnabled', symObjAddr: 0x26EC0, symBinAddr: 0x11DF0, symSize: 0x0 }
|
||||
- { offset: 0x5E40, size: 0x8, addend: 0x0, symName: _str2uuid, symObjAddr: 0x0, symBinAddr: 0x4000, symSize: 0x64 }
|
||||
- { offset: 0x5E68, size: 0x8, addend: 0x0, symName: _str2int, symObjAddr: 0x64, symBinAddr: 0x4064, symSize: 0x58 }
|
||||
- { offset: 0x5E90, size: 0x8, addend: 0x0, symName: _str2float, symObjAddr: 0xBC, symBinAddr: 0x40BC, symSize: 0x54 }
|
||||
- { offset: 0x5EB8, size: 0x8, addend: 0x0, symName: _str2double, symObjAddr: 0x110, symBinAddr: 0x4110, symSize: 0x54 }
|
||||
- { offset: 0x5EE0, size: 0x8, addend: 0x0, symName: _str2ull, symObjAddr: 0x164, symBinAddr: 0x4164, symSize: 0x58 }
|
||||
- { offset: 0x5F08, size: 0x8, addend: 0x0, symName: _tryGetVal, symObjAddr: 0x1BC, symBinAddr: 0x41BC, symSize: 0x190 }
|
||||
- { offset: 0x5F62, size: 0x8, addend: 0x0, symName: _str2chars, symObjAddr: 0x34C, symBinAddr: 0x434C, symSize: 0x6C }
|
||||
- { offset: 0x5F98, size: 0x8, addend: 0x0, symName: '-[CustomCMGyroData rotationRate]', symObjAddr: 0x3B8, symBinAddr: 0x43B8, symSize: 0x44 }
|
||||
- { offset: 0x5FCF, size: 0x8, addend: 0x0, symName: '-[CustomCMGyroData customRotationRate]', symObjAddr: 0x3FC, symBinAddr: 0x43FC, symSize: 0x40 }
|
||||
- { offset: 0x6006, size: 0x8, addend: 0x0, symName: '-[CustomCMGyroData setCustomRotationRate:]', symObjAddr: 0x43C, symBinAddr: 0x443C, symSize: 0x40 }
|
||||
- { offset: 0x6045, size: 0x8, addend: 0x0, symName: __logosLocalCtor_e2ef2056, symObjAddr: 0x47C, symBinAddr: 0x447C, symSize: 0xD0C }
|
||||
- { offset: 0x62E8, size: 0x8, addend: 0x0, symName: '__logos_meta_method$ohno$ATTrackingManager$trackingAuthorizationStatus', symObjAddr: 0x1188, symBinAddr: 0x5188, symSize: 0x130 }
|
||||
- { offset: 0x6349, size: 0x8, addend: 0x0, symName: '__logos_meta_method$ohno$ATTrackingManager$requestTrackingAuthorizationWithCompletionHandler$', symObjAddr: 0x12B8, symBinAddr: 0x52B8, symSize: 0x1BC }
|
||||
- { offset: 0x63B0, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$ASIdentifierManager$advertisingIdentifier', symObjAddr: 0x1474, symBinAddr: 0x5474, symSize: 0x158 }
|
||||
- { offset: 0x63F9, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$ASIdentifierManager$isAdvertisingTrackingEnabled', symObjAddr: 0x15CC, symBinAddr: 0x55CC, symSize: 0xF4 }
|
||||
- { offset: 0x6442, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIDevice$identifierForVendor', symObjAddr: 0x16C0, symBinAddr: 0x56C0, symSize: 0x158 }
|
||||
- { offset: 0x648B, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIDevice$name', symObjAddr: 0x1818, symBinAddr: 0x5818, symSize: 0x158 }
|
||||
- { offset: 0x64D4, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIDevice$model', symObjAddr: 0x1970, symBinAddr: 0x5970, symSize: 0x34 }
|
||||
- { offset: 0x650A, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIDevice$localizedModel', symObjAddr: 0x19A4, symBinAddr: 0x59A4, symSize: 0x34 }
|
||||
- { offset: 0x6540, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIDevice$systemName', symObjAddr: 0x19D8, symBinAddr: 0x59D8, symSize: 0x34 }
|
||||
- { offset: 0x6576, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIDevice$systemVersion', symObjAddr: 0x1A0C, symBinAddr: 0x5A0C, symSize: 0x158 }
|
||||
- { offset: 0x65BF, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIDevice$batteryState', symObjAddr: 0x1B64, symBinAddr: 0x5B64, symSize: 0xF0 }
|
||||
- { offset: 0x6608, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIDevice$batteryLevel', symObjAddr: 0x1C54, symBinAddr: 0x5C54, symSize: 0xF0 }
|
||||
- { offset: 0x6651, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIDevice$orientation', symObjAddr: 0x1D44, symBinAddr: 0x5D44, symSize: 0x18 }
|
||||
- { offset: 0x6687, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$NSProcessInfo$systemUptime', symObjAddr: 0x1D5C, symBinAddr: 0x5D5C, symSize: 0xF0 }
|
||||
- { offset: 0x66D0, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$NSProcessInfo$physicalMemory', symObjAddr: 0x1E4C, symBinAddr: 0x5E4C, symSize: 0x110 }
|
||||
- { offset: 0x6719, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$NSProcessInfo$processorCount', symObjAddr: 0x1F5C, symBinAddr: 0x5F5C, symSize: 0xF0 }
|
||||
- { offset: 0x6766, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$NSProcessInfo$operatingSystemVersion', symObjAddr: 0x204C, symBinAddr: 0x604C, symSize: 0x614 }
|
||||
- { offset: 0x67F4, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIWindow$safeAreaInsets', symObjAddr: 0x2660, symBinAddr: 0x6660, symSize: 0x214 }
|
||||
- { offset: 0x6842, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIScreen$brightness', symObjAddr: 0x2874, symBinAddr: 0x6874, symSize: 0xF0 }
|
||||
- { offset: 0x688F, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIScreen$bounds', symObjAddr: 0x2964, symBinAddr: 0x6964, symSize: 0x12C }
|
||||
- { offset: 0x68DD, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIScreen$scale', symObjAddr: 0x2A90, symBinAddr: 0x6A90, symSize: 0xF0 }
|
||||
- { offset: 0x692A, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIScreen$nativeBounds', symObjAddr: 0x2B80, symBinAddr: 0x6B80, symSize: 0x12C }
|
||||
- { offset: 0x6978, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIScreen$isCaptured', symObjAddr: 0x2CAC, symBinAddr: 0x6CAC, symSize: 0x1C }
|
||||
- { offset: 0x69B1, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIScreen$mirroredScreen', symObjAddr: 0x2CC8, symBinAddr: 0x6CC8, symSize: 0x18 }
|
||||
- { offset: 0x69EA, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$AVAudioSession$outputVolume', symObjAddr: 0x2CE0, symBinAddr: 0x6CE0, symSize: 0xF0 }
|
||||
- { offset: 0x6A37, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIScreenMode$size', symObjAddr: 0x2DD0, symBinAddr: 0x6DD0, symSize: 0x104 }
|
||||
- { offset: 0x6A85, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$NSFileManager$attributesOfFileSystemForPath$error$', symObjAddr: 0x2ED4, symBinAddr: 0x6ED4, symSize: 0x248 }
|
||||
- { offset: 0x6B09, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$NSFileManager$fileExistsAtPath$', symObjAddr: 0x311C, symBinAddr: 0x711C, symSize: 0x3A0 }
|
||||
- { offset: 0x6B74, size: 0x8, addend: 0x0, symName: '__logos_meta_method$ohno$NSLocale$preferredLanguages', symObjAddr: 0x34BC, symBinAddr: 0x74BC, symSize: 0x88 }
|
||||
- { offset: 0x6BAD, size: 0x8, addend: 0x0, symName: '__logos_meta_method$ohno$NSLocale$currentLocale', symObjAddr: 0x3544, symBinAddr: 0x7544, symSize: 0x138 }
|
||||
- { offset: 0x6BFA, size: 0x8, addend: 0x0, symName: '__logos_meta_method$ohno$NSLocale$systemLocale', symObjAddr: 0x367C, symBinAddr: 0x767C, symSize: 0x138 }
|
||||
- { offset: 0x6C47, size: 0x8, addend: 0x0, symName: '__logos_meta_method$ohno$NSTimeZone$localTimeZone', symObjAddr: 0x37B4, symBinAddr: 0x77B4, symSize: 0x138 }
|
||||
- { offset: 0x6C94, size: 0x8, addend: 0x0, symName: '__logos_meta_method$ohno$NSTimeZone$systemTimeZone', symObjAddr: 0x38EC, symBinAddr: 0x78EC, symSize: 0x138 }
|
||||
- { offset: 0x6CE1, size: 0x8, addend: 0x0, symName: '__logos_meta_method$ohno$NSTimeZone$defaultTimeZone', symObjAddr: 0x3A24, symBinAddr: 0x7A24, symSize: 0x138 }
|
||||
- { offset: 0x6D2E, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIStatusBarManager$statusBarFrame', symObjAddr: 0x3B5C, symBinAddr: 0x7B5C, symSize: 0x12C }
|
||||
- { offset: 0x6D7C, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$NSMutableURLRequest$initWithURL$', symObjAddr: 0x3C88, symBinAddr: 0x7C88, symSize: 0x134 }
|
||||
- { offset: 0x6DC4, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$NSMutableURLRequest$setValue$forHTTPHeaderField$', symObjAddr: 0x3DBC, symBinAddr: 0x7DBC, symSize: 0x18C }
|
||||
- { offset: 0x6E2C, size: 0x8, addend: 0x0, symName: '__logos_meta_method$ohno$NSURLSession$sessionWithConfiguration$', symObjAddr: 0x3F48, symBinAddr: 0x7F48, symSize: 0xF4 }
|
||||
- { offset: 0x6E74, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$NSURLSession$dataTaskWithRequest$completionHandler$', symObjAddr: 0x403C, symBinAddr: 0x803C, symSize: 0x134 }
|
||||
- { offset: 0x6EDA, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$WKWebView$evaluateJavaScript$completionHandler$', symObjAddr: 0x4170, symBinAddr: 0x8170, symSize: 0x1F0 }
|
||||
- { offset: 0x6F42, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$WKWebView$setCustomUserAgent$', symObjAddr: 0x4360, symBinAddr: 0x8360, symSize: 0x140 }
|
||||
- { offset: 0x6F9B, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$WKWebView$customUserAgent', symObjAddr: 0x44A0, symBinAddr: 0x84A0, symSize: 0x12C }
|
||||
- { offset: 0x6FE8, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$CTTelephonyNetworkInfo$serviceCurrentRadioAccessTechnology', symObjAddr: 0x45CC, symBinAddr: 0x85CC, symSize: 0x170 }
|
||||
- { offset: 0x703F, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$CTTelephonyNetworkInfo$serviceSubscriberCellularProviders', symObjAddr: 0x473C, symBinAddr: 0x873C, symSize: 0x170 }
|
||||
- { offset: 0x7096, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$CMMotionManager$startGyroUpdatesToQueue$withHandler$', symObjAddr: 0x48AC, symBinAddr: 0x88AC, symSize: 0x150 }
|
||||
- { offset: 0x70F8, size: 0x8, addend: 0x0, symName: '__logos_function$ohno$uname', symObjAddr: 0x49FC, symBinAddr: 0x89FC, symSize: 0x88 }
|
||||
- { offset: 0x7131, size: 0x8, addend: 0x0, symName: '__logos_function$ohno$sysctl', symObjAddr: 0x4A84, symBinAddr: 0x8A84, symSize: 0x410 }
|
||||
- { offset: 0x721E, size: 0x8, addend: 0x0, symName: '__logos_function$ohno$sysctlbyname', symObjAddr: 0x4E94, symBinAddr: 0x8E94, symSize: 0x428 }
|
||||
- { offset: 0x731C, size: 0x8, addend: 0x0, symName: '__logos_function$ohno$clock_gettime', symObjAddr: 0x52BC, symBinAddr: 0x92BC, symSize: 0x5C }
|
||||
- { offset: 0x7364, size: 0x8, addend: 0x0, symName: '__logos_function$ohno$getifaddrs', symObjAddr: 0x5318, symBinAddr: 0x9318, symSize: 0x698 }
|
||||
- { offset: 0x74EA, size: 0x8, addend: 0x0, symName: '__logos_function$ohno$SCNetworkReachabilityGetFlags', symObjAddr: 0x59B0, symBinAddr: 0x99B0, symSize: 0x84 }
|
||||
- { offset: 0x7532, size: 0x8, addend: 0x0, symName: __logosLocalDtor_9db639d6, symObjAddr: 0x5A34, symBinAddr: 0x9A34, symSize: 0x28 }
|
||||
- { offset: 0x7576, size: 0x8, addend: 0x0, symName: '____logos_meta_method$ohno$ATTrackingManager$trackingAuthorizationStatus_block_invoke', symObjAddr: 0x5A5C, symBinAddr: 0x9A5C, symSize: 0x80 }
|
||||
- { offset: 0x75C3, size: 0x8, addend: 0x0, symName: ___copy_helper_block_e8_32r, symObjAddr: 0x5ADC, symBinAddr: 0x9ADC, symSize: 0x38 }
|
||||
- { offset: 0x75E7, size: 0x8, addend: 0x0, symName: ___destroy_helper_block_e8_32r, symObjAddr: 0x5B14, symBinAddr: 0x9B14, symSize: 0x2C }
|
||||
- { offset: 0x7603, size: 0x8, addend: 0x0, symName: '____logos_meta_method$ohno$ATTrackingManager$requestTrackingAuthorizationWithCompletionHandler$_block_invoke', symObjAddr: 0x5B40, symBinAddr: 0x9B40, symSize: 0x80 }
|
||||
- { offset: 0x7650, size: 0x8, addend: 0x0, symName: '____logos_meta_method$ohno$ATTrackingManager$requestTrackingAuthorizationWithCompletionHandler$_block_invoke_2', symObjAddr: 0x5BC0, symBinAddr: 0x9BC0, symSize: 0x58 }
|
||||
- { offset: 0x76A0, size: 0x8, addend: 0x0, symName: ___copy_helper_block_e8_32b40r, symObjAddr: 0x5C18, symBinAddr: 0x9C18, symSize: 0x58 }
|
||||
- { offset: 0x76C4, size: 0x8, addend: 0x0, symName: ___destroy_helper_block_e8_32s40r, symObjAddr: 0x5C70, symBinAddr: 0x9C70, symSize: 0x40 }
|
||||
- { offset: 0x76E0, size: 0x8, addend: 0x0, symName: ___Block_byref_object_copy_, symObjAddr: 0x5CB0, symBinAddr: 0x9CB0, symSize: 0x54 }
|
||||
- { offset: 0x7704, size: 0x8, addend: 0x0, symName: ___Block_byref_object_dispose_, symObjAddr: 0x5D04, symBinAddr: 0x9D04, symSize: 0x2C }
|
||||
- { offset: 0x7720, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$ASIdentifierManager$advertisingIdentifier_block_invoke', symObjAddr: 0x5D30, symBinAddr: 0x9D30, symSize: 0x80 }
|
||||
- { offset: 0x776D, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$ASIdentifierManager$isAdvertisingTrackingEnabled_block_invoke', symObjAddr: 0x5DB0, symBinAddr: 0x9DB0, symSize: 0x9C }
|
||||
- { offset: 0x77D6, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$UIDevice$identifierForVendor_block_invoke', symObjAddr: 0x5E4C, symBinAddr: 0x9E4C, symSize: 0x80 }
|
||||
- { offset: 0x7823, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$UIDevice$name_block_invoke', symObjAddr: 0x5ECC, symBinAddr: 0x9ECC, symSize: 0x64 }
|
||||
- { offset: 0x7870, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$UIDevice$systemVersion_block_invoke', symObjAddr: 0x5F30, symBinAddr: 0x9F30, symSize: 0x64 }
|
||||
- { offset: 0x78BD, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$UIDevice$batteryState_block_invoke', symObjAddr: 0x5F94, symBinAddr: 0x9F94, symSize: 0x70 }
|
||||
- { offset: 0x7926, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$UIDevice$batteryLevel_block_invoke', symObjAddr: 0x6004, symBinAddr: 0xA004, symSize: 0x64 }
|
||||
- { offset: 0x7973, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$NSProcessInfo$systemUptime_block_invoke', symObjAddr: 0x6068, symBinAddr: 0xA068, symSize: 0x88 }
|
||||
- { offset: 0x79DC, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$NSProcessInfo$physicalMemory_block_invoke', symObjAddr: 0x60F0, symBinAddr: 0xA0F0, symSize: 0x74 }
|
||||
- { offset: 0x7A45, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$NSProcessInfo$processorCount_block_invoke', symObjAddr: 0x6164, symBinAddr: 0xA164, symSize: 0x74 }
|
||||
- { offset: 0x7AB3, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$NSProcessInfo$operatingSystemVersion_block_invoke', symObjAddr: 0x61D8, symBinAddr: 0xA1D8, symSize: 0x64 }
|
||||
- { offset: 0x7B04, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$UIWindow$safeAreaInsets_block_invoke', symObjAddr: 0x623C, symBinAddr: 0xA23C, symSize: 0x160 }
|
||||
- { offset: 0x7B81, size: 0x8, addend: 0x0, symName: _UIEdgeInsetsMake, symObjAddr: 0x639C, symBinAddr: 0xA39C, symSize: 0x4C }
|
||||
- { offset: 0x7BE1, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$UIScreen$brightness_block_invoke', symObjAddr: 0x63E8, symBinAddr: 0xA3E8, symSize: 0x78 }
|
||||
- { offset: 0x7C4F, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$UIScreen$bounds_block_invoke', symObjAddr: 0x6460, symBinAddr: 0xA460, symSize: 0x12C }
|
||||
- { offset: 0x7CEB, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$UIScreen$scale_block_invoke', symObjAddr: 0x658C, symBinAddr: 0xA58C, symSize: 0x78 }
|
||||
- { offset: 0x7D59, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$UIScreen$nativeBounds_block_invoke', symObjAddr: 0x6604, symBinAddr: 0xA604, symSize: 0x12C }
|
||||
- { offset: 0x7DF5, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$AVAudioSession$outputVolume_block_invoke', symObjAddr: 0x6730, symBinAddr: 0xA730, symSize: 0x78 }
|
||||
- { offset: 0x7E63, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$UIScreenMode$size_block_invoke', symObjAddr: 0x67A8, symBinAddr: 0xA7A8, symSize: 0x118 }
|
||||
- { offset: 0x7EFE, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$NSFileManager$attributesOfFileSystemForPath$error$_block_invoke', symObjAddr: 0x68C0, symBinAddr: 0xA8C0, symSize: 0xB0 }
|
||||
- { offset: 0x7F66, size: 0x8, addend: 0x0, symName: ___copy_helper_block_e8_32s, symObjAddr: 0x6970, symBinAddr: 0xA970, symSize: 0x38 }
|
||||
- { offset: 0x7F8A, size: 0x8, addend: 0x0, symName: ___destroy_helper_block_e8_32s, symObjAddr: 0x69A8, symBinAddr: 0xA9A8, symSize: 0x2C }
|
||||
- { offset: 0x7FA6, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$NSFileManager$attributesOfFileSystemForPath$error$_block_invoke.252', symObjAddr: 0x69D4, symBinAddr: 0xA9D4, symSize: 0xB0 }
|
||||
- { offset: 0x800E, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$NSFileManager$fileExistsAtPath$_block_invoke', symObjAddr: 0x6A84, symBinAddr: 0xAA84, symSize: 0x9C }
|
||||
- { offset: 0x8098, size: 0x8, addend: 0x0, symName: '____logos_meta_method$ohno$NSLocale$currentLocale_block_invoke', symObjAddr: 0x6B20, symBinAddr: 0xAB20, symSize: 0xB0 }
|
||||
- { offset: 0x8106, size: 0x8, addend: 0x0, symName: '____logos_meta_method$ohno$NSLocale$systemLocale_block_invoke', symObjAddr: 0x6BD0, symBinAddr: 0xABD0, symSize: 0xB0 }
|
||||
- { offset: 0x8174, size: 0x8, addend: 0x0, symName: '____logos_meta_method$ohno$NSTimeZone$localTimeZone_block_invoke', symObjAddr: 0x6C80, symBinAddr: 0xAC80, symSize: 0xB4 }
|
||||
- { offset: 0x81E2, size: 0x8, addend: 0x0, symName: '____logos_meta_method$ohno$NSTimeZone$systemTimeZone_block_invoke', symObjAddr: 0x6D34, symBinAddr: 0xAD34, symSize: 0xB4 }
|
||||
- { offset: 0x8250, size: 0x8, addend: 0x0, symName: '____logos_meta_method$ohno$NSTimeZone$defaultTimeZone_block_invoke', symObjAddr: 0x6DE8, symBinAddr: 0xADE8, symSize: 0xB4 }
|
||||
- { offset: 0x82BE, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$UIStatusBarManager$statusBarFrame_block_invoke', symObjAddr: 0x6E9C, symBinAddr: 0xAE9C, symSize: 0xE0 }
|
||||
- { offset: 0x834A, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$NSMutableURLRequest$initWithURL$_block_invoke', symObjAddr: 0x6F7C, symBinAddr: 0xAF7C, symSize: 0x68 }
|
||||
- { offset: 0x8395, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$NSMutableURLRequest$setValue$forHTTPHeaderField$_block_invoke', symObjAddr: 0x6FE4, symBinAddr: 0xAFE4, symSize: 0x64 }
|
||||
- { offset: 0x83E6, size: 0x8, addend: 0x0, symName: '____logos_meta_method$ohno$NSURLSession$sessionWithConfiguration$_block_invoke', symObjAddr: 0x7048, symBinAddr: 0xB048, symSize: 0xDC }
|
||||
- { offset: 0x8431, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$NSURLSession$dataTaskWithRequest$completionHandler$_block_invoke', symObjAddr: 0x7124, symBinAddr: 0xB124, symSize: 0x68 }
|
||||
- { offset: 0x847C, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$WKWebView$evaluateJavaScript$completionHandler$_block_invoke', symObjAddr: 0x718C, symBinAddr: 0xB18C, symSize: 0x64 }
|
||||
- { offset: 0x84CD, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$WKWebView$setCustomUserAgent$_block_invoke', symObjAddr: 0x71F0, symBinAddr: 0xB1F0, symSize: 0x64 }
|
||||
- { offset: 0x851E, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$WKWebView$customUserAgent_block_invoke', symObjAddr: 0x7254, symBinAddr: 0xB254, symSize: 0x64 }
|
||||
- { offset: 0x856F, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$CTTelephonyNetworkInfo$serviceCurrentRadioAccessTechnology_block_invoke', symObjAddr: 0x72B8, symBinAddr: 0xB2B8, symSize: 0x268 }
|
||||
- { offset: 0x8617, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$CTTelephonyNetworkInfo$serviceSubscriberCellularProviders_block_invoke', symObjAddr: 0x7520, symBinAddr: 0xB520, symSize: 0x36C }
|
||||
- { offset: 0x86BF, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$CMMotionManager$startGyroUpdatesToQueue$withHandler$_block_invoke', symObjAddr: 0x788C, symBinAddr: 0xB88C, symSize: 0x15C }
|
||||
- { offset: 0x8764, size: 0x8, addend: 0x0, symName: ___copy_helper_block_e8_32b, symObjAddr: 0x79E8, symBinAddr: 0xB9E8, symSize: 0x38 }
|
||||
- { offset: 0x8788, size: 0x8, addend: 0x0, symName: _randomRadiansPerSecond, symObjAddr: 0x7A20, symBinAddr: 0xBA20, symSize: 0x44 }
|
||||
- { offset: 0x87B2, size: 0x8, addend: 0x0, symName: '____logos_function$ohno$uname_block_invoke', symObjAddr: 0x7A64, symBinAddr: 0xBA64, symSize: 0xB0 }
|
||||
- { offset: 0x881B, size: 0x8, addend: 0x0, symName: '____logos_function$ohno$sysctl_block_invoke', symObjAddr: 0x7B14, symBinAddr: 0xBB14, symSize: 0x78 }
|
||||
- { offset: 0x8883, size: 0x8, addend: 0x0, symName: '____logos_function$ohno$sysctl_block_invoke_2', symObjAddr: 0x7B8C, symBinAddr: 0xBB8C, symSize: 0x68 }
|
||||
- { offset: 0x88D4, size: 0x8, addend: 0x0, symName: '____logos_function$ohno$sysctlbyname_block_invoke', symObjAddr: 0x7BF4, symBinAddr: 0xBBF4, symSize: 0xC0 }
|
||||
- { offset: 0x893A, size: 0x8, addend: 0x0, symName: '____logos_function$ohno$sysctlbyname_block_invoke_2', symObjAddr: 0x7CB4, symBinAddr: 0xBCB4, symSize: 0xC0 }
|
||||
- { offset: 0x89A0, size: 0x8, addend: 0x0, symName: '____logos_function$ohno$getifaddrs_block_invoke', symObjAddr: 0x7D74, symBinAddr: 0xBD74, symSize: 0x8C }
|
||||
- { offset: 0x89F1, size: 0x8, addend: 0x0, symName: _modifyInterfaceIP, symObjAddr: 0x7E00, symBinAddr: 0xBE00, symSize: 0x16C }
|
||||
- { offset: 0x8A84, size: 0x8, addend: 0x0, symName: _createInterface, symObjAddr: 0x7F6C, symBinAddr: 0xBF6C, symSize: 0x3F4 }
|
||||
- { offset: 0x8B2D, size: 0x8, addend: 0x0, symName: '__logos_function$ohno$UIAccessibilityIsClosedCaptioningEnabled', symObjAddr: 0x8360, symBinAddr: 0xC360, symSize: 0xC }
|
||||
- { offset: 0x8B47, size: 0x8, addend: 0x0, symName: '__logos_function$ohno$UIAccessibilityIsMonoAudioEnabled', symObjAddr: 0x836C, symBinAddr: 0xC36C, symSize: 0xC }
|
||||
- { offset: 0x8B61, size: 0x8, addend: 0x0, symName: _cleanup, symObjAddr: 0x8378, symBinAddr: 0xC378, symSize: 0x38 }
|
||||
- { offset: 0x8B77, size: 0x8, addend: 0x0, symName: ___GLOBAL_init_65535, symObjAddr: 0x8960, symBinAddr: 0xC3B0, symSize: 0x28 }
|
||||
...
|
||||
Binary file not shown.
@ -1,20 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>English</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.apple.xcode.dsym.AppRunMan.dylib</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>dSYM</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.0</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1</string>
|
||||
</dict>
|
||||
</plist>
|
||||
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
@ -1,20 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>English</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.apple.xcode.dsym.OhNo.dylib</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>dSYM</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.0</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1</string>
|
||||
</dict>
|
||||
</plist>
|
||||
Binary file not shown.
@ -1,185 +0,0 @@
|
||||
---
|
||||
triple: 'arm64e-apple-darwin'
|
||||
binary-path: '/Users/mac/workspaces/projects/ios-change/old-ios-hook/.theos/obj/debug/arm64e/OhNo.dylib'
|
||||
relocations:
|
||||
- { offset: 0x7D, size: 0x8, addend: 0x0, symName: _settings, symBinAddr: 0x14610, symSize: 0x0 }
|
||||
- { offset: 0xF0, size: 0x8, addend: 0x0, symName: '__logos_meta_orig$ohno$ATTrackingManager$trackingAuthorizationStatus', symObjAddr: 0x27998, symBinAddr: 0x14468, symSize: 0x0 }
|
||||
- { offset: 0x163, size: 0x8, addend: 0x0, symName: '__logos_meta_orig$ohno$ATTrackingManager$requestTrackingAuthorizationWithCompletionHandler$', symObjAddr: 0x279A0, symBinAddr: 0x14470, symSize: 0x0 }
|
||||
- { offset: 0x1FD, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$ASIdentifierManager$advertisingIdentifier', symObjAddr: 0x279A8, symBinAddr: 0x14478, symSize: 0x0 }
|
||||
- { offset: 0x27B, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$ASIdentifierManager$isAdvertisingTrackingEnabled', symObjAddr: 0x279B0, symBinAddr: 0x14480, symSize: 0x0 }
|
||||
- { offset: 0x2B7, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIDevice$identifierForVendor', symObjAddr: 0x279B8, symBinAddr: 0x14488, symSize: 0x0 }
|
||||
- { offset: 0x492, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIDevice$name', symObjAddr: 0x279C0, symBinAddr: 0x14490, symSize: 0x0 }
|
||||
- { offset: 0x4BC, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIDevice$model', symObjAddr: 0x279C8, symBinAddr: 0x14498, symSize: 0x0 }
|
||||
- { offset: 0x4D1, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIDevice$localizedModel', symObjAddr: 0x279D0, symBinAddr: 0x144A0, symSize: 0x0 }
|
||||
- { offset: 0x4E6, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIDevice$systemName', symObjAddr: 0x279D8, symBinAddr: 0x144A8, symSize: 0x0 }
|
||||
- { offset: 0x4FB, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIDevice$systemVersion', symObjAddr: 0x279E0, symBinAddr: 0x144B0, symSize: 0x0 }
|
||||
- { offset: 0x510, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIDevice$batteryState', symObjAddr: 0x279E8, symBinAddr: 0x144B8, symSize: 0x0 }
|
||||
- { offset: 0x53A, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIDevice$batteryLevel', symObjAddr: 0x279F0, symBinAddr: 0x144C0, symSize: 0x0 }
|
||||
- { offset: 0x564, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIDevice$orientation', symObjAddr: 0x279F8, symBinAddr: 0x144C8, symSize: 0x0 }
|
||||
- { offset: 0x58E, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$NSProcessInfo$systemUptime', symObjAddr: 0x27A00, symBinAddr: 0x144D0, symSize: 0x0 }
|
||||
- { offset: 0x738, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$NSProcessInfo$physicalMemory', symObjAddr: 0x27A08, symBinAddr: 0x144D8, symSize: 0x0 }
|
||||
- { offset: 0x762, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$NSProcessInfo$processorCount', symObjAddr: 0x27A10, symBinAddr: 0x144E0, symSize: 0x0 }
|
||||
- { offset: 0x78C, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$NSProcessInfo$operatingSystemVersion', symObjAddr: 0x27A18, symBinAddr: 0x144E8, symSize: 0x0 }
|
||||
- { offset: 0x7B6, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIWindow$safeAreaInsets', symObjAddr: 0x27A20, symBinAddr: 0x144F0, symSize: 0x0 }
|
||||
- { offset: 0x24E4, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIScreen$brightness', symObjAddr: 0x27A28, symBinAddr: 0x144F8, symSize: 0x0 }
|
||||
- { offset: 0x2513, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIScreen$bounds', symObjAddr: 0x27A30, symBinAddr: 0x14500, symSize: 0x0 }
|
||||
- { offset: 0x253D, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIScreen$scale', symObjAddr: 0x27A38, symBinAddr: 0x14508, symSize: 0x0 }
|
||||
- { offset: 0x2552, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIScreen$nativeBounds', symObjAddr: 0x27A40, symBinAddr: 0x14510, symSize: 0x0 }
|
||||
- { offset: 0x2567, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIScreen$isCaptured', symObjAddr: 0x27A48, symBinAddr: 0x14518, symSize: 0x0 }
|
||||
- { offset: 0x2591, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIScreen$mirroredScreen', symObjAddr: 0x27A50, symBinAddr: 0x14520, symSize: 0x0 }
|
||||
- { offset: 0x25BB, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$AVAudioSession$outputVolume', symObjAddr: 0x27A58, symBinAddr: 0x14528, symSize: 0x0 }
|
||||
- { offset: 0x25F5, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIScreenMode$size', symObjAddr: 0x27A60, symBinAddr: 0x14530, symSize: 0x0 }
|
||||
- { offset: 0x2624, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$NSFileManager$attributesOfFileSystemForPath$error$', symObjAddr: 0x27A68, symBinAddr: 0x14538, symSize: 0x0 }
|
||||
- { offset: 0x274E, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$NSFileManager$fileExistsAtPath$', symObjAddr: 0x27A70, symBinAddr: 0x14540, symSize: 0x0 }
|
||||
- { offset: 0x277D, size: 0x8, addend: 0x0, symName: '__logos_meta_orig$ohno$NSLocale$preferredLanguages', symObjAddr: 0x27A78, symBinAddr: 0x14548, symSize: 0x0 }
|
||||
- { offset: 0x27A7, size: 0x8, addend: 0x0, symName: '__logos_meta_orig$ohno$NSLocale$currentLocale', symObjAddr: 0x27A80, symBinAddr: 0x14550, symSize: 0x0 }
|
||||
- { offset: 0x27E6, size: 0x8, addend: 0x0, symName: '__logos_meta_orig$ohno$NSLocale$systemLocale', symObjAddr: 0x27A88, symBinAddr: 0x14558, symSize: 0x0 }
|
||||
- { offset: 0x27FB, size: 0x8, addend: 0x0, symName: '__logos_meta_orig$ohno$NSTimeZone$localTimeZone', symObjAddr: 0x27A90, symBinAddr: 0x14560, symSize: 0x0 }
|
||||
- { offset: 0x2854, size: 0x8, addend: 0x0, symName: '__logos_meta_orig$ohno$NSTimeZone$systemTimeZone', symObjAddr: 0x27A98, symBinAddr: 0x14568, symSize: 0x0 }
|
||||
- { offset: 0x2869, size: 0x8, addend: 0x0, symName: '__logos_meta_orig$ohno$NSTimeZone$defaultTimeZone', symObjAddr: 0x27AA0, symBinAddr: 0x14570, symSize: 0x0 }
|
||||
- { offset: 0x287E, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIStatusBarManager$statusBarFrame', symObjAddr: 0x27AA8, symBinAddr: 0x14578, symSize: 0x0 }
|
||||
- { offset: 0x28EA, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$NSMutableURLRequest$initWithURL$', symObjAddr: 0x27AB0, symBinAddr: 0x14580, symSize: 0x0 }
|
||||
- { offset: 0x2B87, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$NSMutableURLRequest$setValue$forHTTPHeaderField$', symObjAddr: 0x27AB8, symBinAddr: 0x14588, symSize: 0x0 }
|
||||
- { offset: 0x2BBC, size: 0x8, addend: 0x0, symName: '__logos_meta_orig$ohno$NSURLSession$sessionWithConfiguration$', symObjAddr: 0x27AC0, symBinAddr: 0x14590, symSize: 0x0 }
|
||||
- { offset: 0x32F0, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$NSURLSession$dataTaskWithRequest$completionHandler$', symObjAddr: 0x27AC8, symBinAddr: 0x14598, symSize: 0x0 }
|
||||
- { offset: 0x3542, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$WKWebView$evaluateJavaScript$completionHandler$', symObjAddr: 0x27AD0, symBinAddr: 0x145A0, symSize: 0x0 }
|
||||
- { offset: 0x51A6, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$WKWebView$setCustomUserAgent$', symObjAddr: 0x27AD8, symBinAddr: 0x145A8, symSize: 0x0 }
|
||||
- { offset: 0x51D1, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$WKWebView$customUserAgent', symObjAddr: 0x27AE0, symBinAddr: 0x145B0, symSize: 0x0 }
|
||||
- { offset: 0x51FB, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$CTTelephonyNetworkInfo$serviceCurrentRadioAccessTechnology', symObjAddr: 0x27AE8, symBinAddr: 0x145B8, symSize: 0x0 }
|
||||
- { offset: 0x53AB, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$CTTelephonyNetworkInfo$serviceSubscriberCellularProviders', symObjAddr: 0x27AF0, symBinAddr: 0x145C0, symSize: 0x0 }
|
||||
- { offset: 0x53C0, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$CMMotionManager$startGyroUpdatesToQueue$withHandler$', symObjAddr: 0x27AF8, symBinAddr: 0x145C8, symSize: 0x0 }
|
||||
- { offset: 0x590C, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$uname', symObjAddr: 0x27B00, symBinAddr: 0x145D0, symSize: 0x0 }
|
||||
- { offset: 0x598E, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$sysctl', symObjAddr: 0x27B08, symBinAddr: 0x145D8, symSize: 0x0 }
|
||||
- { offset: 0x59E7, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$sysctlbyname', symObjAddr: 0x27B10, symBinAddr: 0x145E0, symSize: 0x0 }
|
||||
- { offset: 0x5A21, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$clock_gettime', symObjAddr: 0x27B18, symBinAddr: 0x145E8, symSize: 0x0 }
|
||||
- { offset: 0x5AC1, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$getifaddrs', symObjAddr: 0x27B20, symBinAddr: 0x145F0, symSize: 0x0 }
|
||||
- { offset: 0x5B9F, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$SCNetworkReachabilityGetFlags', symObjAddr: 0x27B28, symBinAddr: 0x145F8, symSize: 0x0 }
|
||||
- { offset: 0x5C50, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIAccessibilityIsClosedCaptioningEnabled', symObjAddr: 0x27B30, symBinAddr: 0x14600, symSize: 0x0 }
|
||||
- { offset: 0x5C72, size: 0x8, addend: 0x0, symName: '__logos_orig$ohno$UIAccessibilityIsMonoAudioEnabled', symObjAddr: 0x27B38, symBinAddr: 0x14608, symSize: 0x0 }
|
||||
- { offset: 0x5E40, size: 0x8, addend: 0x0, symName: _str2uuid, symObjAddr: 0x0, symBinAddr: 0x4000, symSize: 0x78 }
|
||||
- { offset: 0x5E68, size: 0x8, addend: 0x0, symName: _str2int, symObjAddr: 0x78, symBinAddr: 0x4078, symSize: 0x5C }
|
||||
- { offset: 0x5E90, size: 0x8, addend: 0x0, symName: _str2float, symObjAddr: 0xD4, symBinAddr: 0x40D4, symSize: 0x58 }
|
||||
- { offset: 0x5EB8, size: 0x8, addend: 0x0, symName: _str2double, symObjAddr: 0x12C, symBinAddr: 0x412C, symSize: 0x58 }
|
||||
- { offset: 0x5EE0, size: 0x8, addend: 0x0, symName: _str2ull, symObjAddr: 0x184, symBinAddr: 0x4184, symSize: 0x5C }
|
||||
- { offset: 0x5F08, size: 0x8, addend: 0x0, symName: _tryGetVal, symObjAddr: 0x1E0, symBinAddr: 0x41E0, symSize: 0x198 }
|
||||
- { offset: 0x5F62, size: 0x8, addend: 0x0, symName: _str2chars, symObjAddr: 0x378, symBinAddr: 0x4378, symSize: 0x70 }
|
||||
- { offset: 0x5F98, size: 0x8, addend: 0x0, symName: '-[CustomCMGyroData rotationRate]', symObjAddr: 0x3E8, symBinAddr: 0x43E8, symSize: 0x48 }
|
||||
- { offset: 0x5FCF, size: 0x8, addend: 0x0, symName: '-[CustomCMGyroData customRotationRate]', symObjAddr: 0x430, symBinAddr: 0x4430, symSize: 0x40 }
|
||||
- { offset: 0x6006, size: 0x8, addend: 0x0, symName: '-[CustomCMGyroData setCustomRotationRate:]', symObjAddr: 0x470, symBinAddr: 0x4470, symSize: 0x40 }
|
||||
- { offset: 0x6045, size: 0x8, addend: 0x0, symName: __logosLocalCtor_e2ef2056, symObjAddr: 0x4B0, symBinAddr: 0x44B0, symSize: 0xFEC }
|
||||
- { offset: 0x62E8, size: 0x8, addend: 0x0, symName: '__logos_meta_method$ohno$ATTrackingManager$trackingAuthorizationStatus', symObjAddr: 0x149C, symBinAddr: 0x549C, symSize: 0x14C }
|
||||
- { offset: 0x6349, size: 0x8, addend: 0x0, symName: '__logos_meta_method$ohno$ATTrackingManager$requestTrackingAuthorizationWithCompletionHandler$', symObjAddr: 0x15E8, symBinAddr: 0x55E8, symSize: 0x1F0 }
|
||||
- { offset: 0x63B0, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$ASIdentifierManager$advertisingIdentifier', symObjAddr: 0x17D8, symBinAddr: 0x57D8, symSize: 0x198 }
|
||||
- { offset: 0x63F9, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$ASIdentifierManager$isAdvertisingTrackingEnabled', symObjAddr: 0x1970, symBinAddr: 0x5970, symSize: 0x110 }
|
||||
- { offset: 0x6442, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIDevice$identifierForVendor', symObjAddr: 0x1A80, symBinAddr: 0x5A80, symSize: 0x198 }
|
||||
- { offset: 0x648B, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIDevice$name', symObjAddr: 0x1C18, symBinAddr: 0x5C18, symSize: 0x198 }
|
||||
- { offset: 0x64D4, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIDevice$model', symObjAddr: 0x1DB0, symBinAddr: 0x5DB0, symSize: 0x38 }
|
||||
- { offset: 0x650A, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIDevice$localizedModel', symObjAddr: 0x1DE8, symBinAddr: 0x5DE8, symSize: 0x38 }
|
||||
- { offset: 0x6540, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIDevice$systemName', symObjAddr: 0x1E20, symBinAddr: 0x5E20, symSize: 0x38 }
|
||||
- { offset: 0x6576, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIDevice$systemVersion', symObjAddr: 0x1E58, symBinAddr: 0x5E58, symSize: 0x198 }
|
||||
- { offset: 0x65BF, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIDevice$batteryState', symObjAddr: 0x1FF0, symBinAddr: 0x5FF0, symSize: 0x10C }
|
||||
- { offset: 0x6608, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIDevice$batteryLevel', symObjAddr: 0x20FC, symBinAddr: 0x60FC, symSize: 0x10C }
|
||||
- { offset: 0x6651, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIDevice$orientation', symObjAddr: 0x2208, symBinAddr: 0x6208, symSize: 0x18 }
|
||||
- { offset: 0x6687, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$NSProcessInfo$systemUptime', symObjAddr: 0x2220, symBinAddr: 0x6220, symSize: 0x10C }
|
||||
- { offset: 0x66D0, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$NSProcessInfo$physicalMemory', symObjAddr: 0x232C, symBinAddr: 0x632C, symSize: 0x12C }
|
||||
- { offset: 0x6719, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$NSProcessInfo$processorCount', symObjAddr: 0x2458, symBinAddr: 0x6458, symSize: 0x10C }
|
||||
- { offset: 0x6766, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$NSProcessInfo$operatingSystemVersion', symObjAddr: 0x2564, symBinAddr: 0x6564, symSize: 0x644 }
|
||||
- { offset: 0x67F4, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIWindow$safeAreaInsets', symObjAddr: 0x2BA8, symBinAddr: 0x6BA8, symSize: 0x230 }
|
||||
- { offset: 0x6842, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIScreen$brightness', symObjAddr: 0x2DD8, symBinAddr: 0x6DD8, symSize: 0x10C }
|
||||
- { offset: 0x688F, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIScreen$bounds', symObjAddr: 0x2EE4, symBinAddr: 0x6EE4, symSize: 0x148 }
|
||||
- { offset: 0x68DD, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIScreen$scale', symObjAddr: 0x302C, symBinAddr: 0x702C, symSize: 0x10C }
|
||||
- { offset: 0x692A, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIScreen$nativeBounds', symObjAddr: 0x3138, symBinAddr: 0x7138, symSize: 0x148 }
|
||||
- { offset: 0x6978, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIScreen$isCaptured', symObjAddr: 0x3280, symBinAddr: 0x7280, symSize: 0x1C }
|
||||
- { offset: 0x69B1, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIScreen$mirroredScreen', symObjAddr: 0x329C, symBinAddr: 0x729C, symSize: 0x18 }
|
||||
- { offset: 0x69EA, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$AVAudioSession$outputVolume', symObjAddr: 0x32B4, symBinAddr: 0x72B4, symSize: 0x10C }
|
||||
- { offset: 0x6A37, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIScreenMode$size', symObjAddr: 0x33C0, symBinAddr: 0x73C0, symSize: 0x120 }
|
||||
- { offset: 0x6A85, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$NSFileManager$attributesOfFileSystemForPath$error$', symObjAddr: 0x34E0, symBinAddr: 0x74E0, symSize: 0x28C }
|
||||
- { offset: 0x6B09, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$NSFileManager$fileExistsAtPath$', symObjAddr: 0x376C, symBinAddr: 0x776C, symSize: 0x3BC }
|
||||
- { offset: 0x6B74, size: 0x8, addend: 0x0, symName: '__logos_meta_method$ohno$NSLocale$preferredLanguages', symObjAddr: 0x3B28, symBinAddr: 0x7B28, symSize: 0x8C }
|
||||
- { offset: 0x6BAD, size: 0x8, addend: 0x0, symName: '__logos_meta_method$ohno$NSLocale$currentLocale', symObjAddr: 0x3BB4, symBinAddr: 0x7BB4, symSize: 0x178 }
|
||||
- { offset: 0x6BFA, size: 0x8, addend: 0x0, symName: '__logos_meta_method$ohno$NSLocale$systemLocale', symObjAddr: 0x3D2C, symBinAddr: 0x7D2C, symSize: 0x178 }
|
||||
- { offset: 0x6C47, size: 0x8, addend: 0x0, symName: '__logos_meta_method$ohno$NSTimeZone$localTimeZone', symObjAddr: 0x3EA4, symBinAddr: 0x7EA4, symSize: 0x178 }
|
||||
- { offset: 0x6C94, size: 0x8, addend: 0x0, symName: '__logos_meta_method$ohno$NSTimeZone$systemTimeZone', symObjAddr: 0x401C, symBinAddr: 0x801C, symSize: 0x178 }
|
||||
- { offset: 0x6CE1, size: 0x8, addend: 0x0, symName: '__logos_meta_method$ohno$NSTimeZone$defaultTimeZone', symObjAddr: 0x4194, symBinAddr: 0x8194, symSize: 0x178 }
|
||||
- { offset: 0x6D2E, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$UIStatusBarManager$statusBarFrame', symObjAddr: 0x430C, symBinAddr: 0x830C, symSize: 0x148 }
|
||||
- { offset: 0x6D7C, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$NSMutableURLRequest$initWithURL$', symObjAddr: 0x4454, symBinAddr: 0x8454, symSize: 0x150 }
|
||||
- { offset: 0x6DC4, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$NSMutableURLRequest$setValue$forHTTPHeaderField$', symObjAddr: 0x45A4, symBinAddr: 0x85A4, symSize: 0x1BC }
|
||||
- { offset: 0x6E2C, size: 0x8, addend: 0x0, symName: '__logos_meta_method$ohno$NSURLSession$sessionWithConfiguration$', symObjAddr: 0x4760, symBinAddr: 0x8760, symSize: 0x120 }
|
||||
- { offset: 0x6E74, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$NSURLSession$dataTaskWithRequest$completionHandler$', symObjAddr: 0x4880, symBinAddr: 0x8880, symSize: 0x160 }
|
||||
- { offset: 0x6EDA, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$WKWebView$evaluateJavaScript$completionHandler$', symObjAddr: 0x49E0, symBinAddr: 0x89E0, symSize: 0x21C }
|
||||
- { offset: 0x6F42, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$WKWebView$setCustomUserAgent$', symObjAddr: 0x4BFC, symBinAddr: 0x8BFC, symSize: 0x170 }
|
||||
- { offset: 0x6F9B, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$WKWebView$customUserAgent', symObjAddr: 0x4D6C, symBinAddr: 0x8D6C, symSize: 0x16C }
|
||||
- { offset: 0x6FE8, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$CTTelephonyNetworkInfo$serviceCurrentRadioAccessTechnology', symObjAddr: 0x4ED8, symBinAddr: 0x8ED8, symSize: 0x19C }
|
||||
- { offset: 0x703F, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$CTTelephonyNetworkInfo$serviceSubscriberCellularProviders', symObjAddr: 0x5074, symBinAddr: 0x9074, symSize: 0x19C }
|
||||
- { offset: 0x7096, size: 0x8, addend: 0x0, symName: '__logos_method$ohno$CMMotionManager$startGyroUpdatesToQueue$withHandler$', symObjAddr: 0x5210, symBinAddr: 0x9210, symSize: 0x16C }
|
||||
- { offset: 0x70F8, size: 0x8, addend: 0x0, symName: '__logos_function$ohno$uname', symObjAddr: 0x537C, symBinAddr: 0x937C, symSize: 0xA4 }
|
||||
- { offset: 0x7131, size: 0x8, addend: 0x0, symName: '__logos_function$ohno$sysctl', symObjAddr: 0x5420, symBinAddr: 0x9420, symSize: 0x458 }
|
||||
- { offset: 0x721E, size: 0x8, addend: 0x0, symName: '__logos_function$ohno$sysctlbyname', symObjAddr: 0x5878, symBinAddr: 0x9878, symSize: 0x47C }
|
||||
- { offset: 0x731C, size: 0x8, addend: 0x0, symName: '__logos_function$ohno$clock_gettime', symObjAddr: 0x5CF4, symBinAddr: 0x9CF4, symSize: 0x60 }
|
||||
- { offset: 0x7364, size: 0x8, addend: 0x0, symName: '__logos_function$ohno$getifaddrs', symObjAddr: 0x5D54, symBinAddr: 0x9D54, symSize: 0x6C4 }
|
||||
- { offset: 0x74EA, size: 0x8, addend: 0x0, symName: '__logos_function$ohno$SCNetworkReachabilityGetFlags', symObjAddr: 0x6418, symBinAddr: 0xA418, symSize: 0x88 }
|
||||
- { offset: 0x7532, size: 0x8, addend: 0x0, symName: __logosLocalDtor_9db639d6, symObjAddr: 0x64A0, symBinAddr: 0xA4A0, symSize: 0x2C }
|
||||
- { offset: 0x7576, size: 0x8, addend: 0x0, symName: '____logos_meta_method$ohno$ATTrackingManager$trackingAuthorizationStatus_block_invoke', symObjAddr: 0x64CC, symBinAddr: 0xA4CC, symSize: 0x84 }
|
||||
- { offset: 0x75C3, size: 0x8, addend: 0x0, symName: ___copy_helper_block_e8_32r, symObjAddr: 0x6550, symBinAddr: 0xA550, symSize: 0x3C }
|
||||
- { offset: 0x75E7, size: 0x8, addend: 0x0, symName: ___destroy_helper_block_e8_32r, symObjAddr: 0x658C, symBinAddr: 0xA58C, symSize: 0x30 }
|
||||
- { offset: 0x7603, size: 0x8, addend: 0x0, symName: '____logos_meta_method$ohno$ATTrackingManager$requestTrackingAuthorizationWithCompletionHandler$_block_invoke', symObjAddr: 0x65BC, symBinAddr: 0xA5BC, symSize: 0x84 }
|
||||
- { offset: 0x7650, size: 0x8, addend: 0x0, symName: '____logos_meta_method$ohno$ATTrackingManager$requestTrackingAuthorizationWithCompletionHandler$_block_invoke_2', symObjAddr: 0x6640, symBinAddr: 0xA640, symSize: 0x60 }
|
||||
- { offset: 0x76A0, size: 0x8, addend: 0x0, symName: ___copy_helper_block_e8_32b40r, symObjAddr: 0x66A0, symBinAddr: 0xA6A0, symSize: 0x5C }
|
||||
- { offset: 0x76C4, size: 0x8, addend: 0x0, symName: ___destroy_helper_block_e8_32s40r, symObjAddr: 0x66FC, symBinAddr: 0xA6FC, symSize: 0x44 }
|
||||
- { offset: 0x76E0, size: 0x8, addend: 0x0, symName: ___Block_byref_object_copy_, symObjAddr: 0x6740, symBinAddr: 0xA740, symSize: 0x58 }
|
||||
- { offset: 0x7704, size: 0x8, addend: 0x0, symName: ___Block_byref_object_dispose_, symObjAddr: 0x6798, symBinAddr: 0xA798, symSize: 0x30 }
|
||||
- { offset: 0x7720, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$ASIdentifierManager$advertisingIdentifier_block_invoke', symObjAddr: 0x67C8, symBinAddr: 0xA7C8, symSize: 0x84 }
|
||||
- { offset: 0x776D, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$ASIdentifierManager$isAdvertisingTrackingEnabled_block_invoke', symObjAddr: 0x684C, symBinAddr: 0xA84C, symSize: 0xA0 }
|
||||
- { offset: 0x77D6, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$UIDevice$identifierForVendor_block_invoke', symObjAddr: 0x68EC, symBinAddr: 0xA8EC, symSize: 0x84 }
|
||||
- { offset: 0x7823, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$UIDevice$name_block_invoke', symObjAddr: 0x6970, symBinAddr: 0xA970, symSize: 0x68 }
|
||||
- { offset: 0x7870, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$UIDevice$systemVersion_block_invoke', symObjAddr: 0x69D8, symBinAddr: 0xA9D8, symSize: 0x68 }
|
||||
- { offset: 0x78BD, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$UIDevice$batteryState_block_invoke', symObjAddr: 0x6A40, symBinAddr: 0xAA40, symSize: 0x74 }
|
||||
- { offset: 0x7926, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$UIDevice$batteryLevel_block_invoke', symObjAddr: 0x6AB4, symBinAddr: 0xAAB4, symSize: 0x68 }
|
||||
- { offset: 0x7973, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$NSProcessInfo$systemUptime_block_invoke', symObjAddr: 0x6B1C, symBinAddr: 0xAB1C, symSize: 0x8C }
|
||||
- { offset: 0x79DC, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$NSProcessInfo$physicalMemory_block_invoke', symObjAddr: 0x6BA8, symBinAddr: 0xABA8, symSize: 0x78 }
|
||||
- { offset: 0x7A45, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$NSProcessInfo$processorCount_block_invoke', symObjAddr: 0x6C20, symBinAddr: 0xAC20, symSize: 0x78 }
|
||||
- { offset: 0x7AB3, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$NSProcessInfo$operatingSystemVersion_block_invoke', symObjAddr: 0x6C98, symBinAddr: 0xAC98, symSize: 0x68 }
|
||||
- { offset: 0x7B04, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$UIWindow$safeAreaInsets_block_invoke', symObjAddr: 0x6D00, symBinAddr: 0xAD00, symSize: 0x164 }
|
||||
- { offset: 0x7B81, size: 0x8, addend: 0x0, symName: _UIEdgeInsetsMake, symObjAddr: 0x6E64, symBinAddr: 0xAE64, symSize: 0x4C }
|
||||
- { offset: 0x7BE1, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$UIScreen$brightness_block_invoke', symObjAddr: 0x6EB0, symBinAddr: 0xAEB0, symSize: 0x7C }
|
||||
- { offset: 0x7C4F, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$UIScreen$bounds_block_invoke', symObjAddr: 0x6F2C, symBinAddr: 0xAF2C, symSize: 0x130 }
|
||||
- { offset: 0x7CEB, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$UIScreen$scale_block_invoke', symObjAddr: 0x705C, symBinAddr: 0xB05C, symSize: 0x7C }
|
||||
- { offset: 0x7D59, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$UIScreen$nativeBounds_block_invoke', symObjAddr: 0x70D8, symBinAddr: 0xB0D8, symSize: 0x130 }
|
||||
- { offset: 0x7DF5, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$AVAudioSession$outputVolume_block_invoke', symObjAddr: 0x7208, symBinAddr: 0xB208, symSize: 0x7C }
|
||||
- { offset: 0x7E63, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$UIScreenMode$size_block_invoke', symObjAddr: 0x7284, symBinAddr: 0xB284, symSize: 0x11C }
|
||||
- { offset: 0x7EFE, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$NSFileManager$attributesOfFileSystemForPath$error$_block_invoke', symObjAddr: 0x73A0, symBinAddr: 0xB3A0, symSize: 0xB4 }
|
||||
- { offset: 0x7F66, size: 0x8, addend: 0x0, symName: ___copy_helper_block_e8_32s, symObjAddr: 0x7454, symBinAddr: 0xB454, symSize: 0x3C }
|
||||
- { offset: 0x7F8A, size: 0x8, addend: 0x0, symName: ___destroy_helper_block_e8_32s, symObjAddr: 0x7490, symBinAddr: 0xB490, symSize: 0x30 }
|
||||
- { offset: 0x7FA6, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$NSFileManager$attributesOfFileSystemForPath$error$_block_invoke.315', symObjAddr: 0x74C0, symBinAddr: 0xB4C0, symSize: 0xB4 }
|
||||
- { offset: 0x800E, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$NSFileManager$fileExistsAtPath$_block_invoke', symObjAddr: 0x7574, symBinAddr: 0xB574, symSize: 0xA0 }
|
||||
- { offset: 0x8098, size: 0x8, addend: 0x0, symName: '____logos_meta_method$ohno$NSLocale$currentLocale_block_invoke', symObjAddr: 0x7614, symBinAddr: 0xB614, symSize: 0xB4 }
|
||||
- { offset: 0x8106, size: 0x8, addend: 0x0, symName: '____logos_meta_method$ohno$NSLocale$systemLocale_block_invoke', symObjAddr: 0x76C8, symBinAddr: 0xB6C8, symSize: 0xB4 }
|
||||
- { offset: 0x8174, size: 0x8, addend: 0x0, symName: '____logos_meta_method$ohno$NSTimeZone$localTimeZone_block_invoke', symObjAddr: 0x777C, symBinAddr: 0xB77C, symSize: 0xB8 }
|
||||
- { offset: 0x81E2, size: 0x8, addend: 0x0, symName: '____logos_meta_method$ohno$NSTimeZone$systemTimeZone_block_invoke', symObjAddr: 0x7834, symBinAddr: 0xB834, symSize: 0xB8 }
|
||||
- { offset: 0x8250, size: 0x8, addend: 0x0, symName: '____logos_meta_method$ohno$NSTimeZone$defaultTimeZone_block_invoke', symObjAddr: 0x78EC, symBinAddr: 0xB8EC, symSize: 0xB8 }
|
||||
- { offset: 0x82BE, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$UIStatusBarManager$statusBarFrame_block_invoke', symObjAddr: 0x79A4, symBinAddr: 0xB9A4, symSize: 0xE4 }
|
||||
- { offset: 0x834A, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$NSMutableURLRequest$initWithURL$_block_invoke', symObjAddr: 0x7A88, symBinAddr: 0xBA88, symSize: 0x6C }
|
||||
- { offset: 0x8395, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$NSMutableURLRequest$setValue$forHTTPHeaderField$_block_invoke', symObjAddr: 0x7AF4, symBinAddr: 0xBAF4, symSize: 0x68 }
|
||||
- { offset: 0x83E6, size: 0x8, addend: 0x0, symName: '____logos_meta_method$ohno$NSURLSession$sessionWithConfiguration$_block_invoke', symObjAddr: 0x7B5C, symBinAddr: 0xBB5C, symSize: 0xE0 }
|
||||
- { offset: 0x8431, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$NSURLSession$dataTaskWithRequest$completionHandler$_block_invoke', symObjAddr: 0x7C3C, symBinAddr: 0xBC3C, symSize: 0x6C }
|
||||
- { offset: 0x847C, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$WKWebView$evaluateJavaScript$completionHandler$_block_invoke', symObjAddr: 0x7CA8, symBinAddr: 0xBCA8, symSize: 0x68 }
|
||||
- { offset: 0x84CD, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$WKWebView$setCustomUserAgent$_block_invoke', symObjAddr: 0x7D10, symBinAddr: 0xBD10, symSize: 0x68 }
|
||||
- { offset: 0x851E, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$WKWebView$customUserAgent_block_invoke', symObjAddr: 0x7D78, symBinAddr: 0xBD78, symSize: 0x68 }
|
||||
- { offset: 0x856F, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$CTTelephonyNetworkInfo$serviceCurrentRadioAccessTechnology_block_invoke', symObjAddr: 0x7DE0, symBinAddr: 0xBDE0, symSize: 0x26C }
|
||||
- { offset: 0x8617, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$CTTelephonyNetworkInfo$serviceSubscriberCellularProviders_block_invoke', symObjAddr: 0x804C, symBinAddr: 0xC04C, symSize: 0x370 }
|
||||
- { offset: 0x86BF, size: 0x8, addend: 0x0, symName: '____logos_method$ohno$CMMotionManager$startGyroUpdatesToQueue$withHandler$_block_invoke', symObjAddr: 0x83BC, symBinAddr: 0xC3BC, symSize: 0x164 }
|
||||
- { offset: 0x8764, size: 0x8, addend: 0x0, symName: ___copy_helper_block_e8_32b, symObjAddr: 0x8520, symBinAddr: 0xC520, symSize: 0x3C }
|
||||
- { offset: 0x8788, size: 0x8, addend: 0x0, symName: _randomRadiansPerSecond, symObjAddr: 0x855C, symBinAddr: 0xC55C, symSize: 0x48 }
|
||||
- { offset: 0x87B2, size: 0x8, addend: 0x0, symName: '____logos_function$ohno$uname_block_invoke', symObjAddr: 0x85A4, symBinAddr: 0xC5A4, symSize: 0xB4 }
|
||||
- { offset: 0x881B, size: 0x8, addend: 0x0, symName: '____logos_function$ohno$sysctl_block_invoke', symObjAddr: 0x8658, symBinAddr: 0xC658, symSize: 0x7C }
|
||||
- { offset: 0x8883, size: 0x8, addend: 0x0, symName: '____logos_function$ohno$sysctl_block_invoke_2', symObjAddr: 0x86D4, symBinAddr: 0xC6D4, symSize: 0x6C }
|
||||
- { offset: 0x88D4, size: 0x8, addend: 0x0, symName: '____logos_function$ohno$sysctlbyname_block_invoke', symObjAddr: 0x8740, symBinAddr: 0xC740, symSize: 0xC4 }
|
||||
- { offset: 0x893A, size: 0x8, addend: 0x0, symName: '____logos_function$ohno$sysctlbyname_block_invoke_2', symObjAddr: 0x8804, symBinAddr: 0xC804, symSize: 0xC4 }
|
||||
- { offset: 0x89A0, size: 0x8, addend: 0x0, symName: '____logos_function$ohno$getifaddrs_block_invoke', symObjAddr: 0x88C8, symBinAddr: 0xC8C8, symSize: 0x90 }
|
||||
- { offset: 0x89F1, size: 0x8, addend: 0x0, symName: _modifyInterfaceIP, symObjAddr: 0x8958, symBinAddr: 0xC958, symSize: 0x170 }
|
||||
- { offset: 0x8A84, size: 0x8, addend: 0x0, symName: _createInterface, symObjAddr: 0x8AC8, symBinAddr: 0xCAC8, symSize: 0x3F8 }
|
||||
- { offset: 0x8B2D, size: 0x8, addend: 0x0, symName: '__logos_function$ohno$UIAccessibilityIsClosedCaptioningEnabled', symObjAddr: 0x8EC0, symBinAddr: 0xCEC0, symSize: 0xC }
|
||||
- { offset: 0x8B47, size: 0x8, addend: 0x0, symName: '__logos_function$ohno$UIAccessibilityIsMonoAudioEnabled', symObjAddr: 0x8ECC, symBinAddr: 0xCECC, symSize: 0xC }
|
||||
- { offset: 0x8B61, size: 0x8, addend: 0x0, symName: _cleanup, symObjAddr: 0x8ED8, symBinAddr: 0xCED8, symSize: 0x3C }
|
||||
- { offset: 0x8B77, size: 0x8, addend: 0x0, symName: ___GLOBAL_init_65535, symObjAddr: 0x94F0, symBinAddr: 0xCF14, symSize: 0x34 }
|
||||
...
|
||||
@ -1 +0,0 @@
|
||||
68
|
||||
@ -11,7 +11,6 @@ TWEAK_NAME = AppRunMan
|
||||
AppRunMan_FRAMEWORKS = CoreLocation CFNetwork CoreTelephony Security UIKit IOSurface JavaScriptCore network
|
||||
AppRunMan_PRIVATE_FRAMEWORKS = IOKit
|
||||
AppRunMan_FILES = Tweak.x $(wildcard server/*.m) $(wildcard server/GCD/*.m)
|
||||
AppRunMan_LDFLAGS = -v
|
||||
AppRunMan_CFLAGS = -Wno-error -Wno-module-import-in-extern-c -fobjc-arc
|
||||
|
||||
include $(THEOS_MAKE_PATH)/tweak.mk
|
||||
|
||||
@ -12,6 +12,14 @@
|
||||
#import "server/MySimpleServer.h"
|
||||
#import "server/FloatingWindow.h"
|
||||
|
||||
#import "server/XSLog.h"
|
||||
|
||||
// 重定向 NSLog 到文件
|
||||
__attribute__((constructor)) static void SetupXSLog() {
|
||||
XSLogSetupLogWithFilePath(@"/var/mobile/Documents/AppRunMain.log", 5 * 1024 * 1024);
|
||||
XSLogRedirectNSLog();
|
||||
}
|
||||
|
||||
@interface UIWindow (FloatingWindow)
|
||||
@end
|
||||
|
||||
|
||||
@ -157,7 +157,7 @@
|
||||
self.ip = [[XSPhoneInfo sharedInstance] IPAddress];
|
||||
self.remoteIp = [[XSPhoneInfo sharedInstance] remoteIp];
|
||||
self.diskSize = [[XSPhoneInfo sharedInstance] IPhoneStatus];
|
||||
self.message = @"251106-nt";
|
||||
self.message = @"251103-nt";
|
||||
// 构建请求数据
|
||||
NSDictionary *heartbeatData = [self constructHeartbeatData];
|
||||
if (!heartbeatData) {
|
||||
|
||||
@ -11,6 +11,7 @@
|
||||
#import "XSPhoneInfo.h"
|
||||
#import "XSHelper.h"
|
||||
#import "XSHackIos.h"
|
||||
#import "MyScriptTask.h"
|
||||
#import "MyEventBus.h"
|
||||
#import "XSHttpHelper.h"
|
||||
#import "MyAdTask2.h"
|
||||
|
||||
@ -1,3 +1,10 @@
|
||||
//
|
||||
// MyAdTask2.m
|
||||
// nochange
|
||||
//
|
||||
// Created by mac on 2024/11/6.
|
||||
//
|
||||
|
||||
#include "XUDPServer.h"
|
||||
#import <Foundation/Foundation.h>
|
||||
#import "IPhoneHertbeat.h"
|
||||
@ -9,13 +16,16 @@
|
||||
#import "MyAdTask2.h"
|
||||
#import "MyEventBus.h"
|
||||
|
||||
|
||||
BOOL myadTaskManualStop = NO;
|
||||
|
||||
|
||||
@interface MyAdTask2Mangger()
|
||||
{
|
||||
@private
|
||||
BOOL running;
|
||||
dispatch_source_t _timer;
|
||||
// NSTimer *timer;
|
||||
dispatch_source_t _timer; // 使用GCD timer替代NSTimer
|
||||
NSDate *lastRun;
|
||||
NSDate *lastGetCountry;
|
||||
NSString *_lastIdfa;
|
||||
@ -29,6 +39,7 @@ BOOL myadTaskManualStop = NO;
|
||||
NSString *dataId;
|
||||
NSString *remoteIp;
|
||||
NSString *country;
|
||||
|
||||
}
|
||||
|
||||
@end
|
||||
@ -38,12 +49,11 @@ BOOL myadTaskManualStop = NO;
|
||||
+(instancetype)sharedInstance {
|
||||
static MyAdTask2Mangger* _sharedInstance = nil;
|
||||
static dispatch_once_t oncePredicate;
|
||||
dispatch_once(&oncePredicate, ^{
|
||||
dispatch_once (&oncePredicate, ^{
|
||||
_sharedInstance = [[MyAdTask2Mangger alloc] init];
|
||||
});
|
||||
return _sharedInstance;
|
||||
}
|
||||
|
||||
-(instancetype)init {
|
||||
if (self = [super init]) {
|
||||
self->running = NO;
|
||||
@ -60,7 +70,7 @@ BOOL myadTaskManualStop = NO;
|
||||
return nil;
|
||||
}
|
||||
|
||||
- (int)onShow:(NSDictionary *)dic {
|
||||
- (int) onShow: (NSDictionary *)dic {
|
||||
if(dic == nil || [dic isEqual:[NSNull null]] || [dic count] <= 0) {
|
||||
return 4000;
|
||||
}
|
||||
@ -70,13 +80,35 @@ BOOL myadTaskManualStop = NO;
|
||||
NSNumber *t_ecpm = [self getNum:@"ecpm" dic:dic];
|
||||
BOOL ad = dic[@"ad"];
|
||||
NSString *iphoneId = [[XSPhoneConfig sharedInstance] IPhoneName];
|
||||
// NSString *ipAddr = [[XSPhoneInfo sharedInstance] IPAddress];
|
||||
|
||||
/*
|
||||
saveAdTaskLog(@{
|
||||
@"title": @"广告展示",
|
||||
@"message": [XSHelper dic2Json:dic],
|
||||
@"level": @(1),
|
||||
@"appid": t_appid,
|
||||
@"idfa":t_idfa,
|
||||
@"adid": t_adId,
|
||||
@"ecpm": [NSString stringWithFormat:@"%@", t_ecpm],
|
||||
@"taskId": self->taskId,
|
||||
@"iphoneId":iphoneId,
|
||||
@"ipAddr":ipAddr
|
||||
|
||||
});
|
||||
*/
|
||||
|
||||
/* --
|
||||
if (self->current > -1 && self->current < (NSInteger)self->tasks.count) {
|
||||
cur = self->tasks[self->current];
|
||||
}
|
||||
*/
|
||||
if(!ad) {
|
||||
NSLog(@"XS- no ad show");
|
||||
return 0;
|
||||
}
|
||||
int close = 4000;
|
||||
|
||||
//--new
|
||||
AdLoadInfo adloadInfo = getAdLoadInfo(@{
|
||||
@"idfa": t_idfa ?: @"",
|
||||
@"adId": t_adId ?: @"",
|
||||
@ -85,6 +117,11 @@ BOOL myadTaskManualStop = NO;
|
||||
@"deviceId":iphoneId ?: @""
|
||||
});
|
||||
|
||||
// cur.loads = adloadInfo.loads;
|
||||
//cur.adTouchBeforeMs = adloadInfo.adTouchBeforeMs;
|
||||
// cur.adTime= adloadInfo.adTime;
|
||||
|
||||
|
||||
close = [adloadInfo.adTime intValue];
|
||||
int before = [adloadInfo.adTouchBeforeMs intValue];
|
||||
if (before >= close) {
|
||||
@ -97,24 +134,19 @@ BOOL myadTaskManualStop = NO;
|
||||
self->adAfter = 1000;
|
||||
}
|
||||
|
||||
NSInteger random1 = arc4random_uniform(101);
|
||||
NSInteger random1 = arc4random_uniform(101); // 0-100
|
||||
NSInteger tr = [adloadInfo.touchRate intValue];
|
||||
if (tr > random1) {
|
||||
double beforeSec = before / 1000.0;
|
||||
__weak typeof(self) weakSelf = self;
|
||||
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(beforeSec * NSEC_PER_SEC)),
|
||||
self.manQueue, ^{
|
||||
[weakSelf touchAppTask:0];
|
||||
});
|
||||
[self touchAppTask: before / 1000];
|
||||
}
|
||||
return close;
|
||||
}
|
||||
|
||||
- (void)showStatus:(NSString *)data {
|
||||
- (void) showStatus: (NSString *)data {
|
||||
[[MyEventBus sharedInstance] postEvent:@"UpdateStatus" withObject:data];
|
||||
}
|
||||
|
||||
- (void)setRemoteInfo {
|
||||
- (void) setRemoteInfo {
|
||||
NSString *url = @"https://ipapi.co/json/";
|
||||
XSHttpHelper *http = [[XSHttpHelper alloc] init];
|
||||
__weak typeof(self) weakSelf = self;
|
||||
@ -132,10 +164,8 @@ BOOL myadTaskManualStop = NO;
|
||||
}
|
||||
NSString *isoCode = dic[@"country_code"];
|
||||
NSString *ip = dic[@"ip"];
|
||||
|
||||
// callback(ip, isoCode);
|
||||
__strong typeof(weakSelf) strongSelf = weakSelf;
|
||||
if (!strongSelf) return;
|
||||
|
||||
strongSelf->remoteIp = [ip copy];
|
||||
strongSelf->country = [isoCode copy];
|
||||
[XSPhoneInfo sharedInstance].remoteIp = [NSString stringWithFormat:@"%@:%@", isoCode, ip];
|
||||
@ -146,8 +176,8 @@ BOOL myadTaskManualStop = NO;
|
||||
}];
|
||||
}
|
||||
|
||||
- (void)setRemoteInfo1 {
|
||||
NSString *url = [[XSPhoneConfig sharedInstance] GetRemoteIPURL];
|
||||
- (void) setRemoteInfo1 {
|
||||
NSString *url = [[XSPhoneConfig sharedInstance] GetRemoteIPURL];
|
||||
[self showStatus:url];
|
||||
if (!url) {
|
||||
NSLog(@"!setRemoteInfo url");
|
||||
@ -177,11 +207,9 @@ BOOL myadTaskManualStop = NO;
|
||||
NSString *isoCode = _data[@"isoCode"];
|
||||
NSString *ip = _data[@"ip"];
|
||||
NSLog(@"setRemoteInfo:%@", _data);
|
||||
|
||||
__strong typeof(weakSelf) strongSelf = weakSelf;
|
||||
if (!strongSelf) return;
|
||||
|
||||
strongSelf->remoteIp = [ip copy];
|
||||
|
||||
strongSelf->country = [isoCode copy];
|
||||
[XSPhoneInfo sharedInstance].remoteIp = [NSString stringWithFormat:@"%@:%@", isoCode, ip];
|
||||
[weakSelf showStatus:[XSPhoneInfo sharedInstance].remoteIp];
|
||||
@ -189,9 +217,13 @@ BOOL myadTaskManualStop = NO;
|
||||
NSLog(@"!setRemoteInfo err:%@",err);
|
||||
[weakSelf showStatus:[NSString stringWithFormat:@"%@", err.description]];
|
||||
}];
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
- (BOOL)onEnd:(NSDictionary *)dic {
|
||||
|
||||
- (BOOL) onEnd: (NSDictionary *)dic {
|
||||
NSNumber *maxEcpm = dic[@"max_ecpm"];
|
||||
int sec = self->adAfter / 1000;
|
||||
__weak typeof(self) weakSelf = self;
|
||||
@ -212,10 +244,11 @@ BOOL myadTaskManualStop = NO;
|
||||
[weakSelf startApp];
|
||||
}
|
||||
});
|
||||
|
||||
return NO;
|
||||
}
|
||||
|
||||
- (void)startApp {
|
||||
- (void) startApp {
|
||||
@autoreleasepool {
|
||||
if(!self->running){
|
||||
return;
|
||||
@ -233,24 +266,32 @@ BOOL myadTaskManualStop = NO;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
if(![@"US" isEqual:self->country]) {
|
||||
[self showStatus:[NSString stringWithFormat:@"%@:%@, Not US", self->country, self->remoteIp]];
|
||||
return;
|
||||
}
|
||||
*/
|
||||
__weak typeof(self) weakSelf = self;
|
||||
getChangeInfo(self->_lastIdfa, ^(NSDictionary *dic) {
|
||||
dispatch_async(weakSelf.manQueue, ^{
|
||||
[weakSelf onChangeInfo:dic];
|
||||
// 耗时操作
|
||||
[weakSelf onChangeInfo: dic];
|
||||
});
|
||||
|
||||
}, ^(NSError *err) {
|
||||
NSLog(@"XS- startTask NSError is null, %@", err);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
- (void)start {
|
||||
- (void) start {
|
||||
self->running = YES;
|
||||
myadTaskManualStop = NO;
|
||||
[[IPhoneHertbeat sharedInstance] setStatus:@"运行中"];
|
||||
[[IPhoneHertbeat sharedInstance] setStatus: @"运行中"];
|
||||
[self startApp];
|
||||
__weak typeof(self) weakSelf = self;
|
||||
|
||||
// 使用 dispatch_source 创建timer
|
||||
if (!_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);
|
||||
@ -264,7 +305,7 @@ BOOL myadTaskManualStop = NO;
|
||||
[[MyEventBus sharedInstance] postEvent:@"UpdateRunStatus" withObject:@(YES)];
|
||||
}
|
||||
|
||||
- (void)proc {
|
||||
- (void) proc {
|
||||
if (!self->running) {
|
||||
return;
|
||||
}
|
||||
@ -273,24 +314,20 @@ BOOL myadTaskManualStop = NO;
|
||||
NSDate* curRunTime = [NSDate date];
|
||||
NSTimeInterval elapsed = [curRunTime timeIntervalSinceDate:self->lastRun];
|
||||
|
||||
if (elapsed >= 100) {
|
||||
if (elapsed >= 30) {
|
||||
//[self onStop];
|
||||
[self start];
|
||||
|
||||
} else {
|
||||
NSString* appId = [self frontMostAppId];
|
||||
NSString* appId = [ self frontMostAppId];
|
||||
|
||||
if (![appId isEqual:self->taskAppId]) {
|
||||
if (![appId isEqual: self->taskAppId]) {
|
||||
[self appKill:appId];
|
||||
|
||||
// ⭐️ 修复: 先转为strong再使用
|
||||
__weak typeof(self) weakSelf = self;
|
||||
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];
|
||||
});
|
||||
sleep(1);
|
||||
[self appRun:self->taskAppId];
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
- (NSString *)toggle {
|
||||
@ -302,7 +339,7 @@ BOOL myadTaskManualStop = NO;
|
||||
return [IPhoneHertbeat sharedInstance].status;
|
||||
}
|
||||
|
||||
- (void)stop {
|
||||
- (void) stop {
|
||||
myadTaskManualStop = YES;
|
||||
self->running = NO;
|
||||
[IPhoneHertbeat sharedInstance].status = @"已停止";
|
||||
@ -313,12 +350,14 @@ BOOL myadTaskManualStop = NO;
|
||||
[[MyEventBus sharedInstance] postEvent:@"UpdateRunStatus" withObject:@(NO)];
|
||||
}
|
||||
|
||||
- (void)onChangeInfo:(NSDictionary *)dic {
|
||||
NSString* t_idfa = [self getStr:@"idfa" dic:dic];
|
||||
|
||||
- (void) onChangeInfo: (NSDictionary *)dic {
|
||||
NSString* t_idfa = [self getStr: @"idfa" dic:dic];
|
||||
if (![XSHelper strIsEmpty:t_idfa]) {
|
||||
self->_lastIdfa = [t_idfa copy];
|
||||
} else {
|
||||
NSLog(@"XS- startTask t_idfa is null");
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@ -331,11 +370,13 @@ BOOL myadTaskManualStop = NO;
|
||||
self->dataId = [_dataId copy];
|
||||
}
|
||||
|
||||
|
||||
NSString* t_taskId = [self getStr:@"id" dic:dic];
|
||||
if (![XSHelper strIsEmpty:t_taskId]) {
|
||||
self->taskId = [t_taskId copy];
|
||||
} else {
|
||||
NSLog(@"XS- startTask t_taskId is null");
|
||||
|
||||
return;
|
||||
}
|
||||
NSString* t_taskAppId = [self getStr:@"appId" dic:dic];
|
||||
@ -344,6 +385,7 @@ BOOL myadTaskManualStop = NO;
|
||||
[IPhoneHertbeat sharedInstance].appId = self->taskAppId;
|
||||
} else {
|
||||
NSLog(@"XS- startTask t_taskAppId is null");
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@ -352,6 +394,7 @@ BOOL myadTaskManualStop = NO;
|
||||
|
||||
} else {
|
||||
NSLog(@"XS- startTask workerInfo is null");
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@ -360,39 +403,29 @@ BOOL myadTaskManualStop = NO;
|
||||
self->workType = t_workType;
|
||||
} else {
|
||||
NSLog(@"XS- startTask workType is null");
|
||||
|
||||
}
|
||||
|
||||
__weak typeof(self) weakSelf = self;
|
||||
[self restart:^{
|
||||
__strong typeof(weakSelf) strongSelf = weakSelf;
|
||||
if (!strongSelf) return;
|
||||
|
||||
saveChangeDataFile(dic);
|
||||
strongSelf->running = YES;
|
||||
|
||||
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];
|
||||
});
|
||||
self->running = YES;
|
||||
sleep(1);
|
||||
[self appRun:self->taskAppId];
|
||||
}];
|
||||
//sleep(1);
|
||||
}
|
||||
|
||||
- (void)appKill:(NSString*)app {
|
||||
|
||||
- (void) appKill: (NSString*) app {
|
||||
NSLog(@"XS- appKill");
|
||||
XSKillAppByName(app);
|
||||
}
|
||||
|
||||
- (void)unlock {
|
||||
- (void) unlock {
|
||||
NSLog(@"XS- unlock");
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
XSRemoteUnlock();
|
||||
});
|
||||
}
|
||||
|
||||
- (void)resetApp:(NSString*)appId callback:(OnEndCallback)callback {
|
||||
- (void) resetApp: (NSString*) appId callback:(OnEndCallback) callback {
|
||||
NSLog(@"XS- JSApi resetApp");
|
||||
NSString *appInfoPath = XSGetAppInfoPath(appId);
|
||||
NSDictionary *appInfo = XSGetAppInfo(appInfoPath);
|
||||
@ -410,21 +443,19 @@ BOOL myadTaskManualStop = NO;
|
||||
__weak typeof(self) weakSelf = self;
|
||||
getLowEcpm(^(NSNumber *lowEcpm) {
|
||||
__strong typeof(weakSelf) strongSelf = weakSelf;
|
||||
if (!strongSelf) return;
|
||||
|
||||
BOOL washParam = strongSelf->workType == 0 ? YES : NO;
|
||||
[tempBfaceDictKey setValue:@(washParam) forKey:@"washParam"];
|
||||
[tempBfaceDictKey setValue:lowEcpm forKey:@"adbrush_ecpm"];
|
||||
if(strongSelf->linkId) {
|
||||
[tempBfaceDictKey setValue:strongSelf->linkId forKey:@"linkId"];
|
||||
} else {
|
||||
} else {
|
||||
NSString *linkId = [[NSUUID UUID] UUIDString];
|
||||
[tempBfaceDictKey setValue:linkId forKey:@"linkId"];
|
||||
}
|
||||
|
||||
if(strongSelf->dataId) {
|
||||
[tempBfaceDictKey setValue:strongSelf->dataId forKey:@"dataId"];
|
||||
} else {
|
||||
} else {
|
||||
NSString *dataId = @"0";
|
||||
[tempBfaceDictKey setValue:dataId forKey:@"dataId"];
|
||||
}
|
||||
@ -444,12 +475,10 @@ BOOL myadTaskManualStop = NO;
|
||||
callback();
|
||||
});
|
||||
}
|
||||
|
||||
- (NSString *)frontMostAppId {
|
||||
- (NSString *) frontMostAppId {
|
||||
return XSFrontMostAppId();
|
||||
}
|
||||
|
||||
- (void)appRun:(NSString *)appId {
|
||||
- (void) appRun:(NSString *)appId {
|
||||
if ([XSHelper strIsEmpty:appId]) return;
|
||||
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
@ -461,27 +490,22 @@ BOOL myadTaskManualStop = NO;
|
||||
});
|
||||
}
|
||||
|
||||
- (void)tap:(int)i x:(int)x y:(int)y {
|
||||
- (void) tap: (int) i x:(int)x y:(int)y {
|
||||
}
|
||||
|
||||
- (void)restart:(OnEndCallback)callback {
|
||||
- (void) restart: (OnEndCallback) callback {
|
||||
__weak typeof(self) weakSelf = self;
|
||||
dispatch_async(self.manQueue, ^{
|
||||
@try {
|
||||
__strong typeof(weakSelf) strongSelf = weakSelf;
|
||||
if (!strongSelf) return;
|
||||
|
||||
[weakSelf appKill:@"com.apple.AppStore"];
|
||||
[weakSelf appKill:@"com.apple.mobilesafari"];
|
||||
if (strongSelf->taskAppId && ![strongSelf->taskAppId isEqual:[NSNull null]] && [strongSelf->taskAppId length] > 0) {
|
||||
[weakSelf appKill:strongSelf->taskAppId];
|
||||
[weakSelf unlock];
|
||||
|
||||
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC),
|
||||
strongSelf.manQueue, ^{
|
||||
[weakSelf unlock];
|
||||
[weakSelf resetApp:strongSelf->taskAppId callback:callback];
|
||||
});
|
||||
sleep(1);
|
||||
[weakSelf unlock];
|
||||
[weakSelf resetApp:strongSelf->taskAppId callback:callback];
|
||||
}
|
||||
} @catch (NSException *exception) {
|
||||
NSLog(@"Error in restart: %@", exception);
|
||||
@ -489,73 +513,44 @@ BOOL myadTaskManualStop = NO;
|
||||
});
|
||||
}
|
||||
|
||||
- (void)rndTouchApp {
|
||||
|
||||
- (void) rndTouchApp {
|
||||
int times = [XSHelper random:2 and:4];
|
||||
[self _rndTouchAppRecursive:0 totalTimes:times];
|
||||
for (int i = 1; i <= times; i++) {
|
||||
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];
|
||||
usleep(2000);
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
- (void)_rndTouchAppRecursive:(int)currentIndex totalTimes:(int)times {
|
||||
if (currentIndex >= times) {
|
||||
return;
|
||||
- (void) touchAppTask: (int) beforeTouch {
|
||||
if (beforeTouch > 0) {
|
||||
sleep(beforeTouch);
|
||||
}
|
||||
[self rndTouchApp];
|
||||
sleep(2);
|
||||
|
||||
int x = [XSHelper random:40 and:screen_w - 20];
|
||||
int y = [XSHelper random:50 and:screen_h - 240];
|
||||
NSString* appId = [self frontMostAppId];
|
||||
[self tap:1 x:x y:y];
|
||||
|
||||
if ([appId isEqual:self->taskAppId]) {
|
||||
[self tap:1 x:x y:y];
|
||||
NSString* appId = [ self frontMostAppId];
|
||||
|
||||
__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];
|
||||
});
|
||||
if (![appId isEqual: self->taskAppId]) {
|
||||
// [self appKill:appId];
|
||||
sleep(1);
|
||||
}
|
||||
|
||||
[self appRun:self->taskAppId];
|
||||
}
|
||||
|
||||
- (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);
|
||||
id t_idfa = dic[key];
|
||||
if (t_idfa && ![t_idfa isEqual:[NSNull null]] && ![t_idfa isEqual:@""]) {
|
||||
@ -565,29 +560,29 @@ BOOL myadTaskManualStop = NO;
|
||||
return @"";
|
||||
}
|
||||
}
|
||||
|
||||
- (NSNumber*)getNum:(NSString *)key dic:(NSDictionary*)dic {
|
||||
- (NSNumber*) getNum: (NSString *) key dic: (NSDictionary*) dic {
|
||||
NSLog(@"getNum: %@", key);
|
||||
id t_idfa = dic[key];
|
||||
NSString *ecpm_str = [NSString stringWithFormat:@"%@", t_idfa];
|
||||
NSString *ecpm_str = [NSString stringWithFormat:@"%@" , t_idfa];
|
||||
|
||||
NSNumber *ecpm = @0.0;
|
||||
|
||||
if (ecpm_str && ![ecpm_str isEqual:[NSNull null]] && ![ecpm_str isEqual:@""]) {
|
||||
ecpm = [XSHelper str2num:ecpm_str];
|
||||
ecpm = [XSHelper str2num: ecpm_str];
|
||||
}
|
||||
return ecpm;
|
||||
|
||||
}
|
||||
|
||||
- (int)getInt:(NSString *)key dic:(NSDictionary*)dic {
|
||||
- (int) getInt: (NSString *) key dic: (NSDictionary*) dic {
|
||||
NSLog(@"getInt: %@", key);
|
||||
id t_idfa = dic[key];
|
||||
NSString *ecpm_str = [NSString stringWithFormat:@"%@", t_idfa];
|
||||
NSString *ecpm_str = [NSString stringWithFormat:@"%@" , t_idfa];
|
||||
|
||||
NSNumber *ecpm = @(-99);
|
||||
|
||||
if (ecpm_str && ![ecpm_str isEqual:[NSNull null]] && ![ecpm_str isEqual:@""]) {
|
||||
ecpm = [XSHelper str2num:ecpm_str];
|
||||
ecpm = [XSHelper str2num: ecpm_str];
|
||||
}
|
||||
return [ecpm intValue];
|
||||
}
|
||||
@ -597,3 +592,4 @@ BOOL myadTaskManualStop = NO;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
|
||||
22
AppRunMan/server/XSLog.h
Normal file
22
AppRunMan/server/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/server/XSLog.m
Normal file
162
AppRunMan/server/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]);
|
||||
});
|
||||
}
|
||||
@ -9,18 +9,16 @@
|
||||
#define FALLBACK_PORT_START 6001
|
||||
#define FALLBACK_PORT_END 7000
|
||||
#define PORT 6001
|
||||
#define SEND_TIMEOUT 5.0
|
||||
#define SEND_TIMEOUT 5.0 // 发送超时时间
|
||||
|
||||
@interface XUDPServer() {
|
||||
@private
|
||||
GCDAsyncUdpSocket *serverSocket;
|
||||
dispatch_queue_t serverQueue;
|
||||
dispatch_source_t restartTimer;
|
||||
dispatch_source_t healthCheckTimer; // ⭐️ 改用dispatch_source
|
||||
NSUInteger restartAttempts;
|
||||
uint16_t currentPort;
|
||||
BOOL isStarting;
|
||||
BOOL isStopping;
|
||||
NSTimer *healthCheckTimer;
|
||||
}
|
||||
|
||||
@property (nonatomic, strong) NSMutableDictionary<NSNumber *, NSDictionary *> *pendingSends;
|
||||
@ -36,28 +34,24 @@
|
||||
static XUDPServer* _sharedInstance = nil;
|
||||
static dispatch_once_t oncePredicate;
|
||||
dispatch_once(&oncePredicate, ^{
|
||||
_sharedInstance = [[super allocWithZone:NULL] init];
|
||||
_sharedInstance = [[XUDPServer alloc] init];
|
||||
});
|
||||
return _sharedInstance;
|
||||
}
|
||||
|
||||
+ (instancetype)allocWithZone:(struct _NSZone *)zone {
|
||||
return [XUDPServer sharedInstance];
|
||||
}
|
||||
|
||||
- (instancetype)init {
|
||||
self = [super init];
|
||||
if (self) {
|
||||
if (self = [super init]) {
|
||||
restartAttempts = 0;
|
||||
currentPort = PORT;
|
||||
_currentTag = 0;
|
||||
isStarting = NO;
|
||||
isStopping = NO;
|
||||
_pendingSends = [NSMutableDictionary dictionary];
|
||||
|
||||
// 创建串行队列,避免并发问题
|
||||
serverQueue = dispatch_queue_create("com.xudpserver.queue", DISPATCH_QUEUE_SERIAL);
|
||||
|
||||
return self;
|
||||
}
|
||||
return self;
|
||||
return nil;
|
||||
}
|
||||
|
||||
- (void)start {
|
||||
@ -67,71 +61,42 @@
|
||||
}
|
||||
|
||||
- (uint16_t)udp_port {
|
||||
__block uint16_t port = 0;
|
||||
// ⭐️ 避免死锁,使用异步读取
|
||||
if (dispatch_get_specific((__bridge const void *)serverQueue)) {
|
||||
// 已在serverQueue中
|
||||
port = currentPort;
|
||||
} else {
|
||||
dispatch_sync(serverQueue, ^{
|
||||
port = self->currentPort;
|
||||
});
|
||||
}
|
||||
return port;
|
||||
return currentPort;
|
||||
}
|
||||
|
||||
- (void)_startInternal {
|
||||
if (isStarting) {
|
||||
NSLog(@"⚠️ Server is already starting");
|
||||
return;
|
||||
}
|
||||
NSLog(@"XS- Starting UDP server on port %d", currentPort);
|
||||
|
||||
// 避免重复创建
|
||||
if (serverSocket && !serverSocket.isClosed) {
|
||||
NSLog(@"⚠️ UDP server already running on port %d", currentPort);
|
||||
return;
|
||||
}
|
||||
|
||||
isStarting = YES;
|
||||
[self _stopInternal];
|
||||
|
||||
NSLog(@"XS- Starting UDP server on port %d (PID: %d)", currentPort, getpid());
|
||||
|
||||
[self _forceCloseSocket];
|
||||
|
||||
// ⭐️ 使用dispatch_after代替usleep,避免阻塞队列
|
||||
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)),
|
||||
serverQueue, ^{
|
||||
[self _startInternalContinue];
|
||||
});
|
||||
}
|
||||
|
||||
- (void)_startInternalContinue {
|
||||
serverSocket = [[GCDAsyncUdpSocket alloc] initWithDelegate:self
|
||||
delegateQueue:serverQueue];
|
||||
|
||||
NSError *error = nil;
|
||||
|
||||
// ⭐️ 只使用IPv4
|
||||
[serverSocket setIPv4Enabled:YES];
|
||||
[serverSocket setIPv6Enabled:NO];
|
||||
|
||||
// ⭐️ 启用端口重用
|
||||
if (![serverSocket enableReusePort:YES error:&error]) {
|
||||
NSLog(@"❌ Error enabling reuse port: %@", error);
|
||||
}
|
||||
|
||||
// ⭐️ 设置所有必要的socket选项
|
||||
[self _configureSocketOptions];
|
||||
|
||||
// 尝试绑定到指定端口
|
||||
if (![serverSocket bindToPort:currentPort error:&error]) {
|
||||
NSLog(@"❌ Error binding to port %d: %@", currentPort, error);
|
||||
|
||||
[self _forceCloseSocket];
|
||||
isStarting = NO;
|
||||
[serverSocket close];
|
||||
serverSocket = nil;
|
||||
|
||||
if (error.code == 48) { // EADDRINUSE
|
||||
NSLog(@"⚠️ Port %d is in use", currentPort);
|
||||
|
||||
// ⭐️ 异步清理,避免阻塞
|
||||
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
|
||||
[self _cleanupZombieSockets];
|
||||
});
|
||||
|
||||
NSLog(@"⚠️ Port %d is in use (possibly TIME_WAIT)", currentPort);
|
||||
[self _tryFallbackPorts];
|
||||
return;
|
||||
}
|
||||
@ -140,137 +105,75 @@
|
||||
return;
|
||||
}
|
||||
|
||||
[self _configureSocketOptions];
|
||||
|
||||
if (![serverSocket beginReceiving:&error]) {
|
||||
NSLog(@"❌ Error starting server (recv): %@", error);
|
||||
|
||||
[self _forceCloseSocket];
|
||||
isStarting = NO;
|
||||
[serverSocket close];
|
||||
serverSocket = nil;
|
||||
|
||||
[self _scheduleRestartWithBackoff];
|
||||
return;
|
||||
}
|
||||
|
||||
isStarting = NO;
|
||||
restartAttempts = 0;
|
||||
|
||||
[self _logSocketInfo];
|
||||
|
||||
NSLog(@"✅ UDP server started successfully on port %d", currentPort);
|
||||
|
||||
// ⭐️ 启动健康检查
|
||||
[self _startHealthCheck];
|
||||
}
|
||||
|
||||
- (void)_forceCloseSocket {
|
||||
if (serverSocket) {
|
||||
int fd = [serverSocket socketFD];
|
||||
|
||||
if (fd != -1) {
|
||||
// ⭐️ 非阻塞方式关闭
|
||||
fcntl(fd, F_SETFL, fcntl(fd, F_GETFL, 0) | O_NONBLOCK);
|
||||
|
||||
struct linger lingerOption = {1, 0};
|
||||
setsockopt(fd, SOL_SOCKET, SO_LINGER, &lingerOption, sizeof(lingerOption));
|
||||
|
||||
// ⭐️ shutdown可能阻塞,使用dispatch_async
|
||||
int fdCopy = fd;
|
||||
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
|
||||
shutdown(fdCopy, SHUT_RDWR);
|
||||
});
|
||||
}
|
||||
|
||||
[serverSocket close];
|
||||
serverSocket = nil;
|
||||
|
||||
NSLog(@"🔒 Socket closed (fd: %d)", fd);
|
||||
}
|
||||
}
|
||||
|
||||
- (void)_cleanupZombieSockets {
|
||||
NSLog(@"🧹 Cleaning up zombie sockets on port %d", currentPort);
|
||||
|
||||
int testSocket = socket(AF_INET, SOCK_DGRAM, 0);
|
||||
if (testSocket < 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
// ⭐️ 设置非阻塞
|
||||
fcntl(testSocket, F_SETFL, fcntl(testSocket, F_GETFL, 0) | O_NONBLOCK);
|
||||
|
||||
int reuseAddr = 1;
|
||||
setsockopt(testSocket, SOL_SOCKET, SO_REUSEADDR, &reuseAddr, sizeof(reuseAddr));
|
||||
|
||||
struct linger lingerOption = {1, 0};
|
||||
setsockopt(testSocket, SOL_SOCKET, SO_LINGER, &lingerOption, sizeof(lingerOption));
|
||||
|
||||
struct sockaddr_in addr;
|
||||
memset(&addr, 0, sizeof(addr));
|
||||
addr.sin_family = AF_INET;
|
||||
addr.sin_port = htons(currentPort);
|
||||
addr.sin_addr.s_addr = INADDR_ANY;
|
||||
|
||||
if (bind(testSocket, (struct sockaddr *)&addr, sizeof(addr)) == 0) {
|
||||
shutdown(testSocket, SHUT_RDWR);
|
||||
NSLog(@"✅ Cleaned up zombie socket on port %d", currentPort);
|
||||
}
|
||||
|
||||
close(testSocket);
|
||||
}
|
||||
|
||||
- (void)_logSocketInfo {
|
||||
if (!serverSocket) return;
|
||||
|
||||
int fd = [serverSocket socketFD];
|
||||
if (fd == -1) return;
|
||||
|
||||
struct sockaddr_in addr;
|
||||
socklen_t addrLen = sizeof(addr);
|
||||
|
||||
if (getsockname(fd, (struct sockaddr *)&addr, &addrLen) == 0) {
|
||||
char ipStr[INET_ADDRSTRLEN];
|
||||
inet_ntop(AF_INET, &addr.sin_addr, ipStr, sizeof(ipStr));
|
||||
|
||||
NSLog(@"📊 Socket - FD: %d, Addr: %s:%d, PID: %d",
|
||||
fd, ipStr, ntohs(addr.sin_port), getpid());
|
||||
}
|
||||
|
||||
int recvBuf, sendBuf;
|
||||
socklen_t optLen = sizeof(int);
|
||||
getsockopt(fd, SOL_SOCKET, SO_RCVBUF, &recvBuf, &optLen);
|
||||
getsockopt(fd, SOL_SOCKET, SO_SNDBUF, &sendBuf, &optLen);
|
||||
|
||||
NSLog(@"📊 Buffers - Recv: %d, Send: %d", recvBuf, sendBuf);
|
||||
}
|
||||
|
||||
// ⭐️ 配置所有socket选项
|
||||
- (void)_configureSocketOptions {
|
||||
if (!serverSocket) return;
|
||||
|
||||
int fd = [serverSocket socketFD];
|
||||
if (fd == -1) return;
|
||||
if (fd == -1) {
|
||||
NSLog(@"⚠️ Invalid socket file descriptor");
|
||||
return;
|
||||
}
|
||||
|
||||
// SO_REUSEADDR
|
||||
// 1. 设置 SO_REUSEADDR - 允许快速重启,避免TIME_WAIT问题
|
||||
int reuseAddr = 1;
|
||||
setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &reuseAddr, sizeof(reuseAddr));
|
||||
if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &reuseAddr, sizeof(reuseAddr)) == -1) {
|
||||
NSLog(@"❌ Error setting SO_REUSEADDR: %s", strerror(errno));
|
||||
}
|
||||
|
||||
// 缓冲区
|
||||
int recvBufferSize = 256 * 1024;
|
||||
setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &recvBufferSize, sizeof(recvBufferSize));
|
||||
// 2. 设置 SO_REUSEPORT - 允许多个socket绑定同一端口(某些系统)
|
||||
int reusePort = 1;
|
||||
if (setsockopt(fd, SOL_SOCKET, SO_REUSEPORT, &reusePort, sizeof(reusePort)) == -1) {
|
||||
NSLog(@"⚠️ SO_REUSEPORT not supported or error: %s", strerror(errno));
|
||||
}
|
||||
|
||||
int sendBufferSize = 256 * 1024;
|
||||
setsockopt(fd, SOL_SOCKET, SO_SNDBUF, &sendBufferSize, sizeof(sendBufferSize));
|
||||
// 3. ⭐️ 增加接收缓冲区大小,避免缓冲区溢出
|
||||
int recvBufferSize = 256 * 1024; // 256KB
|
||||
if (setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &recvBufferSize, sizeof(recvBufferSize)) == -1) {
|
||||
NSLog(@"⚠️ Failed to set receive buffer size: %s", strerror(errno));
|
||||
} else {
|
||||
// 验证实际设置的大小
|
||||
socklen_t optlen = sizeof(recvBufferSize);
|
||||
getsockopt(fd, SOL_SOCKET, SO_RCVBUF, &recvBufferSize, &optlen);
|
||||
NSLog(@"✅ Receive buffer size set to: %d bytes", recvBufferSize);
|
||||
}
|
||||
|
||||
// SO_NOSIGPIPE
|
||||
// 4. ⭐️ 增加发送缓冲区大小
|
||||
int sendBufferSize = 256 * 1024; // 256KB
|
||||
if (setsockopt(fd, SOL_SOCKET, SO_SNDBUF, &sendBufferSize, sizeof(sendBufferSize)) == -1) {
|
||||
NSLog(@"⚠️ Failed to set send buffer size: %s", strerror(errno));
|
||||
} else {
|
||||
socklen_t optlen = sizeof(sendBufferSize);
|
||||
getsockopt(fd, SOL_SOCKET, SO_SNDBUF, &sendBufferSize, &optlen);
|
||||
NSLog(@"✅ Send buffer size set to: %d bytes", sendBufferSize);
|
||||
}
|
||||
|
||||
// 5. ⭐️ 设置 SO_NOSIGPIPE - 防止写入关闭的socket时产生SIGPIPE信号
|
||||
#ifdef SO_NOSIGPIPE
|
||||
int noSigpipe = 1;
|
||||
setsockopt(fd, SOL_SOCKET, SO_NOSIGPIPE, &noSigpipe, sizeof(noSigpipe));
|
||||
if (setsockopt(fd, SOL_SOCKET, SO_NOSIGPIPE, &noSigpipe, sizeof(noSigpipe)) == -1) {
|
||||
NSLog(@"⚠️ Failed to set SO_NOSIGPIPE: %s", strerror(errno));
|
||||
}
|
||||
#endif
|
||||
|
||||
// SO_LINGER
|
||||
struct linger lingerOption = {1, 0};
|
||||
setsockopt(fd, SOL_SOCKET, SO_LINGER, &lingerOption, sizeof(lingerOption));
|
||||
|
||||
// 非阻塞
|
||||
// 6. ⭐️ 设置非阻塞模式(GCDAsyncUdpSocket通常已设置,但确保一下)
|
||||
int flags = fcntl(fd, F_GETFL, 0);
|
||||
if (flags != -1) {
|
||||
fcntl(fd, F_SETFL, flags | O_NONBLOCK);
|
||||
@ -284,126 +187,84 @@
|
||||
}
|
||||
|
||||
- (void)_stopInternal {
|
||||
if (isStopping) {
|
||||
NSLog(@"⚠️ Server is already stopping");
|
||||
return;
|
||||
}
|
||||
|
||||
isStopping = YES;
|
||||
|
||||
NSLog(@"XS- Stopping UDP server on port %d", currentPort);
|
||||
|
||||
[self _cancelRestartTimer];
|
||||
[self _stopHealthCheck];
|
||||
|
||||
[self _forceCloseSocket];
|
||||
if (serverSocket) {
|
||||
// ⭐️ 设置SO_LINGER为0,强制立即关闭,避免TIME_WAIT
|
||||
int fd = [serverSocket socketFD];
|
||||
if (fd != -1) {
|
||||
struct linger lingerOption = {1, 0}; // l_onoff=1, l_linger=0
|
||||
if (setsockopt(fd, SOL_SOCKET, SO_LINGER, &lingerOption, sizeof(lingerOption)) == -1) {
|
||||
NSLog(@"⚠️ Failed to set SO_LINGER: %s", strerror(errno));
|
||||
}
|
||||
}
|
||||
|
||||
if (!serverSocket.isClosed) {
|
||||
[serverSocket close];
|
||||
}
|
||||
|
||||
serverSocket = nil;
|
||||
}
|
||||
|
||||
[_pendingSends removeAllObjects];
|
||||
|
||||
// ⭐️ 使用dispatch_after代替usleep
|
||||
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)),
|
||||
serverQueue, ^{
|
||||
self->isStopping = NO;
|
||||
NSLog(@"✅ UDP server stopped");
|
||||
});
|
||||
}
|
||||
|
||||
#pragma mark - Health Check
|
||||
|
||||
// ⭐️ 健康检查
|
||||
- (void)_startHealthCheck {
|
||||
// ⭐️ 使用dispatch_source代替NSTimer,避免主线程依赖
|
||||
if (healthCheckTimer) {
|
||||
dispatch_source_cancel(healthCheckTimer);
|
||||
healthCheckTimer = nil;
|
||||
}
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
if (self->healthCheckTimer) {
|
||||
[self->healthCheckTimer invalidate];
|
||||
}
|
||||
|
||||
healthCheckTimer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, serverQueue);
|
||||
|
||||
dispatch_source_set_timer(healthCheckTimer,
|
||||
dispatch_time(DISPATCH_TIME_NOW, 30 * NSEC_PER_SEC),
|
||||
30 * NSEC_PER_SEC,
|
||||
1 * NSEC_PER_SEC);
|
||||
|
||||
dispatch_source_set_event_handler(healthCheckTimer, ^{
|
||||
[self _performHealthCheck];
|
||||
self->healthCheckTimer = [NSTimer scheduledTimerWithTimeInterval:30.0
|
||||
target:self
|
||||
selector:@selector(_performHealthCheck)
|
||||
userInfo:nil
|
||||
repeats:YES];
|
||||
});
|
||||
|
||||
dispatch_resume(healthCheckTimer);
|
||||
}
|
||||
|
||||
- (void)_stopHealthCheck {
|
||||
if (healthCheckTimer) {
|
||||
dispatch_source_cancel(healthCheckTimer);
|
||||
healthCheckTimer = nil;
|
||||
}
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
if (self->healthCheckTimer) {
|
||||
[self->healthCheckTimer invalidate];
|
||||
self->healthCheckTimer = nil;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
- (void)_performHealthCheck {
|
||||
if (isStarting || isStopping) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!serverSocket || serverSocket.isClosed) {
|
||||
NSLog(@"⚠️ Health check failed: socket is closed");
|
||||
[self _startInternal];
|
||||
return;
|
||||
}
|
||||
|
||||
int fd = [serverSocket socketFD];
|
||||
if (fd == -1) {
|
||||
NSLog(@"⚠️ Health check failed: invalid socket");
|
||||
[self _startInternal];
|
||||
return;
|
||||
}
|
||||
|
||||
struct sockaddr_in addr;
|
||||
socklen_t addrLen = sizeof(addr);
|
||||
if (getsockname(fd, (struct sockaddr *)&addr, &addrLen) == -1) {
|
||||
NSLog(@"⚠️ Health check failed: socket not bound");
|
||||
[self _startInternal];
|
||||
return;
|
||||
}
|
||||
|
||||
// ⭐️ 异步检查重复socket,避免阻塞
|
||||
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
|
||||
[self _checkDuplicateSockets];
|
||||
});
|
||||
|
||||
NSLog(@"✅ Health check passed (Port: %d, FD: %d)", currentPort, fd);
|
||||
}
|
||||
|
||||
- (void)_checkDuplicateSockets {
|
||||
// ⭐️ 设置超时,防止popen阻塞过久
|
||||
NSString *command = [NSString stringWithFormat:@"timeout 2 lsof -i UDP:%d -n -P 2>/dev/null || echo timeout", currentPort];
|
||||
|
||||
FILE *pipe = popen([command UTF8String], "r");
|
||||
if (!pipe) {
|
||||
return;
|
||||
}
|
||||
|
||||
char buffer[256];
|
||||
int count = 0;
|
||||
BOOL timedOut = NO;
|
||||
|
||||
while (fgets(buffer, sizeof(buffer), pipe) != NULL) {
|
||||
if (strstr(buffer, "timeout") != NULL) {
|
||||
timedOut = YES;
|
||||
break;
|
||||
dispatch_async(serverQueue, ^{
|
||||
if (!self->serverSocket || self->serverSocket.isClosed) {
|
||||
NSLog(@"⚠️ Health check failed: socket is closed");
|
||||
[self _startInternal];
|
||||
return;
|
||||
}
|
||||
count++;
|
||||
}
|
||||
pclose(pipe);
|
||||
|
||||
if (timedOut) {
|
||||
NSLog(@"⚠️ Socket check timed out");
|
||||
return;
|
||||
}
|
||||
// ⭐️ 检查socket状态
|
||||
int fd = [self->serverSocket socketFD];
|
||||
if (fd == -1) {
|
||||
NSLog(@"⚠️ Health check failed: invalid socket");
|
||||
[self _startInternal];
|
||||
return;
|
||||
}
|
||||
|
||||
count = MAX(0, count - 1);
|
||||
// ⭐️ 检查端口是否仍然绑定
|
||||
struct sockaddr_in addr;
|
||||
socklen_t addrLen = sizeof(addr);
|
||||
if (getsockname(fd, (struct sockaddr *)&addr, &addrLen) == -1) {
|
||||
NSLog(@"⚠️ Health check failed: socket not bound");
|
||||
[self _startInternal];
|
||||
return;
|
||||
}
|
||||
|
||||
if (count > 1) {
|
||||
NSLog(@"⚠️ WARNING: Found %d sockets on port %d!", count, currentPort);
|
||||
}
|
||||
NSLog(@"✅ Health check passed for port %d", self->currentPort);
|
||||
});
|
||||
}
|
||||
|
||||
#pragma mark - Restart Logic
|
||||
@ -420,14 +281,17 @@
|
||||
|
||||
const NSUInteger maxAttempts = 10;
|
||||
if (restartAttempts >= maxAttempts) {
|
||||
NSLog(@"❌ Maximum restart attempts reached");
|
||||
NSLog(@"❌ Maximum restart attempts (%lu) reached, giving up",
|
||||
(unsigned long)maxAttempts);
|
||||
return;
|
||||
}
|
||||
|
||||
restartAttempts++;
|
||||
|
||||
NSTimeInterval delay = MIN(pow(2, restartAttempts - 1), 60.0);
|
||||
|
||||
NSLog(@"⏰ Scheduling restart in %.1f seconds", delay);
|
||||
NSLog(@"⏰ Scheduling restart attempt %lu in %.1f seconds",
|
||||
(unsigned long)restartAttempts, delay);
|
||||
|
||||
restartTimer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, serverQueue);
|
||||
|
||||
@ -444,12 +308,10 @@
|
||||
}
|
||||
|
||||
- (void)_tryFallbackPorts {
|
||||
NSLog(@"🔍 Searching for fallback port...");
|
||||
NSLog(@"🔍 Searching for available fallback port...");
|
||||
|
||||
// ⭐️ 限制扫描范围,避免卡死
|
||||
uint16_t scanLimit = MIN(FALLBACK_PORT_END, FALLBACK_PORT_START + 100);
|
||||
|
||||
for (uint16_t port = FALLBACK_PORT_START; port <= scanLimit; port++) {
|
||||
for (uint16_t port = FALLBACK_PORT_START; port <= FALLBACK_PORT_END; port++) {
|
||||
// ⭐️ 检查端口是否真的可用
|
||||
if ([self _isPortAvailable:port]) {
|
||||
currentPort = port;
|
||||
NSLog(@"✅ Found available port: %d", port);
|
||||
@ -458,23 +320,20 @@
|
||||
}
|
||||
}
|
||||
|
||||
NSLog(@"❌ No available fallback ports");
|
||||
NSLog(@"❌ No available fallback ports found in range %d-%d",
|
||||
FALLBACK_PORT_START, FALLBACK_PORT_END);
|
||||
[self _scheduleRestartWithBackoff];
|
||||
}
|
||||
|
||||
// ⭐️ 检查端口是否可用(改进版)
|
||||
- (BOOL)_isPortAvailable:(uint16_t)port {
|
||||
int testSocket = socket(AF_INET, SOCK_DGRAM, 0);
|
||||
if (testSocket < 0) {
|
||||
NSLog(@"⚠️ Cannot create test socket");
|
||||
return NO;
|
||||
}
|
||||
|
||||
// ⭐️ 设置非阻塞和超时
|
||||
fcntl(testSocket, F_SETFL, fcntl(testSocket, F_GETFL, 0) | O_NONBLOCK);
|
||||
|
||||
struct timeval timeout = {1, 0}; // 1秒超时
|
||||
setsockopt(testSocket, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof(timeout));
|
||||
setsockopt(testSocket, SOL_SOCKET, SO_SNDTIMEO, &timeout, sizeof(timeout));
|
||||
|
||||
// 设置SO_REUSEADDR
|
||||
int reuseAddr = 1;
|
||||
setsockopt(testSocket, SOL_SOCKET, SO_REUSEADDR, &reuseAddr, sizeof(reuseAddr));
|
||||
|
||||
@ -487,7 +346,14 @@
|
||||
int result = bind(testSocket, (struct sockaddr *)&addr, sizeof(addr));
|
||||
close(testSocket);
|
||||
|
||||
return (result == 0);
|
||||
if (result == 0) {
|
||||
return YES;
|
||||
} else {
|
||||
if (errno == EADDRINUSE) {
|
||||
NSLog(@"⚠️ Port %d is in use", port);
|
||||
}
|
||||
return NO;
|
||||
}
|
||||
}
|
||||
|
||||
- (void)scheduleRestart {
|
||||
@ -500,7 +366,7 @@
|
||||
#pragma mark - GCDAsyncUdpSocket Delegate
|
||||
|
||||
- (void)udpSocket:(GCDAsyncUdpSocket *)sock didConnectToAddress:(NSData *)address {
|
||||
NSLog(@"✅ Connected");
|
||||
NSLog(@"✅ Connected to client");
|
||||
}
|
||||
|
||||
- (void)udpSocket:(GCDAsyncUdpSocket *)sock
|
||||
@ -508,57 +374,75 @@
|
||||
fromAddress:(NSData *)address
|
||||
withFilterContext:(id)filterContext {
|
||||
@autoreleasepool {
|
||||
if (data.length > 65507) {
|
||||
NSLog(@"⚠️ Oversized packet: %lu bytes", (unsigned long)data.length);
|
||||
// ⭐️ 检查数据大小,防止超大包
|
||||
if (data.length > 65507) { // UDP最大包大小
|
||||
NSLog(@"⚠️ Received oversized packet: %lu bytes", (unsigned long)data.length);
|
||||
return;
|
||||
}
|
||||
|
||||
NSString *datastr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
|
||||
if (!datastr) {
|
||||
NSLog(@"⚠️ Failed to decode data");
|
||||
NSLog(@"⚠️ Failed to decode received data (length: %lu)", (unsigned long)data.length);
|
||||
return;
|
||||
}
|
||||
|
||||
// ⭐️ 异步处理,避免阻塞接收
|
||||
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
|
||||
@autoreleasepool {
|
||||
UDPHandler *handle = [UDPHandler sharedInstance];
|
||||
NSString *res = [handle handle:datastr];
|
||||
NSLog(@"📨 UDP Request from %@: %@",
|
||||
[self _addressToString:address],
|
||||
[datastr substringToIndex:MIN(100, datastr.length)]);
|
||||
|
||||
if (res) {
|
||||
[self _sendResponse:res toAddress:address fromSocket:sock];
|
||||
}
|
||||
// ⭐️ 异步处理请求,避免阻塞接收
|
||||
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
|
||||
UDPHandler *handle = [UDPHandler sharedInstance];
|
||||
NSString *res = [handle handle:datastr];
|
||||
|
||||
if (res) {
|
||||
[self _sendResponse:res toAddress:address fromSocket:sock];
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// ⭐️ 发送响应(带超时和重试逻辑)
|
||||
- (void)_sendResponse:(NSString *)response
|
||||
toAddress:(NSData *)address
|
||||
fromSocket:(GCDAsyncUdpSocket *)sock {
|
||||
dispatch_async(serverQueue, ^{
|
||||
if (!sock || sock.isClosed) {
|
||||
NSLog(@"⚠️ Cannot send response: socket is closed");
|
||||
return;
|
||||
}
|
||||
|
||||
NSData *responseData = [response dataUsingEncoding:NSUTF8StringEncoding];
|
||||
if (!responseData || responseData.length > 65507) {
|
||||
if (!responseData) {
|
||||
NSLog(@"⚠️ Failed to encode response");
|
||||
return;
|
||||
}
|
||||
|
||||
// ⭐️ 检查响应大小
|
||||
if (responseData.length > 65507) {
|
||||
NSLog(@"⚠️ Response too large: %lu bytes (max 65507)",
|
||||
(unsigned long)responseData.length);
|
||||
return;
|
||||
}
|
||||
|
||||
long tag = ++self->_currentTag;
|
||||
|
||||
// 保存待发送数据
|
||||
self->_pendingSends[@(tag)] = @{
|
||||
@"response": response,
|
||||
@"address": address,
|
||||
@"timestamp": @([[NSDate date] timeIntervalSince1970])
|
||||
};
|
||||
|
||||
NSLog(@"📤 Sending response (tag: %ld, size: %lu bytes)",
|
||||
tag, (unsigned long)responseData.length);
|
||||
|
||||
[sock sendData:responseData
|
||||
toAddress:address
|
||||
withTimeout:SEND_TIMEOUT
|
||||
tag:tag];
|
||||
|
||||
// ⭐️ 设置超时检查
|
||||
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)((SEND_TIMEOUT + 1.0) * NSEC_PER_SEC)),
|
||||
self->serverQueue, ^{
|
||||
[self _checkSendTimeout:tag];
|
||||
@ -566,9 +450,14 @@ withFilterContext:(id)filterContext {
|
||||
});
|
||||
}
|
||||
|
||||
// ⭐️ 检查发送超时
|
||||
- (void)_checkSendTimeout:(long)tag {
|
||||
NSDictionary *pendingData = _pendingSends[@(tag)];
|
||||
if (pendingData) {
|
||||
NSTimeInterval timestamp = [pendingData[@"timestamp"] doubleValue];
|
||||
NSTimeInterval elapsed = [[NSDate date] timeIntervalSince1970] - timestamp;
|
||||
|
||||
NSLog(@"⏱️ Send timeout for tag %ld (elapsed: %.1fs)", tag, elapsed);
|
||||
[_pendingSends removeObjectForKey:@(tag)];
|
||||
}
|
||||
}
|
||||
@ -578,36 +467,47 @@ withFilterContext:(id)filterContext {
|
||||
}
|
||||
|
||||
- (void)udpSocket:(GCDAsyncUdpSocket *)sock didSendDataWithTag:(long)tag {
|
||||
NSLog(@"✅ Data sent successfully (tag: %ld)", tag);
|
||||
[_pendingSends removeObjectForKey:@(tag)];
|
||||
}
|
||||
|
||||
- (void)udpSocket:(GCDAsyncUdpSocket *)sock
|
||||
didNotSendDataWithTag:(long)tag
|
||||
dueToError:(NSError *)error {
|
||||
NSLog(@"❌ Failed to send data (tag: %ld): %@", tag, error);
|
||||
|
||||
[_pendingSends removeObjectForKey:@(tag)];
|
||||
|
||||
if (error.code == 57) { // ENOTCONN
|
||||
// ⭐️ 处理各种发送错误
|
||||
if (error.code == 55) { // ENOBUFS
|
||||
NSLog(@"⚠️ Buffer full (ENOBUFS) - system may be overloaded");
|
||||
} else if (error.code == 57) { // ENOTCONN
|
||||
NSLog(@"⚠️ Socket disconnected (ENOTCONN)");
|
||||
[self _startInternal];
|
||||
} else if (error.code == 64) { // EHOSTDOWN
|
||||
NSLog(@"⚠️ Host is down (EHOSTDOWN)");
|
||||
} else if (error.code == 65) { // EHOSTUNREACH
|
||||
NSLog(@"⚠️ Host unreachable (EHOSTUNREACH)");
|
||||
}
|
||||
}
|
||||
|
||||
- (void)udpSocketDidClose:(GCDAsyncUdpSocket *)sock withError:(NSError *)error {
|
||||
NSLog(@"⚠️ Socket closed: %@", error);
|
||||
NSLog(@"⚠️ Socket closed. Error: %@", error);
|
||||
|
||||
if (sock == serverSocket) {
|
||||
serverSocket = nil;
|
||||
}
|
||||
|
||||
if (error && !isStopping) {
|
||||
if (error) {
|
||||
NSLog(@"❌ Unexpected closure, scheduling restart");
|
||||
[self scheduleRestart];
|
||||
}
|
||||
}
|
||||
|
||||
- (NSString *)_addressToString:(NSData *)addressData {
|
||||
if (addressData.length < sizeof(struct sockaddr_in)) {
|
||||
return @"unknown";
|
||||
}
|
||||
#pragma mark - Utility Methods
|
||||
|
||||
// ⭐️ 将地址转换为可读字符串
|
||||
- (NSString *)_addressToString:(NSData *)addressData {
|
||||
struct sockaddr_in *addr = (struct sockaddr_in *)addressData.bytes;
|
||||
char ipStr[INET_ADDRSTRLEN];
|
||||
inet_ntop(AF_INET, &addr->sin_addr, ipStr, sizeof(ipStr));
|
||||
|
||||
13
ips.txt
13
ips.txt
@ -1,10 +1,3 @@
|
||||
192.168.1.15
|
||||
192.168.1.19
|
||||
192.168.1.18
|
||||
192.168.1.20
|
||||
192.168.1.11
|
||||
192.168.1.21
|
||||
192.168.1.14
|
||||
192.168.1.16
|
||||
192.168.1.13
|
||||
192.168.1.17
|
||||
172.28.4.29
|
||||
172.28.7.13
|
||||
172.28.7.22
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue
Block a user