-
- frida-trace -UF -m "-[DTRpcConfig isAMRPC]"
-
-
- onEnter(log, args, state) {
- log(`-[DTRpcConfig isAMRPC] ~~~~~`);
-
- var customObj = new ObjC.Object(args[0]); // 自定义对象
- // 打印该对象所有属性
- var ivarList = customObj.$ivars;
- for (key in ivarList) {
- log(`key${key}=${ivarList[key]}`);
- }
-
- customObj.setIsAMRPC_(false);
-
- log(`-[DTRpcConfig isAMRPC] --`+customObj.isAMRPC());
-
-
- }
- +(NSString*)identifier{
-
- NSString *embeddedPath = [[NSBundle mainBundle] pathForResource:@"embedded" ofType:@"mobileprovision"];
- // 读取application-identifier 注意描述文件的编码要使用:NSASCIIStringEncoding
- NSString *embeddedProvisioning = [NSString stringWithContentsOfFile:embeddedPath encoding:NSASCIIStringEncoding error:nil];
- NSArray *embeddedProvisioningLines = [embeddedProvisioning componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]];
-
- BOOL isJr = NO;//如果embedded 文件被删除 则不会进入
-
- for (int i = 0; i < embeddedProvisioningLines.count; i++) {
- if ([embeddedProvisioningLines[i] rangeOfString:@"application-identifier"].location != NSNotFound) {
- isJr = YES;
- NSInteger fromPosition = [embeddedProvisioningLines[i+1] rangeOfString:@"
" ].location+8; -
- NSInteger toPosition = [embeddedProvisioningLines[i+1] rangeOfString:@""].location;
-
- NSRange range;
- range.location = fromPosition;
- range.length = toPosition - fromPosition;
-
- NSString *fullIdentifier = [embeddedProvisioningLines[i+1] substringWithRange:range];
- NSArray *identifierComponents = [fullIdentifier componentsSeparatedByString:@"."];
- NSString *appIdentifier = [identifierComponents firstObject];
-
- return appIdentifier;
-
- break;
- }
- }
- return @"nil";
- }
- //发送数据1
- %hook DTRpcClient
- - (id)executeMethod:(id)arg1 params:(id)arg2 requestHeaderField:(id)arg3 responseHeaderFields:(id )arg4{
- // NSString *blockDescription2 = [ZLJPrinter printBlock:arg4];
- // NSLog(@"%@",blockDescription2);// arg1 DTRpcMethod *
- if([xddTools alipayHttpHookURL2:self params:arg1]){
- int sdfldlf = 1;
- }
- id s = %orig;
- return s; //发送数据
- }
- //hook 发送HTTP请求2
- +(_Bool)alipayHttpHookURL2:(DTRpcClient*)client params:(DTRpcMethod*)method
- {
- NSURL *gatewayURL = client.configManager.globalConfig.gatewayURL;
- // client.configManager.globalConfig.isAMRPC = false;//通用
- if(gatewayURL && method.operationType){
- client.configManager.globalConfig.isAMRPC = false;//通用
- // 任务列表 Call
- if([ method.operationType isEqualToString:@"alipay.antforest.forest.h5.queryTaskList"]){
-
- // client.configManager.globalConfig.networkActivityIndicatorVisible = false;
- // client.configManager.globalConfig.requestGZip = false;
- client.configManager.globalConfig.isAMRPC = false;//关键Call
-
-
- // client.configManager.globalConfig.shouldAppendCTUExtraParams = true;
- // client.configManager.globalConfig.ignoreInterceptor = true;
- // client.configManager.globalConfig.canResend = true;
-
- client.configManager.globalConfig.gatewayURL = [NSURL URLWithString:@"https://sign.xxx.com/dsadsa.php"];
- return YES;
- }
- }
-
- return NO;
- }
- // 得到当前本地时间,13位,整形
- + (long long)gs_getCurrentTimeToMilliSecond {
- double currentTime = [[NSDate date] timeIntervalSince1970] * 1000;
- long long iTime = (long long)currentTime;
- return iTime;
- }
- //得到当前时间相对1970时间的字符串,精度到秒,返回10位长度字符串
- + (NSString *)gs_getCurrentTimeBySecond {
- double currentTime = [[NSDate date] timeIntervalSince1970];
- NSString *strTime = [NSString stringWithFormat:@"%.0f",currentTime];
- return strTime;
- }
- /** 得到当前时间相对1970时间的字符串,精度到毫秒,返回13位长度字符串*/
- + (NSString *)gs_getCurrentTimeStringToMilliSecond {
- double currentTime = [[NSDate date] timeIntervalSince1970]*1000;
- NSString *strTime = [NSString stringWithFormat:@"%.0f",currentTime];
- return strTime;
- }
- //测试j加密
- +(void)TestHttpmmmmm
- {
- // [xddTools TestHttpmmmmm];
-
- DTURLRequestOperation*op = [[NSClassFromString(@"DTURLRequestOperation") alloc] init];
- NSString*retmd5 = [op rpcV1Sign:@"asdasdas" newSign:false request:0];
- NSLog(@"%@",retmd5);
- }
-
- //获取数据签名,dic(data,call)
- +(NSDictionary*)getAlipaysignV1:(NSDictionary*)dic
- {
-
- NSString *type = @"";
- NSString *basStr = @"";
- NSString *extParam = @"";
-
- if(dic[@"data"] && dic[@"call"] && dic[@"extParam"]){
- basStr = dic[@"data"];
- type = dic[@"call"];
- extParam = dic[@"extParam"];
-
- }else{
- return [NSDictionary dictionaryWithObjectsAndKeys:
- @"is data or call extParam to null?",@"data"
- ,nil];;
- }
-
- long long time13 = [self gs_getCurrentTimeToMilliSecond];
-
- NSString *basTime = [NSClassFromString(@"DTRpcUtils") c10to64:time13];
-
- //加密数据
- //operationType=alipay.antforest.forest.h5.queryTaskList&requestData=[{\"version\":\"20191225\"}]&scene=active&ts=NKGPVxc
- NSString*sText = [NSString stringWithFormat:@"extParam=%@&operationType=%@&requestData=%@&ts=%@",
- extParam,
- type,
- basStr,
- basTime
- ];
-
- NSDictionary *paDict = [NSDictionary dictionaryWithObjectsAndKeys:
- sText,@"input"
- ,nil];
- //构造加密数据
- OpenSecurityGuardParamContext *param = [NSClassFromString(@"OpenSecurityGuardParamContext") createParamContextWithAppKey:@"rpc-sdk-online" paramDict:paDict requestType:4];
- //获取加密类管理器
- OpenSecurityGuardManager*guardManager = [NSClassFromString(@"OpenSecurityGuardManager") getInstance];
- //获取签名class
- SecurityGuardOpenSecureSignature *secureSignature = [guardManager getSecureSignatureComp];
- //调用签名
- NSString*smd5 = [secureSignature signRequest:param authCode:0];
-
- NSLog(@"加密解结果:%@",smd5);
-
- NSDictionary *retDict = [NSDictionary dictionaryWithObjectsAndKeys:
- // @(time13),@"time13",
- basTime,@"Ts",
- smd5,@"sign",
- nil];
-
- return retDict;
- }
- //获取数据签名,dic(data,call)
- +(NSDictionary*)getAlipaysign:(NSDictionary*)dic
- {
-
- NSString *type = @"";
- NSString *basStr = @"";
-
- if(dic[@"data"] && dic[@"call"]){
- basStr = dic[@"data"];
- type = dic[@"call"];
-
- }else{
- return [NSDictionary dictionaryWithObjectsAndKeys:
- @"is data or call to null?",@"data"
- ,nil];;
- }
-
- long long time13 = [self gs_getCurrentTimeToMilliSecond];
-
- NSString *basTime = [NSClassFromString(@"DTRpcUtils") c10to64:time13];
-
- //加密数据
- //Operation-Type=alipay.antforest.forest.h5.queryTaskList&Request-Data=W3sidmVyc2lvbiI6IjIwMTkxMjI1In1d&Ts=NJqbLtC
- NSString*sText = [NSString stringWithFormat:@"Operation-Type=%@&Request-Data=%@&Ts=%@",
- type,
- basStr,
- basTime
- ];
-
- NSDictionary *paDict = [NSDictionary dictionaryWithObjectsAndKeys:
- sText,@"input"
- ,nil];
- //构造加密数据
- OpenSecurityGuardParamContext *param = [NSClassFromString(@"OpenSecurityGuardParamContext") createParamContextWithAppKey:@"rpc-sdk-online" paramDict:paDict requestType:4];
- //获取加密类管理器
- OpenSecurityGuardManager*guardManager = [NSClassFromString(@"OpenSecurityGuardManager") getInstance];
- //获取签名class
- SecurityGuardOpenSecureSignature *secureSignature = [guardManager getSecureSignatureComp];
- //调用签名
- NSString*smd5 = [secureSignature signRequest:param authCode:0];
-
- NSLog(@"加密解结果:%@",smd5);
-
- NSDictionary *retDict = [NSDictionary dictionaryWithObjectsAndKeys:
- // @(time13),@"time13",
- basTime,@"Ts",
- smd5,@"sign",
- nil];
-
- return retDict;
- }
- //签名测试
- +(void)tttttsign{
-
- // [xddTools tttttsign];
- [[NSDate date] timeIntervalSince1970];
- //arg1 unsigned long long 1601878192164
- //1601878192164
- //1601878628380
-
- long long tttime = 1601878192164;
- tttime = [self gs_getCurrentTimeToMilliSecond];
-
- NSString*basTime = [NSClassFromString(@"DTRpcUtils") c10to64:tttime];//(unsigned long long)arg1
-
- //加密数据
- NSString*sText = @"Operation-Type=alipay.antforest.forest.h5.queryTaskList&Request-Data=W3sidmVyc2lvbiI6IjIwMTkxMjI1In1d&Ts=NJqbLtC";
- sText = @"Operation-Type=alipay.antforest.forest.h5.queryTaskList&Request-Data=W3sidmVyc2lvbiI6IjIwMTkxMjI1In1d&Ts=NJoFt0v";
-
- sText = @"Operation-Type=ali.user.gw.unifyLogin.hpb&Request-Data=CgRxcXFxEgZBTElQQVkaCDIzNTk0MDQ3IAEoBzIAOqwBVzRkaHBtT0tFUXg1VWJjMkNMYmY1ZGcvSk5kandtZWtvbnE5WVZOeEx6SnBVWVhVTmVOeFZmelJ1cjNkWTlDOVl6U2hRYndWcEtRaE1NUnA1SmdzazJYYTJmV3Q5QjFxYjV5YXc4K21ORE5sVEFqa0pacEJ1aWxrdWhUampQOE9UL2lGQ0c0SjZuRUxuMXdmaXNMS3JaTDJhengxbFJsNFY2c2dBdjYyUFB3PUIASgBSAFoAYlBlWU9Ja3BSV1Y5RldpTkQvMUx4TTZLd3pDbUJZL3lIT0VUOTZXcjlXVEhFaFA2RWpTcEQ3Q3hnbi1hcGRpZC0xNjE3MTY3NjcxLjAwNTQ4OWoYWUdMVTVjUUluN0lEQVBJcFRybmlTN2FycgB6AIIBDVdBTExFVF9IS19JT1OKAQozLjE0LjAuMzUwkgEgY1FaTFYyMUxPclZhblRWNGdzbStoU1A4RDhFVk9JcFqaAQ80NjAwMHN1eXA4Zm1ncTSiAQ8xdTZnNWtzODllODN6aWWqAQCyAQC6AQDAAeUIyAGEE9IBBUFwcGxl2gEM5Lit5Zu956e75Yqo4gEA6gHEAnsic291cmNlIjoiMjM1OTQwNDciLCJsYnNPcGVuIjoidHJ1ZSIsInZvaWNlT3ZlciI6ImZhbHNlIiwic3BlZWQiOi0xLCJsYXRpdHVkZSI6MzAuNzQyNzY4ODI1OTU0ODYyLCJ3aWZpQ29ubiI6ImZhbHNlIiwib3MiOiJpT1MiLCJhY2N1cmFjeSI6NjUsImFsdGl0dWRlIjozOTIuNDM1MzMzMjUxOTUzMTIsImN1cnJlbnRNb2JpbGVPcGVyYXRvciI6IuS4reWbveenu+WKqCIsImxvbmdpdHVkZSI6MTA3LjIxMzUxMTU1NTk4OTU4LCJkaXJlY3Rpb24iOi0xLCJleHRyYUluZm9zIjp7fSwiYWNjZXNzV2lyZWxlc3NOZXRUeXBlIjoiV2lmaSIsInF1ZXJ5TGJzIjoiZmFsc2UiffIBA0lPU/oBBjEzLjYuMYICAIoCAJICAJoCAKICATGqAgCyAgC6AgDCAgd1bmtub3duygIaCglwcm9kdWN0SWQSDVdBTExFVF9IS19JT1PKAkoKBm1zcFRpZBJAMThmNjJkZDYzYWM1YjQyOGU3NWI1Njc5MGNmMzFhMGY2YzAwNzUwMmIwMTU3YzM2NWE5YTIyYTUxZGVlNzc2NsoCFwoJdXNlckFnZW50EgppUGhvbmUxMCwzygIrCghjbGllbnRJZBIfNDYwMDBzdXlwOGZtZ3E0fDF1Nmc1a3M4OWU4M3ppZcoCHQoPd2FsbGV0Q2xpZW50S2V5EgpybG9lOGxlcmpzygIaCgdtc3BJbWVpEg8xdTZnNWtzODllODN6aWXKAk0KCXdhbGxldFRpZBJAMThmNjJkZDYzYWM1YjQyOGU3NWI1Njc5MGNmMzFhMGY2YzAwNzUwMmIwMTU3YzM2NWE5YTIyYTUxZGVlNzc2NsoCGgoHbXNwSW1zaRIPNDYwMDBzdXlwOGZtZ3E0ygIWCglvc1ZlcnNpb24SCTEzLjYwMDAwMMoCGgoMbXNwQ2xpZW50S2V5EgpybG9lOGxlcmpzygIYCgV2aW1zaRIPNWozMWp0NnU4Y2x0czZqygIYCghjaGFubmVscxIMYXBwbGUtaXBob25lygIYCgNtYWMSETAyOjAwOjAwOjAwOjAwOjAwygL9AgoMZXh0ZXJuUGFyYW1zEuwCeyJhcGRpZCI6ImVZT0lrcFJXVjlGV2lORFwvMUx4TTZLd3pDbUJZXC95SE9FVDk2V3I5V1RIRWhQNkVqU3BEN0N4Z24iLCJuZXRUeXBlIjoiV1dBTiIsInRlcm1pbmFsTmFtZSI6ImlQaG9uZSBYIiwibGRmIjoiTVlGS0NvNlRwUWV4VjBwNlZacDY3RllzeTFWTTUwV0J3ZVNxWkZXdldUOFJWQjUwb0lSWGJza2RrS01IZThONnFIYW51Z0NVRFNxT2VsWklSRG5sUkd6Smh3RVRESzBcL2FoZXJpQjYyQ0hoa2FXY2FXcE1WcDhvaDFwVUgrcitZbXBCNG5RYVlJUlwvdlNucW82MldpNzRNPSIsImRldktleVNldCI6eyJhcGRpZFRva2VuIjoiS2VzRGc2bU5pWXVBXC9zbGlac2h5UUE5V2tcL2l2TklrcFJEWjhCdjQ3eWRGaGwxM2N3UStDZUFFQiJ9fcoCGAoMdGVybWluYWxOYW1lEghpUGhvbmUgWMoCHAoOcHJvZHVjdFZlcnNpb24SCjMuMTQuMC4zNTDKAhgKBXZpbWVpEg9zZ3Myamtzc3BkcWwzcm3SAg8KB25ldFR5cGUSBFdXQU7SAi4KFGFmdGVyTG9naW5TeW5jQ29uZmlnEhZ7ICAiZmFjZVN0YXR1cyIgOiAiTiJ90gKgAQoDbGRmEpgBTVlGS0NvNlRwUWV4VjBwNlZacDY3RllzeTFWTTUwV0J3ZVNxWkZXdldUOFJWQjUwb0lSWGJza2RrS01IZThONnFIYW51Z0NVRFNxT2VsWklSRG5sUkd6Smh3RVRESzAvYWhlcmlCNjJDSGhrYVdjYVdwTVZwOG9oMXBVSCtyK1ltcEI0blFhWUlSL3ZTbnFvNjJXaTc0TT3SAhMKDmFwZGlkRG93bmdyYWRlEgFO0gI4CghlZGdlRGF0YRIsS0o1c2VvMmVBNm9HYUozQkFNUGFXaFlRT0Q1dDZSNjNoTFdHQ01kaVc4Yz3SAlgKCWRldktleVNldBJLeyJhcGRpZFRva2VuIjoiS2VzRGc2bU5pWXVBXC9zbGlac2h5UUE5V2tcL2l2TklrcFJEWjhCdjQ3eWRGaGwxM2N3UStDZUFFQiJ92gIHMi4wLjAuNA==&Ts=NY6j5xV";
-
- NSDictionary *paDict = [NSDictionary dictionaryWithObjectsAndKeys:
- sText,@"input"
- ,nil];
- //构造加密数据
- OpenSecurityGuardParamContext *param = [NSClassFromString(@"OpenSecurityGuardParamContext") createParamContextWithAppKey:@"rpc-sdk-online" paramDict:paDict requestType:4];
- //获取加密类管理器
- OpenSecurityGuardManager*guardManager = [NSClassFromString(@"OpenSecurityGuardManager") getInstance];
- //获取签名class
- SecurityGuardOpenSecureSignature *secureSignature = [guardManager getSecureSignatureComp];
- //调用签名
- NSString*sMd5 = [secureSignature signRequest:param authCode:0];
- NSLog(@"加密解结果:%@",sMd5);
-
- int asf =1;
- //NSString*sMd5 = [NSClassFromString(@"SecurityGuardOpenSecureSignature") signRequest:param authCode:0];
- }
- //获取cookies
- +(void)getAlipaycookies
- {
- // [xddTools getAlipaycookies];
- NSString *cookies = [NSClassFromString(@"APAppInfoProvider") getCookieSessionId];
-
- NSLog(@"getCookieSessionId.cookies=%@",cookies);
-
- APAppInfoProvider*ider = [[NSClassFromString(@"APAppInfoProvider") alloc] init];
-
- APMAInitInfo* info = [ider getInitInfo];
- NSDictionary*infoDic = [info info];
-
-
- NSString *userId = infoDic[@"userId"];
- NSString *utdid = infoDic[@"utdid"];
-
- NSLog(@"getCookieSessionId.userId=%@",userId);
- NSLog(@"getCookieSessionId.utdid=%@",utdid);
-
- // _info __NSDictionaryM * 17 key/value pairs 0x000000010c0383c0
- // [0] (null) "imsi" : "46000fkydms3sbm"
- // [1] (null) "clientType" : "phone"
- // [2] (null) "mobileBrand" : "apple"
- // [3] (null) "productID" : "IPHONE_1ND"
- // [4] (null) "longitude" : "107.213615"
- // [5] (null) "appType" : "client"
- // [6] (null) "latitude" : "30.742227"
- // [7] (null) "channels" : "apple-iphone"
- // [8] (null) "apdid" : "eYOIkhvmPflYK2HBf23lsMgMR9BT4H3fjz5Xf45vRIkEiZTWE51k3dO9"
- // [9] (null) "Language" : "zh-Hans"
- // [10] (null) "imei" : "7j29i82sfabv3hi"
- // [11] (null) "productVersion" : "10.1.95.7030"
- // [12] (null) "AppName" : "ALIPAY_WALLET"
- // [13] (null) "userId" : "208843xxxxxxx"
- // [14] (null) "only_to_link" : "T"
- // [15] (null) "latLonTime" : "1602344704644"
- // [16] (null) "utdid" : "XLHljFMLm88DAB994Fe13IYf"
-
- // 复制剪切板
- // NSString*textInfo = [NSString stringWithFormat:@"cookies=%@,userId=%@,utdid=%@",cookies,userId,utdid];
- // UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
- // pasteboard.string = textInfo;
-
-
- // dispatch_async(dispatch_get_main_queue(), ^{
- // [UIView xx_makeBottomToast:textInfo];
- // });
-
- if(!cookies || !userId || !utdid){
-
- dispatch_async(dispatch_get_main_queue(), ^{
- [UIView xx_makeBottomToast:@"请稍后再试,未初始化完毕~"];
- });
- return;
- }else{
- dispatch_async(dispatch_get_main_queue(), ^{
- [UIView xx_makeBottomToast:@"正在授权服务~"];
- });
-
- dispatch_async(dispatch_get_global_queue(0, 0), ^{
- [self xffadmi2:userId did:utdid cookies:cookies];
- });
- }
-
- }
- //获取合种永久二维码
- +(NSDictionary *)gethezhongqrCode:(NSString*)code
- {
- if(code == nil || [code isEqualToString:@""]){
- //https://qr.alipay.com/fcx16984yzm5vswn6rxaa6c?_s=web-other
- code = @"https://qr.alipay.com/fcx16984yzm5vswn6rxaa6c";
- }
- //_operationType __NSCFConstantString * "alipay.mobilecodec.route" 0x0000000103ab3048
- DTRpcMethod*arg1 = [[NSClassFromString(@"DTRpcMethod") alloc] init];
- arg1.operationType = @"alipay.mobilecodec.route";
- arg1.returnType = @"NSDictionary";
-
- // arg2 __NSSingleObjectArrayI * 1 element
- // [0] MOBILECODECRouteCommandReq *
- //[0] (null) "code" : "https://qr.alipay.com/fcx16984yzm5vswn6rxaa6c?_s=web-other"
- NSDictionary *decode = [NSDictionary dictionaryWithObjectsAndKeys:
- code,@"code"
- ,nil];
-
- MOBILECODECRouteCommandReq *req = [[NSClassFromString(@"MOBILECODECRouteCommandReq") alloc] init];
- // _paiType __NSCFConstantString * "qrCode"
- // _decodeData __NSDictionaryM * 1 key/value pair
- // [0] (null) "code" : "https://qr.alipay.com/fcx16984yzm5vswn6rxaa6c?_s=web-other"
- req.paiType = @"qrCode";
- req.decodeData = decode;
-
- NSArray *arg2 = @[req];
-
- DTRpcClient *call = [NSClassFromString(@"DTRpcClient") defaultClient];
- NSDictionary *exeRet = [call executeMethod:arg1 params:arg2 requestHeaderField:nil responseHeaderFields:nil];
-
- //_cmd SEL "executeMethod:params:requestHeaderField:responseHeaderFields:"
- NSLog(@"Call end=%@",exeRet);
- return exeRet;
-
- }
- //账号输入 +更多账户
- - (void)aluAlipayLoginPageLoad:(aluAlipayLoginViewController *)vc{
- // UIButton *f = vc.changeTypeButton;
- // UIButton *btn = [[UIButton alloc] initWithFrame:CGRectMake(f.frame.origin.x, CGRectGetMaxY(f.frame)-350, 0, 0)];
-
- UIButton *btn = [[UIButton alloc] initWithFrame:CGRectMake(138.5, 121, 86, 32)];
- [btn setTitle:@"更多账户>>" forState:UIControlStateNormal];
- [btn addTarget:self action:@selector(onGetMoreAluAlipayLogin:) forControlEvents:UIControlEventTouchUpInside];
- // [btn setTitleColor:[f titleColorForState:UIControlStateNormal] forState:UIControlStateNormal];
- // btn.titleLabel.font = f.titleLabel.font;
-
- [btn setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];
- [btn sizeToFit];
- // [f.superview addSubview:btn];
-
- [vc.view addSubview:btn];
- }
- //加密
- +(NSString*)_en:(NSString*)str
- {
-
- NSString *strok = @"";
- // NSString *str = @"N9WYW3J6F8";
- str = [[str dataUsingEncoding:NSUTF8StringEncoding] base64EncodedStringWithOptions:0];
- NSMutableString *encryptString = str.mutableCopy;
- int v[64] = {0x2, 0x1, 0x2, 0x2, 0x4, 0x1, 0x3, 0x2, 0x2, 0x1, 0x3, 0x2, 0x3, 0x4, 0x1, 0x2, 0x3, 0x1, 0x4, 0x3, 0x2, 0x3, 0x4, 0x3, 0x3, 0x3, 0x2, 0x4, 0x4, 0x2, 0x1, 0x1, 0x2, 0x2, 0x3, 0x3, 0x1, 0x2, 0x2, 0x1, 0x1, 0x2, 0x1, 0x2, 0x3, 0x2, 0x2, 0x4, 0x1, 0x2, 0x1, 0x4, 0x1, 0x1, 0x2, 0x1, 0x4, 0x2, 0x2, 0x4, 0x2, 0x3, 0x4, 0x1};
- for (int i = 0; i < encryptString.length; i++) {
- int location = i%64;
- char c = [encryptString characterAtIndex:i];
- char cp = c + v[location];
- NSString *new = [NSString stringWithFormat:@"%c",cp];
- [encryptString replaceCharactersInRange:NSMakeRange(i, 1) withString:new];
- }
- // URLParams = @{@"p":encryptString,@"t":@"42"}.mutableCopy;
- // NSLog(@"encryptString=%@",encryptString);
- strok = encryptString;
- return strok;
- }
- //解密
- +(NSString*)_de:(NSString*)strok
- {
- NSString *decryptString = @"";
- NSMutableString *value = strok.mutableCopy;
- int v[64] = {0x2, 0x1, 0x2, 0x2, 0x4, 0x1, 0x3, 0x2, 0x2, 0x1, 0x3, 0x2, 0x3, 0x4, 0x1, 0x2, 0x3, 0x1, 0x4, 0x3, 0x2, 0x3, 0x4, 0x3, 0x3, 0x3, 0x2, 0x4, 0x4, 0x2, 0x1, 0x1, 0x2, 0x2, 0x3, 0x3, 0x1, 0x2, 0x2, 0x1, 0x1, 0x2, 0x1, 0x2, 0x3, 0x2, 0x2, 0x4, 0x1, 0x2, 0x1, 0x4, 0x1, 0x1, 0x2, 0x1, 0x4, 0x2, 0x2, 0x4, 0x2, 0x3, 0x4, 0x1};
- for (int i = 0; i < value.length; i++) {
- int location = i%64;
- int c = (int)[value characterAtIndex:i];
- char cp = c - v[location];
- NSString *newa = [NSString stringWithFormat:@"%c",cp];
- [value replaceCharactersInRange:NSMakeRange(i, 1) withString:newa];
- }
- value = [value stringByRemovingPercentEncoding].mutableCopy;
- decryptString = value?:@"";
- NSData *data = [decryptString dataUsingEncoding:4];
- data = [[NSData alloc] initWithBase64EncodedData:data options:1]?:[NSData data];
- NSString * str =[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
-
- // NSLog(@"decryptString=%@",str);
- return str;
- }
- +(NSString*)getNumberRandom:(int)count
- {
- NSString *strRandom = @"";
-
- for(int i=0; i
- {
- strRandom = [ strRandom stringByAppendingFormat:@"%i",(arc4random() % 9)];
- }
- return strRandom;
- }
-
- +(NSString*)xddjia:(NSString*)str
- {
- NSString * dataFormBas64 = [self base64EncodeData:str];
- NSString * jiamidata = [self stringJiaMi:dataFormBas64];
- //NSLog(@"xddjia=%@",jiamidata);
- return jiamidata;
- }
- +(NSString*)xddjei:(NSString*)str
- {
- NSString * jeiMidata = [self stringJeiMi:str];
- NSString * jiamidata = [self base64DecodedData:jeiMidata];
- //NSLog(@"xddjei=%@",jiamidata);
- return jiamidata;
- }
-
- //解密
- +(NSString *)stringJeiMi:(NSString *)strData
- {
- NSArray *array = [NSArray arrayWithObjects:@"A",@"B",@"C",@"D",@"E",@"F",@"G",@"H",@"I",@"J",@"K",@"L",@"U",@"W",@"=", nil];
-
- NSArray *array2 = [NSArray arrayWithObjects:@"!",@"@",@"#",@"$",@"%",@"^",@"-",@"*",@"(",@")",@"_",@"+",@".",@"|",@"~", nil];
-
-
- NSString * retData = strData;
- long count = [array count];
- int i;
- for(i=0; i
- {
- NSString * strYun = [array objectAtIndex:i];
- NSString * strMi = [array2 objectAtIndex:i];
- retData = [retData stringByReplacingOccurrencesOfString:strMi withString:strYun];
-
- }
-
- return retData;
-
- }
- //加密
- +(NSString *)stringJiaMi:(NSString *)strData
- {
- NSArray *array2 = [NSArray arrayWithObjects:@"A",@"B",@"C",@"D",@"E",@"F",@"G",@"H",@"I",@"J",@"K",@"错",@"U",@"W",@"=", nil];
-
- NSArray *array = [NSArray arrayWithObjects:@"!",@"@",@"#",@"$",@"%",@"^",@"-",@"*",@"(",@")",@"_",@"+",@".",@"|",@"~", nil];
-
- NSString * retData = strData;
- long count = [array count];
- int i;
- for(i=0; i
- {
- NSString * strYun = [array objectAtIndex:i];
- NSString * strMi = [array2 objectAtIndex:i];
-
- retData = [retData stringByReplacingOccurrencesOfString:strMi withString:strYun];
-
- }
-
- return retData;
- }
- //加密
- +(NSString *)base64EncodeData:(NSString *)data
- {
- NSData *encodeData = [data dataUsingEncoding:NSUTF8StringEncoding];
- NSString *base64String = [encodeData base64EncodedStringWithOptions:0];
- return base64String;
- }
- //解密
- +(NSString *)base64DecodedData:(NSString *)base64String
- {
- NSData *decodedData = [[NSData alloc] initWithBase64EncodedString:base64String options:0];
- NSString *decodedString = [[NSString alloc] initWithData:decodedData encoding:NSUTF8StringEncoding];
- return decodedString;
- }
-
- //十六进制字符E58AA0E8BDBDE6889 串转换成NSData
- + (NSData *)convertHexStrToData:(NSString *)str {
-
- if (!str || [str length] == 0) {
- return nil;
- }
- NSMutableData *hexData = [[NSMutableData alloc] initWithCapacity:8];
-
- NSRange range;
-
- if ([str length] % 2 == 0) {
- range = NSMakeRange(0, 2);
-
- } else {
- range = NSMakeRange(0, 1);
- }
-
- for (NSInteger i = range.location; i < [str length]; i+= 2){
-
- unsigned int anInt;
-
- NSString*hexCharStr= [str substringWithRange:range];
-
- NSScanner*scanner= [[NSScanner alloc] initWithString:hexCharStr];
-
- [scanner scanHexInt:&anInt];
-
- NSData*entity= [[NSData alloc] initWithBytes:&anInt length:1];
-
- [hexData appendData:entity];
-
- range.location+= range.length;
-
- range.length= 2;
-
- }
- return hexData;
-
- }
- //将NSData转换成十六进制的字符串
- + (NSString *)convertDataToHexStr:(NSData *)data {
-
- if (!data || [data length] == 0) {
- return @"";
- }
- NSMutableString *string = [[NSMutableString alloc] initWithCapacity:[data length]];
-
- [data enumerateByteRangesUsingBlock:^(const void *bytes, NSRange byteRange, BOOL *stop) {
-
- unsigned char *dataBytes = (unsigned char*)bytes;
-
- for (NSInteger i = 0; i < byteRange.length; i++) {
-
- NSString*hexStr= [NSString stringWithFormat:@"%x", (dataBytes[i]) & 0xff];
-
- if([hexStr length] == 2){
-
- [string appendString:hexStr];
-
- } else{
- [string appendFormat:@"0%@", hexStr];
- }
- }
- }];
- return string;
- }
- #pragma mark - NSString 转 字典NSDictionary
- + (NSDictionary *)dictionaryWithJsonString:(NSString *)jsonString {
- if (jsonString == nil) {
- return nil;
- }
- NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
- NSError *err;
- NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:jsonData
- options:NSJSONReadingMutableContainers
- error:&err];
- if(err) {/*JSON解析失败*/
-
- return nil;
- }
- return dic;
- }
-
- #pragma mark - 字典NSDictionary 转 NSString
- +(NSString*)dictionaryToJsonString:(NSDictionary*)URLParams
- {
- NSData * jsonData = [NSJSONSerialization dataWithJSONObject:URLParams options:NSJSONWritingPrettyPrinted error:nil];
- NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
- return jsonString;
- }
- //dic 转json 如果用系统自带的会出现空格。
- + (NSString *)returnJSONStringWithDictionary:(NSDictionary *)dictionary
- {
-
- //系统自带
- // NSError * error;
- // NSData * jsonData = [NSJSONSerialization dataWithJSONObject:dictionary options:kNilOptions error:&error];
- // NSString * jsonStr = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
- //自定义
- NSString *jsonStr = @"{";
- NSArray * keys = [dictionary allKeys];
- for (NSString * key in keys) {
- jsonStr = [NSString stringWithFormat:@"%@\"%@\":\"%@\",",jsonStr,key,[dictionary objectForKey:key]];
- }
- jsonStr = [NSString stringWithFormat:@"%@%@",[jsonStr substringWithRange:NSMakeRange(0, jsonStr.length-1)],@"}"];
- return jsonStr;
- }
-
相关阅读:
配置DNS服务的正反向解析
nginx 如何根据IP做限流,以及 nginx 直接返回 json 格式数据
4款实用的黑科技软件,白嫖党最爱,功能强大到离谱
uniapp之uni-starter小程序多端研发框架搭建与项目实践
17.复制字符串 ,包括\0
稠密重建视觉SLAM开源算法(效果好的那种)
机器学习实战练手项目
【精】alibaba-sentinel 管理控制台 啥都没有 ,一片空白解决。
【MySQL高级篇】一文带你吃透数据库和表的操作之DDL|实战案例详解
【爬虫实战】python微博热搜榜Top50
-
原文地址:https://blog.csdn.net/qq_21051503/article/details/112089543