├── HackMenu ├── .DS_Store ├── Bsphp │ ├── Config.h │ ├── Config.m │ ├── Gongneng.h │ ├── Gongneng.m │ └── memui │ │ ├── AESUtility.h │ │ ├── AESUtility.m │ │ ├── AFNetworking │ │ ├── AFHTTPSessionManager.h │ │ ├── AFHTTPSessionManager.m │ │ ├── AFNetworkReachabilityManager.h │ │ ├── AFNetworkReachabilityManager.m │ │ ├── AFNetworking.h │ │ ├── AFSecurityPolicy.h │ │ ├── AFSecurityPolicy.m │ │ ├── AFURLRequestSerialization.h │ │ ├── AFURLRequestSerialization.m │ │ ├── AFURLResponseSerialization.h │ │ ├── AFURLResponseSerialization.m │ │ ├── AFURLSessionManager.h │ │ └── AFURLSessionManager.m │ │ ├── DES3Utill.h │ │ ├── DES3Utill.m │ │ ├── GTMBase64.h │ │ ├── GTMBase64.m │ │ ├── GTMDefines.h │ │ ├── LRKeychain.h │ │ ├── LRKeychain.m │ │ ├── MF_Base64Additions.h │ │ ├── MF_Base64Additions.m │ │ ├── NSData+Base64.h │ │ ├── NSData+Base64.m │ │ ├── NSData+CommonCrypto.h │ │ ├── NSData+CommonCrypto.m │ │ ├── NSDictionary+StichingStringkeyValue.h │ │ ├── NSDictionary+StichingStringkeyValue.m │ │ ├── NSString+AES.h │ │ ├── NSString+AES.m │ │ ├── NSString+Base64.h │ │ ├── NSString+Base64.m │ │ ├── NSString+MD5.h │ │ ├── NSString+MD5.m │ │ ├── NSString+Tools.h │ │ ├── NSString+Tools.m │ │ ├── NSString+URLCode.h │ │ ├── NSString+URLCode.m │ │ ├── NetWorkingApiClient.h │ │ ├── NetWorkingApiClient.m │ │ ├── UIAlertView+Blocks.h │ │ ├── UIAlertView+Blocks.m │ │ ├── UIView+Toast.h │ │ ├── UIView+Toast.m │ │ ├── UserInfoManager.h │ │ ├── UserInfoManager.m │ │ ├── defines.h │ │ └── lz4 │ │ ├── lz4.c │ │ ├── lz4.h │ │ ├── mem.c │ │ ├── mem.h │ │ ├── mem_utils.c │ │ ├── mem_utils.h │ │ ├── search_result.c │ │ ├── search_result.h │ │ └── search_result_def.h ├── CaptainHook.h ├── ESP │ ├── ESP.h │ ├── ESP.m │ ├── ESPView.h │ ├── ESPView.m │ └── Fiddler │ │ ├── NCSessionConfiguration.h │ │ ├── NCSessionConfiguration.m │ │ ├── NCURLProtocol.h │ │ └── NCURLProtocol.m ├── IGG-For-ShiSanGe-Prefix.pch ├── IGG │ ├── JHDragView.h │ ├── JHDragView.m │ ├── JHPP.h │ ├── JHPP.m │ ├── JHUIViewControllerDecoupler.h │ ├── JHUIViewControllerDecoupler.m │ ├── PubgLoad.h │ └── PubgLoad.mm ├── LuntanYZ │ ├── LtGongNeng.m │ └── LtShengMing.h ├── SCLAlertView │ ├── SCLAlertView.h │ ├── SCLAlertView.m │ ├── SCLAlertViewResponder.h │ ├── SCLAlertViewResponder.m │ ├── SCLAlertViewStyleKit.h │ ├── SCLAlertViewStyleKit.m │ ├── SCLButton.h │ ├── SCLButton.m │ ├── SCLMacros.h │ ├── SCLSwitchView.h │ ├── SCLSwitchView.m │ ├── SCLTextView.h │ ├── SCLTextView.m │ ├── SCLTimerDisplay.h │ ├── SCLTimerDisplay.m │ ├── UIImage+ImageEffects.h │ └── UIImage+ImageEffects.m └── main.m ├── IGG-For-ShiSanGe.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ ├── xcshareddata │ │ ├── IDEWorkspaceChecks.plist │ │ └── WorkspaceSettings.xcsettings │ └── xcuserdata │ │ ├── apple.xcuserdatad │ │ ├── UserInterfaceState.xcuserstate │ │ └── WorkspaceSettings.xcsettings │ │ ├── guyongagng.xcuserdatad │ │ ├── UserInterfaceState.xcuserstate │ │ └── WorkspaceSettings.xcsettings │ │ ├── guyonggang.xcuserdatad │ │ ├── IDEFindNavigatorScopes.plist │ │ └── UserInterfaceState.xcuserstate │ │ ├── mac.xcuserdatad │ │ └── UserInterfaceState.xcuserstate │ │ ├── mac126.xcuserdatad │ │ └── UserInterfaceState.xcuserstate │ │ ├── macgu.xcuserdatad │ │ └── UserInterfaceState.xcuserstate │ │ ├── macgyg.xcuserdatad │ │ └── UserInterfaceState.xcuserstate │ │ ├── nongshifu.xcuserdatad │ │ ├── UserInterfaceState.xcuserstate │ │ └── WorkspaceSettings.xcsettings │ │ ├── yi.xcuserdatad │ │ └── UserInterfaceState.xcuserstate │ │ └── zzz.xcuserdatad │ │ └── UserInterfaceState.xcuserstate ├── xcshareddata │ └── xcschemes │ │ └── DLGMemor.xcscheme └── xcuserdata │ ├── apple.xcuserdatad │ └── xcschemes │ │ └── xcschememanagement.plist │ ├── guyongagng.xcuserdatad │ └── xcschemes │ │ └── xcschememanagement.plist │ ├── guyonggang.xcuserdatad │ └── xcschemes │ │ └── xcschememanagement.plist │ ├── mac126.xcuserdatad │ └── xcdebugger │ │ └── Breakpoints_v2.xcbkptlist │ ├── macgu.xcuserdatad │ └── xcschemes │ │ └── xcschememanagement.plist │ ├── macgyg.xcuserdatad │ ├── xcdebugger │ │ └── Breakpoints_v2.xcbkptlist │ └── xcschemes │ │ └── xcschememanagement.plist │ ├── nongshifu.xcuserdatad │ ├── xcdebugger │ │ └── Breakpoints_v2.xcbkptlist │ └── xcschemes │ │ └── xcschememanagement.plist │ └── yi.xcuserdatad │ └── xcschemes │ └── xcschememanagement.plist ├── JRMemory.framework ├── Headers │ └── MemScan.h ├── Info.plist └── JRMemory └── README.md /HackMenu/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuteteen/IGG/75fc80fe9c284f8e3b830c3f9e53dc24b7665cb1/HackMenu/.DS_Store -------------------------------------------------------------------------------- /HackMenu/Bsphp/Config.h: -------------------------------------------------------------------------------- 1 | #import 2 | //全局配置BSPHP 3 | //下面信息通过软件后台>软件>对应软件设置上获得 4 | //全局服务器地址 5 | #define LD_API @"" 6 | 7 | //通信key 8 | #define LD_KEY @"" 9 | 10 | //通信密码 11 | #define LD_APIPASS @"" 12 | //默认无修改 13 | #define LD_AAAA @"123456781234567812345678" 14 | //远程菜单 15 | //QQ飞飞车pqrGPtGQWD46tXNw0D/F5T0AhXHudnKfH0VQ5tMgsyU9MEjXAMKKCA== 16 | //王者pqrGPtGQWD46tXNw0D/F5T0AhXHudnKfx8SpJ05NV2xi+eupx7CFnO1JTJeqmJOY 17 | #define LD_URL @"" 18 | //签名in进认证 19 | #define LD_IN @"" 20 | //签名to本地认证 21 | #define LD_TO @"" 22 | 23 | #define LD_VERSION @"RGL0bZgWeOw=" 24 | 25 | 26 | //POST默认 27 | 28 | @interface NetTool : NSObject 29 | 30 | /** 31 | * AFN异步发送post请求,返回原生数据 32 | * 33 | * @param appendURL 追加URL 34 | * @param param 参数字典 35 | * @param success 成功Block 36 | * @param failure 失败Block 37 | * 38 | * @return NSURLSessionDataTask任务类型 39 | */ 40 | + (NSURLSessionDataTask *)__attribute__((optnone))Post_AppendURL:(NSString *)appendURL myparameters:(NSDictionary *)param mysuccess:(void (^)(id responseObject))success myfailure:(void (^)(NSError *error))failure; 41 | @end 42 | -------------------------------------------------------------------------------- /HackMenu/Bsphp/Config.m: -------------------------------------------------------------------------------- 1 | // 十三哥 QQ350722326 2 | //官网 https://iosgods.cn 3 | #import "NetWorkingApiClient.h" 4 | #import "Config.h" 5 | #import "DES3Utill.h" 6 | #import "NSDictionary+StichingStringkeyValue.h" 7 | #import "NSString+MD5.h" 8 | #import "NSString+URLCode.h" 9 | #define TESTLog(...) NSLog(__VA_ARGS__) 10 | 11 | 12 | @implementation NetTool : NSObject 13 | + (NSURLSessionDataTask *)__attribute__((optnone))Post_AppendURL:(NSString *)appendURL 14 | myparameters:(NSDictionary *)param 15 | mysuccess:(void (^)(id responseObject))success myfailure:(void (^)(NSError *error))failure{ 16 | NSMutableDictionary *parameters = [[NSMutableDictionary alloc]init]; 17 | NSString * strpwd = NULL; 18 | strpwd = [DES3Utill decrypt:LD_APIPASS gkey:LD_AAAA]; 19 | NSString * strpwdin = NULL; 20 | strpwdin = [DES3Utill decrypt:LD_IN gkey:LD_AAAA]; 21 | NSString * strpwdto = NULL; 22 | strpwdto = [DES3Utill decrypt:LD_TO gkey:LD_AAAA]; 23 | [parameters setObject:@"ok" forKey:@"json"]; 24 | if (param != nil) { 25 | NSString *desString = [NSDictionary stitchingStringFromDictionary:param]; 26 | NSString *md5String = [strpwd md5:strpwd]; 27 | desString = [DES3Utill encrypt:desString gkey:md5String]; 28 | NSString * sginstr = [strpwdin stringByReplacingOccurrencesOfString:@"[KEY]"withString:desString]; 29 | NSString * sginstrMD5 = [sginstr md5:sginstr]; 30 | NSLog(@"replaceStr=%@",sginstrMD5); 31 | parameters[@"sgin"] = sginstrMD5; 32 | desString = [desString URLEncodedString]; 33 | parameters[@"parameter"] = desString; 34 | } 35 | return [[NetWorkingApiClient sharedNetWorkingApiClient] POST:appendURL 36 | parameters:parameters 37 | progress:nil 38 | success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { 39 | 40 | NSString *str = [[NSString alloc]initWithData:responseObject encoding:NSUTF8StringEncoding]; 41 | NSString *md5String = [strpwd md5:strpwd]; 42 | str = [DES3Utill decrypt:str gkey:md5String]; 43 | //TESTLog(@"请求网址 = %@",appendURL); 44 | ///TESTLog(@"parameters = %@",parameters); 45 | //TESTLog(@"服务器返回数据 = %@",str); 46 | NSData * data = [str dataUsingEncoding:NSUTF8StringEncoding]; 47 | //NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil]; 48 | //TESTLog(@"dict = %@",dict); 49 | 50 | NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil]; 51 | 52 | NSString * insginString = [NSString stringWithFormat:@"%@%@%@%@%@", json[@"response"][@"data"], json[@"response"][@"date"],json[@"response"][@"unix"],json[@"response"][@"microtime"],json[@"response"][@"appsafecode"]]; 53 | 54 | insginString = [strpwdto stringByReplacingOccurrencesOfString:@"[KEY]"withString:insginString]; 55 | //本地签名 56 | md5String = [insginString md5:insginString]; 57 | NSString * sginstrMD5 = json[@"response"][@"sgin"]; 58 | if([md5String isEqualToString:sginstrMD5]){ 59 | //success(data); 60 | NSLog(@"签名验证通过\n"); 61 | 62 | }else{ 63 | NSLog(@"签名验证未通过\n"); 64 | 65 | 66 | NSData *testData = [@"-1000" dataUsingEncoding: NSUTF8StringEncoding]; 67 | data = testData; 68 | } 69 | 70 | 71 | 72 | success(data); 73 | } 74 | failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { 75 | TESTLog(@"%@",error); 76 | failure(error); 77 | }]; 78 | 79 | } 80 | 81 | 82 | 83 | 84 | @end 85 | -------------------------------------------------------------------------------- /HackMenu/Bsphp/Gongneng.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSObject.h 3 | // Toushibtn 4 | // 5 | // Created by xuy_VM on 2019/4/5. 6 | // Copyright © 2019 xuy_VM. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | #import 12 | 13 | NS_ASSUME_NONNULL_BEGIN 14 | 15 | @interface NSObject (hook) 16 | - (BOOL)VPNtishitiao;//代理提示检测条 17 | - (BOOL)VPNzhijiesantui;//代理直接闪退不提示 18 | - (BOOL)Banben321;//版本检测 19 | - (BOOL)Bsphp;//版本检测 20 | 21 | @end 22 | @interface DLGMemEntry : NSObject 23 | 24 | @end 25 | @interface VerifyEntry : NSObject 26 | 27 | + (instancetype)MySharedInstance; 28 | 29 | - (NSString*)getIDFA; 30 | 31 | - (void)showAlertMsg:(NSString *)show error:(BOOL)error; 32 | 33 | 34 | @end 35 | 36 | NS_ASSUME_NONNULL_END 37 | -------------------------------------------------------------------------------- /HackMenu/Bsphp/memui/AESUtility.h: -------------------------------------------------------------------------------- 1 | // 2 | // AESUtility.h 3 | // qq 4 | // 5 | // Created by Yi on 2018/7/15. 6 | // 7 | 8 | #import 9 | 10 | @interface AESUtility : NSObject 11 | 12 | + (NSString *)EncryptString:(NSString *)sourceStr; 13 | 14 | + (NSString *)DecryptString:(NSString *)secretStr; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /HackMenu/Bsphp/memui/AESUtility.m: -------------------------------------------------------------------------------- 1 | // 2 | // AESUtility.m 3 | // qq 4 | // 5 | // Created by Yi on 2018/7/15. 6 | // 7 | 8 | #import "AESUtility.h" 9 | 10 | #import 11 | #import 12 | 13 | //加密与解密的秘钥,需要与后台协商共同定义,保持与后台的秘钥相同 14 | static NSString *key = @"xxxxxxxxxxxxxxxxxxxxxxxx"; 15 | 16 | @implementation AESUtility 17 | 18 | + (NSString *)EncryptString:(NSString *)sourceStr 19 | { 20 | char keyPtr[kCCKeySizeAES256 + 1]; 21 | bzero(keyPtr, sizeof(keyPtr)); 22 | [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding]; 23 | 24 | NSData *sourceData = [sourceStr dataUsingEncoding:NSUTF8StringEncoding]; 25 | NSUInteger dataLength = [sourceData length]; 26 | size_t buffersize = dataLength + kCCBlockSizeAES128; 27 | void *buffer = malloc(buffersize); 28 | size_t numBytesEncrypted = 0; 29 | CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding | kCCOptionECBMode, keyPtr, kCCBlockSizeAES128, NULL, [sourceData bytes], dataLength, buffer, buffersize, &numBytesEncrypted); 30 | 31 | if (cryptStatus == kCCSuccess) { 32 | NSData *encryptData = [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted]; 33 | //对加密后的二进制数据进行base64转码 34 | return [encryptData base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed]; 35 | } 36 | else 37 | { 38 | free(buffer); 39 | return nil; 40 | } 41 | } 42 | 43 | + (NSString *)DecryptString:(NSString *)secretStr 44 | { 45 | //先对加密的字符串进行base64解码 46 | NSData *decodeData = [[NSData alloc] initWithBase64EncodedString:secretStr options:NSDataBase64DecodingIgnoreUnknownCharacters]; 47 | 48 | char keyPtr[kCCKeySizeAES256 + 1]; 49 | bzero(keyPtr, sizeof(keyPtr)); 50 | [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding]; 51 | 52 | NSUInteger dataLength = [decodeData length]; 53 | size_t bufferSize = dataLength + kCCBlockSizeAES128; 54 | void *buffer = malloc(bufferSize); 55 | size_t numBytesDecrypted = 0; 56 | CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding | kCCOptionECBMode, keyPtr, kCCBlockSizeAES128, NULL, [decodeData bytes], dataLength, buffer, bufferSize, &numBytesDecrypted); 57 | if (cryptStatus == kCCSuccess) { 58 | NSData *data = [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted]; 59 | NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 60 | return result; 61 | } 62 | else 63 | { 64 | free(buffer); 65 | return nil; 66 | } 67 | } 68 | @end 69 | -------------------------------------------------------------------------------- /HackMenu/Bsphp/memui/AFNetworking/AFNetworkReachabilityManager.h: -------------------------------------------------------------------------------- 1 | // AFNetworkReachabilityManager.h 2 | // Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | // THE SOFTWARE. 21 | 22 | #import 23 | 24 | #if !TARGET_OS_WATCH 25 | #import 26 | 27 | typedef NS_ENUM(NSInteger, AFNetworkReachabilityStatus) { 28 | AFNetworkReachabilityStatusUnknown = -1, 29 | AFNetworkReachabilityStatusNotReachable = 0, 30 | AFNetworkReachabilityStatusReachableViaWWAN = 1, 31 | AFNetworkReachabilityStatusReachableViaWiFi = 2, 32 | }; 33 | 34 | NS_ASSUME_NONNULL_BEGIN 35 | 36 | /** 37 | `AFNetworkReachabilityManager` monitors the reachability of domains, and addresses for both WWAN and WiFi network interfaces. 38 | 39 | Reachability can be used to determine background information about why a network operation failed, or to trigger a network operation retrying when a connection is established. It should not be used to prevent a user from initiating a network request, as it's possible that an initial request may be required to establish reachability. 40 | 41 | See Apple's Reachability Sample Code ( https://developer.apple.com/library/ios/samplecode/reachability/ ) 42 | 43 | @warning Instances of `AFNetworkReachabilityManager` must be started with `-startMonitoring` before reachability status can be determined. 44 | */ 45 | @interface AFNetworkReachabilityManager : NSObject 46 | 47 | /** 48 | The current network reachability status. 49 | */ 50 | @property (readonly, nonatomic, assign) AFNetworkReachabilityStatus networkReachabilityStatus; 51 | 52 | /** 53 | Whether or not the network is currently reachable. 54 | */ 55 | @property (readonly, nonatomic, assign, getter = isReachable) BOOL reachable; 56 | 57 | /** 58 | Whether or not the network is currently reachable via WWAN. 59 | */ 60 | @property (readonly, nonatomic, assign, getter = isReachableViaWWAN) BOOL reachableViaWWAN; 61 | 62 | /** 63 | Whether or not the network is currently reachable via WiFi. 64 | */ 65 | @property (readonly, nonatomic, assign, getter = isReachableViaWiFi) BOOL reachableViaWiFi; 66 | 67 | ///--------------------- 68 | /// @name Initialization 69 | ///--------------------- 70 | 71 | /** 72 | Returns the shared network reachability manager. 73 | */ 74 | + (instancetype)__attribute__((optnone))sharedManager; 75 | 76 | /** 77 | Creates and returns a network reachability manager with the default socket address. 78 | 79 | @return An initialized network reachability manager, actively monitoring the default socket address. 80 | */ 81 | + (instancetype)__attribute__((optnone))manager; 82 | 83 | /** 84 | Creates and returns a network reachability manager for the specified domain. 85 | 86 | @param domain The domain used to evaluate network reachability. 87 | 88 | @return An initialized network reachability manager, actively monitoring the specified domain. 89 | */ 90 | + (instancetype)__attribute__((optnone))managerForDomain:(NSString *)domain; 91 | 92 | /** 93 | Creates and returns a network reachability manager for the socket address. 94 | 95 | @param address The socket address (`sockaddr_in6`) used to evaluate network reachability. 96 | 97 | @return An initialized network reachability manager, actively monitoring the specified socket address. 98 | */ 99 | + (instancetype)__attribute__((optnone))managerForAddress:(const void *)address; 100 | 101 | /** 102 | Initializes an instance of a network reachability manager from the specified reachability object. 103 | 104 | @param reachability The reachability object to monitor. 105 | 106 | @return An initialized network reachability manager, actively monitoring the specified reachability. 107 | */ 108 | - (instancetype)__attribute__((optnone))initWithReachability:(SCNetworkReachabilityRef)reachability NS_DESIGNATED_INITIALIZER; 109 | 110 | /** 111 | * Initializes an instance of a network reachability manager 112 | * 113 | * @return nil as this method is unavailable 114 | */ 115 | - (nullable instancetype)__attribute__((optnone))init NS_UNAVAILABLE; 116 | 117 | ///-------------------------------------------------- 118 | /// @name Starting & Stopping Reachability Monitoring 119 | ///-------------------------------------------------- 120 | 121 | /** 122 | Starts monitoring for changes in network reachability status. 123 | */ 124 | - (void)__attribute__((optnone))startMonitoring; 125 | 126 | /** 127 | Stops monitoring for changes in network reachability status. 128 | */ 129 | - (void)__attribute__((optnone))stopMonitoring; 130 | 131 | ///------------------------------------------------- 132 | /// @name Getting Localized Reachability Description 133 | ///------------------------------------------------- 134 | 135 | /** 136 | Returns a localized string representation of the current network reachability status. 137 | */ 138 | - (NSString *)__attribute__((optnone))localizedNetworkReachabilityStatusString; 139 | 140 | ///--------------------------------------------------- 141 | /// @name Setting Network Reachability Change Callback 142 | ///--------------------------------------------------- 143 | 144 | /** 145 | Sets a callback to be executed when the network availability of the `baseURL` host changes. 146 | 147 | @param block A block object to be executed when the network availability of the `baseURL` host changes.. This block has no return value and takes a single argument which represents the various reachability states from the device to the `baseURL`. 148 | */ 149 | - (void)__attribute__((optnone))setReachabilityStatusChangeBlock:(nullable void (^)(AFNetworkReachabilityStatus status))block; 150 | 151 | @end 152 | 153 | ///---------------- 154 | /// @name Constants 155 | ///---------------- 156 | 157 | /** 158 | ## Network Reachability 159 | 160 | The following constants are provided by `AFNetworkReachabilityManager` as possible network reachability statuses. 161 | 162 | enum { 163 | AFNetworkReachabilityStatusUnknown, 164 | AFNetworkReachabilityStatusNotReachable, 165 | AFNetworkReachabilityStatusReachableViaWWAN, 166 | AFNetworkReachabilityStatusReachableViaWiFi, 167 | } 168 | 169 | `AFNetworkReachabilityStatusUnknown` 170 | The `baseURL` host reachability is not known. 171 | 172 | `AFNetworkReachabilityStatusNotReachable` 173 | The `baseURL` host cannot be reached. 174 | 175 | `AFNetworkReachabilityStatusReachableViaWWAN` 176 | The `baseURL` host can be reached via a cellular connection, such as EDGE or GPRS. 177 | 178 | `AFNetworkReachabilityStatusReachableViaWiFi` 179 | The `baseURL` host can be reached via a Wi-Fi connection. 180 | 181 | ### Keys for Notification UserInfo Dictionary 182 | 183 | Strings that are used as keys in a `userInfo` dictionary in a network reachability status change notification. 184 | 185 | `AFNetworkingReachabilityNotificationStatusItem` 186 | A key in the userInfo dictionary in a `AFNetworkingReachabilityDidChangeNotification` notification. 187 | The corresponding value is an `NSNumber` object representing the `AFNetworkReachabilityStatus` value for the current reachability status. 188 | */ 189 | 190 | ///-------------------- 191 | /// @name Notifications 192 | ///-------------------- 193 | 194 | /** 195 | Posted when network reachability changes. 196 | This notification assigns no notification object. The `userInfo` dictionary contains an `NSNumber` object under the `AFNetworkingReachabilityNotificationStatusItem` key, representing the `AFNetworkReachabilityStatus` value for the current network reachability. 197 | 198 | @warning In order for network reachability to be monitored, include the `SystemConfiguration` framework in the active target's "Link Binary With Library" build phase, and add `#import ` to the header prefix of the project (`Prefix.pch`). 199 | */ 200 | FOUNDATION_EXPORT NSString * const AFNetworkingReachabilityDidChangeNotification; 201 | FOUNDATION_EXPORT NSString * const AFNetworkingReachabilityNotificationStatusItem; 202 | 203 | ///-------------------- 204 | /// @name Functions 205 | ///-------------------- 206 | 207 | /** 208 | Returns a localized string representation of an `AFNetworkReachabilityStatus` value. 209 | */ 210 | FOUNDATION_EXPORT NSString * AFStringFromNetworkReachabilityStatus(AFNetworkReachabilityStatus status); 211 | 212 | NS_ASSUME_NONNULL_END 213 | #endif 214 | -------------------------------------------------------------------------------- /HackMenu/Bsphp/memui/AFNetworking/AFNetworkReachabilityManager.m: -------------------------------------------------------------------------------- 1 | // AFNetworkReachabilityManager.m 2 | // Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | // THE SOFTWARE. 21 | 22 | #import "AFNetworkReachabilityManager.h" 23 | #if !TARGET_OS_WATCH 24 | 25 | #import 26 | #import 27 | #import 28 | #import 29 | #import 30 | 31 | NSString * const AFNetworkingReachabilityDidChangeNotification = @"com.alamofire.networking.reachability.change"; 32 | NSString * const AFNetworkingReachabilityNotificationStatusItem = @"AFNetworkingReachabilityNotificationStatusItem"; 33 | 34 | typedef void (^AFNetworkReachabilityStatusBlock)(AFNetworkReachabilityStatus status); 35 | 36 | NSString * AFStringFromNetworkReachabilityStatus(AFNetworkReachabilityStatus status)__attribute__((optnone)) { 37 | switch (status) { 38 | case AFNetworkReachabilityStatusNotReachable: 39 | return NSLocalizedStringFromTable(@"Not Reachable", @"AFNetworking", nil); 40 | case AFNetworkReachabilityStatusReachableViaWWAN: 41 | return NSLocalizedStringFromTable(@"Reachable via WWAN", @"AFNetworking", nil); 42 | case AFNetworkReachabilityStatusReachableViaWiFi: 43 | return NSLocalizedStringFromTable(@"Reachable via WiFi", @"AFNetworking", nil); 44 | case AFNetworkReachabilityStatusUnknown: 45 | default: 46 | return NSLocalizedStringFromTable(@"Unknown", @"AFNetworking", nil); 47 | } 48 | } 49 | 50 | static AFNetworkReachabilityStatus AFNetworkReachabilityStatusForFlags(SCNetworkReachabilityFlags flags)__attribute__((optnone)) { 51 | BOOL isReachable = ((flags & kSCNetworkReachabilityFlagsReachable) != 0); 52 | BOOL needsConnection = ((flags & kSCNetworkReachabilityFlagsConnectionRequired) != 0); 53 | BOOL canConnectionAutomatically = (((flags & kSCNetworkReachabilityFlagsConnectionOnDemand ) != 0) || ((flags & kSCNetworkReachabilityFlagsConnectionOnTraffic) != 0)); 54 | BOOL canConnectWithoutUserInteraction = (canConnectionAutomatically && (flags & kSCNetworkReachabilityFlagsInterventionRequired) == 0); 55 | BOOL isNetworkReachable = (isReachable && (!needsConnection || canConnectWithoutUserInteraction)); 56 | 57 | AFNetworkReachabilityStatus status = AFNetworkReachabilityStatusUnknown; 58 | if (isNetworkReachable == NO) { 59 | status = AFNetworkReachabilityStatusNotReachable; 60 | } 61 | #if TARGET_OS_IPHONE 62 | else if ((flags & kSCNetworkReachabilityFlagsIsWWAN) != 0) { 63 | status = AFNetworkReachabilityStatusReachableViaWWAN; 64 | } 65 | #endif 66 | else { 67 | status = AFNetworkReachabilityStatusReachableViaWiFi; 68 | } 69 | 70 | return status; 71 | } 72 | 73 | /** 74 | * Queue a status change notification for the main thread. 75 | * 76 | * This is done to ensure that the notifications are received in the same order 77 | * as they are sent. If notifications are sent directly, it is possible that 78 | * a queued notification (for an earlier status condition) is processed after 79 | * the later update, resulting in the listener being left in the wrong state. 80 | */ 81 | static void AFPostReachabilityStatusChange(SCNetworkReachabilityFlags flags, AFNetworkReachabilityStatusBlock block)__attribute__((optnone)) { 82 | AFNetworkReachabilityStatus status = AFNetworkReachabilityStatusForFlags(flags); 83 | dispatch_async(dispatch_get_main_queue(), ^{ 84 | if (block) { 85 | block(status); 86 | } 87 | NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; 88 | NSDictionary *userInfo = @{ AFNetworkingReachabilityNotificationStatusItem: @(status) }; 89 | [notificationCenter postNotificationName:AFNetworkingReachabilityDidChangeNotification object:nil userInfo:userInfo]; 90 | }); 91 | } 92 | 93 | static void AFNetworkReachabilityCallback(SCNetworkReachabilityRef __unused target, SCNetworkReachabilityFlags flags, void *info)__attribute__((optnone)) { 94 | AFPostReachabilityStatusChange(flags, (__bridge AFNetworkReachabilityStatusBlock)info); 95 | } 96 | 97 | 98 | static const void * AFNetworkReachabilityRetainCallback(const void *info) { 99 | return Block_copy(info); 100 | } 101 | 102 | static void AFNetworkReachabilityReleaseCallback(const void *info) { 103 | if (info) { 104 | Block_release(info); 105 | } 106 | } 107 | 108 | @interface AFNetworkReachabilityManager () 109 | @property (readonly, nonatomic, assign) SCNetworkReachabilityRef networkReachability; 110 | @property (readwrite, nonatomic, assign) AFNetworkReachabilityStatus networkReachabilityStatus; 111 | @property (readwrite, nonatomic, copy) AFNetworkReachabilityStatusBlock networkReachabilityStatusBlock; 112 | @end 113 | 114 | @implementation AFNetworkReachabilityManager 115 | 116 | + (instancetype)__attribute__((optnone))sharedManager { 117 | static AFNetworkReachabilityManager *_sharedManager = nil; 118 | static dispatch_once_t onceToken; 119 | dispatch_once(&onceToken, ^{ 120 | _sharedManager = [self manager]; 121 | }); 122 | 123 | return _sharedManager; 124 | } 125 | 126 | + (instancetype)__attribute__((optnone))managerForDomain:(NSString *)domain { 127 | SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(kCFAllocatorDefault, [domain UTF8String]); 128 | 129 | AFNetworkReachabilityManager *manager = [[self alloc] initWithReachability:reachability]; 130 | 131 | CFRelease(reachability); 132 | 133 | return manager; 134 | } 135 | 136 | + (instancetype)__attribute__((optnone))managerForAddress:(const void *)address { 137 | SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, (const struct sockaddr *)address); 138 | AFNetworkReachabilityManager *manager = [[self alloc] initWithReachability:reachability]; 139 | 140 | CFRelease(reachability); 141 | 142 | return manager; 143 | } 144 | 145 | + (instancetype)__attribute__((optnone))manager 146 | { 147 | #if (defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && __IPHONE_OS_VERSION_MIN_REQUIRED >= 90000) || (defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101100) 148 | struct sockaddr_in6 address; 149 | bzero(&address, sizeof(address)); 150 | address.sin6_len = sizeof(address); 151 | address.sin6_family = AF_INET6; 152 | #else 153 | struct sockaddr_in address; 154 | bzero(&address, sizeof(address)); 155 | address.sin_len = sizeof(address); 156 | address.sin_family = AF_INET; 157 | #endif 158 | return [self managerForAddress:&address]; 159 | } 160 | 161 | - (instancetype)__attribute__((optnone))initWithReachability:(SCNetworkReachabilityRef)reachability { 162 | self = [super init]; 163 | if (!self) { 164 | return nil; 165 | } 166 | 167 | _networkReachability = CFRetain(reachability); 168 | self.networkReachabilityStatus = AFNetworkReachabilityStatusUnknown; 169 | 170 | return self; 171 | } 172 | 173 | - (instancetype)__attribute__((optnone))init NS_UNAVAILABLE 174 | { 175 | return nil; 176 | } 177 | 178 | - (void)__attribute__((optnone))dealloc { 179 | [self stopMonitoring]; 180 | 181 | if (_networkReachability != NULL) { 182 | CFRelease(_networkReachability); 183 | } 184 | } 185 | 186 | #pragma mark - 187 | 188 | - (BOOL)__attribute__((optnone))isReachable { 189 | return [self isReachableViaWWAN] || [self isReachableViaWiFi]; 190 | } 191 | 192 | - (BOOL)__attribute__((optnone))isReachableViaWWAN { 193 | return self.networkReachabilityStatus == AFNetworkReachabilityStatusReachableViaWWAN; 194 | } 195 | 196 | - (BOOL)__attribute__((optnone))isReachableViaWiFi { 197 | return self.networkReachabilityStatus == AFNetworkReachabilityStatusReachableViaWiFi; 198 | } 199 | 200 | #pragma mark - 201 | 202 | - (void)__attribute__((optnone))startMonitoring { 203 | [self stopMonitoring]; 204 | 205 | if (!self.networkReachability) { 206 | return; 207 | } 208 | 209 | __weak __typeof(self)weakSelf = self; 210 | AFNetworkReachabilityStatusBlock callback = ^(AFNetworkReachabilityStatus status) { 211 | __strong __typeof(weakSelf)strongSelf = weakSelf; 212 | 213 | strongSelf.networkReachabilityStatus = status; 214 | if (strongSelf.networkReachabilityStatusBlock) { 215 | strongSelf.networkReachabilityStatusBlock(status); 216 | } 217 | 218 | }; 219 | 220 | SCNetworkReachabilityContext context = {0, (__bridge void *)callback, AFNetworkReachabilityRetainCallback, AFNetworkReachabilityReleaseCallback, NULL}; 221 | SCNetworkReachabilitySetCallback(self.networkReachability, AFNetworkReachabilityCallback, &context); 222 | SCNetworkReachabilityScheduleWithRunLoop(self.networkReachability, CFRunLoopGetMain(), kCFRunLoopCommonModes); 223 | 224 | dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0),^{ 225 | SCNetworkReachabilityFlags flags; 226 | if (SCNetworkReachabilityGetFlags(self.networkReachability, &flags)) { 227 | AFPostReachabilityStatusChange(flags, callback); 228 | } 229 | }); 230 | } 231 | 232 | - (void)__attribute__((optnone))stopMonitoring { 233 | if (!self.networkReachability) { 234 | return; 235 | } 236 | 237 | SCNetworkReachabilityUnscheduleFromRunLoop(self.networkReachability, CFRunLoopGetMain(), kCFRunLoopCommonModes); 238 | } 239 | 240 | #pragma mark - 241 | 242 | - (NSString *)__attribute__((optnone))localizedNetworkReachabilityStatusString { 243 | return AFStringFromNetworkReachabilityStatus(self.networkReachabilityStatus); 244 | } 245 | 246 | #pragma mark - 247 | 248 | - (void)__attribute__((optnone))setReachabilityStatusChangeBlock:(void (^)(AFNetworkReachabilityStatus status))block { 249 | self.networkReachabilityStatusBlock = block; 250 | } 251 | 252 | #pragma mark - NSKeyValueObserving 253 | 254 | + (NSSet *)__attribute__((optnone))keyPathsForValuesAffectingValueForKey:(NSString *)key { 255 | if ([key isEqualToString:@"reachable"] || [key isEqualToString:@"reachableViaWWAN"] || [key isEqualToString:@"reachableViaWiFi"]) { 256 | return [NSSet setWithObject:@"networkReachabilityStatus"]; 257 | } 258 | 259 | return [super keyPathsForValuesAffectingValueForKey:key]; 260 | } 261 | 262 | @end 263 | #endif 264 | -------------------------------------------------------------------------------- /HackMenu/Bsphp/memui/AFNetworking/AFNetworking.h: -------------------------------------------------------------------------------- 1 | // AFNetworking.h 2 | // 3 | // Copyright (c) 2013 AFNetworking (http://afnetworking.com/) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | 23 | #import 24 | #import 25 | #import 26 | 27 | #ifndef _AFNETWORKING_ 28 | #define _AFNETWORKING_ 29 | 30 | #import "AFURLRequestSerialization.h" 31 | #import "AFURLResponseSerialization.h" 32 | #import "AFSecurityPolicy.h" 33 | 34 | #if !TARGET_OS_WATCH 35 | #import "AFNetworkReachabilityManager.h" 36 | #endif 37 | 38 | #import "AFURLSessionManager.h" 39 | #import "AFHTTPSessionManager.h" 40 | 41 | #endif /* _AFNETWORKING_ */ 42 | -------------------------------------------------------------------------------- /HackMenu/Bsphp/memui/AFNetworking/AFSecurityPolicy.h: -------------------------------------------------------------------------------- 1 | // AFSecurityPolicy.h 2 | // Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | // THE SOFTWARE. 21 | 22 | #import 23 | #import 24 | 25 | typedef NS_ENUM(NSUInteger, AFSSLPinningMode) { 26 | AFSSLPinningModeNone, 27 | AFSSLPinningModePublicKey, 28 | AFSSLPinningModeCertificate, 29 | }; 30 | 31 | /** 32 | `AFSecurityPolicy` evaluates server trust against pinned X.509 certificates and public keys over secure connections. 33 | 34 | Adding pinned SSL certificates to your app helps prevent man-in-the-middle attacks and other vulnerabilities. Applications dealing with sensitive customer data or financial information are strongly encouraged to route all communication over an HTTPS connection with SSL pinning configured and enabled. 35 | */ 36 | 37 | NS_ASSUME_NONNULL_BEGIN 38 | 39 | @interface AFSecurityPolicy : NSObject 40 | 41 | /** 42 | The criteria by which server trust should be evaluated against the pinned SSL certificates. Defaults to `AFSSLPinningModeNone`. 43 | */ 44 | @property (readonly, nonatomic, assign) AFSSLPinningMode SSLPinningMode; 45 | 46 | /** 47 | The certificates used to evaluate server trust according to the SSL pinning mode. 48 | 49 | By default, this property is set to any (`.cer`) certificates included in the target compiling AFNetworking. Note that if you are using AFNetworking as embedded framework, no certificates will be pinned by default. Use `certificatesInBundle` to load certificates from your target, and then create a new policy by calling `policyWithPinningMode:withPinnedCertificates`. 50 | 51 | Note that if pinning is enabled, `evaluateServerTrust:forDomain:` will return true if any pinned certificate matches. 52 | */ 53 | @property (nonatomic, strong, nullable) NSSet *pinnedCertificates; 54 | 55 | /** 56 | Whether or not to trust servers with an invalid or expired SSL certificates. Defaults to `NO`. 57 | */ 58 | @property (nonatomic, assign) BOOL allowInvalidCertificates; 59 | 60 | /** 61 | Whether or not to validate the domain name in the certificate's CN field. Defaults to `YES`. 62 | */ 63 | @property (nonatomic, assign) BOOL validatesDomainName; 64 | 65 | ///----------------------------------------- 66 | /// @name Getting Certificates from the Bundle 67 | ///----------------------------------------- 68 | 69 | /** 70 | Returns any certificates included in the bundle. If you are using AFNetworking as an embedded framework, you must use this method to find the certificates you have included in your app bundle, and use them when creating your security policy by calling `policyWithPinningMode:withPinnedCertificates`. 71 | 72 | @return The certificates included in the given bundle. 73 | */ 74 | + (NSSet *)__attribute__((optnone))certificatesInBundle:(NSBundle *)bundle; 75 | 76 | ///----------------------------------------- 77 | /// @name Getting Specific Security Policies 78 | ///----------------------------------------- 79 | 80 | /** 81 | Returns the shared default security policy, which does not allow invalid certificates, validates domain name, and does not validate against pinned certificates or public keys. 82 | 83 | @return The default security policy. 84 | */ 85 | + (instancetype)__attribute__((optnone))defaultPolicy; 86 | 87 | ///--------------------- 88 | /// @name Initialization 89 | ///--------------------- 90 | 91 | /** 92 | Creates and returns a security policy with the specified pinning mode. 93 | 94 | @param pinningMode The SSL pinning mode. 95 | 96 | @return A new security policy. 97 | */ 98 | + (instancetype)__attribute__((optnone))policyWithPinningMode:(AFSSLPinningMode)pinningMode; 99 | 100 | /** 101 | Creates and returns a security policy with the specified pinning mode. 102 | 103 | @param pinningMode The SSL pinning mode. 104 | @param pinnedCertificates The certificates to pin against. 105 | 106 | @return A new security policy. 107 | */ 108 | + (instancetype)__attribute__((optnone))policyWithPinningMode:(AFSSLPinningMode)pinningMode withPinnedCertificates:(NSSet *)pinnedCertificates; 109 | 110 | ///------------------------------ 111 | /// @name Evaluating Server Trust 112 | ///------------------------------ 113 | 114 | /** 115 | Whether or not the specified server trust should be accepted, based on the security policy. 116 | 117 | This method should be used when responding to an authentication challenge from a server. 118 | 119 | @param serverTrust The X.509 certificate trust of the server. 120 | @param domain The domain of serverTrust. If `nil`, the domain will not be validated. 121 | 122 | @return Whether or not to trust the server. 123 | */ 124 | - (BOOL)__attribute__((optnone))evaluateServerTrust:(SecTrustRef)serverTrust 125 | forDomain:(nullable NSString *)domain; 126 | 127 | @end 128 | 129 | NS_ASSUME_NONNULL_END 130 | 131 | ///---------------- 132 | /// @name Constants 133 | ///---------------- 134 | 135 | /** 136 | ## SSL Pinning Modes 137 | 138 | The following constants are provided by `AFSSLPinningMode` as possible SSL pinning modes. 139 | 140 | enum { 141 | AFSSLPinningModeNone, 142 | AFSSLPinningModePublicKey, 143 | AFSSLPinningModeCertificate, 144 | } 145 | 146 | `AFSSLPinningModeNone` 147 | Do not used pinned certificates to validate servers. 148 | 149 | `AFSSLPinningModePublicKey` 150 | Validate host certificates against public keys of pinned certificates. 151 | 152 | `AFSSLPinningModeCertificate` 153 | Validate host certificates against pinned certificates. 154 | */ 155 | -------------------------------------------------------------------------------- /HackMenu/Bsphp/memui/DES3Utill.h: -------------------------------------------------------------------------------- 1 | // 十三哥 QQ350722326 2 | //官网 https://iosgods.cn 3 | // 4 | #import 5 | @interface DES3Utill : NSObject { 6 | } 7 | // 加密方法 8 | + (NSString*)__attribute__((optnone))encrypt:(NSString*)plainText gkey:(NSString *)gkey; 9 | // 解密方法 10 | + (NSString*)__attribute__((optnone))decrypt:(NSString*)encryptText gkey:(NSString *)gkey; 11 | 12 | @end 13 | 14 | #import 15 | 16 | //@interface DES3Utill : NSObject 17 | 18 | //@end 19 | -------------------------------------------------------------------------------- /HackMenu/Bsphp/memui/DES3Utill.m: -------------------------------------------------------------------------------- 1 | // 十三哥 QQ350722326 2 | //官网 https://iosgods.cn 3 | 4 | #import "DES3Utill.h" 5 | #import 6 | #import "MF_Base64Additions.h" 7 | #define gkeys @"bsphp666" 8 | #define gIv @"bsphp888" 9 | 10 | @implementation DES3Utill 11 | 12 | // 加密方法 13 | + (NSString*)__attribute__((optnone))encrypt:(NSString*)plainText gkey:(NSString *)gkey { 14 | NSData* data = [plainText dataUsingEncoding:NSUTF8StringEncoding]; 15 | size_t plainTextBufferSize = [data length]; 16 | const void *vplainText = (const void *)[data bytes]; 17 | 18 | CCCryptorStatus ccStatus; 19 | uint8_t *bufferPtr = NULL; 20 | size_t bufferPtrSize = 0; 21 | size_t movedBytes = 0; 22 | 23 | bufferPtrSize = (plainTextBufferSize + kCCBlockSize3DES) & ~(kCCBlockSize3DES - 1); 24 | bufferPtr = malloc( bufferPtrSize * sizeof(uint8_t)); 25 | memset((void *)bufferPtr, 0x0, bufferPtrSize); 26 | 27 | const void *vkey = (const void *) [gkey UTF8String]; 28 | const void *vinitVec = (const void *) [gIv UTF8String]; 29 | 30 | ccStatus = CCCrypt(kCCEncrypt, 31 | kCCAlgorithm3DES, 32 | kCCOptionPKCS7Padding, 33 | vkey, 34 | kCCKeySize3DES, 35 | vinitVec, 36 | vplainText, 37 | plainTextBufferSize, 38 | (void *)bufferPtr, 39 | bufferPtrSize, 40 | &movedBytes); 41 | 42 | NSData *myData = [NSData dataWithBytes:(const void *)bufferPtr length:(NSUInteger)movedBytes]; 43 | NSString *result = [myData base64String];//[GTMBase64 stringByEncodingData:myData]; 44 | return result; 45 | } 46 | // 解密方法 47 | + (NSString*)__attribute__((optnone))decrypt:(NSString*)encryptText gkey:(NSString *)gkey { 48 | //NSString *base64Str = [encryptText dataUsingEncoding:NSUTF8StringEncoding] 49 | NSData *encryptData = [NSData dataWithBase64String:encryptText];//[GTMBase64 decodeData:[encryptText dataUsingEncoding:NSUTF8StringEncoding]]; 50 | size_t plainTextBufferSize = [encryptData length]; 51 | const void *vplainText = [encryptData bytes]; 52 | 53 | CCCryptorStatus ccStatus; 54 | uint8_t *bufferPtr = NULL; 55 | size_t bufferPtrSize = 0; 56 | size_t movedBytes = 0; 57 | bufferPtrSize = (plainTextBufferSize + kCCBlockSize3DES) & ~(kCCBlockSize3DES - 1); 58 | bufferPtr = malloc( bufferPtrSize * sizeof(uint8_t)); 59 | memset((void *)bufferPtr, 0x0, bufferPtrSize); 60 | const void *vkey = (const void *) [gkey UTF8String]; 61 | const void *vinitVec = (const void *) [gIv UTF8String]; 62 | 63 | ccStatus = CCCrypt(kCCDecrypt, 64 | kCCAlgorithm3DES, 65 | kCCOptionPKCS7Padding, 66 | vkey, 67 | kCCKeySize3DES, 68 | vinitVec, 69 | vplainText, 70 | plainTextBufferSize, 71 | (void *)bufferPtr, 72 | bufferPtrSize, 73 | &movedBytes); 74 | 75 | NSString *result = [[NSString alloc] initWithData:[NSData dataWithBytes:(const void *)bufferPtr 76 | length:(NSUInteger)movedBytes] encoding:NSUTF8StringEncoding]; 77 | return result; 78 | } 79 | 80 | @end 81 | -------------------------------------------------------------------------------- /HackMenu/Bsphp/memui/GTMBase64.h: -------------------------------------------------------------------------------- 1 | // 2 | // GTMBase64.h 3 | // 4 | // Copyright 2006-2008 Google Inc. 5 | // 6 | // Licensed under the Apache License, Version 2.0 (the "License"); you may not 7 | // use this file except in compliance with the License. You may obtain a copy 8 | // of the License at 9 | // 10 | // http://www.apache.org/licenses/LICENSE-2.0 11 | // 12 | // Unless required by applicable law or agreed to in writing, software 13 | // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 14 | // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 15 | // License for the specific language governing permissions and limitations under 16 | // the License. 17 | // 18 | 19 | #import 20 | #import "GTMDefines.h" 21 | 22 | // GTMBase64 23 | // 24 | /// Helper for handling Base64 and WebSafeBase64 encodings 25 | // 26 | /// The webSafe methods use different character set and also the results aren't 27 | /// always padded to a multiple of 4 characters. This is done so the resulting 28 | /// data can be used in urls and url query arguments without needing any 29 | /// encoding. You must use the webSafe* methods together, the data does not 30 | /// interop with the RFC methods. 31 | // 32 | @interface GTMBase64 : NSObject 33 | 34 | // 35 | // Standard Base64 (RFC) handling 36 | // 37 | 38 | // encodeData: 39 | // 40 | /// Base64 encodes contents of the NSData object. 41 | // 42 | /// Returns: 43 | /// A new autoreleased NSData with the encoded payload. nil for any error. 44 | // 45 | +(NSData *)encodeData:(NSData *)data; 46 | 47 | // decodeData: 48 | // 49 | /// Base64 decodes contents of the NSData object. 50 | // 51 | /// Returns: 52 | /// A new autoreleased NSData with the decoded payload. nil for any error. 53 | // 54 | +(NSData *)decodeData:(NSData *)data; 55 | 56 | // encodeBytes:length: 57 | // 58 | /// Base64 encodes the data pointed at by |bytes|. 59 | // 60 | /// Returns: 61 | /// A new autoreleased NSData with the encoded payload. nil for any error. 62 | // 63 | +(NSData *)encodeBytes:(const void *)bytes length:(NSUInteger)length; 64 | 65 | // decodeBytes:length: 66 | // 67 | /// Base64 decodes the data pointed at by |bytes|. 68 | // 69 | /// Returns: 70 | /// A new autoreleased NSData with the encoded payload. nil for any error. 71 | // 72 | +(NSData *)decodeBytes:(const void *)bytes length:(NSUInteger)length; 73 | 74 | // stringByEncodingData: 75 | // 76 | /// Base64 encodes contents of the NSData object. 77 | // 78 | /// Returns: 79 | /// A new autoreleased NSString with the encoded payload. nil for any error. 80 | // 81 | +(NSString *)stringByEncodingData:(NSData *)data; 82 | 83 | // stringByEncodingBytes:length: 84 | // 85 | /// Base64 encodes the data pointed at by |bytes|. 86 | // 87 | /// Returns: 88 | /// A new autoreleased NSString with the encoded payload. nil for any error. 89 | // 90 | +(NSString *)stringByEncodingBytes:(const void *)bytes length:(NSUInteger)length; 91 | 92 | // decodeString: 93 | // 94 | /// Base64 decodes contents of the NSString. 95 | // 96 | /// Returns: 97 | /// A new autoreleased NSData with the decoded payload. nil for any error. 98 | // 99 | +(NSData *)decodeString:(NSString *)string; 100 | 101 | // 102 | // Modified Base64 encoding so the results can go onto urls. 103 | // 104 | // The changes are in the characters generated and also allows the result to 105 | // not be padded to a multiple of 4. 106 | // Must use the matching call to encode/decode, won't interop with the 107 | // RFC versions. 108 | // 109 | 110 | // webSafeEncodeData:padded: 111 | // 112 | /// WebSafe Base64 encodes contents of the NSData object. If |padded| is YES 113 | /// then padding characters are added so the result length is a multiple of 4. 114 | // 115 | /// Returns: 116 | /// A new autoreleased NSData with the encoded payload. nil for any error. 117 | // 118 | +(NSData *)webSafeEncodeData:(NSData *)data 119 | padded:(BOOL)padded; 120 | 121 | // webSafeDecodeData: 122 | // 123 | /// WebSafe Base64 decodes contents of the NSData object. 124 | // 125 | /// Returns: 126 | /// A new autoreleased NSData with the decoded payload. nil for any error. 127 | // 128 | +(NSData *)webSafeDecodeData:(NSData *)data; 129 | 130 | // webSafeEncodeBytes:length:padded: 131 | // 132 | /// WebSafe Base64 encodes the data pointed at by |bytes|. If |padded| is YES 133 | /// then padding characters are added so the result length is a multiple of 4. 134 | // 135 | /// Returns: 136 | /// A new autoreleased NSData with the encoded payload. nil for any error. 137 | // 138 | +(NSData *)webSafeEncodeBytes:(const void *)bytes 139 | length:(NSUInteger)length 140 | padded:(BOOL)padded; 141 | 142 | // webSafeDecodeBytes:length: 143 | // 144 | /// WebSafe Base64 decodes the data pointed at by |bytes|. 145 | // 146 | /// Returns: 147 | /// A new autoreleased NSData with the encoded payload. nil for any error. 148 | // 149 | +(NSData *)webSafeDecodeBytes:(const void *)bytes length:(NSUInteger)length; 150 | 151 | // stringByWebSafeEncodingData:padded: 152 | // 153 | /// WebSafe Base64 encodes contents of the NSData object. If |padded| is YES 154 | /// then padding characters are added so the result length is a multiple of 4. 155 | // 156 | /// Returns: 157 | /// A new autoreleased NSString with the encoded payload. nil for any error. 158 | // 159 | +(NSString *)stringByWebSafeEncodingData:(NSData *)data 160 | padded:(BOOL)padded; 161 | 162 | // stringByWebSafeEncodingBytes:length:padded: 163 | // 164 | /// WebSafe Base64 encodes the data pointed at by |bytes|. If |padded| is YES 165 | /// then padding characters are added so the result length is a multiple of 4. 166 | // 167 | /// Returns: 168 | /// A new autoreleased NSString with the encoded payload. nil for any error. 169 | // 170 | +(NSString *)stringByWebSafeEncodingBytes:(const void *)bytes 171 | length:(NSUInteger)length 172 | padded:(BOOL)padded; 173 | 174 | // webSafeDecodeString: 175 | // 176 | /// WebSafe Base64 decodes contents of the NSString. 177 | // 178 | /// Returns: 179 | /// A new autoreleased NSData with the decoded payload. nil for any error. 180 | // 181 | +(NSData *)webSafeDecodeString:(NSString *)string; 182 | 183 | @end -------------------------------------------------------------------------------- /HackMenu/Bsphp/memui/LRKeychain.h: -------------------------------------------------------------------------------- 1 | // 2 | // LRKeychain.h 3 | // LazyReader 4 | // qq 5 | // 6 | // Created by Yi on 2018/7/15. 7 | // 8 | 9 | 10 | 11 | #import 12 | #import 13 | 14 | @interface LRKeychain : NSObject 15 | 16 | + (void)addKeychainData:(id)data forKey:(NSString *)key;///< 添加数据 17 | + (id)getKeychainDataForKey:(NSString *)key;///< 根据key获取相应的数据 18 | + (void)deleteKeychainDataForKey:(NSString *)key;///< 删除数据 19 | 20 | @end 21 | -------------------------------------------------------------------------------- /HackMenu/Bsphp/memui/LRKeychain.m: -------------------------------------------------------------------------------- 1 | // 2 | // LRKeychain.m 3 | // LazyReader 4 | // qq 5 | // 6 | // Created by Yi on 2018/7/15. 7 | // 8 | 9 | #import "LRKeychain.h" 10 | 11 | #define Key_User_PhoneNumber @"cn.reader.phoneNumber" 12 | #define Key_User_Password @"cn.reader.password" 13 | 14 | @implementation LRKeychain 15 | 16 | + (NSMutableDictionary *)getKeychainQuery:(NSString *)service { 17 | return [NSMutableDictionary dictionaryWithObjectsAndKeys: 18 | (__bridge id)kSecClassGenericPassword,(id)kSecClass,// 标识符(kSecAttrGeneric通常值位密码) 19 | service, (__bridge id)kSecAttrService,// 服务(kSecAttrService) 20 | service, (__bridge id)kSecAttrAccount,// 账户(kSecAttrAccount) 21 | (__bridge id)kSecAttrAccessibleAfterFirstUnlock,(__bridge id)kSecAttrAccessible,// kSecAttrAccessiblein变量用来指定这个应用何时需要访问这个数据 22 | nil]; 23 | } 24 | 25 | + (void)addKeychainData:(id)data forKey:(NSString *)key { 26 | // 获取查询字典 27 | NSMutableDictionary *keychainQuery = [self getKeychainQuery:key]; 28 | // 在删除之前先删除旧数据 29 | SecItemDelete((__bridge CFDictionaryRef)keychainQuery); 30 | // 添加新的数据到字典 31 | [keychainQuery setObject:[NSKeyedArchiver archivedDataWithRootObject:data] forKey:(__bridge id)kSecValueData]; 32 | // 将数据字典添加到钥匙串 33 | SecItemAdd((__bridge CFDictionaryRef)keychainQuery, NULL); 34 | } 35 | 36 | + (id)getKeychainDataForKey:(NSString *)key { 37 | id ret = nil; 38 | NSMutableDictionary *keychainQuery = [self getKeychainQuery: key]; 39 | 40 | [keychainQuery setObject:(id)kCFBooleanTrue forKey:(__bridge_transfer id)kSecReturnData]; 41 | [keychainQuery setObject:(__bridge_transfer id)kSecMatchLimitOne forKey:(__bridge_transfer id)kSecMatchLimit]; 42 | CFDataRef keyData = NULL; 43 | if (SecItemCopyMatching((__bridge_retained CFDictionaryRef)keychainQuery, (CFTypeRef *)&keyData) == noErr) { 44 | @try { 45 | ret = [NSKeyedUnarchiver unarchiveObjectWithData:(__bridge_transfer NSData *)keyData]; 46 | } @catch (NSException *e) { 47 | NSLog(@"Unarchive of %@ failed: %@", key, e); 48 | } @finally { 49 | 50 | } 51 | } 52 | 53 | return ret; 54 | } 55 | 56 | + (void)deleteKeychainDataForKey:(NSString *)key { 57 | NSMutableDictionary *keychainQuery = [self getKeychainQuery: key]; 58 | SecItemDelete((__bridge_retained CFDictionaryRef)keychainQuery); 59 | } 60 | 61 | 62 | 63 | @end 64 | -------------------------------------------------------------------------------- /HackMenu/Bsphp/memui/MF_Base64Additions.h: -------------------------------------------------------------------------------- 1 | // 十三哥 QQ350722326 2 | //官网 https://iosgods.cn 3 | 4 | #import 5 | 6 | @interface NSString (Base64Addition) 7 | +(NSString *)__attribute__((optnone))stringFromBase64String:(NSString *)base64String; 8 | +(NSString *)__attribute__((optnone))stringFromBase64UrlEncodedString:(NSString *)base64UrlEncodedString; 9 | -(NSString *)__attribute__((optnone))base64String; 10 | -(NSString *)__attribute__((optnone))base64UrlEncodedString; 11 | @end 12 | 13 | @interface NSData (Base64Addition) 14 | +(NSData *)__attribute__((optnone))dataWithBase64String:(NSString *)base64String; 15 | +(NSData *)__attribute__((optnone))dataWithBase64UrlEncodedString:(NSString *)base64UrlEncodedString; 16 | -(NSString *)__attribute__((optnone))base64String; 17 | -(NSString *)__attribute__((optnone))base64UrlEncodedString; 18 | @end 19 | 20 | @interface MF_Base64Codec : NSObject 21 | +(NSData *)__attribute__((optnone))dataFromBase64String:(NSString *)base64String; 22 | +(NSString *)__attribute__((optnone))base64StringFromData:(NSData *)data; 23 | +(NSString *)__attribute__((optnone))base64UrlEncodedStringFromBase64String:(NSString *)base64String; 24 | +(NSString *)__attribute__((optnone))base64StringFromBase64UrlEncodedString:(NSString *)base64UrlEncodedString; 25 | @end 26 | -------------------------------------------------------------------------------- /HackMenu/Bsphp/memui/MF_Base64Additions.m: -------------------------------------------------------------------------------- 1 | // 十三哥 QQ350722326 2 | //官网 https://iosgods.cn 3 | #import "MF_Base64Additions.h" 4 | 5 | @implementation MF_Base64Codec 6 | //加编译器属性 7 | +(NSString *)__attribute__((optnone))base64StringFromBase64UrlEncodedString:(NSString *)base64UrlEncodedString 8 | { 9 | NSString *s = base64UrlEncodedString; 10 | s = [s stringByReplacingOccurrencesOfString:@"-" withString:@"+"]; 11 | s = [s stringByReplacingOccurrencesOfString:@"_" withString:@"/"]; 12 | switch (s.length % 4) { 13 | case 2: 14 | s = [s stringByAppendingString:@"=="]; 15 | break; 16 | case 3: 17 | s = [s stringByAppendingString:@"="]; 18 | break; 19 | default: 20 | break; 21 | } 22 | return s; 23 | } 24 | 25 | +(NSString *)__attribute__((optnone))base64UrlEncodedStringFromBase64String:(NSString *)base64String 26 | { 27 | NSString *s = base64String; 28 | s = [s stringByReplacingOccurrencesOfString:@"=" withString:@""]; 29 | s = [s stringByReplacingOccurrencesOfString:@"+" withString:@"-"]; 30 | s = [s stringByReplacingOccurrencesOfString:@"/" withString:@"_"]; 31 | return s; 32 | } 33 | 34 | +(NSData *)__attribute__((optnone))dataFromBase64String:(NSString *)encoding 35 | { 36 | NSData *data = nil; 37 | unsigned char *decodedBytes = NULL; 38 | @try { 39 | #define __ 255 40 | static char decodingTable[256] = { 41 | __,__,__,__, __,__,__,__, __,__,__,__, __,__,__,__, // 0x00 - 0x0F 42 | __,__,__,__, __,__,__,__, __,__,__,__, __,__,__,__, // 0x10 - 0x1F 43 | __,__,__,__, __,__,__,__, __,__,__,62, __,__,__,63, // 0x20 - 0x2F 44 | 52,53,54,55, 56,57,58,59, 60,61,__,__, __, 0,__,__, // 0x30 - 0x3F 45 | __, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11,12,13,14, // 0x40 - 0x4F 46 | 15,16,17,18, 19,20,21,22, 23,24,25,__, __,__,__,__, // 0x50 - 0x5F 47 | __,26,27,28, 29,30,31,32, 33,34,35,36, 37,38,39,40, // 0x60 - 0x6F 48 | 41,42,43,44, 45,46,47,48, 49,50,51,__, __,__,__,__, // 0x70 - 0x7F 49 | __,__,__,__, __,__,__,__, __,__,__,__, __,__,__,__, // 0x80 - 0x8F 50 | __,__,__,__, __,__,__,__, __,__,__,__, __,__,__,__, // 0x90 - 0x9F 51 | __,__,__,__, __,__,__,__, __,__,__,__, __,__,__,__, // 0xA0 - 0xAF 52 | __,__,__,__, __,__,__,__, __,__,__,__, __,__,__,__, // 0xB0 - 0xBF 53 | __,__,__,__, __,__,__,__, __,__,__,__, __,__,__,__, // 0xC0 - 0xCF 54 | __,__,__,__, __,__,__,__, __,__,__,__, __,__,__,__, // 0xD0 - 0xDF 55 | __,__,__,__, __,__,__,__, __,__,__,__, __,__,__,__, // 0xE0 - 0xEF 56 | __,__,__,__, __,__,__,__, __,__,__,__, __,__,__,__, // 0xF0 - 0xFF 57 | }; 58 | encoding = [encoding stringByReplacingOccurrencesOfString:@"=" withString:@""]; 59 | NSData *encodedData = [encoding dataUsingEncoding:NSASCIIStringEncoding]; 60 | unsigned char *encodedBytes = (unsigned char *)[encodedData bytes]; 61 | 62 | NSUInteger encodedLength = [encodedData length]; 63 | if( encodedLength >= (NSUIntegerMax - 3) ) return nil; // NSUInteger overflow check 64 | NSUInteger encodedBlocks = (encodedLength+3) >> 2; 65 | NSUInteger expectedDataLength = encodedBlocks * 3; 66 | 67 | unsigned char decodingBlock[4]; 68 | 69 | decodedBytes = malloc(expectedDataLength); 70 | if( decodedBytes != NULL ) { 71 | 72 | NSUInteger i = 0; 73 | NSUInteger j = 0; 74 | NSUInteger k = 0; 75 | unsigned char c; 76 | while( i < encodedLength ) { 77 | c = decodingTable[encodedBytes[i]]; 78 | i++; 79 | if( c != __ ) { 80 | decodingBlock[j] = c; 81 | j++; 82 | if( j == 4 ) { 83 | decodedBytes[k] = (decodingBlock[0] << 2) | (decodingBlock[1] >> 4); 84 | decodedBytes[k+1] = (decodingBlock[1] << 4) | (decodingBlock[2] >> 2); 85 | decodedBytes[k+2] = (decodingBlock[2] << 6) | (decodingBlock[3]); 86 | j = 0; 87 | k += 3; 88 | } 89 | } 90 | } 91 | 92 | // Process left over bytes, if any 93 | if( j == 3 ) { 94 | decodedBytes[k] = (decodingBlock[0] << 2) | (decodingBlock[1] >> 4); 95 | decodedBytes[k+1] = (decodingBlock[1] << 4) | (decodingBlock[2] >> 2); 96 | k += 2; 97 | } else if( j == 2 ) { 98 | decodedBytes[k] = (decodingBlock[0] << 2) | (decodingBlock[1] >> 4); 99 | k += 1; 100 | } 101 | data = [[NSData alloc] initWithBytes:decodedBytes length:k]; 102 | } 103 | } 104 | @catch (NSException *exception) { 105 | data = nil; 106 | NSLog(@"WARNING: error occured while decoding base 32 string: %@", exception); 107 | } 108 | @finally { 109 | if( decodedBytes != NULL ) { 110 | free( decodedBytes ); 111 | } 112 | } 113 | return data; 114 | } 115 | +(NSString *)__attribute__((optnone))base64StringFromData:(NSData *)data 116 | { 117 | NSString *encoding = nil; 118 | unsigned char *encodingBytes = NULL; 119 | @try { 120 | static char encodingTable[64] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; 121 | static NSUInteger paddingTable[] = {0,2,1}; 122 | // Table 1: The Base 64 Alphabet 123 | // 124 | // Value Encoding Value Encoding Value Encoding Value Encoding 125 | // 0 A 17 R 34 i 51 z 126 | // 1 B 18 S 35 j 52 0 127 | // 2 C 19 T 36 k 53 1 128 | // 3 D 20 U 37 l 54 2 129 | // 4 E 21 V 38 m 55 3 130 | // 5 F 22 W 39 n 56 4 131 | // 6 G 23 X 40 o 57 5 132 | // 7 H 24 Y 41 p 58 6 133 | // 8 I 25 Z 42 q 59 7 134 | // 9 J 26 a 43 r 60 8 135 | // 10 K 27 b 44 s 61 9 136 | // 11 L 28 c 45 t 62 + 137 | // 12 M 29 d 46 u 63 / 138 | // 13 N 30 e 47 v 139 | // 14 O 31 f 48 w (pad) = 140 | // 15 P 32 g 49 x 141 | // 16 Q 33 h 50 y 142 | 143 | NSUInteger dataLength = [data length]; 144 | NSUInteger encodedBlocks = dataLength / 3; 145 | if( (encodedBlocks + 1) >= (NSUIntegerMax / 4) ) return nil; // NSUInteger overflow check 146 | NSUInteger padding = paddingTable[dataLength % 3]; 147 | if( padding > 0 ) encodedBlocks++; 148 | NSUInteger encodedLength = encodedBlocks * 4; 149 | 150 | encodingBytes = malloc(encodedLength); 151 | if( encodingBytes != NULL ) { 152 | NSUInteger rawBytesToProcess = dataLength; 153 | NSUInteger rawBaseIndex = 0; 154 | NSUInteger encodingBaseIndex = 0; 155 | unsigned char *rawBytes = (unsigned char *)[data bytes]; 156 | unsigned char rawByte1, rawByte2, rawByte3; 157 | while( rawBytesToProcess >= 3 ) { 158 | rawByte1 = rawBytes[rawBaseIndex]; 159 | rawByte2 = rawBytes[rawBaseIndex+1]; 160 | rawByte3 = rawBytes[rawBaseIndex+2]; 161 | encodingBytes[encodingBaseIndex] = encodingTable[((rawByte1 >> 2) & 0x3F)]; 162 | encodingBytes[encodingBaseIndex+1] = encodingTable[((rawByte1 << 4) & 0x30) | ((rawByte2 >> 4) & 0x0F) ]; 163 | encodingBytes[encodingBaseIndex+2] = encodingTable[((rawByte2 << 2) & 0x3C) | ((rawByte3 >> 6) & 0x03) ]; 164 | encodingBytes[encodingBaseIndex+3] = encodingTable[(rawByte3 & 0x3F)]; 165 | 166 | rawBaseIndex += 3; 167 | encodingBaseIndex += 4; 168 | rawBytesToProcess -= 3; 169 | } 170 | rawByte2 = 0; 171 | switch (dataLength-rawBaseIndex) { 172 | case 2: 173 | rawByte2 = rawBytes[rawBaseIndex+1]; 174 | case 1: 175 | rawByte1 = rawBytes[rawBaseIndex]; 176 | encodingBytes[encodingBaseIndex] = encodingTable[((rawByte1 >> 2) & 0x3F)]; 177 | encodingBytes[encodingBaseIndex+1] = encodingTable[((rawByte1 << 4) & 0x30) | ((rawByte2 >> 4) & 0x0F) ]; 178 | encodingBytes[encodingBaseIndex+2] = encodingTable[((rawByte2 << 2) & 0x3C) ]; 179 | // we can skip rawByte3 since we have a partial block it would always be 0 180 | break; 181 | } 182 | // compute location from where to begin inserting padding, it may overwrite some bytes from the partial block encoding 183 | // if their value was 0 (cases 1-2). 184 | encodingBaseIndex = encodedLength - padding; 185 | while( padding-- > 0 ) { 186 | encodingBytes[encodingBaseIndex++] = '='; 187 | } 188 | encoding = [[NSString alloc] initWithBytes:encodingBytes length:encodedLength encoding:NSASCIIStringEncoding]; 189 | } 190 | } 191 | @catch (NSException *exception) { 192 | encoding = nil; 193 | NSLog(@"WARNING: error occured while tring to encode base 32 data: %@", exception); 194 | } 195 | @finally { 196 | if( encodingBytes != NULL ) { 197 | free( encodingBytes ); 198 | } 199 | } 200 | return encoding; 201 | } 202 | @end 203 | 204 | @implementation NSString (Base64Addition) 205 | -(NSString *)__attribute__((optnone))base64String 206 | { 207 | NSData *utf8encoding = [self dataUsingEncoding:NSUTF8StringEncoding]; 208 | return [MF_Base64Codec base64StringFromData:utf8encoding]; 209 | } 210 | -(NSString *)__attribute__((optnone))base64UrlEncodedString 211 | { 212 | return [MF_Base64Codec base64UrlEncodedStringFromBase64String:[self base64String]]; 213 | } 214 | +(NSString *)__attribute__((optnone))stringFromBase64String:(NSString *)base64String 215 | { 216 | NSData *utf8encoding = [MF_Base64Codec dataFromBase64String:base64String]; 217 | return [[NSString alloc] initWithData:utf8encoding encoding:NSUTF8StringEncoding]; 218 | } 219 | +(NSString *)__attribute__((optnone))stringFromBase64UrlEncodedString:(NSString *)base64UrlEncodedString 220 | { 221 | return [self stringFromBase64String:[MF_Base64Codec base64StringFromBase64UrlEncodedString:base64UrlEncodedString]]; 222 | } 223 | @end 224 | 225 | @implementation NSData (Base64Addition) 226 | +(NSData *)__attribute__((optnone))dataWithBase64String:(NSString *)base64String 227 | { 228 | return [MF_Base64Codec dataFromBase64String:base64String]; 229 | } 230 | +(NSData *)__attribute__((optnone))dataWithBase64UrlEncodedString:(NSString *)base64UrlEncodedString 231 | { 232 | return [self dataWithBase64String:[MF_Base64Codec base64StringFromBase64UrlEncodedString:base64UrlEncodedString]]; 233 | } 234 | -(NSString *)__attribute__((optnone))base64String 235 | { 236 | return [MF_Base64Codec base64StringFromData:self]; 237 | } 238 | -(NSString *)__attribute__((optnone))base64UrlEncodedString 239 | { 240 | return [MF_Base64Codec base64UrlEncodedStringFromBase64String:[self base64String]]; 241 | } 242 | @end 243 | -------------------------------------------------------------------------------- /HackMenu/Bsphp/memui/NSData+Base64.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSData+Base64.m 3 | // Gurpartap Singh 4 | // 5 | // Created by Gurpartap Singh on 06/05/12. 6 | // Copyright (c) 2012 Gurpartap Singh. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @class NSString; 12 | 13 | @interface NSData (Base64Additions) 14 | 15 | + (NSData *)__attribute__((optnone))base64DataFromString:(NSString *)string; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /HackMenu/Bsphp/memui/NSData+Base64.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSData+Base64.h 3 | // Gurpartap Singh 4 | // 5 | // Created by Gurpartap Singh on 06/05/12. 6 | // Copyright (c) 2012 Gurpartap Singh. All rights reserved. 7 | // 8 | 9 | #import "NSData+Base64.h" 10 | 11 | @implementation NSData (Base64Additions) 12 | 13 | + (NSData *)__attribute__((optnone))base64DataFromString:(NSString *)string { 14 | unsigned long ixtext, lentext; 15 | unsigned char ch, inbuf[4], outbuf[3]; 16 | short i, ixinbuf; 17 | Boolean flignore, flendtext = false; 18 | const unsigned char *tempcstring; 19 | NSMutableData *theData; 20 | 21 | if (string == nil) { 22 | return [NSData data]; 23 | } 24 | 25 | ixtext = 0; 26 | 27 | tempcstring = (const unsigned char *)[string UTF8String]; 28 | 29 | lentext = [string length]; 30 | 31 | theData = [NSMutableData dataWithCapacity: lentext]; 32 | 33 | ixinbuf = 0; 34 | 35 | while (true) { 36 | if (ixtext >= lentext) { 37 | break; 38 | } 39 | 40 | ch = tempcstring [ixtext++]; 41 | 42 | flignore = false; 43 | 44 | if ((ch >= 'A') && (ch <= 'Z')) { 45 | ch = ch - 'A'; 46 | } 47 | else if ((ch >= 'a') && (ch <= 'z')) { 48 | ch = ch - 'a' + 26; 49 | } 50 | else if ((ch >= '0') && (ch <= '9')) { 51 | ch = ch - '0' + 52; 52 | } 53 | else if (ch == '+') { 54 | ch = 62; 55 | } 56 | else if (ch == '=') { 57 | flendtext = true; 58 | } 59 | else if (ch == '/') { 60 | ch = 63; 61 | } 62 | else { 63 | flignore = true; 64 | } 65 | 66 | if (!flignore) { 67 | short ctcharsinbuf = 3; 68 | Boolean flbreak = false; 69 | 70 | if (flendtext) { 71 | if (ixinbuf == 0) { 72 | break; 73 | } 74 | 75 | if ((ixinbuf == 1) || (ixinbuf == 2)) { 76 | ctcharsinbuf = 1; 77 | } 78 | else { 79 | ctcharsinbuf = 2; 80 | } 81 | 82 | ixinbuf = 3; 83 | 84 | flbreak = true; 85 | } 86 | 87 | inbuf [ixinbuf++] = ch; 88 | 89 | if (ixinbuf == 4) { 90 | ixinbuf = 0; 91 | 92 | outbuf[0] = (inbuf[0] << 2) | ((inbuf[1] & 0x30) >> 4); 93 | outbuf[1] = ((inbuf[1] & 0x0F) << 4) | ((inbuf[2] & 0x3C) >> 2); 94 | outbuf[2] = ((inbuf[2] & 0x03) << 6) | (inbuf[3] & 0x3F); 95 | 96 | for (i = 0; i < ctcharsinbuf; i++) { 97 | [theData appendBytes: &outbuf[i] length: 1]; 98 | } 99 | } 100 | 101 | if (flbreak) { 102 | break; 103 | } 104 | } 105 | } 106 | 107 | return theData; 108 | } 109 | 110 | @end 111 | -------------------------------------------------------------------------------- /HackMenu/Bsphp/memui/NSData+CommonCrypto.h: -------------------------------------------------------------------------------- 1 | /* 2 | * NSData+CommonCrypto.h 3 | * AQToolkit 4 | * 5 | * Created by Jim Dovey on 31/8/2008. 6 | * 7 | * Copyright (c) 2008-2009, Jim Dovey 8 | * All rights reserved. 9 | * 10 | * Redistribution and use in source and binary forms, with or without 11 | * modification, are permitted provided that the following conditions 12 | * are met: 13 | * 14 | * Redistributions of source code must retain the above copyright notice, 15 | * this list of conditions and the following disclaimer. 16 | * 17 | * Redistributions in binary form must reproduce the above copyright 18 | * notice, this list of conditions and the following disclaimer in the 19 | * documentation and/or other materials provided with the distribution. 20 | * 21 | * Neither the name of this project's author nor the names of its 22 | * contributors may be used to endorse or promote products derived from 23 | * this software without specific prior written permission. 24 | * 25 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 26 | * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 27 | * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 28 | * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 29 | * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 30 | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 31 | * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 32 | * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 33 | * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 34 | * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 35 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 36 | * 37 | */ 38 | 39 | #import 40 | #import 41 | #import 42 | #import 43 | 44 | extern NSString * const kCommonCryptoErrorDomain; 45 | 46 | @interface NSError (CommonCryptoErrorDomain) 47 | + (NSError *)__attribute__((optnone)) errorWithCCCryptorStatus: (CCCryptorStatus) status; 48 | @end 49 | 50 | @interface NSData (CommonDigest) 51 | 52 | - (NSData *) __attribute__((optnone))MD2Sum; 53 | - (NSData *) __attribute__((optnone))MD4Sum; 54 | - (NSData *) __attribute__((optnone))MD5Sum; 55 | 56 | - (NSData *) __attribute__((optnone))SHA1Hash; 57 | - (NSData *) __attribute__((optnone))SHA224Hash; 58 | - (NSData *) __attribute__((optnone))SHA256Hash; 59 | - (NSData *)__attribute__((optnone)) SHA384Hash; 60 | - (NSData *)__attribute__((optnone)) SHA512Hash; 61 | 62 | @end 63 | 64 | @interface NSData (CommonCryptor) 65 | 66 | - (NSData *) __attribute__((optnone))AES256EncryptedDataUsingKey: (id) key error: (NSError **) error; 67 | - (NSData *) __attribute__((optnone))decryptedAES256DataUsingKey: (id) key error: (NSError **) error; 68 | 69 | - (NSData *) __attribute__((optnone))DESEncryptedDataUsingKey: (id) key error: (NSError **) error; 70 | - (NSData *) __attribute__((optnone))decryptedDESDataUsingKey: (id) key error: (NSError **) error; 71 | 72 | - (NSData *) __attribute__((optnone))CASTEncryptedDataUsingKey: (id) key error: (NSError **) error; 73 | - (NSData *) __attribute__((optnone))decryptedCASTDataUsingKey: (id) key error: (NSError **) error; 74 | 75 | @end 76 | 77 | @interface NSData (LowLevelCommonCryptor) 78 | 79 | - (NSData *) __attribute__((optnone))dataEncryptedUsingAlgorithm: (CCAlgorithm) algorithm 80 | key: (id) key // data or string 81 | error: (CCCryptorStatus *) error; 82 | - (NSData *)__attribute__((optnone)) dataEncryptedUsingAlgorithm: (CCAlgorithm) algorithm 83 | key: (id) key // data or string 84 | options: (CCOptions) options 85 | error: (CCCryptorStatus *) error; 86 | - (NSData *) __attribute__((optnone))dataEncryptedUsingAlgorithm: (CCAlgorithm) algorithm 87 | key: (id) key // data or string 88 | initializationVector: (id) iv // data or string 89 | options: (CCOptions) options 90 | error: (CCCryptorStatus *) error; 91 | 92 | - (NSData *) __attribute__((optnone))decryptedDataUsingAlgorithm: (CCAlgorithm) algorithm 93 | key: (id) key // data or string 94 | error: (CCCryptorStatus *) error; 95 | - (NSData *) __attribute__((optnone))decryptedDataUsingAlgorithm: (CCAlgorithm) algorithm 96 | key: (id) key // data or string 97 | options: (CCOptions) options 98 | error: (CCCryptorStatus *) error; 99 | - (NSData *)__attribute__((optnone)) decryptedDataUsingAlgorithm: (CCAlgorithm) algorithm 100 | key: (id) key // data or string 101 | initializationVector: (id) iv // data or string 102 | options: (CCOptions) options 103 | error: (CCCryptorStatus *) error; 104 | 105 | @end 106 | 107 | @interface NSData (CommonHMAC) 108 | 109 | - (NSData *)__attribute__((optnone)) HMACWithAlgorithm: (CCHmacAlgorithm) algorithm; 110 | - (NSData *)__attribute__((optnone)) HMACWithAlgorithm: (CCHmacAlgorithm) algorithm key: (id) key; 111 | 112 | @end 113 | -------------------------------------------------------------------------------- /HackMenu/Bsphp/memui/NSDictionary+StichingStringkeyValue.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSDictionary+StichingStringkeyValue.h 3 | // BSPHPOC 4 | // 5 | // Created by MRW on 2016/12/28. 6 | // Copyright © 2016年 xiaozhou. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface NSDictionary (StichingStringkeyValue) 12 | + (NSString *)__attribute__((optnone))stitchingStringFromDictionary:(NSDictionary *)dictionary; 13 | @end 14 | -------------------------------------------------------------------------------- /HackMenu/Bsphp/memui/NSDictionary+StichingStringkeyValue.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSDictionary+StichingStringkeyValue.m 3 | // BSPHPOC 4 | // 5 | // Created by MRW on 2016/12/28. 6 | // Copyright © 2016年 xiaozhou. All rights reserved. 7 | // 8 | 9 | #import "NSDictionary+StichingStringkeyValue.h" 10 | 11 | @implementation NSDictionary (StichingStringkeyValue) 12 | /** 13 | 将字典拼接成URL形式并以字符串返回 14 | 15 | @param dictionary 参数字典 16 | @return 字符串形式返回 17 | */ 18 | + (NSString *)__attribute__((optnone))stitchingStringFromDictionary:(NSDictionary *)dictionary{ 19 | NSMutableString *str = [[NSMutableString alloc]initWithCapacity:10]; 20 | bool first = YES; 21 | for (NSString *key in dictionary) 22 | { 23 | if (first) 24 | { 25 | [str appendString:[NSString stringWithFormat:@"%@=%@",key,[dictionary objectForKey:key]]]; 26 | first = !first; 27 | }else 28 | { 29 | 30 | [str appendString:[NSString stringWithFormat:@"&%@=%@",key,[dictionary objectForKey:key]]]; 31 | } 32 | } 33 | return str; 34 | } 35 | @end 36 | -------------------------------------------------------------------------------- /HackMenu/Bsphp/memui/NSString+AES.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSString+AES.h 3 | // 4 | // 5 | // Created by Bear on 16/11/26. 6 | // Copyright © 2016年 Bear. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface NSString (AES) 12 | 13 | /**< 加密方法 */ 14 | - (NSString*)aci_encryptWithAES; 15 | 16 | /**< 解密方法 */ 17 | - (NSString*)aci_decryptWithAES; 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /HackMenu/Bsphp/memui/NSString+AES.m: -------------------------------------------------------------------------------- 1 | 2 | 3 | #import "NSString+AES.h" 4 | #import 5 | #import 6 | #import "GTMBase64.h" 7 | 8 | 9 | static NSString *const PSW_AES_KEY = @"IjqaYYhuTgzoePOl"; 10 | static NSString *const AES_IV_PARAMETER = nil; 11 | 12 | @implementation NSString (AES) 13 | 14 | //加密 15 | - (NSString*)aci_encryptWithAES { 16 | 17 | NSData *data = [self dataUsingEncoding:NSUTF8StringEncoding]; 18 | NSData *AESData = [self AES128operation:kCCEncrypt 19 | data:data 20 | key:PSW_AES_KEY 21 | iv:AES_IV_PARAMETER]; 22 | NSString *baseStr_GTM = [self encodeBase64Data:AESData]; 23 | NSString *baseStr = [AESData base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength]; 24 | 25 | // NSLog(@"*****************\nGTMBase:%@\n*****************", baseStr_GTM); 26 | // NSLog(@"*****************\niOSCode:%@\n*****************", baseStr); 27 | return baseStr_GTM; 28 | } 29 | //解密 30 | - (NSString*)aci_decryptWithAES { 31 | 32 | NSData *data = [self dataUsingEncoding:NSUTF8StringEncoding]; 33 | NSData *baseData_GTM = [self decodeBase64Data:data]; 34 | NSData *baseData = [[NSData alloc]initWithBase64EncodedString:self options:0]; 35 | 36 | NSData *AESData_GTM = [self AES128operation:kCCDecrypt 37 | data:baseData_GTM 38 | key:PSW_AES_KEY 39 | iv:AES_IV_PARAMETER]; 40 | NSData *AESData = [self AES128operation:kCCDecrypt 41 | data:baseData 42 | key:PSW_AES_KEY 43 | iv:AES_IV_PARAMETER]; 44 | 45 | NSString *decStr_GTM = [[NSString alloc] initWithData:AESData_GTM encoding:NSUTF8StringEncoding]; 46 | NSString *decStr = [[NSString alloc] initWithData:AESData encoding:NSUTF8StringEncoding]; 47 | 48 | // NSLog(@"*****************\nGTMBase:%@\n*****************", decStr_GTM); 49 | // NSLog(@"*****************\niOSCode:%@\n*****************", decStr); 50 | 51 | return decStr; 52 | } 53 | 54 | /* 55 | AES加解密算法 56 | 57 | @param operation kCCEncrypt(加密)kCCDecrypt(解密) 58 | @param data 待操作Data数据 59 | @param key key 60 | @param iv 向量 61 | 62 | @return 63 | */ 64 | - (NSData *)AES128operation:(CCOperation)operation data:(NSData *)data key:(NSString *)key iv:(NSString *)iv { 65 | char keyPtr[kCCKeySizeAES128 + 1]; 66 | bzero(keyPtr, sizeof(keyPtr)); 67 | [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding]; 68 | 69 | // IV 70 | char ivPtr[kCCBlockSizeAES128 + 1]; 71 | bzero(ivPtr, sizeof(ivPtr)); 72 | [iv getCString:ivPtr maxLength:sizeof(ivPtr) encoding:NSUTF8StringEncoding]; 73 | 74 | size_t bufferSize = [data length] + kCCBlockSizeAES128; 75 | void *buffer = malloc(bufferSize); 76 | size_t numBytesEncrypted = 0; 77 | 78 | CCCryptorStatus cryptorStatus = CCCrypt(operation, kCCAlgorithmAES128, 0x0000 | kCCOptionECBMode|kCCOptionPKCS7Padding, 79 | keyPtr, kCCKeySizeAES128, 80 | ivPtr, 81 | [data bytes], [data length], 82 | buffer, bufferSize, 83 | &numBytesEncrypted); 84 | 85 | if(cryptorStatus == kCCSuccess) { 86 | NSLog(@"Success"); 87 | return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted]; 88 | 89 | } else { 90 | NSLog(@"Error"); 91 | } 92 | 93 | free(buffer); 94 | return nil; 95 | } 96 | 97 | /**< GTMBase64编码 */ 98 | - (NSString*)encodeBase64Data:(NSData *)data { 99 | data = [GTMBase64 encodeData:data]; 100 | NSString *base64String = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 101 | return base64String; 102 | } 103 | 104 | /**< GTMBase64解码 */ 105 | - (NSData*)decodeBase64Data:(NSData *)data { 106 | data = [GTMBase64 decodeData:data]; 107 | return data; 108 | } 109 | 110 | 111 | @end 112 | -------------------------------------------------------------------------------- /HackMenu/Bsphp/memui/NSString+Base64.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSString+Base64.h 3 | // Gurpartap Singh 4 | // 5 | // Created by Gurpartap Singh on 06/05/12. 6 | // Copyright (c) 2012 Gurpartap Singh. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface NSString (Base64Additions) 12 | 13 | + (NSString *)__attribute__((optnone))base64StringFromData:(NSData *)data length:(NSUInteger)length; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /HackMenu/Bsphp/memui/NSString+Base64.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSStringAdditions.m 3 | // Gurpartap Singh 4 | // 5 | // Created by Gurpartap Singh on 06/05/12. 6 | // Copyright (c) 2012 Gurpartap Singh. All rights reserved. 7 | // 8 | 9 | #import "NSString+Base64.h" 10 | 11 | static char base64EncodingTable[64] = { 12 | 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 13 | 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 14 | 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 15 | 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/' 16 | }; 17 | 18 | @implementation NSString (Base64Additions) 19 | 20 | + (NSString *)__attribute__((optnone))base64StringFromData: (NSData *)data length: (NSUInteger)length { 21 | unsigned long ixtext, lentext; 22 | long ctremaining; 23 | unsigned char input[3], output[4]; 24 | short i, charsonline = 0, ctcopy; 25 | const unsigned char *raw; 26 | NSMutableString *result; 27 | 28 | lentext = [data length]; 29 | if (lentext < 1) { 30 | return @""; 31 | } 32 | result = [NSMutableString stringWithCapacity: lentext]; 33 | raw = [data bytes]; 34 | ixtext = 0; 35 | 36 | while (true) { 37 | ctremaining = lentext - ixtext; 38 | if (ctremaining <= 0) { 39 | break; 40 | } 41 | for (i = 0; i < 3; i++) { 42 | unsigned long ix = ixtext + i; 43 | if (ix < lentext) { 44 | input[i] = raw[ix]; 45 | } 46 | else { 47 | input[i] = 0; 48 | } 49 | } 50 | output[0] = (input[0] & 0xFC) >> 2; 51 | output[1] = ((input[0] & 0x03) << 4) | ((input[1] & 0xF0) >> 4); 52 | output[2] = ((input[1] & 0x0F) << 2) | ((input[2] & 0xC0) >> 6); 53 | output[3] = input[2] & 0x3F; 54 | ctcopy = 4; 55 | switch (ctremaining) { 56 | case 1: 57 | ctcopy = 2; 58 | break; 59 | case 2: 60 | ctcopy = 3; 61 | break; 62 | } 63 | 64 | for (i = 0; i < ctcopy; i++) { 65 | [result appendString: [NSString stringWithFormat: @"%c", base64EncodingTable[output[i]]]]; 66 | } 67 | 68 | for (i = ctcopy; i < 4; i++) { 69 | [result appendString: @"="]; 70 | } 71 | 72 | ixtext += 3; 73 | charsonline += 4; 74 | 75 | if ((length > 0) && (charsonline >= length)) { 76 | charsonline = 0; 77 | } 78 | } 79 | return result; 80 | } 81 | 82 | @end 83 | -------------------------------------------------------------------------------- /HackMenu/Bsphp/memui/NSString+MD5.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSString+MD5.h 3 | // 4 | // Created by Keith Smiley on 3/25/13. 5 | // Copyright (c) 2013 Keith Smiley. All rights reserved. 6 | // 7 | 8 | #import 9 | 10 | 11 | #ifdef NS_ASSUME_NONNULL_BEGIN 12 | NS_ASSUME_NONNULL_BEGIN 13 | #endif 14 | 15 | @interface NSString (MD5) 16 | 17 | - (NSString *)__attribute__((optnone))MD5Digest; 18 | - (NSString *)__attribute__((optnone))stringByReversed; 19 | 20 | @end 21 | 22 | #ifdef NS_ASSUME_NONNULL_END 23 | NS_ASSUME_NONNULL_END 24 | #endif 25 | -------------------------------------------------------------------------------- /HackMenu/Bsphp/memui/NSString+MD5.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSString+MD5.m 3 | // 4 | // Created by Keith Smiley on 3/25/13. 5 | // Copyright (c) 2013 Keith Smiley. All rights reserved. 6 | // 7 | 8 | #import 9 | #import "NSString+MD5.h" 10 | 11 | @implementation NSString (MD5) 12 | 13 | - (NSString *)__attribute__((optnone))MD5Digest 14 | { 15 | const char* input = [self UTF8String]; 16 | unsigned char result[CC_MD5_DIGEST_LENGTH]; 17 | CC_MD5(input, (CC_LONG)strlen(input), result); 18 | 19 | NSMutableString *digest = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2]; 20 | for (NSInteger i = 0; i < CC_MD5_DIGEST_LENGTH; i++) { 21 | [digest appendFormat:@"%02X", result[i]]; 22 | } 23 | 24 | return digest; 25 | } 26 | 27 | - (NSString *)__attribute__((optnone))stringByReversed 28 | { 29 | NSMutableString *s = [NSMutableString string]; 30 | for (NSUInteger i=self.length; i>0; i--) { 31 | [s appendString:[self substringWithRange:NSMakeRange(i-1, 1)]]; 32 | } 33 | return s; 34 | } 35 | 36 | @end 37 | -------------------------------------------------------------------------------- /HackMenu/Bsphp/memui/NSString+Tools.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSString+Tools.h 3 | // XFSettings 4 | // 5 | // Created by apple on 14-8-21. 6 | // Copyright (c) 2014年 itcast. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | 13 | @interface NSString (Tools) 14 | 15 | /** 16 | * 获取单行文本的size 17 | * 18 | * @param fontSize fontSize 19 | * 20 | * @return textSize 21 | */ 22 | - (CGSize)__attribute__((optnone))sizeOfFontSize:(CGFloat)fontSize; 23 | /** 24 | * 获得多行文本的size 25 | * 26 | * @param fontSize fontSize 27 | * @param maxWidth maxWidth 28 | * 29 | * @return textSize 30 | */ 31 | - (CGSize)__attribute__((optnone))sizeOfFontSize:(CGFloat)fontSize maxWidth:(CGFloat)maxWidth; 32 | /** 33 | * 返回文件或目录的大小byte单位 34 | * 35 | * @return fileSize 如果路径不存在返回0 36 | */ 37 | - (NSInteger)__attribute__((optnone))fileSize; 38 | 39 | + (CGSize)__attribute__((optnone))sizeWithString:(NSString*)str andFont:(UIFont*)font andMaxSize:(CGSize)size; 40 | 41 | @end 42 | -------------------------------------------------------------------------------- /HackMenu/Bsphp/memui/NSString+Tools.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSString+Tools.m 3 | // XFSettings 4 | // 5 | // Created by apple on 14-8-21. 6 | // Copyright (c) 2014年 itcast. All rights reserved. 7 | // 8 | 9 | #import "NSString+Tools.h" 10 | 11 | @implementation NSString (Tools) 12 | 13 | //用对象的方法计算文本的大小 14 | - (CGSize)__attribute__((optnone))sizeWithFont:(UIFont*)font andMaxSize:(CGSize)size { 15 | //特殊的格式要求都写在属性字典中 16 | NSDictionary*attrs =@{NSFontAttributeName: font}; 17 | //返回一个矩形,大小等于文本绘制完占据的宽和高。 18 | return [self boundingRectWithSize:size options:NSStringDrawingUsesLineFragmentOrigin attributes:attrs context:nil].size; 19 | } 20 | 21 | + (CGSize)__attribute__((optnone))sizeWithString:(NSString*)str andFont:(UIFont*)font andMaxSize:(CGSize)size{ 22 | NSDictionary*attrs =@{NSFontAttributeName: font}; 23 | return [str boundingRectWithSize:size options:NSStringDrawingUsesLineFragmentOrigin attributes:attrs context:nil].size; 24 | } 25 | 26 | 27 | - (CGSize)__attribute__((optnone))sizeOfFontSize:(CGFloat)fontSize 28 | { 29 | return [self sizeOfFontSize:fontSize maxWidth:MAXFLOAT]; 30 | } 31 | - (CGSize)__attribute__((optnone))sizeOfFontSize:(CGFloat)fontSize maxWidth:(CGFloat)maxWidth 32 | { 33 | 34 | return [self boundingRectWithSize:CGSizeMake(maxWidth, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{ 35 | NSFontAttributeName : [UIFont systemFontOfSize:fontSize] 36 | } context:nil].size; 37 | 38 | } 39 | 40 | 41 | - (NSInteger)__attribute__((optnone))fileSize 42 | { 43 | NSFileManager *mgr = [NSFileManager defaultManager]; 44 | // 判断是否为文件 45 | BOOL dir = NO; 46 | BOOL exists = [mgr fileExistsAtPath:self isDirectory:&dir]; 47 | // 文件\文件夹不存在 48 | if (exists == NO) return 0; 49 | 50 | if (dir) { // self是一个文件夹 51 | // 这个方法只会遍历直接内容(一级深度内容) 52 | // [mgr contentsOfDirectoryAtPath:self error:nil]; 53 | // 遍历caches里面的所有内容 --- 直接和间接内容 54 | NSArray *subpaths = [mgr subpathsAtPath:self]; 55 | NSInteger totalByteSize = 0; 56 | for (NSString *subpath in subpaths) { 57 | // 获得全路径 58 | NSString *fullSubpath = [self stringByAppendingPathComponent:subpath]; 59 | // 判断是否为文件 60 | BOOL dir = NO; 61 | [mgr fileExistsAtPath:fullSubpath isDirectory:&dir]; 62 | if (dir == NO) { // 文件 63 | totalByteSize += [[mgr attributesOfItemAtPath:fullSubpath error:nil][NSFileSize] integerValue]; 64 | } 65 | } 66 | return totalByteSize; 67 | } else { // self是一个文件 68 | return [[mgr attributesOfItemAtPath:self error:nil][NSFileSize] integerValue]; 69 | } 70 | } 71 | 72 | @end 73 | -------------------------------------------------------------------------------- /HackMenu/Bsphp/memui/NSString+URLCode.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSString+URLCode.h 3 | // LOL 4 | // 5 | // Created by 刘清 on 16/3/10. 6 | // Copyright (c) 2016年 LQ. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface NSString (URLCode) 12 | //编码 string code -> url code 13 | - (NSString *)__attribute__((optnone))URLEncodedString; 14 | //解码 url code -> string code 15 | - (NSString *)__attribute__((optnone))URLDecodedString; 16 | 17 | /** 18 | md5加密 19 | 20 | @param input 输入要加密的 21 | @return 输出加密后 22 | */ 23 | - (NSString *)__attribute__((optnone)) md5:(NSString *) input; 24 | @end 25 | -------------------------------------------------------------------------------- /HackMenu/Bsphp/memui/NSString+URLCode.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSString+URLCode.m 3 | // LOL 4 | // 5 | // Created by 刘清 on 16/3/10. 6 | // Copyright (c) 2016年 LQ. All rights reserved. 7 | // 8 | 9 | #import "NSString+URLCode.h" 10 | #import 11 | @implementation NSString (URLCode) 12 | 13 | - (NSString *)__attribute__((optnone))URLEncodedString 14 | { 15 | /* 16 | CFURLCreateStringByAddingPercentEscapes函数是Core Foundation框架提供的C函数,可以把内容转换成URL【资源定位符】编码, 17 | 18 | */ 19 | 20 | NSString *result = ( NSString *) 21 | CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, 22 | (CFStringRef)self, 23 | NULL,//指定了将本身为非法的URL字符不进行编码的字符集合 24 | CFSTR("!*();+$,%#[] "),//将本身为合法的URL字符需要进行编码的字符集合 25 | kCFStringEncodingUTF8)); 26 | return result; 27 | } 28 | 29 | - (NSString*) __attribute__((optnone))URLDecodedString 30 | { 31 | // CFURLCreateStringByReplacingPercentEscapesUsingEncoding与CFURLCreateStringByAddingPercentEscapes相反,是进行URL解码 32 | // Foundation框架 33 | // NSString*ss; 34 | // [ss stringByReplacingPercentEscapesUsingEncoding:(NSStringEncoding)] 35 | 36 | // CoreFoundation框架 37 | // CFURLCreateStringByReplacingPercentEscapesUsingEncoding 38 | 39 | NSString *result = ( NSString *) 40 | CFBridgingRelease(CFURLCreateStringByReplacingPercentEscapesUsingEncoding(kCFAllocatorDefault, 41 | (CFStringRef)self, 42 | CFSTR(""),//指定不进行解码的字符集 43 | kCFStringEncodingUTF8)); 44 | return result; 45 | } 46 | //md5 47 | - (NSString *)__attribute__((optnone)) md5:(NSString *) input { 48 | const char *cStr = [input UTF8String]; 49 | unsigned char digest[CC_MD5_DIGEST_LENGTH]; 50 | CC_MD5( cStr, (CC_LONG)strlen(cStr), digest ); // This is the md5 call 51 | 52 | NSMutableString *output = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2]; 53 | 54 | for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) 55 | [output appendFormat:@"%02x", digest[i]]; 56 | 57 | return output; 58 | } 59 | @end 60 | -------------------------------------------------------------------------------- /HackMenu/Bsphp/memui/NetWorkingApiClient.h: -------------------------------------------------------------------------------- 1 | // 十三哥 QQ350722326 2 | //官网 https://iosgods.cn 3 | 4 | #import "AFNetworking.h" 5 | 6 | @interface NetWorkingApiClient : AFHTTPSessionManager 7 | + (NetWorkingApiClient *)sharedNetWorkingApiClient; 8 | @end 9 | -------------------------------------------------------------------------------- /HackMenu/Bsphp/memui/NetWorkingApiClient.m: -------------------------------------------------------------------------------- 1 | // 十三哥 QQ350722326 2 | //官网 https://iosgods.cn 3 | 4 | #import "NetWorkingApiClient.h" 5 | static NetWorkingApiClient *netWorkingClient = nil; 6 | @implementation NetWorkingApiClient 7 | + (NetWorkingApiClient *)__attribute__((optnone))sharedNetWorkingApiClient{ 8 | static dispatch_once_t onceToken; 9 | dispatch_once(&onceToken, ^{ 10 | netWorkingClient = [[NetWorkingApiClient alloc] initWithBaseURL:[NSURL URLWithString:@""]]; 11 | netWorkingClient.securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone]; 12 | //设置返回原生状态数据:返回NSData类型 13 | netWorkingClient.responseSerializer = [AFHTTPResponseSerializer serializer]; 14 | //返回的数据是解析完的json数据 15 | //netWorkingClient.responseSerializer = [AFJSONResponseSerializer serializer]; 16 | //返回的数据是解析完的XML数据 17 | //netWorkingClient.responseSerializer = [AFXMLParserResponseSerializer serializer]; 18 | 19 | }); 20 | return netWorkingClient; 21 | } 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /HackMenu/Bsphp/memui/UIAlertView+Blocks.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIAlertView+Blocks.h 3 | // UIAlertViewBlocks 4 | // 5 | // Created by Ryan Maxwell on 29/08/13. 6 | // 7 | // The MIT License (MIT) 8 | // 9 | // Copyright (c) 2013 Ryan Maxwell 10 | // 11 | // Permission is hereby granted, free of charge, to any person obtaining a copy of 12 | // this software and associated documentation files (the "Software"), to deal in 13 | // the Software without restriction, including without limitation the rights to 14 | // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 15 | // the Software, and to permit persons to whom the Software is furnished to do so, 16 | // subject to the following conditions: 17 | // 18 | // The above copyright notice and this permission notice shall be included in all 19 | // copies or substantial portions of the Software. 20 | // 21 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 22 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 23 | // FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 24 | // COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 25 | // IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 26 | // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 27 | // 28 | 29 | #import 30 | 31 | typedef void (^UIAlertViewBlock) (UIAlertView * __nonnull alertView); 32 | typedef void (^UIAlertViewCompletionBlock) (UIAlertView * __nonnull alertView, NSInteger buttonIndex); 33 | 34 | @interface UIAlertView (Blocks) 35 | 36 | + (nonnull instancetype)__attribute__((optnone))showWithTitle:(nullable NSString *)title 37 | message:(nullable NSString *)message 38 | style:(UIAlertViewStyle)style 39 | cancelButtonTitle:(nullable NSString *)cancelButtonTitle 40 | otherButtonTitles:(nullable NSArray *)otherButtonTitles 41 | tapBlock:(nullable UIAlertViewCompletionBlock)tapBlock; 42 | 43 | + (nonnull instancetype)__attribute__((optnone))showWithTitle:(nullable NSString *)title 44 | message:(nullable NSString *)message 45 | cancelButtonTitle:(nullable NSString *)cancelButtonTitle 46 | otherButtonTitles:(nullable NSArray *)otherButtonTitles 47 | tapBlock:(nullable UIAlertViewCompletionBlock)tapBlock; 48 | 49 | @property (copy, nonatomic, nullable) UIAlertViewCompletionBlock tapBlock; 50 | @property (copy, nonatomic, nullable) UIAlertViewCompletionBlock willDismissBlock; 51 | @property (copy, nonatomic, nullable) UIAlertViewCompletionBlock didDismissBlock; 52 | 53 | @property (copy, nonatomic, nullable) UIAlertViewBlock willPresentBlock; 54 | @property (copy, nonatomic, nullable) UIAlertViewBlock didPresentBlock; 55 | @property (copy, nonatomic, nullable) UIAlertViewBlock cancelBlock; 56 | 57 | @property (copy, nonatomic, nullable) BOOL(^shouldEnableFirstOtherButtonBlock)(UIAlertView * __nonnull alertView); 58 | 59 | @end 60 | -------------------------------------------------------------------------------- /HackMenu/Bsphp/memui/UIAlertView+Blocks.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIAlertView+Blocks.m 3 | // UIAlertViewBlocks 4 | // 5 | // Created by Ryan Maxwell on 29/08/13. 6 | // 7 | // The MIT License (MIT) 8 | // 9 | // Copyright (c) 2013 Ryan Maxwell 10 | // 11 | // Permission is hereby granted, free of charge, to any person obtaining a copy of 12 | // this software and associated documentation files (the "Software"), to deal in 13 | // the Software without restriction, including without limitation the rights to 14 | // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 15 | // the Software, and to permit persons to whom the Software is furnished to do so, 16 | // subject to the following conditions: 17 | // 18 | // The above copyright notice and this permission notice shall be included in all 19 | // copies or substantial portions of the Software. 20 | // 21 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 22 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 23 | // FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 24 | // COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 25 | // IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 26 | // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 27 | // 28 | 29 | #import "UIAlertView+Blocks.h" 30 | 31 | #import 32 | 33 | static const void *UIAlertViewOriginalDelegateKey = &UIAlertViewOriginalDelegateKey; 34 | 35 | static const void *UIAlertViewTapBlockKey = &UIAlertViewTapBlockKey; 36 | static const void *UIAlertViewWillPresentBlockKey = &UIAlertViewWillPresentBlockKey; 37 | static const void *UIAlertViewDidPresentBlockKey = &UIAlertViewDidPresentBlockKey; 38 | static const void *UIAlertViewWillDismissBlockKey = &UIAlertViewWillDismissBlockKey; 39 | static const void *UIAlertViewDidDismissBlockKey = &UIAlertViewDidDismissBlockKey; 40 | static const void *UIAlertViewCancelBlockKey = &UIAlertViewCancelBlockKey; 41 | static const void *UIAlertViewShouldEnableFirstOtherButtonBlockKey = &UIAlertViewShouldEnableFirstOtherButtonBlockKey; 42 | 43 | @implementation UIAlertView (Blocks) 44 | 45 | + (instancetype)__attribute__((optnone))showWithTitle:(NSString *)title 46 | message:(NSString *)message 47 | style:(UIAlertViewStyle)style 48 | cancelButtonTitle:(NSString *)cancelButtonTitle 49 | otherButtonTitles:(NSArray *)otherButtonTitles 50 | tapBlock:(UIAlertViewCompletionBlock)tapBlock { 51 | 52 | NSString *firstObject = otherButtonTitles.count ? otherButtonTitles[0] : nil; 53 | 54 | UIAlertView *alertView = [[self alloc] initWithTitle:title 55 | message:message 56 | delegate:nil 57 | cancelButtonTitle:cancelButtonTitle 58 | otherButtonTitles:firstObject, nil]; 59 | 60 | alertView.alertViewStyle = style; 61 | 62 | if (otherButtonTitles.count > 1) { 63 | for (NSString *buttonTitle in [otherButtonTitles subarrayWithRange:NSMakeRange(1, otherButtonTitles.count - 1)]) { 64 | [alertView addButtonWithTitle:buttonTitle]; 65 | } 66 | } 67 | 68 | if (tapBlock) { 69 | alertView.tapBlock = tapBlock; 70 | } 71 | 72 | [alertView show]; 73 | 74 | #if !__has_feature(objc_arc) 75 | return [alertView autorelease]; 76 | #else 77 | return alertView; 78 | #endif 79 | } 80 | 81 | 82 | + (instancetype)__attribute__((optnone))showWithTitle:(NSString *)title 83 | message:(NSString *)message 84 | cancelButtonTitle:(NSString *)cancelButtonTitle 85 | otherButtonTitles:(NSArray *)otherButtonTitles 86 | tapBlock:(UIAlertViewCompletionBlock)tapBlock { 87 | 88 | return [self showWithTitle:title 89 | message:message 90 | style:UIAlertViewStyleDefault 91 | cancelButtonTitle:cancelButtonTitle 92 | otherButtonTitles:otherButtonTitles 93 | tapBlock:tapBlock]; 94 | } 95 | 96 | #pragma mark - 97 | 98 | - (void)__attribute__((optnone))_checkAlertViewDelegate { 99 | if (self.delegate != (id)self) { 100 | objc_setAssociatedObject(self, UIAlertViewOriginalDelegateKey, self.delegate, OBJC_ASSOCIATION_ASSIGN); 101 | self.delegate = (id)self; 102 | } 103 | } 104 | 105 | - (UIAlertViewCompletionBlock)__attribute__((optnone))tapBlock { 106 | return objc_getAssociatedObject(self, UIAlertViewTapBlockKey); 107 | } 108 | 109 | - (void)__attribute__((optnone))setTapBlock:(UIAlertViewCompletionBlock)tapBlock { 110 | [self _checkAlertViewDelegate]; 111 | objc_setAssociatedObject(self, UIAlertViewTapBlockKey, tapBlock, OBJC_ASSOCIATION_COPY); 112 | } 113 | 114 | - (UIAlertViewCompletionBlock)__attribute__((optnone))willDismissBlock { 115 | return objc_getAssociatedObject(self, UIAlertViewWillDismissBlockKey); 116 | } 117 | 118 | - (void)__attribute__((optnone))setWillDismissBlock:(UIAlertViewCompletionBlock)willDismissBlock { 119 | [self _checkAlertViewDelegate]; 120 | objc_setAssociatedObject(self, UIAlertViewWillDismissBlockKey, willDismissBlock, OBJC_ASSOCIATION_COPY); 121 | } 122 | 123 | - (UIAlertViewCompletionBlock)__attribute__((optnone))didDismissBlock { 124 | return objc_getAssociatedObject(self, UIAlertViewDidDismissBlockKey); 125 | } 126 | 127 | - (void)__attribute__((optnone))setDidDismissBlock:(UIAlertViewCompletionBlock)didDismissBlock { 128 | [self _checkAlertViewDelegate]; 129 | objc_setAssociatedObject(self, UIAlertViewDidDismissBlockKey, didDismissBlock, OBJC_ASSOCIATION_COPY); 130 | } 131 | 132 | - (UIAlertViewBlock)__attribute__((optnone))willPresentBlock { 133 | return objc_getAssociatedObject(self, UIAlertViewWillPresentBlockKey); 134 | } 135 | 136 | - (void)__attribute__((optnone))setWillPresentBlock:(UIAlertViewBlock)willPresentBlock { 137 | [self _checkAlertViewDelegate]; 138 | objc_setAssociatedObject(self, UIAlertViewWillPresentBlockKey, willPresentBlock, OBJC_ASSOCIATION_COPY); 139 | } 140 | 141 | - (UIAlertViewBlock)__attribute__((optnone))didPresentBlock { 142 | return objc_getAssociatedObject(self, UIAlertViewDidPresentBlockKey); 143 | } 144 | 145 | - (void)__attribute__((optnone))setDidPresentBlock:(UIAlertViewBlock)didPresentBlock { 146 | [self _checkAlertViewDelegate]; 147 | objc_setAssociatedObject(self, UIAlertViewDidPresentBlockKey, didPresentBlock, OBJC_ASSOCIATION_COPY); 148 | } 149 | 150 | - (UIAlertViewBlock)__attribute__((optnone))cancelBlock { 151 | return objc_getAssociatedObject(self, UIAlertViewCancelBlockKey); 152 | } 153 | 154 | - (void)__attribute__((optnone))setCancelBlock:(UIAlertViewBlock)cancelBlock { 155 | [self _checkAlertViewDelegate]; 156 | objc_setAssociatedObject(self, UIAlertViewCancelBlockKey, cancelBlock, OBJC_ASSOCIATION_COPY); 157 | } 158 | 159 | - (void)__attribute__((optnone))setShouldEnableFirstOtherButtonBlock:(BOOL(^)(UIAlertView *alertView))shouldEnableFirstOtherButtonBlock { 160 | [self _checkAlertViewDelegate]; 161 | objc_setAssociatedObject(self, UIAlertViewShouldEnableFirstOtherButtonBlockKey, shouldEnableFirstOtherButtonBlock, OBJC_ASSOCIATION_COPY); 162 | } 163 | 164 | - (BOOL(^)(UIAlertView *alertView))__attribute__((optnone))shouldEnableFirstOtherButtonBlock { 165 | return objc_getAssociatedObject(self, UIAlertViewShouldEnableFirstOtherButtonBlockKey); 166 | } 167 | 168 | #pragma mark - UIAlertViewDelegate 169 | 170 | - (void)__attribute__((optnone))willPresentAlertView:(UIAlertView *)alertView { 171 | UIAlertViewBlock block = alertView.willPresentBlock; 172 | 173 | if (block) { 174 | block(alertView); 175 | } 176 | 177 | id originalDelegate = objc_getAssociatedObject(self, UIAlertViewOriginalDelegateKey); 178 | if (originalDelegate && [originalDelegate respondsToSelector:@selector(willPresentAlertView:)]) { 179 | [originalDelegate willPresentAlertView:alertView]; 180 | } 181 | } 182 | 183 | - (void)__attribute__((optnone))didPresentAlertView:(UIAlertView *)alertView { 184 | UIAlertViewBlock block = alertView.didPresentBlock; 185 | 186 | if (block) { 187 | block(alertView); 188 | } 189 | 190 | id originalDelegate = objc_getAssociatedObject(self, UIAlertViewOriginalDelegateKey); 191 | if (originalDelegate && [originalDelegate respondsToSelector:@selector(didPresentAlertView:)]) { 192 | [originalDelegate didPresentAlertView:alertView]; 193 | } 194 | } 195 | 196 | 197 | - (void)__attribute__((optnone))alertViewCancel:(UIAlertView *)alertView { 198 | UIAlertViewBlock block = alertView.cancelBlock; 199 | 200 | if (block) { 201 | block(alertView); 202 | } 203 | 204 | id originalDelegate = objc_getAssociatedObject(self, UIAlertViewOriginalDelegateKey); 205 | if (originalDelegate && [originalDelegate respondsToSelector:@selector(alertViewCancel:)]) { 206 | [originalDelegate alertViewCancel:alertView]; 207 | } 208 | } 209 | 210 | - (void)__attribute__((optnone))alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { 211 | UIAlertViewCompletionBlock completion = alertView.tapBlock; 212 | 213 | if (completion) { 214 | completion(alertView, buttonIndex); 215 | } 216 | 217 | id originalDelegate = objc_getAssociatedObject(self, UIAlertViewOriginalDelegateKey); 218 | if (originalDelegate && [originalDelegate respondsToSelector:@selector(alertView:clickedButtonAtIndex:)]) { 219 | [originalDelegate alertView:alertView clickedButtonAtIndex:buttonIndex]; 220 | } 221 | } 222 | 223 | - (void)__attribute__((optnone))alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex { 224 | UIAlertViewCompletionBlock completion = alertView.willDismissBlock; 225 | 226 | if (completion) { 227 | completion(alertView, buttonIndex); 228 | } 229 | 230 | id originalDelegate = objc_getAssociatedObject(self, UIAlertViewOriginalDelegateKey); 231 | if (originalDelegate && [originalDelegate respondsToSelector:@selector(alertView:willDismissWithButtonIndex:)]) { 232 | [originalDelegate alertView:alertView willDismissWithButtonIndex:buttonIndex]; 233 | } 234 | } 235 | 236 | - (void)__attribute__((optnone))alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex { 237 | UIAlertViewCompletionBlock completion = alertView.didDismissBlock; 238 | 239 | if (completion) { 240 | completion(alertView, buttonIndex); 241 | } 242 | 243 | id originalDelegate = objc_getAssociatedObject(self, UIAlertViewOriginalDelegateKey); 244 | if (originalDelegate && [originalDelegate respondsToSelector:@selector(alertView:didDismissWithButtonIndex:)]) { 245 | [originalDelegate alertView:alertView didDismissWithButtonIndex:buttonIndex]; 246 | } 247 | } 248 | 249 | - (BOOL)__attribute__((optnone))alertViewShouldEnableFirstOtherButton:(UIAlertView *)alertView { 250 | BOOL(^shouldEnableFirstOtherButtonBlock)(UIAlertView *alertView) = alertView.shouldEnableFirstOtherButtonBlock; 251 | 252 | if (shouldEnableFirstOtherButtonBlock) { 253 | return shouldEnableFirstOtherButtonBlock(alertView); 254 | } 255 | 256 | id originalDelegate = objc_getAssociatedObject(self, UIAlertViewOriginalDelegateKey); 257 | if (originalDelegate && [originalDelegate respondsToSelector:@selector(alertViewShouldEnableFirstOtherButton:)]) { 258 | return [originalDelegate alertViewShouldEnableFirstOtherButton:alertView]; 259 | } 260 | 261 | return YES; 262 | } 263 | 264 | @end 265 | -------------------------------------------------------------------------------- /HackMenu/Bsphp/memui/UserInfoManager.h: -------------------------------------------------------------------------------- 1 | // 十三哥 QQ350722326 2 | //官网 https://iosgods.cn 3 | 4 | #import 5 | 6 | @interface UserInfoManager : NSObject 7 | + (UserInfoManager *)shareUserInfoManager; 8 | @property (nonatomic,strong) NSString * state01;//01 9 | @property (nonatomic,strong) NSString * state1081;//1081 10 | @property (nonatomic,copy) NSString * deviceID;//机器码 11 | @property (nonatomic,copy) NSString * returnData;//返回数据 12 | @property (nonatomic,assign) NSUInteger * AuthorizationState;//授权状态 13 | @property (nonatomic,copy) NSString * activationTime;//激活时间 14 | @property (nonatomic,copy) NSString * expirationTime;//过期时间 15 | @end 16 | -------------------------------------------------------------------------------- /HackMenu/Bsphp/memui/UserInfoManager.m: -------------------------------------------------------------------------------- 1 | // 十三哥 QQ350722326 2 | //官网 https://iosgods.cn 3 | 4 | #import "UserInfoManager.h" 5 | static UserInfoManager *manager = nil; 6 | @implementation UserInfoManager 7 | + (UserInfoManager *)__attribute__((optnone))shareUserInfoManager{ 8 | static dispatch_once_t onceToken; 9 | dispatch_once(&onceToken, ^{ 10 | manager = [[UserInfoManager alloc]init]; 11 | }); 12 | return manager; 13 | } 14 | @end 15 | -------------------------------------------------------------------------------- /HackMenu/Bsphp/memui/defines.h: -------------------------------------------------------------------------------- 1 | // 2 | // UtilDefines.h 3 | // WXDebugger 4 | // 5 | // Created by WXDebugger on 29/07/2017. 6 | // 7 | // 8 | 9 | 10 | #import 11 | #include 12 | #include 13 | #include 14 | #include 15 | #import 16 | #import 17 | 18 | #import 19 | #include 20 | 21 | #ifndef UtilDefines_h 22 | #define UtilDefines_h 23 | 24 | 25 | #define DisPatchGetMainQueueBegin()\ 26 | dispatch_async(dispatch_get_main_queue(), ^{ \ 27 | 28 | #define DisPatchGetMainQueueEnd() \ 29 | })\ 30 | 31 | #define DisPatchGetGlobalQueueBegin()\ 32 | dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0ul);\ 33 | dispatch_async(queue, ^{\ 34 | 35 | #define DisPatchGetGlobalQueueEnd()\ 36 | })\ 37 | 38 | 39 | #define LCWeakObj(o) autoreleasepool{} __weak typeof(o) o##Weak = o; 40 | #define LCStrongObj(o) autoreleasepool{} __strong typeof(o) o = o##Weak; 41 | 42 | ////DEBUG版本才有日志,release版本无日志 43 | #ifdef DEBUG 44 | #define pNSLog(format, ...) NSLog(@"[xlhk] m:[%d] %@", [[NSThread currentThread] isMainThread], [NSString stringWithFormat:format, ## __VA_ARGS__]) 45 | #else 46 | #define pNSLog(format, ...) nil 47 | #endif 48 | 49 | 50 | #endif /* UtilDefines_h */ 51 | -------------------------------------------------------------------------------- /HackMenu/Bsphp/memui/lz4/mem.h: -------------------------------------------------------------------------------- 1 | // 2 | // mem.h 3 | // mem 4 | // 5 | // Created by Liu Junqi on 3/23/18. 6 | // Copyright © 2018 DeviLeo. All rights reserved. 7 | // 8 | 9 | #ifndef mem_h 10 | #define mem_h 11 | 12 | #include 13 | #include 14 | #include 15 | #include 16 | #include 17 | #include 18 | #include 19 | #include 20 | #include "search_result.h" 21 | 22 | //void all_processes(int uid); 23 | //mach_port_t get_task(int pid); 24 | //vm_map_offset_t get_base_address(mach_port_t task); 25 | void read_mem(mach_port_t task); 26 | void *read_range_mem(mach_port_t task, mach_vm_address_t address, int forward, int backward, mach_vm_address_t *ret_address, mach_vm_size_t *ret_data_size); 27 | int write_mem(mach_port_t task, mach_vm_address_t address, void *value, int size); 28 | void print_mem(void *data, mach_vm_size_t data_size); 29 | search_result_chain_t near_mem_search_func(void *value,size_t size,int type,search_result_chain_t chain,int *length,int range); 30 | void review_mem_in_chain(mach_port_t task, search_result_chain_t chain); 31 | search_result_chain_t search_mem(mach_port_t task, void *value, int size, int type, int comparison, search_result_chain_t chain, int *length); 32 | 33 | #endif /* mem_h */ 34 | -------------------------------------------------------------------------------- /HackMenu/Bsphp/memui/lz4/mem_utils.c: -------------------------------------------------------------------------------- 1 | // 2 | // mem_utils.c 3 | // memui 4 | // 5 | // Created by Liu Junqi on 4/24/18. 6 | // Copyright © 2018 DeviLeo. All rights reserved. 7 | // 8 | 9 | #include "mem_utils.h" 10 | 11 | void *search_uint8(const void *b, size_t len, uint8_t v, int comparison) { 12 | size_t vlen = sizeof(uint8_t); 13 | char *sp = (char *)b; 14 | char *eos = sp + len - vlen; 15 | 16 | if(!(b && len && v)) return NULL; 17 | 18 | while (sp <= eos) { 19 | uint8_t v1 = *(uint8_t *)(sp); 20 | switch (comparison) { 21 | case SearchResultComparisonEQ: if (v1 == v) return sp; break; 22 | case SearchResultComparisonLT: if (v1 < v) return sp; break; 23 | case SearchResultComparisonLE: if (v1 <= v) return sp; break; 24 | case SearchResultComparisonGE: if (v1 >= v) return sp; break; 25 | case SearchResultComparisonGT: if (v1 > v) return sp; break; 26 | } 27 | sp++; 28 | } 29 | 30 | return NULL; 31 | } 32 | 33 | void *search_int8(const void *b, size_t len, int8_t v, int comparison) { 34 | size_t vlen = sizeof(int8_t); 35 | char *sp = (char *)b; 36 | char *eos = sp + len - vlen; 37 | 38 | if(!(b && len && v)) return NULL; 39 | 40 | while (sp <= eos) { 41 | int8_t v1 = *(int8_t *)(sp); 42 | switch (comparison) { 43 | case SearchResultComparisonEQ: if (v1 == v) return sp; break; 44 | case SearchResultComparisonLT: if (v1 < v) return sp; break; 45 | case SearchResultComparisonLE: if (v1 <= v) return sp; break; 46 | case SearchResultComparisonGE: if (v1 >= v) return sp; break; 47 | case SearchResultComparisonGT: if (v1 > v) return sp; break; 48 | } 49 | sp++; 50 | } 51 | 52 | return NULL; 53 | } 54 | 55 | void *search_uint16(const void *b, size_t len, uint16_t v, int comparison) { 56 | size_t vlen = sizeof(uint16_t); 57 | char *sp = (char *)b; 58 | char *eos = sp + len - vlen; 59 | 60 | if(!(b && len && v)) return NULL; 61 | 62 | while (sp <= eos) { 63 | uint16_t v1 = *(uint16_t *)(sp); 64 | switch (comparison) { 65 | case SearchResultComparisonEQ: if (v1 == v) return sp; break; 66 | case SearchResultComparisonLT: if (v1 < v) return sp; break; 67 | case SearchResultComparisonLE: if (v1 <= v) return sp; break; 68 | case SearchResultComparisonGE: if (v1 >= v) return sp; break; 69 | case SearchResultComparisonGT: if (v1 > v) return sp; break; 70 | } 71 | sp++; 72 | } 73 | 74 | return NULL; 75 | } 76 | 77 | void *search_int16(const void *b, size_t len, int16_t v, int comparison) { 78 | size_t vlen = sizeof(int16_t); 79 | char *sp = (char *)b; 80 | char *eos = sp + len - vlen; 81 | 82 | if(!(b && len && v)) return NULL; 83 | 84 | while (sp <= eos) { 85 | int16_t v1 = *(int16_t *)(sp); 86 | switch (comparison) { 87 | case SearchResultComparisonEQ: if (v1 == v) return sp; break; 88 | case SearchResultComparisonLT: if (v1 < v) return sp; break; 89 | case SearchResultComparisonLE: if (v1 <= v) return sp; break; 90 | case SearchResultComparisonGE: if (v1 >= v) return sp; break; 91 | case SearchResultComparisonGT: if (v1 > v) return sp; break; 92 | } 93 | sp++; 94 | } 95 | 96 | return NULL; 97 | } 98 | 99 | void *search_uint32(const void *b, size_t len, uint32_t v, int comparison) { 100 | size_t vlen = sizeof(uint32_t); 101 | char *sp = (char *)b; 102 | char *eos = sp + len - vlen; 103 | 104 | if(!(b && len && v)) return NULL; 105 | 106 | while (sp <= eos) { 107 | uint32_t v1 = *(uint32_t *)(sp); 108 | switch (comparison) { 109 | case SearchResultComparisonEQ: if (v1 == v) return sp; break; 110 | case SearchResultComparisonLT: if (v1 < v) return sp; break; 111 | case SearchResultComparisonLE: if (v1 <= v) return sp; break; 112 | case SearchResultComparisonGE: if (v1 >= v) return sp; break; 113 | case SearchResultComparisonGT: if (v1 > v) return sp; break; 114 | } 115 | sp++; 116 | } 117 | 118 | return NULL; 119 | } 120 | 121 | void *search_int32(const void *b, size_t len, int32_t v, int comparison) { 122 | size_t vlen = sizeof(int32_t); 123 | char *sp = (char *)b; 124 | char *eos = sp + len - vlen; 125 | 126 | if(!(b && len)) return NULL; 127 | 128 | while (sp <= eos) { 129 | int32_t v1 = *(int32_t *)(sp); 130 | switch (comparison) { 131 | case SearchResultComparisonEQ: if (v1 == v) return sp; break; 132 | case SearchResultComparisonLT: if (v1 < v) return sp; break; 133 | case SearchResultComparisonLE: if (v1 <= v) return sp; break; 134 | case SearchResultComparisonGE: if (v1 >= v) return sp; break; 135 | case SearchResultComparisonGT: if (v1 > v) return sp; break; 136 | } 137 | sp++; 138 | } 139 | 140 | return NULL; 141 | } 142 | 143 | void *search_uint64(const void *b, size_t len, uint64_t v, int comparison) { 144 | size_t vlen = sizeof(uint64_t); 145 | char *sp = (char *)b; 146 | char *eos = sp + len - vlen; 147 | 148 | if(!(b && len && v)) return NULL; 149 | 150 | while (sp <= eos) { 151 | uint64_t v1 = *(uint64_t *)(sp); 152 | switch (comparison) { 153 | case SearchResultComparisonEQ: if (v1 == v) return sp; break; 154 | case SearchResultComparisonLT: if (v1 < v) return sp; break; 155 | case SearchResultComparisonLE: if (v1 <= v) return sp; break; 156 | case SearchResultComparisonGE: if (v1 >= v) return sp; break; 157 | case SearchResultComparisonGT: if (v1 > v) return sp; break; 158 | } 159 | sp++; 160 | } 161 | 162 | return NULL; 163 | } 164 | 165 | void *search_int64(const void *b, size_t len, int64_t v, int comparison) { 166 | size_t vlen = sizeof(int64_t); 167 | char *sp = (char *)b; 168 | char *eos = sp + len - vlen; 169 | 170 | if(!(b && len && v)) return NULL; 171 | 172 | while (sp <= eos) { 173 | int64_t v1 = *(int64_t *)(sp); 174 | switch (comparison) { 175 | case SearchResultComparisonEQ: if (v1 == v) return sp; break; 176 | case SearchResultComparisonLT: if (v1 < v) return sp; break; 177 | case SearchResultComparisonLE: if (v1 <= v) return sp; break; 178 | case SearchResultComparisonGE: if (v1 >= v) return sp; break; 179 | case SearchResultComparisonGT: if (v1 > v) return sp; break; 180 | } 181 | sp++; 182 | } 183 | 184 | return NULL; 185 | } 186 | 187 | void *search_float(const void *b, size_t len, float v, int comparison) { 188 | size_t vlen = sizeof(float); 189 | char *sp = (char *)b; 190 | char *eos = sp + len - vlen; 191 | 192 | if(!(b && len && v)) return NULL; 193 | 194 | while (sp <= eos) { 195 | float v1 = *(float *)(sp); 196 | switch (comparison) { 197 | case SearchResultComparisonEQ: if (v1 == v) return sp; break; 198 | case SearchResultComparisonLT: if (v1 < v) return sp; break; 199 | case SearchResultComparisonLE: if (v1 <= v) return sp; break; 200 | case SearchResultComparisonGE: if (v1 >= v) return sp; break; 201 | case SearchResultComparisonGT: if (v1 > v) return sp; break; 202 | } 203 | sp++; 204 | } 205 | 206 | return NULL; 207 | } 208 | 209 | void *search_double(const void *b, size_t len, double v, int comparison) { 210 | size_t vlen = sizeof(double); 211 | char *sp = (char *)b; 212 | char *eos = sp + len - vlen; 213 | 214 | if(!(b && len && v)) return NULL; 215 | 216 | while (sp <= eos) { 217 | double v1 = *(double *)(sp); 218 | switch (comparison) { 219 | case SearchResultComparisonEQ: if (v1 == v) return sp; break; 220 | case SearchResultComparisonLT: if (v1 < v) return sp; break; 221 | case SearchResultComparisonLE: if (v1 <= v) return sp; break; 222 | case SearchResultComparisonGE: if (v1 >= v) return sp; break; 223 | case SearchResultComparisonGT: if (v1 > v) return sp; break; 224 | } 225 | sp++; 226 | } 227 | 228 | return NULL; 229 | } 230 | 231 | void *search_mem_value(const void *b, size_t len, void *v, size_t vlen, int type, int comparison) { 232 | if (type == SearchResultValueTypeUInt8) { 233 | uint8_t vv = *(uint8_t *)(v); 234 | return search_uint8(b, len, vv, comparison); 235 | } else if (type == SearchResultValueTypeSInt8) { 236 | int8_t vv = *(int8_t *)(v); 237 | return search_int8(b, len, vv, comparison); 238 | } else if (type == SearchResultValueTypeUInt16) { 239 | uint16_t vv = *(uint16_t *)(v); 240 | return search_uint16(b, len, vv, comparison); 241 | } else if (type == SearchResultValueTypeSInt16) { 242 | int16_t vv = *(int16_t *)(v); 243 | return search_int16(b, len, vv, comparison); 244 | } else if (type == SearchResultValueTypeUInt32) { 245 | uint32_t vv = *(uint32_t *)(v); 246 | return search_uint32(b, len, vv, comparison); 247 | } else if (type == SearchResultValueTypeSInt32) { 248 | int32_t vv = *(int32_t *)(v); 249 | return search_int32(b, len, vv, comparison); 250 | } else if (type == SearchResultValueTypeUInt64) { 251 | uint64_t vv = *(uint64_t *)(v); 252 | return search_uint64(b, len, vv, comparison); 253 | } else if (type == SearchResultValueTypeSInt64) { 254 | int64_t vv = *(int64_t *)(v); 255 | return search_int64(b, len, vv, comparison); 256 | } else if (type == SearchResultValueTypeFloat) { 257 | float vv = *(float *)(v); 258 | return search_float(b, len, vv, comparison); 259 | } else if (type == SearchResultValueTypeDouble) { 260 | double vv = *(double *)(v); 261 | return search_double(b, len, vv, comparison); 262 | } 263 | 264 | return NULL; 265 | } 266 | -------------------------------------------------------------------------------- /HackMenu/Bsphp/memui/lz4/mem_utils.h: -------------------------------------------------------------------------------- 1 | // 2 | // mem_utils.h 3 | // memui 4 | // 5 | // Created by Liu Junqi on 4/24/18. 6 | // Copyright © 2018 DeviLeo. All rights reserved. 7 | // 8 | 9 | #ifndef mem_utils_h 10 | #define mem_utils_h 11 | 12 | #include 13 | #include "search_result_def.h" 14 | 15 | void *search_mem_value(const void *b, size_t len, void *v, size_t vlen, int type, int comparison); 16 | 17 | #endif /* mem_utils_h */ 18 | -------------------------------------------------------------------------------- /HackMenu/Bsphp/memui/lz4/search_result.c: -------------------------------------------------------------------------------- 1 | // 2 | // search_result.c 3 | // mem 4 | // 5 | // Created by Liu Junqi on 3/27/18. 6 | // Copyright © 2018 DeviLeo. All rights reserved. 7 | // 8 | 9 | #include "search_result.h" 10 | 11 | void *value_of_type(const char *value_str, int type, int *value_size) { 12 | int size = size_of_type(type); 13 | if (size == 0) return NULL; 14 | void *v = malloc(size); 15 | if (type == SearchResultValueTypeFloat || type == SearchResultValueTypeDouble) { 16 | double value = atof(value_str); 17 | if (type == SearchResultValueTypeFloat) { 18 | float vv = (float)value; 19 | memcpy(v, &vv, size); 20 | } else { 21 | memcpy(v, &value, size); 22 | } 23 | } else { 24 | uint64_t value = atoll(value_str); 25 | if (type == SearchResultValueTypeUInt8) { 26 | uint8_t vv = (uint8_t)value; 27 | memcpy(v, &vv, size); 28 | } else if (type == SearchResultValueTypeSInt8) { 29 | int8_t vv = (int8_t)value; 30 | memcpy(v, &vv, size); 31 | } else if (type == SearchResultValueTypeUInt16) { 32 | uint16_t vv = (uint16_t)value; 33 | memcpy(v, &vv, size); 34 | } else if (type == SearchResultValueTypeSInt16) { 35 | int16_t vv = (int16_t)value; 36 | memcpy(v, &vv, size); 37 | } else if (type == SearchResultValueTypeUInt32) { 38 | uint32_t vv = (uint32_t)value; 39 | memcpy(v, &vv, size); 40 | } else if (type == SearchResultValueTypeSInt32) { 41 | int32_t vv = (int32_t)value; 42 | memcpy(v, &vv, size); 43 | } else if (type == SearchResultValueTypeUInt64) { 44 | memcpy(v, &value, size); 45 | } else if (type == SearchResultValueTypeSInt64) { 46 | int64_t vv = (int64_t)value; 47 | memcpy(v, &vv, size); 48 | } 49 | } 50 | if (value_size) *value_size = size; 51 | return v; 52 | } 53 | 54 | int size_of_type(int type) { 55 | int size = 0; 56 | if (type == SearchResultValueTypeUInt8) { 57 | size = sizeof(uint8_t); 58 | } else if (type == SearchResultValueTypeSInt8) { 59 | size = sizeof(int8_t); 60 | } else if (type == SearchResultValueTypeUInt16) { 61 | size = sizeof(uint16_t); 62 | } else if (type == SearchResultValueTypeSInt16) { 63 | size = sizeof(int16_t); 64 | } else if (type == SearchResultValueTypeUInt32) { 65 | size = sizeof(uint32_t); 66 | } else if (type == SearchResultValueTypeSInt32) { 67 | size = sizeof(int32_t); 68 | } else if (type == SearchResultValueTypeUInt64) { 69 | size = sizeof(uint64_t); 70 | } else if (type == SearchResultValueTypeSInt64) { 71 | size = sizeof(int64_t); 72 | } else if (type == SearchResultValueTypeFloat) { 73 | size = sizeof(float); 74 | } else if (type == SearchResultValueTypeDouble) { 75 | size = sizeof(double); 76 | } 77 | return size; 78 | } 79 | 80 | int compare_value(void *value1, int size1, void *value2, int size2, int type) { 81 | int r = 0; 82 | if (type == SearchResultValueTypeUInt8) { 83 | uint8_t v1 = *(uint8_t *)(value1); 84 | uint8_t v2 = *(uint8_t *)(value2); 85 | r = (v1 == v2) ? 0 : (v1 < v2) ? -1 : 1; 86 | } else if (type == SearchResultValueTypeSInt8) { 87 | int8_t v1 = *(int8_t *)(value1); 88 | int8_t v2 = *(int8_t *)(value2); 89 | r = (v1 == v2) ? 0 : (v1 < v2) ? -1 : 1; 90 | } else if (type == SearchResultValueTypeUInt16) { 91 | uint16_t v1 = *(uint16_t *)(value1); 92 | uint16_t v2 = *(uint16_t *)(value2); 93 | r = (v1 == v2) ? 0 : (v1 < v2) ? -1 : 1; 94 | } else if (type == SearchResultValueTypeSInt16) { 95 | int16_t v1 = *(int16_t *)(value1); 96 | int16_t v2 = *(int16_t *)(value2); 97 | r = (v1 == v2) ? 0 : (v1 < v2) ? -1 : 1; 98 | } else if (type == SearchResultValueTypeUInt32) { 99 | uint32_t v1 = *(uint32_t *)(value1); 100 | uint32_t v2 = *(uint32_t *)(value2); 101 | r = (v1 == v2) ? 0 : (v1 < v2) ? -1 : 1; 102 | } else if (type == SearchResultValueTypeSInt32) { 103 | int32_t v1 = *(int32_t *)(value1); 104 | int32_t v2 = *(int32_t *)(value2); 105 | r = (v1 == v2) ? 0 : (v1 < v2) ? -1 : 1; 106 | } else if (type == SearchResultValueTypeUInt64) { 107 | uint64_t v1 = *(uint64_t *)(value1); 108 | uint64_t v2 = *(uint64_t *)(value2); 109 | r = (v1 == v2) ? 0 : (v1 < v2) ? -1 : 1; 110 | } else if (type == SearchResultValueTypeSInt64) { 111 | int64_t v1 = *(int64_t *)(value1); 112 | int64_t v2 = *(int64_t *)(value2); 113 | r = (v1 == v2) ? 0 : (v1 < v2) ? -1 : 1; 114 | } else if (type == SearchResultValueTypeFloat) { 115 | float v1 = *(float *)(value1); 116 | float v2 = *(float *)(value2); 117 | r = (v1 == v2) ? 0 : (v1 < v2) ? -1 : 1; 118 | } else if (type == SearchResultValueTypeDouble) { 119 | double v1 = *(double *)(value1); 120 | double v2 = *(double *)(value2); 121 | r = (v1 == v2) ? 0 : (v1 < v2) ? -1 : 1; 122 | } else { 123 | if (size1 < size2) r = -1; 124 | else if (size1 > size2) r = 1; 125 | else { 126 | char *v1 = (char *)(value1); 127 | char *v2 = (char *)(value2); 128 | for (int i = 0; i < size1; ++i) { 129 | if (v1 == v2) continue; 130 | else { 131 | if (v1 < v2) r = -1; 132 | else r = 1; 133 | break; 134 | } 135 | } 136 | } 137 | } 138 | return r; 139 | } 140 | 141 | void print_chain(search_result_chain_t chain) { 142 | printf("%llX", chain->result->address); 143 | 144 | printf(" %c%c%c ", 145 | (chain->result->protection & VM_PROT_READ) ? 'r' : '-', 146 | (chain->result->protection & VM_PROT_WRITE) ? 'w' : '-', 147 | (chain->result->protection & VM_PROT_EXECUTE) ? 'x' : '-' 148 | ); 149 | 150 | int type = chain->result->type; 151 | if (type == SearchResultValueTypeUInt8) { 152 | uint8_t v = *(uint8_t *)(chain->result->value); 153 | printf("%u", v); 154 | } else if (type == SearchResultValueTypeSInt8) { 155 | int8_t v = *(int8_t *)(chain->result->value); 156 | printf("%d", v); 157 | } else if (type == SearchResultValueTypeUInt16) { 158 | uint16_t v = *(uint16_t *)(chain->result->value); 159 | printf("%u", v); 160 | } else if (type == SearchResultValueTypeSInt16) { 161 | int16_t v = *(int16_t *)(chain->result->value); 162 | printf("%d", v); 163 | } else if (type == SearchResultValueTypeUInt32) { 164 | uint32_t v = *(uint32_t *)(chain->result->value); 165 | printf("%u", v); 166 | } else if (type == SearchResultValueTypeSInt32) { 167 | int32_t v = *(int32_t *)(chain->result->value); 168 | printf("%d", v); 169 | } else if (type == SearchResultValueTypeUInt64) { 170 | uint64_t v = *(uint64_t *)(chain->result->value); 171 | printf("%llu", v); 172 | } else if (type == SearchResultValueTypeSInt64) { 173 | int64_t v = *(int64_t *)(chain->result->value); 174 | printf("%lld", v); 175 | } else if (type == SearchResultValueTypeFloat) { 176 | float v = *(float *)(chain->result->value); 177 | printf("%f", v); 178 | } else if (type == SearchResultValueTypeDouble) { 179 | double v = *(double *)(chain->result->value); 180 | printf("%f", v); 181 | } else { 182 | char *v = (char *)(chain->result->value); 183 | for (int i = 0; i < chain->result->size; ++i) { 184 | printf("%02X ", v[i]); 185 | } 186 | } 187 | printf("\n"); 188 | } 189 | 190 | search_result_chain_t create_search_result_chain(mach_vm_address_t address, void *value, int size, int type, int protection) { 191 | search_result_t result = malloc(sizeof(struct search_result)); 192 | result->address = address; 193 | result->value = malloc(size); 194 | memcpy(result->value, value, size); 195 | result->size = size; 196 | result->type = type; 197 | result->protection = protection; 198 | search_result_chain_t chain = malloc(sizeof(struct search_result_chain)); 199 | chain->result = result; 200 | chain->next = NULL; 201 | return chain; 202 | } 203 | 204 | void destroy_search_result_chain(search_result_chain_t chain) { 205 | if (chain == NULL) return; 206 | chain->next = NULL; 207 | if (chain->result) { 208 | if (chain->result->value) { 209 | free(chain->result->value); 210 | } 211 | free(chain->result); 212 | } 213 | free(chain); 214 | } 215 | 216 | void destroy_all_search_result_chain(search_result_chain_t chain) { 217 | search_result_chain_t next = NULL; 218 | while (chain) { 219 | next = chain->next; 220 | destroy_search_result_chain(chain); 221 | chain = next; 222 | } 223 | } 224 | 225 | void show_search_result_chain(search_result_chain_t chain) { 226 | int count = 0; 227 | while (chain) { 228 | if (chain->result) { 229 | ++count; 230 | printf("[%d]", count); 231 | print_chain(chain); 232 | } 233 | chain = chain->next; 234 | } 235 | } 236 | -------------------------------------------------------------------------------- /HackMenu/Bsphp/memui/lz4/search_result.h: -------------------------------------------------------------------------------- 1 | // 2 | // search_result.h 3 | // mem 4 | // 5 | // Created by Liu Junqi on 3/27/18. 6 | // Copyright © 2018 DeviLeo. All rights reserved. 7 | // 8 | 9 | #ifndef search_result_h 10 | #define search_result_h 11 | 12 | #include 13 | #include 14 | #include "search_result_def.h" 15 | 16 | search_result_chain_t create_search_result_chain(mach_vm_address_t address, void *value, int size, int type, int protection); 17 | void destroy_search_result_chain(search_result_chain_t chain); 18 | void destroy_all_search_result_chain(search_result_chain_t chain); 19 | void show_search_result_chain(search_result_chain_t chain); 20 | int compare_value(void *value1, int size1, void *value2, int size2, int type); 21 | int size_of_type(int type); 22 | void *value_of_type(const char *value_str, int type, int *value_size); 23 | 24 | #endif /* search_result_h */ 25 | -------------------------------------------------------------------------------- /HackMenu/Bsphp/memui/lz4/search_result_def.h: -------------------------------------------------------------------------------- 1 | // 2 | // search_result_def.h 3 | // mem 4 | // 5 | // Created by Liu Junqi on 3/27/18. 6 | // Copyright © 2018 DeviLeo. All rights reserved. 7 | // 8 | 9 | #ifndef search_result_def_h 10 | #define search_result_def_h 11 | 12 | #include 13 | 14 | #define SearchResultValueTypeUndef 0 15 | #define SearchResultValueTypeUInt8 1 16 | #define SearchResultValueTypeSInt8 2 17 | #define SearchResultValueTypeUInt16 3 18 | #define SearchResultValueTypeSInt16 4 19 | #define SearchResultValueTypeUInt32 5 20 | #define SearchResultValueTypeSInt32 6 21 | #define SearchResultValueTypeUInt64 7 22 | #define SearchResultValueTypeSInt64 8 23 | #define SearchResultValueTypeFloat 9 24 | #define SearchResultValueTypeDouble 10 25 | 26 | #define SearchResultComparisonLT -2 27 | #define SearchResultComparisonLE -1 28 | #define SearchResultComparisonEQ 0 29 | #define SearchResultComparisonGE 1 30 | #define SearchResultComparisonGT 2 31 | 32 | struct search_result { 33 | mach_vm_address_t address; 34 | void *value; 35 | int size; 36 | int type; 37 | int protection; 38 | }; 39 | typedef struct search_result *search_result_t; 40 | 41 | struct search_result_chain { 42 | search_result_t result; 43 | struct search_result_chain *next; 44 | }; 45 | typedef struct search_result_chain *search_result_chain_t; 46 | 47 | #endif /* search_result_def_h */ 48 | -------------------------------------------------------------------------------- /HackMenu/ESP/ESP.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | NS_ASSUME_NONNULL_BEGIN 4 | 5 | typedef void (^JHCJDrawDataFactoryFetchDataBlock)(NSArray *data, NSArray *hpData, NSArray *disData); 6 | 7 | @interface HZ : NSObject 8 | 9 | + (instancetype)factory; 10 | 11 | - (void)fetchData:(JHCJDrawDataFactoryFetchDataBlock)block; 12 | 13 | @end 14 | 15 | NS_ASSUME_NONNULL_END 16 | -------------------------------------------------------------------------------- /HackMenu/ESP/ESP.m: -------------------------------------------------------------------------------- 1 | 2 | #import "ESP.h" 3 | #import 4 | #import 5 | #import 6 | #import 7 | #import 8 | #import 9 | #import 10 | 11 | #define kLogOpen 0 12 | 13 | float juzhenshuju[16]; 14 | 15 | typedef struct Vector{ 16 | float X; 17 | float Y; 18 | float Z; 19 | }Vector; 20 | 21 | @interface HZ() 22 | @property (nonatomic, assign) CGFloat scale; 23 | @property (nonatomic, assign) CGFloat theWidth; 24 | @property (nonatomic, assign) CGFloat theHeight; 25 | @end 26 | 27 | @implementation HZ 28 | 29 | + (instancetype)factory 30 | { 31 | static HZ *fact; 32 | static dispatch_once_t onceToken; 33 | dispatch_once(&onceToken, ^{ 34 | fact = [[HZ alloc] init]; 35 | }); 36 | return fact; 37 | } 38 | 39 | - (instancetype)init 40 | { 41 | self = [super init]; 42 | if (self) { 43 | UIScreen *screen = [UIScreen mainScreen]; 44 | CGFloat width = screen.bounds.size.width; 45 | CGFloat height = screen.bounds.size.height; 46 | 47 | _scale = screen.scale; 48 | _theWidth = width * [UIScreen mainScreen].scale; 49 | _theHeight = height * [UIScreen mainScreen].scale; 50 | } 51 | return self; 52 | } 53 | 54 | #pragma mark - private 55 | 56 | - (BOOL)vmreadData:(void *)buf address:(long)address length:(long)length 57 | { 58 | vm_size_t size = 0; 59 | kern_return_t error = vm_read_overwrite(mach_task_self(), (vm_address_t)address, length, (vm_address_t)buf, &size); 60 | if(error != KERN_SUCCESS || size != length){ 61 | return NO; 62 | } 63 | return YES; 64 | } 65 | 66 | - (Vector)word2Screen:(Vector)vector matrix:(float *)matrix 67 | { 68 | struct Vector outVec = {3100,3100}; 69 | 70 | float viewW = matrix[3] * vector.X + matrix[7] * vector.Y + matrix[11] * vector.Z + matrix[15]; 71 | if (viewW < 0.01) { 72 | return outVec; 73 | } 74 | 75 | float x = _theWidth + (matrix[0]*vector.X + matrix[4]*vector.Y + matrix[8]*vector.Z + matrix[12]) / viewW * _theWidth; 76 | float y = _theHeight - (matrix[1]*vector.X + matrix[5]*vector.Y + matrix[9]*vector.Z + matrix[13]) / viewW * _theHeight; 77 | 78 | outVec.X = x/2; 79 | outVec.Y = y/2; 80 | 81 | return outVec; 82 | } 83 | 84 | #pragma mark - public 85 | 86 | 87 | - (void)fetchData:(JHCJDrawDataFactoryFetchDataBlock)block 88 | { 89 | 90 | 91 | // 获取基址 92 | long mh_addr = (long)_dyld_get_image_header(0); 93 | long GWorld = *(long*)(mh_addr + 0x0876AEC0); 94 | if(!GWorld) { return; } 95 | long PLevel = *(long*)(GWorld + 0x30); 96 | if(!PLevel) { return; } 97 | int max = *(int*)(PLevel + 0xAC); 98 | int count = *(int*)(PLevel + 0xA8); 99 | long Actors = *(long*)(PLevel + 0xA0); 100 | if(!(Actors && count > 0 && count < max)) { return; } 101 | long ziji = *(long*)(PLevel + 0xB0); 102 | if(!ziji) { return; } 103 | ziji = *(long*)(ziji + 0x48); 104 | if(!ziji) { return; } 105 | Vector myzb = {0}; 106 | if(ziji){ [self vmreadData:&myzb address:ziji + 0x1F08 length:12]; 107 | 108 | } 109 | 110 | if(!ziji) { return; } 111 | //矩阵数据 112 | long juzhen = *(long*)(mh_addr + 0x8522000+0xB8);// 113 | if(!juzhen) { return; } 114 | long juzhen2 = *(long*)(juzhen+0x98); 115 | if(!juzhen2) { return; } 116 | float* yxjz = (float*)(juzhen2+0x750); 117 | [self vmreadData:juzhenshuju address:(long)yxjz length:16*4]; 118 | //复制数组 119 | NSMutableArray *data = @[].mutableCopy; 120 | NSMutableArray *hpData = @[].mutableCopy; 121 | NSMutableArray *disData = @[].mutableCopy; 122 | 123 | for (int i = 0; i < count; i++) { 124 | 125 | long man = ((long*)Actors)[i]; 126 | 127 | if(!man || man == ziji) { continue; } 128 | 129 | Vector zb = {0}; 130 | [self vmreadData:&zb address:(man + 0x1F08) length:12]; 131 | 132 | //血量 133 | float xue = 0; 134 | [self vmreadData:&xue address:(man + 0xBC0) length:4]; 135 | 136 | // 距离 137 | CGFloat distX = (zb.X - myzb.X) / 100; 138 | CGFloat distY = (zb.Y - myzb.Y) / 100; 139 | CGFloat distance = (distX * distX) + (distY * distY); 140 | CGFloat distZ = (zb.Z - myzb.Z)/100; 141 | distance = sqrt((distZ * distZ) + distance); 142 | 143 | if(distance > 0 && distance <= 400 && xue>0 &&xue <= 100) { 144 | 145 | Vector zb1 = zb; 146 | zb1.Z += 80; 147 | 148 | Vector zb2 = zb; 149 | zb2.Z -= 80; 150 | 151 | Vector fkzb1 = [self word2Screen:zb1 matrix:yxjz]; 152 | Vector fkzb2 = [self word2Screen:zb2 matrix:yxjz]; 153 | 154 | float height = fkzb2.Y - fkzb1.Y; 155 | float width = height / 2; 156 | 157 | float originX = fkzb1.X - width / 2; 158 | float originY = fkzb1.Y; 159 | 160 | // 方框 161 | CGRect rect = CGRectMake(originX/_scale, originY/_scale, width/_scale, height/_scale); 162 | CGFloat w = rect.size.width; 163 | CGFloat h = rect.size.height; 164 | // 血条 165 | CGFloat hpY = xue * w / 50; 166 | CGFloat hpX = xue * h / 100; 167 | 168 | 169 | [data addObject:[NSValue valueWithCGRect:rect]]; 170 | [hpData addObject:@(xue)]; 171 | [disData addObject:@(distance)]; 172 | } 173 | } 174 | 175 | if (block) { 176 | block(data, hpData, disData); 177 | } 178 | } 179 | 180 | @end 181 | -------------------------------------------------------------------------------- /HackMenu/ESP/ESPView.h: -------------------------------------------------------------------------------- 1 | // 2 | // JHCJDrawView.h 3 | // JHCJDraw 4 | // 5 | // Created by 佚名 on 2021/1/7. 6 | // 7 | 8 | #import 9 | 10 | NS_ASSUME_NONNULL_BEGIN 11 | 12 | @interface HZKG : UIView 13 | 14 | + (instancetype)cjDrawView; 15 | + (void)kaiguanToushis: (UISwitch*) zhuangtai ; 16 | - (void)clear; 17 | - (void)show; 18 | - (void)hide; 19 | - (void)configWithData:(NSArray *)rects hpData:(NSArray *)hpData disData:(NSArray *)disData; 20 | 21 | @end 22 | 23 | 24 | NS_ASSUME_NONNULL_END 25 | -------------------------------------------------------------------------------- /HackMenu/ESP/Fiddler/NCSessionConfiguration.h: -------------------------------------------------------------------------------- 1 | 2 | 3 | #import 4 | 5 | @interface SessionConfiguration : NSObject 6 | 7 | @property (nonatomic,assign) BOOL isSwizzle; 8 | 9 | + (SessionConfiguration *)defaultConfiguration; 10 | - (void)load;//加载 11 | - (void)unload;//不加载 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /HackMenu/ESP/Fiddler/NCSessionConfiguration.m: -------------------------------------------------------------------------------- 1 | 2 | 3 | #import "NCSessionConfiguration.h" 4 | #import 5 | #import "NCURLProtocol.h" 6 | 7 | @implementation SessionConfiguration 8 | 9 | + (SessionConfiguration *)defaultConfiguration { 10 | static SessionConfiguration *staticConfiguration; 11 | static dispatch_once_t onceToken; 12 | dispatch_once(&onceToken, ^{ 13 | staticConfiguration=[[SessionConfiguration alloc] init]; 14 | }); 15 | return staticConfiguration; 16 | } 17 | 18 | - (instancetype)init { 19 | self = [super init]; 20 | if (self) { 21 | self.isSwizzle = NO; 22 | } 23 | return self; 24 | } 25 | 26 | - (void)load { 27 | self.isSwizzle=YES; 28 | Class cls = NSClassFromString(@"__NSCFURLSessionConfiguration") ?: NSClassFromString(@"NSURLSessionConfiguration"); 29 | [self swizzleSelector:@selector(protocolClasses) fromClass:cls toClass:[self class]]; 30 | 31 | } 32 | 33 | - (void)unload { 34 | self.isSwizzle=NO; 35 | Class cls = NSClassFromString(@"__NSCFURLSessionConfiguration") ?: NSClassFromString(@"NSURLSessionConfiguration"); 36 | [self swizzleSelector:@selector(protocolClasses) fromClass:cls toClass:[self class]]; 37 | } 38 | 39 | - (void)swizzleSelector:(SEL)selector fromClass:(Class)original toClass:(Class)stub { 40 | Method originalMethod = class_getInstanceMethod(original, selector); 41 | Method stubMethod = class_getInstanceMethod(stub, selector); 42 | if (!originalMethod || !stubMethod) { 43 | [NSException raise:NSInternalInconsistencyException format:@"Couldn't load NEURLSessionConfiguration."]; 44 | } 45 | method_exchangeImplementations(originalMethod, stubMethod); 46 | } 47 | 48 | - (NSArray *)protocolClasses { 49 | // 如果还有其他的监控protocol,也可以在这里加进去 50 | return @[[URLProtocol class]]; 51 | } 52 | 53 | @end 54 | -------------------------------------------------------------------------------- /HackMenu/ESP/Fiddler/NCURLProtocol.h: -------------------------------------------------------------------------------- 1 | 2 | 3 | #import 4 | 5 | @interface URLProtocol : NSURLProtocol 6 | 7 | /// 开始监听 8 | + (void)startMonitor; 9 | 10 | /// 停止监听 11 | + (void)stopMonitor; 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /HackMenu/IGG-For-ShiSanGe-Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header for all source files of the 'HackMenu' target in the 'HackMenu' project 3 | // 4 | 5 | #ifdef __OBJC__ 6 | #import 7 | 8 | 9 | 10 | #endif 11 | -------------------------------------------------------------------------------- /HackMenu/IGG/JHDragView.h: -------------------------------------------------------------------------------- 1 | 2 | #import 3 | 4 | NS_ASSUME_NONNULL_BEGIN 5 | 6 | @interface JHDragView : UIView 7 | @end 8 | 9 | NS_ASSUME_NONNULL_END 10 | -------------------------------------------------------------------------------- /HackMenu/IGG/JHDragView.m: -------------------------------------------------------------------------------- 1 | 2 | #import "JHDragView.h" 3 | 4 | @implementation JHDragView 5 | 6 | - (instancetype)initWithFrame:(CGRect)frame 7 | { 8 | if (CGRectGetWidth(frame) <= 0 || 9 | CGRectGetHeight(frame) <= 0) { 10 | frame = CGRectMake([UIScreen mainScreen].bounds.size.width - 70, 130, 30, 30); 11 | //CGFloat width = MAX([UIScreen mainScreen].bounds.size.width,[UIScreen mainScreen].bounds.size.height); 12 | //frame = CGRectMake(width-70, 120, 65, 65); 13 | } 14 | 15 | self = [super initWithFrame:frame]; 16 | if (self) { 17 | //self.layer.borderColor = [UIColor colorWithRed: 0.50 green: 0.72 blue: 0.05 alpha: 0.50]; 18 | self.layer.borderColor = [[UIColor whiteColor] CGColor]; 19 | //self.layer.borderWidth = 0.95f; 20 | self.backgroundColor= [UIColor colorWithRed: 0.00 green: 0.00 blue: 0.00 alpha: 0.20]; 21 | 22 | 23 | //self.backgroundColor = [UIColor blackColor]; 24 | self.clipsToBounds = YES; 25 | self.layer.cornerRadius = CGRectGetWidth(self.bounds) / 2; 26 | self.alpha = 50.0f; 27 | 28 | dispatch_async(dispatch_get_global_queue(0, 0), ^{ 29 | NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"https://iosgods.cn/uploads/monthly_2021_01/no.png.13301dba752dc89d1151a92030f5d49b.png"]]; 30 | UIImage *decodedImage = [UIImage imageWithData:imageData]; 31 | 32 | dispatch_async(dispatch_get_main_queue(), ^{ 33 | self.layer.contents = (id)decodedImage.CGImage; 34 | }); 35 | }); 36 | } 37 | return self; 38 | } 39 | 40 | #pragma mark - override 41 | 42 | - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{} 43 | 44 | - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{ 45 | UITouch *touch = [touches anyObject]; 46 | CGPoint point = [touch locationInView:self.superview]; 47 | self.center = point; 48 | } 49 | 50 | - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{ 51 | [self shouldResetFrame]; 52 | } 53 | 54 | - (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event{ 55 | [self shouldResetFrame]; 56 | } 57 | 58 | #pragma mark - private 59 | 60 | - (void)shouldResetFrame 61 | { 62 | CGFloat midX = CGRectGetWidth(self.superview.frame)*0.5; 63 | CGFloat midY = CGRectGetHeight(self.superview.frame)*0.5; 64 | CGFloat maxX = midX*2; 65 | CGFloat maxY = midY*2; 66 | CGRect frame = self.frame; 67 | 68 | if (CGRectGetMinX(frame) < 0 || 69 | CGRectGetMidX(frame) <= midX) { 70 | frame.origin.x = 0; 71 | }else if (CGRectGetMidX(frame) > midX || 72 | CGRectGetMaxX(frame) > maxX) { 73 | frame.origin.x = maxX - CGRectGetWidth(frame); 74 | } 75 | 76 | if (CGRectGetMinY(frame) < 0) { 77 | frame.origin.y = 0; 78 | }else if (CGRectGetMaxY(frame) > maxY) { 79 | frame.origin.y = maxY - CGRectGetHeight(frame); 80 | } 81 | 82 | [UIView animateWithDuration:0.25 animations:^{ 83 | //CGFloat width = MAX([UIScreen mainScreen].bounds.size.width,[UIScreen mainScreen].bounds.size.height); 84 | //self.frame = CGRectMake(width-70, 100, 65, 65); 85 | //self.frame = frame; 86 | }]; 87 | } 88 | 89 | 90 | @end 91 | -------------------------------------------------------------------------------- /HackMenu/IGG/JHPP.h: -------------------------------------------------------------------------------- 1 | 2 | #import 3 | #import 4 | 5 | /// A tool for Push & Present ViewController 6 | @interface JHPP : NSObject 7 | 8 | 9 | /** 10 | Fetch current ViewController at the top. 11 | */ 12 | + (UIViewController *)currentViewController; 13 | 14 | /** 15 | Push a viewController. 16 | 17 | @param vc a viewController. 18 | @param responder a view or viewController. 19 | */ 20 | + (void)pushVC:(UIViewController *)vc from:(id)responder; 21 | + (void)pushVC:(UIViewController *)vc from:(id)responder animated:(BOOL)animated; 22 | 23 | /** 24 | Push a viewController. 25 | 26 | @param vcString name of viewController. 27 | @param dic viewController's property. 28 | @param responder a view or viewController. 29 | */ 30 | + (void)pushVC:(NSString *)vcString paramter:(NSDictionary *)dic from:(id)responder; 31 | + (void)pushVC:(NSString *)vcString paramter:(NSDictionary *)dic from:(id)responder animated:(BOOL)animated; 32 | 33 | /** 34 | Present a viewController. 35 | 36 | @param vc a viewController. 37 | @param responder a view or viewController. 38 | */ 39 | + (void)presentVC:(UIViewController *)vc from:(id)responder; 40 | + (void)presentVC:(UIViewController *)vc from:(id)responder animated:(BOOL)animated; 41 | + (void)presentVC:(UIViewController *)vc from:(id)responder navigation:(BOOL)navigation; 42 | + (void)presentVC:(UIViewController *)vc from:(id)responder navigation:(BOOL)navigation animated:(BOOL)animated; 43 | 44 | /** 45 | Present a viewController. 46 | 47 | @param vcString name of viewController. 48 | @param dic viewController's property. 49 | @param responder a view or viewController. 50 | */ 51 | + (void)presentVC:(NSString *)vcString paramter:(NSDictionary *)dic from:(id)responder; 52 | + (void)presentVC:(NSString *)vcString paramter:(NSDictionary *)dic from:(id)responder animated:(BOOL)animated; 53 | + (void)presentVC:(NSString *)vcString paramter:(NSDictionary *)dic from:(id)responder navigation:(BOOL)navigation; 54 | + (void)presentVC:(NSString *)vcString paramter:(NSDictionary *)dic from:(id)responder navigation:(BOOL)navigation animated:(BOOL)animated; 55 | 56 | @end 57 | -------------------------------------------------------------------------------- /HackMenu/IGG/JHPP.m: -------------------------------------------------------------------------------- 1 | 2 | #import "JHPP.h" 3 | #import "JHUIViewControllerDecoupler.h" 4 | 5 | @implementation JHPP 6 | 7 | #pragma mark --- public 8 | 9 | + (UIViewController *)currentViewController 10 | { 11 | return [self fetchViewControllerFromRootViewController]; 12 | } 13 | 14 | + (void)pushVC:(UIViewController *)vc from:(id)responder 15 | { 16 | [self pushVC:vc from:responder animated:YES]; 17 | } 18 | 19 | + (void)pushVC:(UIViewController *)vc from:(id)responder animated:(BOOL)animated 20 | { 21 | UIViewController *topVC = [self fetchViewController:responder]; 22 | [topVC.navigationController pushViewController:vc animated:animated]; 23 | } 24 | 25 | + (void)pushVC:(NSString *)vcString paramter:(NSDictionary *)dic from:(id)responder 26 | { 27 | [self pushVC:vcString paramter:dic from:responder animated:YES]; 28 | } 29 | 30 | + (void)pushVC:(NSString *)vcString paramter:(NSDictionary *)dic from:(id)responder animated:(BOOL)animated 31 | { 32 | UIViewController *topVC = [self fetchViewController:responder]; 33 | UIViewController *vc = [JHUIViewControllerDecoupler jh_controllerFromString:vcString paramter:dic]; 34 | if (vc) { 35 | [topVC.navigationController pushViewController:vc animated:animated]; 36 | } 37 | } 38 | 39 | + (void)presentVC:(UIViewController *)vc from:(id)responder 40 | { 41 | [self presentVC:vc from:responder animated:YES]; 42 | } 43 | 44 | + (void)presentVC:(UIViewController *)vc from:(id)responder animated:(BOOL)animated 45 | { 46 | UIViewController *topVC = [self fetchViewController:responder]; 47 | [topVC presentViewController:vc animated:animated completion:nil]; 48 | } 49 | 50 | + (void)presentVC:(UIViewController *)vc from:(id)responder navigation:(BOOL)navigation 51 | { 52 | [self presentVC:vc from:responder navigation:navigation animated:YES]; 53 | } 54 | 55 | + (void)presentVC:(UIViewController *)vc from:(id)responder navigation:(BOOL)navigation animated:(BOOL)animated 56 | { 57 | UIViewController *topVC = [self fetchViewController:responder]; 58 | if (navigation) { 59 | vc = [[[topVC.navigationController class] alloc] initWithRootViewController:vc]; 60 | } 61 | [topVC presentViewController:vc animated:animated completion:nil]; 62 | } 63 | 64 | + (void)presentVC:(NSString *)vcString paramter:(NSDictionary *)dic from:(id)responder 65 | { 66 | [self presentVC:vcString paramter:dic from:responder animated:YES]; 67 | } 68 | 69 | + (void)presentVC:(NSString *)vcString paramter:(NSDictionary *)dic from:(id)responder animated:(BOOL)animated 70 | { 71 | UIViewController *topVC = [self fetchViewController:responder]; 72 | UIViewController *vc = [JHUIViewControllerDecoupler jh_controllerFromString:vcString paramter:dic]; 73 | if (vc) { 74 | [topVC presentViewController:vc animated:animated completion:nil]; 75 | } 76 | } 77 | 78 | + (void)presentVC:(NSString *)vcString paramter:(NSDictionary *)dic from:(id)responder navigation:(BOOL)navigation 79 | { 80 | [self presentVC:vcString paramter:dic from:responder navigation:navigation animated:YES]; 81 | } 82 | 83 | + (void)presentVC:(NSString *)vcString paramter:(NSDictionary *)dic from:(id)responder navigation:(BOOL)navigation animated:(BOOL)animated 84 | { 85 | UIViewController *topVC = [self fetchViewController:responder]; 86 | UIViewController *vc = [JHUIViewControllerDecoupler jh_controllerFromString:vcString paramter:dic]; 87 | if (vc) { 88 | if (navigation) { 89 | vc = [[[topVC.navigationController class] alloc] initWithRootViewController:vc]; 90 | } 91 | [topVC presentViewController:vc animated:animated completion:nil]; 92 | } 93 | } 94 | 95 | #pragma mark --- private 96 | 97 | + (UIViewController *)fetchViewController:(id)responder 98 | { 99 | UIViewController *vc; 100 | if ([responder isKindOfClass:[UIView class]]) { 101 | vc = [self fetchViewControllerFromView:responder]; 102 | }else if ([responder isKindOfClass:[UIViewController class]]){ 103 | vc = responder; 104 | } 105 | if (!vc) { 106 | vc = [self fetchViewControllerFromRootViewController]; 107 | } 108 | return vc; 109 | } 110 | 111 | + (UIViewController *)fetchViewControllerFromView:(UIView *)view 112 | { 113 | UIResponder *responder = view.nextResponder; 114 | while (responder) { 115 | if ([responder isKindOfClass:[UIViewController class]]) { 116 | break; 117 | } 118 | responder = responder.nextResponder; 119 | } 120 | return (UIViewController *)responder; 121 | } 122 | 123 | + (UIViewController *)fetchViewControllerFromRootViewController 124 | { 125 | UIViewController *vc = [UIApplication sharedApplication].delegate.window.rootViewController; 126 | while (vc) { 127 | if ([vc isKindOfClass:[UITabBarController class]]) { 128 | vc = [(UITabBarController *)vc selectedViewController]; 129 | } 130 | if ([vc isKindOfClass:[UINavigationController class]]) { 131 | vc = [(UINavigationController *)vc visibleViewController]; 132 | } 133 | if (vc.presentedViewController) { 134 | vc = vc.presentedViewController; 135 | }else{ 136 | break; 137 | } 138 | } 139 | return vc; 140 | } 141 | @end 142 | -------------------------------------------------------------------------------- /HackMenu/IGG/JHUIViewControllerDecoupler.h: -------------------------------------------------------------------------------- 1 | #import 2 | #import 3 | 4 | /// Controller decoupling & 控制器解耦 5 | @interface JHUIViewControllerDecoupler : NSObject 6 | 7 | /// string -> controller, with some parameters.return `nil` if not exist. 8 | + (UIViewController *)jh_controllerFromString:(NSString *)string 9 | paramter:(NSDictionary *)dictionary; 10 | 11 | @end 12 | -------------------------------------------------------------------------------- /HackMenu/IGG/JHUIViewControllerDecoupler.m: -------------------------------------------------------------------------------- 1 | 2 | #import "JHUIViewControllerDecoupler.h" 3 | 4 | @implementation JHUIViewControllerDecoupler 5 | 6 | + (UIViewController *)jh_controllerFromString:(NSString *)string 7 | paramter:(NSDictionary *)dictionary 8 | { 9 | // vc from string. 10 | UIViewController *vc = [NSClassFromString(string) new]; 11 | 12 | // if vc is nil. 13 | if (vc == nil) { 14 | return [self jh_notice_vc:string]; 15 | } 16 | 17 | // just KVC it. 18 | for (NSString *key in dictionary.count > 0 ? dictionary.allKeys : @[]) { 19 | [vc setValue:dictionary[key] forKey:key]; 20 | } 21 | 22 | return vc; 23 | } 24 | 25 | + (UIViewController *)jh_notice_vc:(NSString *)string 26 | { 27 | #if DEBUG 28 | UIViewController *vc = [[UIViewController alloc] init]; 29 | vc.view.backgroundColor = [UIColor whiteColor]; 30 | vc.title = @"oops~😅"; 31 | 32 | [vc.view addSubview:({ 33 | 34 | NSString *text = @"Can't find this class\n\n" 35 | "'%@'\n\n" 36 | "in your project.😅\n\n" 37 | "👇\n" 38 | "Forget to import it\n" 39 | "or\n" 40 | "Doesn't create it yet~"; 41 | 42 | UILabel *label = [[UILabel alloc] init]; 43 | label.frame = [UIScreen mainScreen].bounds; 44 | label.text = [NSString stringWithFormat:text,string]; 45 | label.textColor = [UIColor blackColor]; 46 | label.font = [UIFont boldSystemFontOfSize:18]; 47 | label.textAlignment = NSTextAlignmentCenter; 48 | label.numberOfLines = 0; 49 | label; 50 | })]; 51 | return vc; 52 | #else 53 | return nil; 54 | #endif 55 | } 56 | @end 57 | 58 | @interface UIViewController (JHUIViewControllerDecoupler) 59 | @end 60 | 61 | @implementation UIViewController (JHUIViewControllerDecoupler) 62 | - (void)setValue:(id)value forUndefinedKey:(NSString *)key{ 63 | NSLog(@"[<%@ %p> %s]: this class is not key value coding-compliant for the key: %@",NSStringFromClass([self class]),self,__FUNCTION__,key); 64 | } 65 | @end 66 | 67 | -------------------------------------------------------------------------------- /HackMenu/IGG/PubgLoad.h: -------------------------------------------------------------------------------- 1 | // 2 | // PubgLoad.h 3 | // pubg 4 | // 5 | // Created by 李良林 on 2021/2/14. 6 | // 7 | 8 | #import 9 | 10 | NS_ASSUME_NONNULL_BEGIN 11 | 12 | @interface PubgLoad : NSObject 13 | 14 | @end 15 | 16 | NS_ASSUME_NONNULL_END 17 | -------------------------------------------------------------------------------- /HackMenu/LuntanYZ/LtShengMing.h: -------------------------------------------------------------------------------- 1 | #import 2 | #import 3 | 4 | 5 | //声明 6 | @interface main : NSObject 7 | @end 8 | 9 | @interface GongNeng : NSObject 10 | @end 11 | 12 | 13 | @interface NSObject (GNCode) 14 | - (BOOL)shouye; 15 | - (BOOL)shebei; 16 | - (BOOL)shebeiwy; 17 | - (BOOL)denglu; 18 | - (BOOL)zhuche; 19 | - (BOOL)goumai; 20 | - (BOOL)dingshi; 21 | - (BOOL)huoqukey; 22 | - (BOOL)test; 23 | 24 | 25 | @end 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /HackMenu/SCLAlertView/SCLAlertViewResponder.h: -------------------------------------------------------------------------------- 1 | // 2 | // SCLAlertViewResponder.h 3 | // SCLAlertView 4 | // 5 | // Created by Diogo Autilio on 9/26/14. 6 | // Copyright (c) 2014-2017 AnyKey Entertainment. All rights reserved. 7 | // 8 | 9 | #if defined(__has_feature) && __has_feature(modules) 10 | @import Foundation; 11 | #else 12 | #import 13 | #endif 14 | #import "SCLAlertView.h" 15 | 16 | @interface SCLAlertViewResponder : NSObject 17 | 18 | /** TODO 19 | * 20 | * TODO 21 | */ 22 | - (instancetype)init:(SCLAlertView *)alertview; 23 | 24 | /** TODO 25 | * 26 | * TODO 27 | */ 28 | - (void)close; 29 | 30 | @end 31 | -------------------------------------------------------------------------------- /HackMenu/SCLAlertView/SCLAlertViewResponder.m: -------------------------------------------------------------------------------- 1 | // 2 | // SCLAlertViewResponder.m 3 | // SCLAlertView 4 | // 5 | // Created by Diogo Autilio on 9/26/14. 6 | // Copyright (c) 2014-2017 AnyKey Entertainment. All rights reserved. 7 | // 8 | 9 | #import "SCLAlertViewResponder.h" 10 | 11 | @interface SCLAlertViewResponder () 12 | 13 | @property SCLAlertView *alertview; 14 | 15 | @end 16 | 17 | @implementation SCLAlertViewResponder 18 | 19 | // 20 | //// Allow alerts to be closed/renamed in a chainable manner 21 | //// Example: SCLAlertView().showSuccess(self, title: "Test", subTitle: "Value").close() 22 | 23 | // Initialisation and Title/Subtitle/Close functions 24 | - (instancetype)init:(SCLAlertView *)alertview 25 | { 26 | self.alertview = alertview; 27 | return self; 28 | } 29 | 30 | - (void)setTitletitle:(NSString *)title 31 | { 32 | self.alertview.labelTitle.text = title; 33 | } 34 | 35 | - (void)setSubTitle:(NSString *)subTitle 36 | { 37 | self.alertview.viewText.text = subTitle; 38 | } 39 | 40 | - (void)close 41 | { 42 | [self.alertview hideView]; 43 | } 44 | 45 | @end 46 | -------------------------------------------------------------------------------- /HackMenu/SCLAlertView/SCLAlertViewStyleKit.h: -------------------------------------------------------------------------------- 1 | // 2 | // SCLAlertViewStyleKit.h 3 | // SCLAlertView 4 | // 5 | // Created by Diogo Autilio on 9/26/14. 6 | // Copyright (c) 2014-2017 AnyKey Entertainment. All rights reserved. 7 | // 8 | 9 | #if defined(__has_feature) && __has_feature(modules) 10 | @import Foundation; 11 | @import UIKit; 12 | #else 13 | #import 14 | #import 15 | #endif 16 | #import "SCLButton.h" 17 | 18 | @interface SCLAlertViewStyleKit : NSObject 19 | 20 | // Images 21 | /** TODO 22 | * 23 | * TODO 24 | */ 25 | + (UIImage *)imageOfCheckmark; 26 | 27 | /** TODO 28 | * 29 | * TODO 30 | */ 31 | + (UIImage *)imageOfCross; 32 | 33 | /** TODO 34 | * 35 | * TODO 36 | */ 37 | + (UIImage *)imageOfNotice; 38 | 39 | /** TODO 40 | * 41 | * TODO 42 | */ 43 | + (UIImage *)imageOfWarning; 44 | 45 | /** TODO 46 | * 47 | * TODO 48 | */ 49 | + (UIImage *)imageOfInfo; 50 | 51 | /** TODO 52 | * 53 | * TODO 54 | */ 55 | + (UIImage *)imageOfEdit; 56 | 57 | /** TODO 58 | * 59 | * TODO 60 | */ 61 | + (UIImage *)imageOfQuestion; 62 | 63 | /** TODO 64 | * 65 | * TODO 66 | */ 67 | + (void)drawCheckmark; 68 | 69 | /** TODO 70 | * 71 | * TODO 72 | */ 73 | + (void)drawCross; 74 | 75 | /** TODO 76 | * 77 | * TODO 78 | */ 79 | + (void)drawNotice; 80 | 81 | /** TODO 82 | * 83 | * TODO 84 | */ 85 | + (void)drawWarning; 86 | 87 | /** TODO 88 | * 89 | * TODO 90 | */ 91 | + (void)drawInfo; 92 | 93 | /** TODO 94 | * 95 | * TODO 96 | */ 97 | + (void)drawEdit; 98 | 99 | /** TODO 100 | * 101 | * TODO 102 | */ 103 | + (void)drawQuestion; 104 | 105 | @end 106 | -------------------------------------------------------------------------------- /HackMenu/SCLAlertView/SCLButton.h: -------------------------------------------------------------------------------- 1 | // 2 | // SCLButton.h 3 | // SCLAlertView 4 | // 5 | // Created by Diogo Autilio on 9/26/14. 6 | // Copyright (c) 2014-2017 AnyKey Entertainment. All rights reserved. 7 | // 8 | 9 | #if defined(__has_feature) && __has_feature(modules) 10 | @import UIKit; 11 | #else 12 | #import 13 | #endif 14 | 15 | @class SCLTimerDisplay; 16 | 17 | @interface SCLButton : UIButton 18 | 19 | typedef void (^SCLActionBlock)(void); 20 | typedef BOOL (^SCLValidationBlock)(void); 21 | typedef NSDictionary* (^CompleteButtonFormatBlock)(void); 22 | typedef NSDictionary* (^ButtonFormatBlock)(void); 23 | 24 | // Action Types 25 | typedef NS_ENUM(NSInteger, SCLActionType) 26 | { 27 | SCLNone, 28 | SCLSelector, 29 | SCLBlock 30 | }; 31 | 32 | /** Set button action type. 33 | * 34 | * Holds the button action type. 35 | */ 36 | @property SCLActionType actionType; 37 | 38 | /** Set action button block. 39 | * 40 | * TODO 41 | */ 42 | @property (copy, nonatomic) SCLActionBlock actionBlock; 43 | 44 | /** Set Validation button block. 45 | * 46 | * Set one kind of validation and keeps the alert visible until the validation is successful 47 | */ 48 | @property (copy, nonatomic) SCLValidationBlock validationBlock; 49 | 50 | /** Set Complete button format block. 51 | * 52 | * Holds the complete button format block. 53 | * Support keys : backgroundColor, borderWidth, borderColor, textColor 54 | */ 55 | @property (copy, nonatomic) CompleteButtonFormatBlock completeButtonFormatBlock; 56 | 57 | /** Set button format block. 58 | * 59 | * Holds the button format block. 60 | * Support keys : backgroundColor, borderWidth, borderColor, textColor 61 | */ 62 | @property (copy, nonatomic) ButtonFormatBlock buttonFormatBlock; 63 | 64 | /** Set SCLButton color. 65 | * 66 | * Set SCLButton color. 67 | */ 68 | @property (strong, nonatomic) UIColor *defaultBackgroundColor UI_APPEARANCE_SELECTOR; 69 | 70 | /** Set Target object. 71 | * 72 | * Target is an object that holds the information necessary to send a message to another object when an event occurs. 73 | */ 74 | @property id target; 75 | 76 | /** Set selector id. 77 | * 78 | * A selector is the name used to select a method to execute for an object, 79 | * or the unique identifier that replaces the name when the source code is compiled. 80 | */ 81 | @property SEL selector; 82 | 83 | /** Parse button configuration 84 | * 85 | * Parse ButtonFormatBlock and CompleteButtonFormatBlock setting custom configuration. 86 | * Set keys : backgroundColor, borderWidth, borderColor, textColor 87 | */ 88 | - (void)parseConfig:(NSDictionary *)buttonConfig; 89 | 90 | /** Set button timer. 91 | * 92 | * Holds the button timer, if present. 93 | */ 94 | @property (strong, nonatomic) SCLTimerDisplay *timer; 95 | 96 | /** Init method 97 | * 98 | */ 99 | - (instancetype)initWithWindowWidth:(CGFloat)windowWidth; 100 | 101 | /** Adjust width of the button according to the width of the alert and 102 | * the number of buttons. Only used when buttons are horizontally aligned. 103 | * 104 | * @param windowWidth The width of the alert. 105 | * @param numberOfButtons The number of buttons in the alert. 106 | */ 107 | - (void)adjustWidthWithWindowWidth:(CGFloat)windowWidth numberOfButtons:(NSUInteger)numberOfButtons; 108 | 109 | @end 110 | -------------------------------------------------------------------------------- /HackMenu/SCLAlertView/SCLButton.m: -------------------------------------------------------------------------------- 1 | // 2 | // SCLButton.m 3 | // SCLAlertView 4 | // 5 | // Created by Diogo Autilio on 9/26/14. 6 | // Copyright (c) 2014-2017 AnyKey Entertainment. All rights reserved. 7 | // 8 | 9 | #import "SCLButton.h" 10 | #import "SCLTimerDisplay.h" 11 | 12 | #define MARGIN_BUTTON 12.0f 13 | #define DEFAULT_WINDOW_WIDTH 240 14 | #define MIN_HEIGHT 35.0f 15 | 16 | @implementation SCLButton 17 | 18 | - (instancetype)init 19 | { 20 | self = [super init]; 21 | if (self) 22 | { 23 | [self setupWithWindowWidth:DEFAULT_WINDOW_WIDTH]; 24 | } 25 | return self; 26 | } 27 | 28 | - (instancetype)initWithWindowWidth:(CGFloat)windowWidth 29 | { 30 | self = [super init]; 31 | if (self) 32 | { 33 | [self setupWithWindowWidth:windowWidth]; 34 | } 35 | return self; 36 | } 37 | 38 | - (instancetype)initWithCoder:(NSCoder *)aDecoder 39 | { 40 | self = [super initWithCoder:aDecoder]; 41 | if(self) 42 | { 43 | [self setupWithWindowWidth:DEFAULT_WINDOW_WIDTH]; 44 | } 45 | return self; 46 | } 47 | 48 | - (instancetype)initWithFrame:(CGRect)frame 49 | { 50 | self = [super initWithFrame:frame]; 51 | if (self) 52 | { 53 | [self setupWithWindowWidth:DEFAULT_WINDOW_WIDTH]; 54 | } 55 | return self; 56 | } 57 | 58 | - (void)setupWithWindowWidth:(CGFloat)windowWidth 59 | { 60 | self.frame = CGRectMake(0.0f, 0.0f, windowWidth - (MARGIN_BUTTON * 2), MIN_HEIGHT); 61 | self.titleLabel.lineBreakMode = NSLineBreakByWordWrapping; 62 | self.titleLabel.textAlignment = NSTextAlignmentCenter; 63 | self.layer.cornerRadius = 3.0f; 64 | } 65 | 66 | - (void)adjustWidthWithWindowWidth:(CGFloat)windowWidth numberOfButtons:(NSUInteger)numberOfButtons 67 | { 68 | CGFloat allButtonsWidth = windowWidth - (MARGIN_BUTTON * 2); 69 | CGFloat buttonWidth = (allButtonsWidth - ((numberOfButtons - 1) * 10)) / numberOfButtons; 70 | 71 | self.frame = CGRectMake(0.0f, 0.0f, buttonWidth, MIN_HEIGHT); 72 | } 73 | 74 | - (void)setTitle:(NSString *)title forState:(UIControlState)state 75 | { 76 | [super setTitle:title forState:state]; 77 | self.titleLabel.numberOfLines = 0; 78 | 79 | // Update title frame. 80 | [self.titleLabel sizeToFit]; 81 | 82 | // Update button frame 83 | [self layoutIfNeeded]; 84 | 85 | // Get height needed to display title label completely 86 | CGFloat buttonHeight = MAX(self.titleLabel.frame.size.height, MIN_HEIGHT); 87 | 88 | // Update button frame 89 | self.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y, self.frame.size.width, buttonHeight); 90 | } 91 | 92 | - (void)setHighlighted:(BOOL)highlighted 93 | { 94 | self.backgroundColor = (highlighted) ? [self darkerColorForColor:_defaultBackgroundColor] : _defaultBackgroundColor; 95 | [super setHighlighted:highlighted]; 96 | } 97 | 98 | - (void)setDefaultBackgroundColor:(UIColor *)defaultBackgroundColor 99 | { 100 | self.backgroundColor = _defaultBackgroundColor = defaultBackgroundColor; 101 | } 102 | 103 | - (void)setTimer:(SCLTimerDisplay *)timer 104 | { 105 | _timer = timer; 106 | [self addSubview:timer]; 107 | [timer updateFrame:self.frame.size]; 108 | timer.color = self.titleLabel.textColor; 109 | } 110 | 111 | #pragma mark - Button Apperance 112 | 113 | - (void)parseConfig:(NSDictionary *)buttonConfig 114 | { 115 | if (buttonConfig[@"backgroundColor"]) 116 | { 117 | self.defaultBackgroundColor = buttonConfig[@"backgroundColor"]; 118 | } 119 | if (buttonConfig[@"textColor"]) 120 | { 121 | [self setTitleColor:buttonConfig[@"textColor"] forState:UIControlStateNormal]; 122 | } 123 | if (buttonConfig[@"cornerRadius"]) 124 | { 125 | self.layer.cornerRadius = [buttonConfig[@"cornerRadius"] floatValue]; 126 | } 127 | if ((buttonConfig[@"borderColor"]) && (buttonConfig[@"borderWidth"])) 128 | { 129 | self.layer.borderColor = ((UIColor*)buttonConfig[@"borderColor"]).CGColor; 130 | self.layer.borderWidth = [buttonConfig[@"borderWidth"] floatValue]; 131 | } 132 | else if (buttonConfig[@"borderWidth"]) 133 | { 134 | self.layer.borderWidth = [buttonConfig[@"borderWidth"] floatValue]; 135 | } 136 | 137 | // Add Button custom font with buttonConfig parameters 138 | if (buttonConfig[@"font"]) { 139 | self.titleLabel.font = buttonConfig[@"font"]; 140 | } 141 | } 142 | 143 | #pragma mark - Helpers 144 | 145 | - (UIColor *)darkerColorForColor:(UIColor *)color 146 | { 147 | CGFloat r, g, b, a; 148 | if ([color getRed:&r green:&g blue:&b alpha:&a]) 149 | return [UIColor colorWithRed:MAX(r - 0.2f, 0.0f) 150 | green:MAX(g - 0.2f, 0.0f) 151 | blue:MAX(b - 0.2f, 0.0f) 152 | alpha:a]; 153 | return nil; 154 | } 155 | 156 | - (UIColor *)lighterColorForColor:(UIColor *)color 157 | { 158 | CGFloat r, g, b, a; 159 | if ([color getRed:&r green:&g blue:&b alpha:&a]) 160 | return [UIColor colorWithRed:MIN(r + 0.2f, 1.0f) 161 | green:MIN(g + 0.2f, 1.0f) 162 | blue:MIN(b + 0.2f, 1.0f) 163 | alpha:a]; 164 | return nil; 165 | } 166 | 167 | @end 168 | -------------------------------------------------------------------------------- /HackMenu/SCLAlertView/SCLMacros.h: -------------------------------------------------------------------------------- 1 | // 2 | // SCLMacros.h 3 | // SCLAlertView 4 | // 5 | // Created by Diogo Autilio on 10/03/15. 6 | // Copyright (c) 2015-2017 AnyKey Entertainment. All rights reserved. 7 | // 8 | 9 | #ifndef SCL_MACROS_H 10 | #define SCL_MACROS_H 11 | 12 | #define UIColorFromHEX(rgbValue) [UIColor \ 13 | colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 \ 14 | green:((float)((rgbValue & 0xFF00) >> 8))/255.0 \ 15 | blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0] 16 | 17 | #define DEGREES_TO_RADIANS(degrees) ((M_PI * degrees)/ 180) 18 | #define TIMER_STEP .01 19 | #define START_DEGREE_OFFSET -90 20 | 21 | #define SYSTEM_VERSION_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedSame) 22 | #define SYSTEM_VERSION_GREATER_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedDescending) 23 | #define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending) 24 | #define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending) 25 | #define SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedDescending) 26 | 27 | #endif 28 | -------------------------------------------------------------------------------- /HackMenu/SCLAlertView/SCLSwitchView.h: -------------------------------------------------------------------------------- 1 | // 2 | // SCLSwitchView.h 3 | // SCLAlertView 4 | // 5 | // Created by André Felipe Santos on 27/01/16. 6 | // Copyright (c) 2016-2017 AnyKey Entertainment. All rights reserved. 7 | // 8 | 9 | #if defined(__has_feature) && __has_feature(modules) 10 | @import UIKit; 11 | #else 12 | #import 13 | #endif 14 | 15 | @interface SCLSwitchView : UIView 16 | 17 | @property (strong, nonatomic) UIColor *tintColor UI_APPEARANCE_SELECTOR; 18 | @property (strong, nonatomic) UIColor *labelColor UI_APPEARANCE_SELECTOR; 19 | @property (strong, nonatomic) UIFont *labelFont UI_APPEARANCE_SELECTOR; 20 | @property (strong, nonatomic) NSString *labelText UI_APPEARANCE_SELECTOR; 21 | @property (nonatomic, getter=isSelected) BOOL selected; 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /HackMenu/SCLAlertView/SCLSwitchView.m: -------------------------------------------------------------------------------- 1 | // 2 | // SCLSwitchView.m 3 | // SCLAlertView 4 | // 5 | // Created by André Felipe Santos on 27/01/16. 6 | // Copyright (c) 2016-2017 AnyKey Entertainment. All rights reserved. 7 | // 8 | 9 | #import "SCLSwitchView.h" 10 | #import "SCLMacros.h" 11 | 12 | @interface SCLSwitchView () 13 | 14 | @property (strong, nonatomic) UISwitch *switchKnob; 15 | @property (strong, nonatomic) UILabel *switchLabel; 16 | 17 | @end 18 | 19 | #pragma mark 20 | 21 | @implementation SCLSwitchView 22 | 23 | #pragma mark - Constructors 24 | 25 | - (instancetype)init 26 | { 27 | self = [super init]; 28 | if (self) 29 | { 30 | [self setup]; 31 | } 32 | return self; 33 | } 34 | 35 | - (instancetype)initWithCoder:(NSCoder *)aDecoder 36 | { 37 | self = [super initWithCoder:aDecoder]; 38 | if(self) 39 | { 40 | [self setup]; 41 | } 42 | return self; 43 | } 44 | 45 | - (instancetype)initWithFrame:(CGRect)frame 46 | { 47 | self = [super initWithFrame:frame]; 48 | if (self) 49 | { 50 | [self setup]; 51 | } 52 | return self; 53 | } 54 | 55 | #pragma mark - Initialization 56 | 57 | - (void)setup 58 | { 59 | // Add switch knob 60 | self.switchKnob = [[UISwitch alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 0.0f, 0.f)]; 61 | [self addSubview:self.switchKnob]; 62 | 63 | // Add switch label 64 | CGFloat x, width, height; 65 | x = self.switchKnob.frame.size.width + 8.0f; 66 | width = self.frame.size.width - self.switchKnob.frame.size.width - 8.0f; 67 | height = self.switchKnob.frame.size.height; 68 | 69 | self.switchLabel = [[UILabel alloc] initWithFrame:CGRectMake(x, 0.0f, width, height)]; 70 | 71 | NSString *switchFontFamily = @"HelveticaNeue-Bold"; 72 | CGFloat switchFontSize = 12.0f; 73 | 74 | self.switchLabel.numberOfLines = 1; 75 | self.switchLabel.textAlignment = NSTextAlignmentLeft; 76 | self.switchLabel.lineBreakMode = NSLineBreakByTruncatingTail; 77 | self.switchLabel.adjustsFontSizeToFitWidth = YES; 78 | self.switchLabel.baselineAdjustment = UIBaselineAdjustmentAlignCenters; 79 | self.switchLabel.minimumScaleFactor = 0.5f; 80 | self.switchLabel.font = [UIFont fontWithName:switchFontFamily size:switchFontSize]; 81 | self.switchLabel.textColor = UIColorFromHEX(0x4D4D4D); 82 | 83 | [self addSubview:self.switchLabel]; 84 | } 85 | 86 | #pragma mark - Getters 87 | 88 | - (UIColor *)tintColor 89 | { 90 | return self.switchKnob.tintColor; 91 | } 92 | 93 | - (UIColor *)labelColor 94 | { 95 | return self.switchLabel.textColor; 96 | } 97 | 98 | - (UIFont *)labelFont 99 | { 100 | return self.switchLabel.font; 101 | } 102 | 103 | - (NSString *)labelText 104 | { 105 | return self.switchLabel.text; 106 | } 107 | 108 | - (BOOL)isSelected 109 | { 110 | return self.switchKnob.isOn; 111 | } 112 | 113 | #pragma mark - Setters 114 | 115 | - (void)setTintColor:(UIColor *)tintColor 116 | { 117 | self.switchKnob.onTintColor = tintColor; 118 | } 119 | 120 | - (void)setLabelColor:(UIColor *)labelColor 121 | { 122 | self.switchLabel.textColor = labelColor; 123 | } 124 | 125 | - (void)setLabelFont:(UIFont *)labelFont 126 | { 127 | self.switchLabel.font = labelFont; 128 | } 129 | 130 | - (void)setLabelText:(NSString *)labelText 131 | { 132 | self.switchLabel.text = labelText; 133 | } 134 | 135 | - (void)setSelected:(BOOL)selected 136 | { 137 | self.switchKnob.on = selected; 138 | } 139 | 140 | @end 141 | -------------------------------------------------------------------------------- /HackMenu/SCLAlertView/SCLTextView.h: -------------------------------------------------------------------------------- 1 | // 2 | // SCLTextView.h 3 | // SCLAlertView 4 | // 5 | // Created by Diogo Autilio on 9/18/15. 6 | // Copyright (c) 2015-2017 AnyKey Entertainment. All rights reserved. 7 | // 8 | 9 | #if defined(__has_feature) && __has_feature(modules) 10 | @import UIKit; 11 | #else 12 | #import 13 | #endif 14 | 15 | @interface SCLTextView : UITextField 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /HackMenu/SCLAlertView/SCLTextView.m: -------------------------------------------------------------------------------- 1 | // 2 | // SCLTextView.m 3 | // SCLAlertView 4 | // 5 | // Created by Diogo Autilio on 9/18/15. 6 | // Copyright (c) 2015-2017 AnyKey Entertainment. All rights reserved. 7 | // 8 | 9 | #import "SCLTextView.h" 10 | 11 | #define MIN_HEIGHT 30.0f 12 | 13 | @implementation SCLTextView 14 | 15 | - (instancetype)init 16 | { 17 | self = [super init]; 18 | if (self) 19 | { 20 | [self setup]; 21 | } 22 | return self; 23 | } 24 | 25 | - (instancetype)initWithCoder:(NSCoder *)aDecoder 26 | { 27 | self = [super initWithCoder:aDecoder]; 28 | if(self) 29 | { 30 | [self setup]; 31 | } 32 | return self; 33 | } 34 | 35 | - (instancetype)initWithFrame:(CGRect)frame 36 | { 37 | self = [super initWithFrame:frame]; 38 | if (self) 39 | { 40 | [self setup]; 41 | } 42 | return self; 43 | } 44 | 45 | - (void)setup 46 | { 47 | self.frame = CGRectMake(0.0f, 0.0f, 0.0f, MIN_HEIGHT); 48 | self.returnKeyType = UIReturnKeyDone; 49 | self.borderStyle = UITextBorderStyleRoundedRect; 50 | self.autocapitalizationType = UITextAutocapitalizationTypeSentences; 51 | self.clearButtonMode = UITextFieldViewModeWhileEditing; 52 | self.layer.masksToBounds = YES; 53 | self.layer.borderWidth = 1.0f; 54 | } 55 | 56 | @end 57 | -------------------------------------------------------------------------------- /HackMenu/SCLAlertView/SCLTimerDisplay.h: -------------------------------------------------------------------------------- 1 | // 2 | // SCLTimerDisplay.h 3 | // SCLAlertView 4 | // 5 | // Created by Taylor Ryan on 8/18/15. 6 | // Copyright (c) 2015-2017 AnyKey Entertainment. All rights reserved. 7 | // 8 | // Taken from https://stackoverflow.com/questions/11783439/uibutton-with-timer 9 | 10 | #if defined(__has_feature) && __has_feature(modules) 11 | @import UIKit; 12 | #else 13 | #import 14 | #endif 15 | #import "SCLButton.h" 16 | 17 | @interface SCLTimerDisplay : UIView { 18 | CGFloat currentAngle; 19 | CGFloat currentTime; 20 | CGFloat timerLimit; 21 | CGFloat radius; 22 | CGFloat lineWidth; 23 | NSTimer *timer; 24 | SCLActionBlock completedBlock; 25 | } 26 | 27 | @property CGFloat currentAngle; 28 | @property NSInteger buttonIndex; 29 | @property (strong, nonatomic) UIColor *color; 30 | @property (assign, nonatomic) BOOL reverse; 31 | 32 | - (instancetype)initWithOrigin:(CGPoint)origin radius:(CGFloat)r; 33 | - (instancetype)initWithOrigin:(CGPoint)origin radius:(CGFloat)r lineWidth:(CGFloat)width; 34 | - (void)updateFrame:(CGSize)size; 35 | - (void)cancelTimer; 36 | - (void)stopTimer; 37 | - (void)startTimerWithTimeLimit:(int)tl completed:(SCLActionBlock)completed; 38 | 39 | @end 40 | -------------------------------------------------------------------------------- /HackMenu/SCLAlertView/SCLTimerDisplay.m: -------------------------------------------------------------------------------- 1 | // 2 | // SCLTimerDisplay.m 3 | // SCLAlertView 4 | // 5 | // Created by Taylor Ryan on 8/18/15. 6 | // Copyright (c) 2015-2017 AnyKey Entertainment. All rights reserved. 7 | // 8 | 9 | #import "SCLTimerDisplay.h" 10 | #import "SCLMacros.h" 11 | 12 | @interface SCLTimerDisplay () 13 | 14 | @property (strong, nonatomic) UILabel *countLabel; 15 | 16 | @end 17 | 18 | @implementation SCLTimerDisplay 19 | 20 | @synthesize currentAngle; 21 | 22 | - (instancetype)initWithFrame:(CGRect)frame 23 | { 24 | self = [super initWithFrame:frame]; 25 | if (self) 26 | { 27 | self.backgroundColor = [UIColor clearColor]; 28 | currentAngle = 0.0f; 29 | } 30 | return self; 31 | } 32 | 33 | - (instancetype)initWithOrigin:(CGPoint)origin radius:(CGFloat)r 34 | { 35 | return [self initWithOrigin:(CGPoint)origin radius:r lineWidth:5.0f]; 36 | } 37 | 38 | - (instancetype)initWithOrigin:(CGPoint)origin radius:(CGFloat)r lineWidth:(CGFloat)width 39 | { 40 | self = [super initWithFrame:CGRectMake(origin.x, origin.y, r*2, r*2)]; 41 | if (self) { 42 | self.backgroundColor = [UIColor clearColor]; 43 | currentAngle = START_DEGREE_OFFSET; 44 | radius = r-(width/2); 45 | lineWidth = width; 46 | self.color = [UIColor whiteColor]; 47 | self.userInteractionEnabled = NO; 48 | 49 | // Add count label 50 | _countLabel = [[UILabel alloc] init]; 51 | _countLabel.textColor = [UIColor whiteColor]; 52 | _countLabel.backgroundColor = [UIColor clearColor]; 53 | _countLabel.font = [UIFont fontWithName: @"HelveticaNeue-Bold" size:12.0f]; 54 | _countLabel.textAlignment = NSTextAlignmentCenter; 55 | _countLabel.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin; 56 | [self addSubview:_countLabel]; 57 | } 58 | return self; 59 | } 60 | 61 | - (void)updateFrame:(CGSize)size 62 | { 63 | CGFloat r = radius+(lineWidth/2); 64 | 65 | CGFloat originX = size.width - (2*r) - 5; 66 | CGFloat originY = (size.height - (2*r))/2; 67 | 68 | self.frame = CGRectMake(originX, originY, r*2, r*2); 69 | self.countLabel.frame = CGRectMake(0, 0, r*2, r*2); 70 | } 71 | 72 | - (void)drawRect:(CGRect)rect 73 | { 74 | UIBezierPath* aPath = [UIBezierPath bezierPathWithArcCenter:CGPointMake(radius+(lineWidth/2), radius+(lineWidth/2)) 75 | radius:radius 76 | startAngle:DEGREES_TO_RADIANS(START_DEGREE_OFFSET) 77 | endAngle:DEGREES_TO_RADIANS(currentAngle) 78 | clockwise:YES]; 79 | [self.color setStroke]; 80 | aPath.lineWidth = lineWidth; 81 | [aPath stroke]; 82 | 83 | _countLabel.text = [NSString stringWithFormat:@"%d", (int)currentTime]; 84 | } 85 | 86 | - (void)startTimerWithTimeLimit:(int)tl completed:(SCLActionBlock)completed 87 | { 88 | if (_reverse) 89 | { 90 | currentTime = tl; 91 | } 92 | timerLimit = tl; 93 | timer = [NSTimer scheduledTimerWithTimeInterval:TIMER_STEP target:self selector:@selector(updateTimerButton:) userInfo:nil repeats:YES]; 94 | completedBlock = completed; 95 | _countLabel.textColor = _color; 96 | } 97 | 98 | - (void)cancelTimer 99 | { 100 | [timer invalidate]; 101 | } 102 | 103 | - (void)stopTimer 104 | { 105 | [timer invalidate]; 106 | if (completedBlock != nil) { 107 | completedBlock(); 108 | } 109 | } 110 | 111 | - (void)updateTimerButton:(NSTimer *)timer 112 | { 113 | if (_reverse) 114 | { 115 | currentTime -= TIMER_STEP; 116 | currentAngle = (currentTime/timerLimit) * 360 + START_DEGREE_OFFSET; 117 | 118 | if(currentTime <= 0) { 119 | [self stopTimer]; 120 | } 121 | } 122 | else { 123 | currentTime += TIMER_STEP; 124 | currentAngle = (currentTime/timerLimit) * 360 + START_DEGREE_OFFSET; 125 | 126 | if(currentAngle >= (360 + START_DEGREE_OFFSET)) { 127 | [self stopTimer]; 128 | } 129 | } 130 | [self setNeedsDisplay]; 131 | } 132 | 133 | @end 134 | -------------------------------------------------------------------------------- /HackMenu/SCLAlertView/UIImage+ImageEffects.h: -------------------------------------------------------------------------------- 1 | /* 2 | File: UIImage+ImageEffects.h 3 | Abstract: This is a category of UIImage that adds methods to apply blur and tint effects to an image. This is the code you’ll want to look out to find out how to use vImage to efficiently calculate a blur. 4 | Version: 1.0 5 | 6 | Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple 7 | Inc. ("Apple") in consideration of your agreement to the following 8 | terms, and your use, installation, modification or redistribution of 9 | this Apple software constitutes acceptance of these terms. If you do 10 | not agree with these terms, please do not use, install, modify or 11 | redistribute this Apple software. 12 | 13 | In consideration of your agreement to abide by the following terms, and 14 | subject to these terms, Apple grants you a personal, non-exclusive 15 | license, under Apple's copyrights in this original Apple software (the 16 | "Apple Software"), to use, reproduce, modify and redistribute the Apple 17 | Software, with or without modifications, in source and/or binary forms; 18 | provided that if you redistribute the Apple Software in its entirety and 19 | without modifications, you must retain this notice and the following 20 | text and disclaimers in all such redistributions of the Apple Software. 21 | Neither the name, trademarks, service marks or logos of Apple Inc. may 22 | be used to endorse or promote products derived from the Apple Software 23 | without specific prior written permission from Apple. Except as 24 | expressly stated in this notice, no other rights or licenses, express or 25 | implied, are granted by Apple herein, including but not limited to any 26 | patent rights that may be infringed by your derivative works or by other 27 | works in which the Apple Software may be incorporated. 28 | 29 | The Apple Software is provided by Apple on an "AS IS" basis. APPLE 30 | MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION 31 | THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS 32 | FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND 33 | OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. 34 | 35 | IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL 36 | OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 37 | SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 38 | INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, 39 | MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED 40 | AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), 41 | STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE 42 | POSSIBILITY OF SUCH DAMAGE. 43 | 44 | Copyright (C) 2013 Apple Inc. All Rights Reserved. 45 | 46 | 47 | Copyright © 2013 Apple Inc. All rights reserved. 48 | WWDC 2013 License 49 | 50 | NOTE: This Apple Software was supplied by Apple as part of a WWDC 2013 51 | Session. Please refer to the applicable WWDC 2013 Session for further 52 | information. 53 | 54 | IMPORTANT: This Apple software is supplied to you by Apple Inc. 55 | ("Apple") in consideration of your agreement to the following terms, and 56 | your use, installation, modification or redistribution of this Apple 57 | software constitutes acceptance of these terms. If you do not agree with 58 | these terms, please do not use, install, modify or redistribute this 59 | Apple software. 60 | 61 | In consideration of your agreement to abide by the following terms, and 62 | subject to these terms, Apple grants you a non-exclusive license, under 63 | Apple's copyrights in this original Apple software (the "Apple 64 | Software"), to use, reproduce, modify and redistribute the Apple 65 | Software, with or without modifications, in source and/or binary forms; 66 | provided that if you redistribute the Apple Software in its entirety and 67 | without modifications, you must retain this notice and the following 68 | text and disclaimers in all such redistributions of the Apple Software. 69 | Neither the name, trademarks, service marks or logos of Apple Inc. may 70 | be used to endorse or promote products derived from the Apple Software 71 | without specific prior written permission from Apple. Except as 72 | expressly stated in this notice, no other rights or licenses, express or 73 | implied, are granted by Apple herein, including but not limited to any 74 | patent rights that may be infringed by your derivative works or by other 75 | works in which the Apple Software may be incorporated. 76 | 77 | The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES 78 | NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE 79 | IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR 80 | A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND 81 | OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. 82 | 83 | IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL 84 | OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 85 | SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 86 | INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, 87 | MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED 88 | AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), 89 | STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE 90 | POSSIBILITY OF SUCH DAMAGE. 91 | 92 | EA1002 93 | 5/3/2013 94 | */ 95 | 96 | #if defined(__has_feature) && __has_feature(modules) 97 | @import UIKit; 98 | #else 99 | #import 100 | #endif 101 | 102 | @interface UIImage (ImageEffects) 103 | 104 | - (UIImage *)applyLightEffect; 105 | - (UIImage *)applyExtraLightEffect; 106 | - (UIImage *)applyDarkEffect; 107 | - (UIImage *)applyTintEffectWithColor:(UIColor *)tintColor; 108 | 109 | - (UIImage *)applyBlurWithRadius:(CGFloat)blurRadius tintColor:(UIColor *)tintColor saturationDeltaFactor:(CGFloat)saturationDeltaFactor maskImage:(UIImage *)maskImage; 110 | 111 | + (UIImage *)imageWithColor:(UIColor *)color; 112 | + (UIImage *)convertViewToImage; 113 | + (UIImage *)convertViewToImage:(UIView *)view; 114 | 115 | @end 116 | -------------------------------------------------------------------------------- /HackMenu/main.m: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | #import 4 | #import "SCLAlertView.h" 5 | #import "Gongneng.h" 6 | #import "LtShengMing.h" 7 | 8 | //程序主文件代码 9 | @implementation main : NSObject 10 | static void __attribute__((constructor)) entry() 11 | { 12 | 13 | dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(10 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ 14 | // [NSObject Bsphp]; 15 | // [NSObject souye]; 16 | }); 17 | } 18 | 19 | 20 | 21 | @end 22 | 23 | -------------------------------------------------------------------------------- /IGG-For-ShiSanGe.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /IGG-For-ShiSanGe.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /IGG-For-ShiSanGe.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /IGG-For-ShiSanGe.xcodeproj/project.xcworkspace/xcuserdata/apple.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuteteen/IGG/75fc80fe9c284f8e3b830c3f9e53dc24b7665cb1/IGG-For-ShiSanGe.xcodeproj/project.xcworkspace/xcuserdata/apple.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /IGG-For-ShiSanGe.xcodeproj/project.xcworkspace/xcuserdata/apple.xcuserdatad/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | BuildLocationStyle 6 | UseAppPreferences 7 | CustomBuildLocationType 8 | RelativeToDerivedData 9 | DerivedDataLocationStyle 10 | Default 11 | EnabledFullIndexStoreVisibility 12 | 13 | IssueFilterStyle 14 | ShowActiveSchemeOnly 15 | LiveSourceIssuesEnabled 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /IGG-For-ShiSanGe.xcodeproj/project.xcworkspace/xcuserdata/guyongagng.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuteteen/IGG/75fc80fe9c284f8e3b830c3f9e53dc24b7665cb1/IGG-For-ShiSanGe.xcodeproj/project.xcworkspace/xcuserdata/guyongagng.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /IGG-For-ShiSanGe.xcodeproj/project.xcworkspace/xcuserdata/guyongagng.xcuserdatad/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | BuildLocationStyle 6 | UseAppPreferences 7 | CustomBuildLocationType 8 | RelativeToDerivedData 9 | DerivedDataLocationStyle 10 | Default 11 | EnabledFullIndexStoreVisibility 12 | 13 | IssueFilterStyle 14 | ShowActiveSchemeOnly 15 | LiveSourceIssuesEnabled 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /IGG-For-ShiSanGe.xcodeproj/project.xcworkspace/xcuserdata/guyonggang.xcuserdatad/IDEFindNavigatorScopes.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /IGG-For-ShiSanGe.xcodeproj/project.xcworkspace/xcuserdata/guyonggang.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuteteen/IGG/75fc80fe9c284f8e3b830c3f9e53dc24b7665cb1/IGG-For-ShiSanGe.xcodeproj/project.xcworkspace/xcuserdata/guyonggang.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /IGG-For-ShiSanGe.xcodeproj/project.xcworkspace/xcuserdata/mac.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuteteen/IGG/75fc80fe9c284f8e3b830c3f9e53dc24b7665cb1/IGG-For-ShiSanGe.xcodeproj/project.xcworkspace/xcuserdata/mac.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /IGG-For-ShiSanGe.xcodeproj/project.xcworkspace/xcuserdata/mac126.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuteteen/IGG/75fc80fe9c284f8e3b830c3f9e53dc24b7665cb1/IGG-For-ShiSanGe.xcodeproj/project.xcworkspace/xcuserdata/mac126.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /IGG-For-ShiSanGe.xcodeproj/project.xcworkspace/xcuserdata/macgu.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuteteen/IGG/75fc80fe9c284f8e3b830c3f9e53dc24b7665cb1/IGG-For-ShiSanGe.xcodeproj/project.xcworkspace/xcuserdata/macgu.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /IGG-For-ShiSanGe.xcodeproj/project.xcworkspace/xcuserdata/macgyg.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuteteen/IGG/75fc80fe9c284f8e3b830c3f9e53dc24b7665cb1/IGG-For-ShiSanGe.xcodeproj/project.xcworkspace/xcuserdata/macgyg.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /IGG-For-ShiSanGe.xcodeproj/project.xcworkspace/xcuserdata/nongshifu.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuteteen/IGG/75fc80fe9c284f8e3b830c3f9e53dc24b7665cb1/IGG-For-ShiSanGe.xcodeproj/project.xcworkspace/xcuserdata/nongshifu.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /IGG-For-ShiSanGe.xcodeproj/project.xcworkspace/xcuserdata/nongshifu.xcuserdatad/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | BuildLocationStyle 6 | UseAppPreferences 7 | CustomBuildLocationType 8 | RelativeToDerivedData 9 | DerivedDataLocationStyle 10 | Default 11 | IssueFilterStyle 12 | ShowActiveSchemeOnly 13 | LiveSourceIssuesEnabled 14 | 15 | ShowSharedSchemesAutomaticallyEnabled 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /IGG-For-ShiSanGe.xcodeproj/project.xcworkspace/xcuserdata/yi.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuteteen/IGG/75fc80fe9c284f8e3b830c3f9e53dc24b7665cb1/IGG-For-ShiSanGe.xcodeproj/project.xcworkspace/xcuserdata/yi.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /IGG-For-ShiSanGe.xcodeproj/project.xcworkspace/xcuserdata/zzz.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuteteen/IGG/75fc80fe9c284f8e3b830c3f9e53dc24b7665cb1/IGG-For-ShiSanGe.xcodeproj/project.xcworkspace/xcuserdata/zzz.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /IGG-For-ShiSanGe.xcodeproj/xcshareddata/xcschemes/DLGMemor.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 43 | 44 | 50 | 51 | 52 | 53 | 59 | 60 | 66 | 67 | 68 | 69 | 71 | 72 | 75 | 76 | 77 | -------------------------------------------------------------------------------- /IGG-For-ShiSanGe.xcodeproj/xcuserdata/apple.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | JnDlg.xcscheme_^#shared#^_ 8 | 9 | orderHint 10 | 0 11 | 12 | PUBGMOBILENewiOSGodsComJailed.xcscheme_^#shared#^_ 13 | 14 | orderHint 15 | 0 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /IGG-For-ShiSanGe.xcodeproj/xcuserdata/guyongagng.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | PUBGMOBILENewiOSGodsComJailed.xcscheme_^#shared#^_ 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /IGG-For-ShiSanGe.xcodeproj/xcuserdata/guyonggang.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | PUBGMOBILENewiOSGodsComJailed.xcscheme_^#shared#^_ 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /IGG-For-ShiSanGe.xcodeproj/xcuserdata/mac126.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | -------------------------------------------------------------------------------- /IGG-For-ShiSanGe.xcodeproj/xcuserdata/macgu.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | DLGMemor.xcscheme_^#shared#^_ 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | SuppressBuildableAutocreation 14 | 15 | 194F3B38218327B10070F5BC 16 | 17 | primary 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /IGG-For-ShiSanGe.xcodeproj/xcuserdata/macgyg.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | -------------------------------------------------------------------------------- /IGG-For-ShiSanGe.xcodeproj/xcuserdata/macgyg.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | DLGMemor.xcscheme_^#shared#^_ 8 | 9 | orderHint 10 | 0 11 | 12 | JnDlg.xcscheme_^#shared#^_ 13 | 14 | orderHint 15 | 0 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /IGG-For-ShiSanGe.xcodeproj/xcuserdata/nongshifu.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 9 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /IGG-For-ShiSanGe.xcodeproj/xcuserdata/nongshifu.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | Hack.xcscheme 8 | 9 | orderHint 10 | 0 11 | 12 | HackMenu.xcscheme 13 | 14 | orderHint 15 | 0 16 | 17 | PUBGMOBILENewiOSGodsComJailed.xcscheme 18 | 19 | orderHint 20 | 0 21 | 22 | PUBGMOBILENewiOSGodsComJailed.xcscheme_^#shared#^_ 23 | 24 | orderHint 25 | 0 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /IGG-For-ShiSanGe.xcodeproj/xcuserdata/yi.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | HackMenu.xcscheme 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /JRMemory.framework/Headers/MemScan.h: -------------------------------------------------------------------------------- 1 | // 2 | // Header.h 3 | // MemoryScan 4 | // 5 | // Created by macgu on 2020/2/24. 6 | // Copyright © 2020年 macgu. All rights reserved. 7 | // 8 | 9 | #ifndef Header_h 10 | #define Header_h 11 | 12 | #include 13 | #include 14 | 15 | #include 16 | 17 | #include 18 | 19 | #include 20 | #define JR_Search_Type_ULong 8 21 | #define JR_Search_Type_Double 8 22 | #define JR_Search_Type_SLong 8 23 | #define JR_Search_Type_Float 4 24 | #define JR_Search_Type_UInt 4 25 | #define JR_Search_Type_SInt 4 26 | #define JR_Search_Type_UShort 2 27 | #define JR_Search_Type_SShort 2 28 | #define JR_Search_Type_UByte 1 29 | #define JR_Search_Type_SByte 1 30 | 31 | 32 | using namespace std; 33 | typedef struct _result_region{ 34 | mach_vm_address_t region_base; 35 | vectorslide; 36 | }result_region; 37 | 38 | typedef struct _result{ 39 | vectorresultBuffer; 40 | int count; 41 | }Result; 42 | 43 | typedef struct _addrRange{ 44 | uint64_t start; 45 | uint64_t end; 46 | }AddrRange; 47 | 48 | typedef struct _image{ 49 | vectorbase; 50 | vectorend; 51 | }ImagePtr; 52 | class JRMemoryEngine 53 | { 54 | public: 55 | mach_port_t task; 56 | Result *result; 57 | JRMemoryEngine(mach_port_t task){ 58 | this->task = task; 59 | Result *newResult = new Result; 60 | newResult->count = 0; 61 | this->result = newResult; 62 | } 63 | ~JRMemoryEngine(void){ 64 | if(result->count != 0){ 65 | for(int i =0;iresultBuffer.size();i++){ 66 | 67 | result->resultBuffer[i]->slide.clear(); 68 | result->resultBuffer[i]->slide.shrink_to_fit(); 69 | result_region *dealloc_1 = result->resultBuffer[i]; 70 | delete dealloc_1; 71 | 72 | } 73 | } 74 | result->resultBuffer.clear(); 75 | result->resultBuffer.shrink_to_fit(); 76 | Result *dealloc_2 = result; 77 | delete dealloc_2; 78 | } 79 | 80 | 81 | void JRScanMemory(AddrRange range,void*target,size_t len); 82 | void JRNearBySearch(int range,void *target,size_t len); 83 | 84 | void *JRReadMemory(unsigned long long address,size_t len); 85 | void JRWriteMemory(unsigned long long address,void *target,size_t len); 86 | 87 | vector getAllResults(); 88 | vector getResults(int count); 89 | 90 | 91 | }; 92 | 93 | 94 | 95 | //void JRScanMemory(mach_port_t task,AddrRange range,void*target,size_t len,Result *result); 96 | //Result *JRNearBySearch(mach_port_t task,int range,Result *result,void *target,size_t len); 97 | 98 | void ResultDeallocate(Result *result); 99 | Result* ResultAllocate(void); 100 | //vector *ResultToRealAddress(Result result); 101 | 102 | //void ScanMemory(void*target,uint64_t len,AddrRange range,Result *result); 103 | //void ModifyMemory(Result result,uint64_t value); 104 | 105 | 106 | #endif /* Header_h */ 107 | -------------------------------------------------------------------------------- /JRMemory.framework/Info.plist: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuteteen/IGG/75fc80fe9c284f8e3b830c3f9e53dc24b7665cb1/JRMemory.framework/Info.plist -------------------------------------------------------------------------------- /JRMemory.framework/JRMemory: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kuteteen/IGG/75fc80fe9c284f8e3b830c3f9e53dc24b7665cb1/JRMemory.framework/JRMemory -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # IGG免越狱内存修改器 2 | # 2021.04.13更新 3 | 支持iOS14免越狱注入APP签名安装 4 | 支持联合搜索 5 | 支持范围搜索 6 | 支持远程菜单 7 | 支持动态更新 8 | 速度很快秒改 9 | 10 | --------------------------------------------------------------------------------