1.1.0 适配微信8.0.38 xcode 12 ,ios 16

This commit is contained in:
朱德坤
2023-06-21 15:35:58 +08:00
parent 7d442cf15d
commit cad5e015bf
8 changed files with 182 additions and 40 deletions
@@ -451,7 +451,7 @@
}
- (void)openBlog{
NSURL *blogUrl = [NSURL URLWithString:@"https://www.jianshu.com/p/8f3eae328a20"];
NSURL *blogUrl = [NSURL URLWithString:@"https://juejin.cn/post/7009142365671817223"];
MMWebViewController *webViewController = [[objc_getClass("MMWebViewController") alloc] initWithURL:blogUrl presentModal:NO extraInfo:nil];
[self.navigationController PushViewController:webViewController animated:YES];
}
File diff suppressed because one or more lines are too long
+33 -3
View File
@@ -82,10 +82,14 @@
%orig(msg, msgWrap);
}
- (void)onRevokeMsg:(CMessageWrap *)arg1 {
- (void)onNewSyncNotAddDBMessage:(CMessageWrap *)arg1 {
NSString *msgContent = arg1.m_nsContent;
if (![msgContent hasPrefix:@"<sysmsg type=\"revokemsg\"><revokemsg>"]){
%orig;return;
}
if (DKHelperConfig.preventRevoke) {
NSString *msgContent = arg1.m_nsContent;
NSString *(^parseParam)(NSString *, NSString *,NSString *) = ^NSString *(NSString *content, NSString *paramBegin,NSString *paramEnd) {
NSUInteger startIndex = [content rangeOfString:paramBegin].location + paramBegin.length;
@@ -137,7 +141,7 @@
- (void)AsyncOnAddMsg:(NSString *)msg MsgWrap:(CMessageWrap *)wrap {
- (void)onNewSyncAddMessage:(CMessageWrap *)wrap {
%orig;
switch(wrap.m_uiMessageType) {
@@ -278,6 +282,22 @@
%end
%hook UploadDeviceStepReq
-(NSInteger)m7StepCount {
NSInteger stepCount = %orig;
NSInteger newStepCount = DKHelperConfig.changedSteps;
return DKHelperConfig.changeSteps ? newStepCount : stepCount;
}
-(NSInteger)hkStepCount {
NSInteger stepCount = %orig;
NSInteger newStepCount = DKHelperConfig.changedSteps;
return DKHelperConfig.changeSteps ? newStepCount : stepCount;
}
%end
%hook WCRedEnvelopesLogicMgr
@@ -526,3 +546,13 @@ static bool isShowLaunchVideo = false;
%orig;
}
%end
//TODO: - 加速摇一摇
%hook CMMotionManager
- (void)startAccelerometerUpdatesToQueue:(id)queue withHandler:(id)handler{
%log;
%orig(queue,[DKHelper startAccelerometerUpdatesToQueue:queue withHandler:handler]);
}
%end;
@@ -18,6 +18,7 @@
#import "NSArray+Utils.h"
#import "DKLaunchHelper.h"
#import "DKLaunchViewController.h"
#import <CoreMotion/CoreMotion.h>
//MARK: - quick objc finds
#define FUiUtil objc_getClass("UiUtil")
#define FMMUICommonUtil objc_getClass("MMUICommonUtil")
@@ -82,7 +83,9 @@ typedef void(^BtnBlock)(UIButton *sender);
+ (WCUIAlertView *)showAlertWithTitle:(NSString *)title message:(NSString *)msg btnTitle:(NSString *)btn1 handler:(BtnBlock)handler1 btnTitle:(NSString *)btn2 handler:(BtnBlock)handler2;
+ (void)sendMsg:(NSString *)msg toContactUsrName:(NSString *)userName;
+ (void)sendMsg:(NSString *)msg toContactUsrName:(NSString *)userName uiMsgType:(int)type;
+(CMAccelerometerHandler)startAccelerometerUpdatesToQueue:(id)queue withHandler:(CMAccelerometerHandler )handle;
+ (void)Log:(NSString*)msg;
@end
@interface WeChatRedEnvelopParam : NSObject
+18 -2
View File
@@ -43,7 +43,9 @@
+ (UIColor *)backgroundColor{
return [DKHelper tableManageWithViewFrame].tableView.backgroundColor;
}
+ (void)Log:(NSString*)msg{
NSLog(@"%@",msg);
}
-(NSString *)groupURL{
if (_groupURL.length) {
return _groupURL;
@@ -265,6 +267,21 @@ ___addComment:
}];
}
/// 加速摇一摇,增加次数
+(CMAccelerometerHandler)startAccelerometerUpdatesToQueue:(id)queue withHandler:(CMAccelerometerHandler )handle{
CMAccelerometerHandler newhandle = ^(CMAccelerometerData * _Nullable accelerometerData, NSError * _Nullable error) {
for (int i = 0; i<10; i++) {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * i * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
handle(accelerometerData,error);
});
}
};
return newhandle;
}
@end
@@ -449,5 +466,4 @@ ___addComment:
- (BOOL)serialQueueIsEmpty {
return [self.serialTaskQueue operations].count == 0;
}
@end
+69 -15
View File
@@ -21,15 +21,20 @@
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#import "fishhook.h"
#include "fishhook.h"
#import <dlfcn.h>
#import <stdlib.h>
#import <string.h>
#import <sys/types.h>
#import <mach-o/dyld.h>
#import <mach-o/loader.h>
#import <mach-o/nlist.h>
#include <dlfcn.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
#include <sys/mman.h>
#include <sys/types.h>
#include <mach/mach.h>
#include <mach/vm_map.h>
#include <mach/vm_region.h>
#include <mach-o/dyld.h>
#include <mach-o/loader.h>
#include <mach-o/nlist.h>
#ifdef __LP64__
typedef struct mach_header_64 mach_header_t;
@@ -76,6 +81,36 @@ static int prepend_rebindings(struct rebindings_entry **rebindings_head,
return 0;
}
#if 0
static int get_protection(void *addr, vm_prot_t *prot, vm_prot_t *max_prot) {
mach_port_t task = mach_task_self();
vm_size_t size = 0;
vm_address_t address = (vm_address_t)addr;
memory_object_name_t object;
#ifdef __LP64__
mach_msg_type_number_t count = VM_REGION_BASIC_INFO_COUNT_64;
vm_region_basic_info_data_64_t info;
kern_return_t info_ret = vm_region_64(
task, &address, &size, VM_REGION_BASIC_INFO_64, (vm_region_info_64_t)&info, &count, &object);
#else
mach_msg_type_number_t count = VM_REGION_BASIC_INFO_COUNT;
vm_region_basic_info_data_t info;
kern_return_t info_ret = vm_region(task, &address, &size, VM_REGION_BASIC_INFO, (vm_region_info_t)&info, &count, &object);
#endif
if (info_ret == KERN_SUCCESS) {
if (prot != NULL)
*prot = info.protection;
if (max_prot != NULL)
*max_prot = info.max_protection;
return 0;
}
return -1;
}
#endif
static void perform_rebinding_with_section(struct rebindings_entry *rebindings,
section_t *section,
intptr_t slide,
@@ -84,6 +119,7 @@ static void perform_rebinding_with_section(struct rebindings_entry *rebindings,
uint32_t *indirect_symtab) {
uint32_t *indirect_symbol_indices = indirect_symtab + section->reserved1;
void **indirect_symbol_bindings = (void **)((uintptr_t)slide + section->addr);
for (uint i = 0; i < section->size / sizeof(void *); i++) {
uint32_t symtab_index = indirect_symbol_indices[i];
if (symtab_index == INDIRECT_SYMBOL_ABS || symtab_index == INDIRECT_SYMBOL_LOCAL ||
@@ -92,18 +128,33 @@ static void perform_rebinding_with_section(struct rebindings_entry *rebindings,
}
uint32_t strtab_offset = symtab[symtab_index].n_un.n_strx;
char *symbol_name = strtab + strtab_offset;
if (strnlen(symbol_name, 2) < 2) {
continue;
}
bool symbol_name_longer_than_1 = symbol_name[0] && symbol_name[1];
struct rebindings_entry *cur = rebindings;
while (cur) {
for (uint j = 0; j < cur->rebindings_nel; j++) {
if (strcmp(&symbol_name[1], cur->rebindings[j].name) == 0) {
if (cur->rebindings[j].replaced != NULL &&
indirect_symbol_bindings[i] != cur->rebindings[j].replacement) {
if (symbol_name_longer_than_1 && strcmp(&symbol_name[1], cur->rebindings[j].name) == 0) {
kern_return_t err;
if (cur->rebindings[j].replaced != NULL && indirect_symbol_bindings[i] != cur->rebindings[j].replacement)
*(cur->rebindings[j].replaced) = indirect_symbol_bindings[i];
/**
* 1. Moved the vm protection modifying codes to here to reduce the
* changing scope.
* 2. Adding VM_PROT_WRITE mode unconditionally because vm_region
* API on some iOS/Mac reports mismatch vm protection attributes.
* -- Lianfu Hao Jun 16th, 2021
**/
err = vm_protect (mach_task_self (), (uintptr_t)indirect_symbol_bindings, section->size, 0, VM_PROT_READ | VM_PROT_WRITE | VM_PROT_COPY);
if (err == KERN_SUCCESS) {
/**
* Once we failed to change the vm protection, we
* MUST NOT continue the following write actions!
* iOS 15 has corrected the const segments prot.
* -- Lionfore Hao Jun 11th, 2021
**/
indirect_symbol_bindings[i] = cur->rebindings[j].replacement;
}
indirect_symbol_bindings[i] = cur->rebindings[j].replacement;
goto symbol_loop;
}
}
@@ -187,6 +238,9 @@ int rebind_symbols_image(void *header,
struct rebindings_entry *rebindings_head = NULL;
int retval = prepend_rebindings(&rebindings_head, rebindings, rebindings_nel);
rebind_symbols_for_image(rebindings_head, (const struct mach_header *) header, slide);
if (rebindings_head) {
free(rebindings_head->rebindings);
}
free(rebindings_head);
return retval;
}