mirror of
https://github.com/DKJone/DKWechatHelper.git
synced 2025-05-23 02:26:09 +08:00
1.1.0 适配微信8.0.38 xcode 12 ,ios 16
This commit is contained in:
parent
7d442cf15d
commit
cad5e015bf
10
CHANGELOG.md
10
CHANGELOG.md
|
@ -1,4 +1,12 @@
|
|||
# DKWechatHelper ChangeLog
|
||||
# DKWechatHelper ChangeLog
|
||||
|
||||
[v1.1.0](https://github.com/DKWechatHelper/DKWechatHelper/releases/tag/1.1.0) / 2023-06-21
|
||||
what's new
|
||||
* 支持8.0.38
|
||||
* 更新越狱包8.0.38
|
||||
* 更新已注入助手的8.0.38未签名包
|
||||
* 更新越狱源安装包
|
||||
|
||||
[v1.0.9](https://github.com/DKWechatHelper/DKWechatHelper/releases/tag/1.0.9) / 2021-09-15
|
||||
what's new
|
||||
* 好友检测改为通过请求是否可以转账进行判断
|
||||
|
|
17
README.md
17
README.md
|
@ -1,9 +1,11 @@
|
|||
# DKWechatHelper
|
||||
|
||||
不止于抢红包,功能丰富的微信插件。本软件已成功运行在(iphone7-iphone12、iPad)
|
||||
|
||||
|
||||
不止于抢红包,功能丰富的微信插件。本软件已成功运行在(iphone7-iphone14、iPad)
|
||||
给个⭐️不迷路↗️
|
||||
|
||||
|[v1.0.9](https://github.com/DKWechatHelper/DKWechatHelper/releases/tag/1.0.9)适用微信8.0.13 |||
|
||||
|[v1.1.0](https://github.com/DKWechatHelper/DKWechatHelper/releases/tag/1.1.0)适用微信8.0.38 |[v1.0.9](https://github.com/DKWechatHelper/DKWechatHelper/releases/tag/1.0.9)适用微信8.0.13 ||
|
||||
| --- | --- | --- |
|
||||
| [v1.0.8](https://github.com/DKWechatHelper/DKWechatHelper/releases/tag/1.0.8)适用微信8.0.6 |[v1.0.7](https://github.com/DKWechatHelper/DKWechatHelper/releases/tag/1.0.7)适用微信8.0.1 | [v1.0.6](https://github.com/DKWechatHelper/DKWechatHelper/releases/tag/1.0.6)适用微信7.0.17 |
|
||||
| [v1.0.5](https://github.com/DKWechatHelper/DKWechatHelper/releases/tag/1.0.5)适用微信7.0.15 | [v1.0.4](https://github.com/DKWechatHelper/DKWechatHelper/releases/tag/1.0.4)适用微信7.0.14 | [v1.0.3](https://github.com/DKWechatHelper/DKWechatHelper/releases/tag/1.0.3)适用微信7.0.13 |
|
||||
|
@ -44,7 +46,7 @@
|
|||
1.源码学习
|
||||
下载本项目,下载砸壳后的微信(7.0以上)(我给你准备了个)
|
||||
|
||||
|[8.0.13](https://url15.ctfile.com/f/24576815-513705776-0adb11) |[8.0.6](https://n802.com/f/24576815-496573913-9ce385)||
|
||||
|[8.0.38](https://url15.ctfile.com/f/24576815-874026915-d7c546?p=1756)|[8.0.13](https://url15.ctfile.com/f/24576815-513705776-0adb11) |[8.0.6](https://n802.com/f/24576815-496573913-9ce385)|
|
||||
|---| --- | --- |
|
||||
|[8.0.1](https://n802.com/f/24576815-480279421-6c84b9)|[7.0.17](https://n802.com/file/24576815-467161527)|[7.0.15](https://n802.com/file/24576815-463029595) |
|
||||
|[7.0.14](https://n802.com/file/24576815-452231690) |[7.0.13-*提取码: nx4m*](https://pan.baidu.com/s/1rqB0pV4zMEB6Z3VJTsTa8Q)|[7.0.11-*提取码: 2igg*](https://pan.baidu.com/s/1mU_mezsWhqL2-AY0PB-vVg) |
|
||||
|
@ -55,9 +57,9 @@
|
|||
2.开发者:
|
||||
下载以下ipa后重签名应用:
|
||||
|
||||
| [未签名版8.0.13](https://url15.ctfile.com/f/24576815-513705667-6aa955) |[未签名版8.0.6](https://n802.com/f/24576815-496574216-b01bf7) | [未签名版8.0.1](https://n802.com/f/24576815-480300249-d79448) |
|
||||
| [未签名版8.0.38](https://url15.ctfile.com/f/24576815-874026981-5029c9?p=1756)|||
|
||||
| --- | --- | --- |
|
||||
||||
|
||||
| [未签名版8.0.13](https://url15.ctfile.com/f/24576815-513705667-6aa955) |[未签名版8.0.6](https://n802.com/f/24576815-496574216-b01bf7) | [未签名版8.0.1](https://n802.com/f/24576815-480300249-d79448) |
|
||||
|[未签名版7.0.17](https://n802.com/file/24576815-467161662) |[未签名版7.0.15](https://n802.com/file/24576815-463034104)|[未签名版7.0.14](https://n802.com/file/24576815-452232682) |
|
||||
| [未签名版7.0.13-*提取码: fhes*](https://pan.baidu.com/s/1DgSl5u0Gip3cNdqZmRFEWw) | [未签名版7.0.11-*提取码: fe9f*](https://pan.baidu.com/s/1sOPCqnCPxSdIKq7TKuHK9g) | [未签名版7.0.0](https://pan.baidu.com/s/1-zEUQRGn3H4bZVqHpyffzQ) |
|
||||
|
||||
|
@ -69,9 +71,8 @@
|
|||
|
||||
4.越狱用户:
|
||||
添加源`https://dkjone.github.io/`下载或直接下载deb文件:
|
||||
|
||||
| [1.0.9deb](https://url15.ctfile.com/f/24576815-513707605-d0d6fb) | [1.0.8deb](https://n802.com/f/24576815-496575548-fa5b89) | [其他deb下载地址](https://gitee.com/DKJone/dkjone.github.io/tree/master/debs) |
|
||||
| --- | --- | --- |
|
||||
| [1.1.0deb](https://url15.ctfile.com/f/24576815-874029648-9fec88?p=1756 ) | [1.0.9deb](https://url15.ctfile.com/f/24576815-513707605-d0d6fb) | [1.0.8deb](https://n802.com/f/24576815-496575548-fa5b89) | [其他deb下载地址](https://gitee.com/DKJone/dkjone.github.io/tree/master/debs) |
|
||||
| --- | --- | --- |--- |
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -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
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user