V1.0.5功能新增及bug修复

[v1.0.5]
what's new
* 新增好友关系检测
* 新增自动收取个人红包
* 修复集赞助手自定义评论时可能会发生闪退的BUG
* 支持7.0.15
* 更新越狱包7.0.15
* 更新已注入助手的7.0.15未签名包
* 更新越狱源安装包
This commit is contained in:
DKJone
2020-09-29 13:39:52 +08:00
parent c1f35fec36
commit 6fe71e584e
21 changed files with 776 additions and 81 deletions
+24
View File
@@ -15,11 +15,16 @@
#import "WCUIAlertView.h"
#import "DKHelperConfig.h"
#import <UIKit/UIKit.h>
#import "NSArray+Utils.h"
//MARK: - quick objc finds
#define FUiUtil objc_getClass("UiUtil")
#define FMMUICommonUtil objc_getClass("MMUICommonUtil")
#define FWCTableViewCellManager objc_getClass("WCTableViewNormalCellManager")
#define WK(object) autoreleasepool{} __weak typeof(object) weak##object = object
#define ST(object) autoreleasepool{} __strong typeof(object) object = weak##object
#define WS(weakSelf) __weak __typeof(&*self)weakSelf = self;
typedef void(^BtnBlock)(UIButton *sender);
@@ -27,6 +32,25 @@ typedef void(^BtnBlock)(UIButton *sender);
@interface DKHelper : NSObject
/// 好友关系是否检测完毕
@property (nonatomic,assign)BOOL checkFriendsEnd;
/// 已将你删除的好友
@property (nonatomic,copy)NSArray<CContact *> *notFriends;
/// 账号被封的好友
@property (nonatomic,copy)NSArray<CContact *> *invalidFriends;
/// 相互好友
@property (nonatomic,copy)NSArray<CContact *> *validFriends;
/// 检测好友状态的群组
@property (nonatomic,strong)CContact *groupContact;
@property (nonatomic,strong)dispatch_group_t checkFriendGroup;
/// 结束好友检测
+ (void)endCheck;
- (void)setCheckNotify;
+ (instancetype)shared ;
/// 所有好友(不包含公众号)
+ (NSArray<CContact*> *)allFriends;
+59 -1
View File
@@ -21,11 +21,69 @@
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
helper = [[DKHelper alloc] init];
helper.checkFriendsEnd = true;
});
return helper;
}
- (void)setCheckNotify{
self.checkFriendGroup = dispatch_group_create();
DKHelper.shared.invalidFriends = @[];
DKHelper.shared.validFriends = @[];
DKHelper.shared.notFriends = @[];
dispatch_group_enter(DKHelper.shared.checkFriendGroup);
dispatch_group_enter(DKHelper.shared.checkFriendGroup);
dispatch_group_notify(self.checkFriendGroup, dispatch_get_main_queue(), ^{
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[DKHelper endCheck];
});
});
}
+ (void)endCheck{
DKHelper.shared.checkFriendsEnd = true;
CContactMgr *contactMgr = [[objc_getClass("MMServiceCenter") defaultCenter] getService:[objc_getClass("CContactMgr") class]];
if (DKHelper.shared.validFriends.count + DKHelper.shared.notFriends.count > 0) {
///检测完成了
DKHelper.shared.notFriends = [DKHelper.shared.notFriends _filter:^BOOL(id obj) {
return ![[[contactMgr getSelfContact] m_nsUsrName] isEqualToString:((CContact*)obj).m_nsUsrName];
}];
NSArray<CContact*> *invalidFriends = DKHelper.allFriends.copy;
NSMutableArray *addSelf = DKHelper.shared.validFriends.mutableCopy;
[addSelf addObject:[contactMgr getSelfContact]];
DKHelper.shared.validFriends = addSelf;
invalidFriends = [invalidFriends _filter:^BOOL(id obj) {
return ![DKHelper.shared.notFriends _contains:^BOOL(id obj2) {
return [((CContact*)obj).m_nsUsrName isEqualToString: ((CContact*)obj2).m_nsUsrName];
}];
}];
invalidFriends = [invalidFriends _filter:^BOOL(id obj) {
return ![DKHelper.shared.validFriends _contains:^BOOL(id obj2) {
return [((CContact*)obj).m_nsUsrName isEqualToString: ((CContact*)obj2).m_nsUsrName];
}];
}];
DKHelper.shared.invalidFriends = invalidFriends;
[NSNotificationCenter.defaultCenter postNotificationName:@"checkFriendsEnd" object:nil userInfo:@{@"success":@YES}];
}else{
/// 检测超时结束
DKHelper.shared.invalidFriends = @[];
DKHelper.shared.validFriends = @[];
DKHelper.shared.notFriends = @[];
[NSNotificationCenter.defaultCenter postNotificationName:@"checkFriendsEnd" object:nil userInfo:@{@"success":@NO}];
}
// 删除群聊
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
MMNewSessionMgr * sm =[[objc_getClass("MMServiceCenter") defaultCenter] getService:[objc_getClass("MMNewSessionMgr") class]];
unsigned int idx = [sm getSessionIndexOfUser:DKHelper.shared.groupContact.m_nsUsrName];
if (idx != (unsigned int)(NSNotFound)){
[sm deleteSessionAtIndex:idx forceDelete:false];
}
});
}
+ (UINavigationController *)navigationContrioller{
return ((UINavigationController *)([objc_getClass("CAppViewControllerManager") getCurrentNavigationController]));
}
@@ -59,7 +117,7 @@
CContactMgr *contactMgr = [[objc_getClass("MMServiceCenter") defaultCenter] getService:[objc_getClass("CContactMgr") class]];
NSArray* contacts = [contactMgr getContactList:1 contactType:0];
for(CContact* contact in contacts){
if (!contact.isBrandContact && contact.m_uiSex != 0) {
if (!contact.isBrandContact && contact.m_uiSex != 0 && ![contact.m_nsUsrName containsString:@"@openim"]) {
[friends addObject:contact];
}
}
@@ -2,8 +2,15 @@
// DKHelperConfig.h
// testHookDylib
//
// Created by 朱德坤 on 2019/1/22.
// Copyright © 2019 DKJone. All rights reserved.
// Created by 朱德坤 on 2019/1/22.
// Copyright © 2019 DKJone. All rights reserved.
//
// ██████╗ ██╗ ██╗ ██╗ ██████╗ ███╗ ██╗███████╗
// ██╔══██╗██║ ██╔╝ ██║██╔═══██╗████╗ ██║██╔════╝
// ██║ ██║█████╔╝ ██║██║ ██║██╔██╗ ██║█████╗
// ██║ ██║██╔═██╗ ██ ██║██║ ██║██║╚██╗██║██╔══╝
// ██████╔╝██║ ██╗╚█████╔╝╚██████╔╝██║ ╚████║███████╗
// ╚═════╝ ╚═╝ ╚═╝ ╚════╝ ╚═════╝ ╚═╝ ╚═══╝╚══════╝
//
#import <Foundation/Foundation.h>
@@ -88,6 +95,13 @@ NS_ASSUME_NONNULL_BEGIN
+(void)setComments:(NSString *)value;
/// 抢个人红包
+(BOOL)personalRedEnvelopEnable;
+(void)setPersonalRedEnvelopEnable:(BOOL)value;
/// 清理好友
+(BOOL)cleanFriendsEnable;
+(void)setCleanFriendsEnable:(BOOL)value;
@end
@@ -52,8 +52,8 @@ NSString* cmdString(SEL sel){
[NSUserDefaults.standardUserDefaults synchronize];
free(value);
}else{
// 存储对象
NSObject *value ;
// 存储对象 使用NSObject* 定义value导致崩溃,默认强引用参数但未retain,方法结束后release,参数被提前回收导致坏内存访问
id __unsafe_unretained value = nil;
[anInvocation getArgument:&value atIndex:2];
[NSUserDefaults.standardUserDefaults setValue:value forKey: cmdString(anInvocation.selector)];
[NSUserDefaults.standardUserDefaults synchronize];
@@ -0,0 +1,27 @@
// NSArray+Utils.h
// dkhelperDylib
// Created by DKJone on 2020/9/27
// Copyright © 2020 DKJone. All rights reserved.
//
//
// ██████╗ ██╗ ██╗ ██╗ ██████╗ ███╗ ██╗███████╗
// ██╔══██╗██║ ██╔╝ ██║██╔═══██╗████╗ ██║██╔════╝
// ██║ ██║█████╔╝ ██║██║ ██║██╔██╗ ██║█████╗
// ██║ ██║██╔═██╗ ██ ██║██║ ██║██║╚██╗██║██╔══╝
// ██████╔╝██║ ██╗╚█████╔╝╚██████╔╝██║ ╚████║███████╗
// ╚═════╝ ╚═╝ ╚═╝ ╚════╝ ╚═════╝ ╚═╝ ╚═══╝╚══════╝
//
//
#import <Foundation/Foundation.h>
@interface NSArray (Utils)
- (NSArray *)_map:(id(^)(id))hanlde ;
- (NSArray *)_filter:(BOOL(^)(id obj))handle ;
- (BOOL)_contains:(BOOL(^)(id obj))handle;
@end
@@ -0,0 +1,53 @@
// NSArray+Utils.m
// dkhelperDylib
// Created by DKJone on 2020/9/27
// Copyright © 2020 DKJone. All rights reserved.
//
//
// ██████╗ ██╗ ██╗ ██╗ ██████╗ ███╗ ██╗███████╗
// ██╔══██╗██║ ██╔╝ ██║██╔═══██╗████╗ ██║██╔════╝
// ██║ ██║█████╔╝ ██║██║ ██║██╔██╗ ██║█████╗
// ██║ ██║██╔═██╗ ██ ██║██║ ██║██║╚██╗██║██╔══╝
// ██████╔╝██║ ██╗╚█████╔╝╚██████╔╝██║ ╚████║███████╗
// ╚═════╝ ╚═╝ ╚═╝ ╚════╝ ╚═════╝ ╚═╝ ╚═══╝╚══════╝
//
//
#import "NSArray+Utils.h"
@implementation NSArray (Utils)
- (NSArray *)_map:(id(^)(id))hanlde {
if (!hanlde || !self) return self;
NSMutableArray *arr = NSMutableArray.array;
for (id obj in self) {
id new = hanlde(obj);
[arr addObject:new];
}
return arr.copy;
}
- (NSArray *)_filter:(BOOL(^)(id))handle {
if (!handle || !self) return self;
NSMutableArray *arr = NSMutableArray.array;
for (id obj in self) {
if (handle(obj)) {
[arr addObject:obj];
}
}
return arr.copy;
}
- (BOOL)_contains:(BOOL(^)(id))handle {
if (!handle || !self) return self;
for (id obj in self) {
if (handle(obj)) {
return true;
}
}
return false;
}
@end