Compare commits

...

7 Commits

Author SHA1 Message Date
朱德坤
cad5e015bf 1.1.0 适配微信8.0.38 xcode 12 ,ios 16 2023-06-21 15:35:58 +08:00
DKJone
7d442cf15d
Update README.md 2021-09-18 15:04:21 +08:00
DKJone
dc10d3ac56 Update README.md 2021-09-16 08:54:08 +08:00
DKJone
6976c91095 [v1.0.9](https://github.com/DKWechatHelper/DKWechatHelper/releases/tag/1.0.9) / 2021-09-15
what's new
* 好友检测改为通过请求是否可以转账进行判断
* 动态启动图资源改为下载
* 支持8.0.13
* 更新越狱包8.0.13
* 更新已注入助手的8.0.13未签名包
* 更新越狱源安装包
2021-09-15 16:55:31 +08:00
DKJone
aa87c1e0a6
将vap文件保存到云端访问
将vap文件保存到云端访问
2021-09-14 15:30:09 +08:00
DKJone
0a98c3d8ef [v1.0.8](https://github.com/DKWechatHelper/DKWechatHelper/releases/tag/1.0.8) / 2021-05-20
what's new
* 动态启动图黑屏修复(#65,#66)
* 支持8.0.6
* 更新越狱包8.0.6
* 更新已注入助手的8.0.6未签名包
* 更新越狱源安装包
2021-05-20 16:57:35 +08:00
DKJone
4ee5e2ff22 fix fileparh
fix fileparh
2021-03-22 10:46:31 +08:00
40 changed files with 706 additions and 397 deletions

1
.gitignore vendored
View File

@ -9,3 +9,4 @@ dkhelper/dkhelper/tmp/
dkhelper/LatestBuild
dkhelper/dkhelper/WeChat_Headers/
Info.plist
dkhelper/LogesTewak

View File

@ -1,4 +1,28 @@
# 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
* 好友检测改为通过请求是否可以转账进行判断
* 动态启动图资源改为下载
* 支持8.0.13
* 更新越狱包8.0.13
* 更新已注入助手的8.0.13未签名包
* 更新越狱源安装包
[v1.0.8](https://github.com/DKWechatHelper/DKWechatHelper/releases/tag/1.0.8) / 2021-05-20
what's new
* 动态启动图黑屏修复(#65#66)
* 支持8.0.6
* 更新越狱包8.0.6
* 更新已注入助手的8.0.6未签名包
* 更新越狱源安装包
[v1.0.7](https://github.com/DKWechatHelper/DKWechatHelper/releases/tag/1.0.7) / 2021-01-29
what's new
* 动态启动图

View File

@ -1,17 +1,18 @@
# DKWechatHelper
不止于抢红包,功能丰富的微信插件。本软件已成功运行在(iphone7-iphone12、iPad)
不止于抢红包,功能丰富的微信插件。本软件已成功运行在(iphone7-iphone14、iPad)
给个⭐️不迷路↗️
[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
[v1.0.2](https://github.com/DKWechatHelper/DKWechatHelper/releases/tag/1.0.2)适用微信7.0.11
[v1.0.1](https://github.com/DKWechatHelper/DKWechatHelper/releases/tag/1.0.1)适用微信7.0.8~7.0.10
[v1.0.0](https://github.com/DKWechatHelper/DKWechatHelper/releases/tag/1.0.0) 适用微信7.0.0-7.0.3
|[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 |
|[v1.0.2](https://github.com/DKWechatHelper/DKWechatHelper/releases/tag/1.0.2)适用微信7.0.11 |[v1.0.1](https://github.com/DKWechatHelper/DKWechatHelper/releases/tag/1.0.1)适用微信7.0.8~7.0.10 |[v1.0.0](https://github.com/DKWechatHelper/DKWechatHelper/releases/tag/1.0.0) 适用微信7.0.0-7.0.3 |
更多更新内容请查看[CHANGELOG](./CHANGELOG.md)
图片加载失败可以到[简书](https://www.jianshu.com/p/8f3eae328a20)查看,本文将在[简书](https://www.jianshu.com/p/8f3eae328a20)同步更新。
图片加载失败可以到[掘金](https://juejin.cn/post/7009142365671817223)查看,本文将在[掘金](https://juejin.cn/post/7009142365671817223)同步更新。
## 特色
1.完全融入微信8.0UI风格,沉浸式体验
2.完全免费的全功能插件
@ -29,7 +30,7 @@
* [x] 小游戏作弊(剪刀石头布和掷骰子)
* [x] CallKit锁屏接视频语音
* [x] 集赞助手
* [x] 好友关系检测
* [x] 好友关系检测(已更新)
* [x] 朋友圈转发
* [x] 动态聊天背景
* [x] 动态启动图
@ -44,27 +45,23 @@
⚠️⚠️⚠️下载默认密码:`dkjone`
1.源码学习
下载本项目下载砸壳后的微信7.0以上)(我给你准备了个)
* [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)
* [7.0.8-*提取码:h54d*](https://pan.baidu.com/s/11VoUXPC4vb5zg8HzP3kC0Q)
* [7.0.2](https://pan.baidu.com/s/1SHZHfu94Z_jhCkaaFDx8pA)
* [7.0.0](https://pan.baidu.com/s/15pVma66Ea822YVGrBa2GHw)
|[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) |
| [7.0.8-*提取码:h54d*](https://pan.baidu.com/s/11VoUXPC4vb5zg8HzP3kC0Q) | [7.0.2](https://pan.baidu.com/s/1SHZHfu94Z_jhCkaaFDx8pA) | [7.0.0](https://pan.baidu.com/s/15pVma66Ea822YVGrBa2GHw) |
将下载的微信放到'/dkhelper/dkhelper/TargetApp/'目录下该目录下有一个空白文件put ipa or app here和它放在同一文件夹下即可修改项目BundleId及签名信息选择真机设备运行即可
2.开发者:
下载以下ipa后重签名应用
* [未签名版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)
| [未签名版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) |
注:推荐使用[ios-app-signer](https://github.com/DanTheMan827/ios-app-signer)签名,使用方法自行百度
@ -73,7 +70,10 @@
下载后使用 [Cydia Impactor](http://www.cydiaimpactor.com/)或者`爱思助手`或者[AltStore](https://github.com/rileytestut/AltStore)安装
4.越狱用户:
添加源`https://dkjone.github.io/`下载
添加源`https://dkjone.github.io/`下载或直接下载deb文件:
| [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) |
| --- | --- | --- |--- |
### 请我喝杯☕️

View File

@ -134,33 +134,6 @@
116B4DC425BE92470079C6FE /* QGHWDMetalRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 116B4D7425BE92470079C6FE /* QGHWDMetalRenderer.h */; };
116B4DC525BE92470079C6FE /* QGHWDMP4OpenGLView.m in Sources */ = {isa = PBXBuildFile; fileRef = 116B4D7625BE92470079C6FE /* QGHWDMP4OpenGLView.m */; };
116B4DC625BE92470079C6FE /* QGHWDMP4OpenGLView.h in Headers */ = {isa = PBXBuildFile; fileRef = 116B4D7725BE92470079C6FE /* QGHWDMP4OpenGLView.h */; };
116B4DE425BE98030079C6FE /* uranus.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 116B4DC925BE98030079C6FE /* uranus.jpg */; };
116B4DE525BE98030079C6FE /* venus.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 116B4DCA25BE98030079C6FE /* venus.jpg */; };
116B4DE625BE98030079C6FE /* nepture.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 116B4DCB25BE98030079C6FE /* nepture.jpg */; };
116B4DE725BE98030079C6FE /* venusVap.mp4 in Resources */ = {isa = PBXBuildFile; fileRef = 116B4DCC25BE98030079C6FE /* venusVap.mp4 */; };
116B4DE825BE98030079C6FE /* mars.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 116B4DCD25BE98030079C6FE /* mars.jpg */; };
116B4DE925BE98030079C6FE /* sature.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 116B4DCE25BE98030079C6FE /* sature.jpg */; };
116B4DEA25BE98030079C6FE /* launchBgm.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = 116B4DCF25BE98030079C6FE /* launchBgm.mp3 */; };
116B4DEB25BE98030079C6FE /* marsVap.mp4 in Resources */ = {isa = PBXBuildFile; fileRef = 116B4DD025BE98030079C6FE /* marsVap.mp4 */; };
116B4DEC25BE98030079C6FE /* blackholeVap.mp4 in Resources */ = {isa = PBXBuildFile; fileRef = 116B4DD125BE98030079C6FE /* blackholeVap.mp4 */; };
116B4DED25BE98030079C6FE /* moonVap.mp4 in Resources */ = {isa = PBXBuildFile; fileRef = 116B4DD225BE98030079C6FE /* moonVap.mp4 */; };
116B4DEE25BE98030079C6FE /* earth.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 116B4DD325BE98030079C6FE /* earth.jpg */; };
116B4DEF25BE98030079C6FE /* blackhole.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 116B4DD425BE98030079C6FE /* blackhole.jpg */; };
116B4DF025BE98030079C6FE /* earthVap.mp4 in Resources */ = {isa = PBXBuildFile; fileRef = 116B4DD525BE98030079C6FE /* earthVap.mp4 */; };
116B4DF125BE98030079C6FE /* moon.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 116B4DD625BE98030079C6FE /* moon.jpg */; };
116B4DF225BE98030079C6FE /* uranusVap.mp4 in Resources */ = {isa = PBXBuildFile; fileRef = 116B4DD725BE98030079C6FE /* uranusVap.mp4 */; };
116B4DF325BE98030079C6FE /* satureVap.mp4 in Resources */ = {isa = PBXBuildFile; fileRef = 116B4DD825BE98030079C6FE /* satureVap.mp4 */; };
116B4DF425BE98030079C6FE /* neptureVap.mp4 in Resources */ = {isa = PBXBuildFile; fileRef = 116B4DD925BE98030079C6FE /* neptureVap.mp4 */; };
116B4DF525BE98030079C6FE /* pluto.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 116B4DDA25BE98030079C6FE /* pluto.jpg */; };
116B4DF625BE98030079C6FE /* sedna.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 116B4DDB25BE98030079C6FE /* sedna.jpg */; };
116B4DF725BE98030079C6FE /* sun.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 116B4DDC25BE98030079C6FE /* sun.jpg */; };
116B4DF825BE98030079C6FE /* jupitreVap.mp4 in Resources */ = {isa = PBXBuildFile; fileRef = 116B4DDD25BE98030079C6FE /* jupitreVap.mp4 */; };
116B4DF925BE98030079C6FE /* mercuryVap.mp4 in Resources */ = {isa = PBXBuildFile; fileRef = 116B4DDE25BE98030079C6FE /* mercuryVap.mp4 */; };
116B4DFA25BE98030079C6FE /* sednaVap.mp4 in Resources */ = {isa = PBXBuildFile; fileRef = 116B4DDF25BE98030079C6FE /* sednaVap.mp4 */; };
116B4DFB25BE98030079C6FE /* mercury.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 116B4DE025BE98030079C6FE /* mercury.jpg */; };
116B4DFC25BE98030079C6FE /* sunVap.mp4 in Resources */ = {isa = PBXBuildFile; fileRef = 116B4DE125BE98030079C6FE /* sunVap.mp4 */; };
116B4DFD25BE98030079C6FE /* plutoVap.mp4 in Resources */ = {isa = PBXBuildFile; fileRef = 116B4DE225BE98030079C6FE /* plutoVap.mp4 */; };
116B4DFE25BE98030079C6FE /* jupitre.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 116B4DE325BE98030079C6FE /* jupitre.jpg */; };
11D27C9E25208FC800AE6337 /* NSArray+Utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 11D27C9C25208FC800AE6337 /* NSArray+Utils.h */; };
11D27C9F25208FC800AE6337 /* NSArray+Utils.m in Sources */ = {isa = PBXBuildFile; fileRef = 11D27C9D25208FC800AE6337 /* NSArray+Utils.m */; };
/* End PBXBuildFile section */
@ -323,33 +296,6 @@
116B4D7425BE92470079C6FE /* QGHWDMetalRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QGHWDMetalRenderer.h; sourceTree = "<group>"; };
116B4D7625BE92470079C6FE /* QGHWDMP4OpenGLView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = QGHWDMP4OpenGLView.m; sourceTree = "<group>"; };
116B4D7725BE92470079C6FE /* QGHWDMP4OpenGLView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QGHWDMP4OpenGLView.h; sourceTree = "<group>"; };
116B4DC925BE98030079C6FE /* uranus.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = uranus.jpg; sourceTree = "<group>"; };
116B4DCA25BE98030079C6FE /* venus.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = venus.jpg; sourceTree = "<group>"; };
116B4DCB25BE98030079C6FE /* nepture.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = nepture.jpg; sourceTree = "<group>"; };
116B4DCC25BE98030079C6FE /* venusVap.mp4 */ = {isa = PBXFileReference; lastKnownFileType = file; path = venusVap.mp4; sourceTree = "<group>"; };
116B4DCD25BE98030079C6FE /* mars.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = mars.jpg; sourceTree = "<group>"; };
116B4DCE25BE98030079C6FE /* sature.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = sature.jpg; sourceTree = "<group>"; };
116B4DCF25BE98030079C6FE /* launchBgm.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; path = launchBgm.mp3; sourceTree = "<group>"; };
116B4DD025BE98030079C6FE /* marsVap.mp4 */ = {isa = PBXFileReference; lastKnownFileType = file; path = marsVap.mp4; sourceTree = "<group>"; };
116B4DD125BE98030079C6FE /* blackholeVap.mp4 */ = {isa = PBXFileReference; lastKnownFileType = file; path = blackholeVap.mp4; sourceTree = "<group>"; };
116B4DD225BE98030079C6FE /* moonVap.mp4 */ = {isa = PBXFileReference; lastKnownFileType = file; path = moonVap.mp4; sourceTree = "<group>"; };
116B4DD325BE98030079C6FE /* earth.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = earth.jpg; sourceTree = "<group>"; };
116B4DD425BE98030079C6FE /* blackhole.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = blackhole.jpg; sourceTree = "<group>"; };
116B4DD525BE98030079C6FE /* earthVap.mp4 */ = {isa = PBXFileReference; lastKnownFileType = file; path = earthVap.mp4; sourceTree = "<group>"; };
116B4DD625BE98030079C6FE /* moon.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = moon.jpg; sourceTree = "<group>"; };
116B4DD725BE98030079C6FE /* uranusVap.mp4 */ = {isa = PBXFileReference; lastKnownFileType = file; path = uranusVap.mp4; sourceTree = "<group>"; };
116B4DD825BE98030079C6FE /* satureVap.mp4 */ = {isa = PBXFileReference; lastKnownFileType = file; path = satureVap.mp4; sourceTree = "<group>"; };
116B4DD925BE98030079C6FE /* neptureVap.mp4 */ = {isa = PBXFileReference; lastKnownFileType = file; path = neptureVap.mp4; sourceTree = "<group>"; };
116B4DDA25BE98030079C6FE /* pluto.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = pluto.jpg; sourceTree = "<group>"; };
116B4DDB25BE98030079C6FE /* sedna.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = sedna.jpg; sourceTree = "<group>"; };
116B4DDC25BE98030079C6FE /* sun.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = sun.jpg; sourceTree = "<group>"; };
116B4DDD25BE98030079C6FE /* jupitreVap.mp4 */ = {isa = PBXFileReference; lastKnownFileType = file; path = jupitreVap.mp4; sourceTree = "<group>"; };
116B4DDE25BE98030079C6FE /* mercuryVap.mp4 */ = {isa = PBXFileReference; lastKnownFileType = file; path = mercuryVap.mp4; sourceTree = "<group>"; };
116B4DDF25BE98030079C6FE /* sednaVap.mp4 */ = {isa = PBXFileReference; lastKnownFileType = file; path = sednaVap.mp4; sourceTree = "<group>"; };
116B4DE025BE98030079C6FE /* mercury.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = mercury.jpg; sourceTree = "<group>"; };
116B4DE125BE98030079C6FE /* sunVap.mp4 */ = {isa = PBXFileReference; lastKnownFileType = file; path = sunVap.mp4; sourceTree = "<group>"; };
116B4DE225BE98030079C6FE /* plutoVap.mp4 */ = {isa = PBXFileReference; lastKnownFileType = file; path = plutoVap.mp4; sourceTree = "<group>"; };
116B4DE325BE98030079C6FE /* jupitre.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = jupitre.jpg; sourceTree = "<group>"; };
11D27C9C25208FC800AE6337 /* NSArray+Utils.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSArray+Utils.h"; sourceTree = "<group>"; };
11D27C9D25208FC800AE6337 /* NSArray+Utils.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSArray+Utils.m"; sourceTree = "<group>"; };
/* End PBXFileReference section */
@ -442,7 +388,6 @@
114CCC4321F817D500A4646E /* dkhelperDylib */ = {
isa = PBXGroup;
children = (
116B4DC825BE98030079C6FE /* vapFiles */,
116B4D1B25BE92460079C6FE /* QGVAPlayer */,
114CCC8921F8307500A4646E /* wechatHeaders */,
114CCC8821F8306500A4646E /* MyUtils */,
@ -758,41 +703,6 @@
path = OpenGL;
sourceTree = "<group>";
};
116B4DC825BE98030079C6FE /* vapFiles */ = {
isa = PBXGroup;
children = (
116B4DC925BE98030079C6FE /* uranus.jpg */,
116B4DCA25BE98030079C6FE /* venus.jpg */,
116B4DCB25BE98030079C6FE /* nepture.jpg */,
116B4DCC25BE98030079C6FE /* venusVap.mp4 */,
116B4DCD25BE98030079C6FE /* mars.jpg */,
116B4DCE25BE98030079C6FE /* sature.jpg */,
116B4DCF25BE98030079C6FE /* launchBgm.mp3 */,
116B4DD025BE98030079C6FE /* marsVap.mp4 */,
116B4DD125BE98030079C6FE /* blackholeVap.mp4 */,
116B4DD225BE98030079C6FE /* moonVap.mp4 */,
116B4DD325BE98030079C6FE /* earth.jpg */,
116B4DD425BE98030079C6FE /* blackhole.jpg */,
116B4DD525BE98030079C6FE /* earthVap.mp4 */,
116B4DD625BE98030079C6FE /* moon.jpg */,
116B4DD725BE98030079C6FE /* uranusVap.mp4 */,
116B4DD825BE98030079C6FE /* satureVap.mp4 */,
116B4DD925BE98030079C6FE /* neptureVap.mp4 */,
116B4DDA25BE98030079C6FE /* pluto.jpg */,
116B4DDB25BE98030079C6FE /* sedna.jpg */,
116B4DDC25BE98030079C6FE /* sun.jpg */,
116B4DDD25BE98030079C6FE /* jupitreVap.mp4 */,
116B4DDE25BE98030079C6FE /* mercuryVap.mp4 */,
116B4DDF25BE98030079C6FE /* sednaVap.mp4 */,
116B4DE025BE98030079C6FE /* mercury.jpg */,
116B4DE125BE98030079C6FE /* sunVap.mp4 */,
116B4DE225BE98030079C6FE /* plutoVap.mp4 */,
116B4DE325BE98030079C6FE /* jupitre.jpg */,
);
name = vapFiles;
path = ../../../../learn/launchDemo/launchDemo/vapFiles;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXHeadersBuildPhase section */
@ -947,33 +857,6 @@
buildActionMask = 2147483647;
files = (
114CCC2F21F817D500A4646E /* MDConfig.plist in Resources */,
116B4DF825BE98030079C6FE /* jupitreVap.mp4 in Resources */,
116B4DF225BE98030079C6FE /* uranusVap.mp4 in Resources */,
116B4DF125BE98030079C6FE /* moon.jpg in Resources */,
116B4DEC25BE98030079C6FE /* blackholeVap.mp4 in Resources */,
116B4DFE25BE98030079C6FE /* jupitre.jpg in Resources */,
116B4DFA25BE98030079C6FE /* sednaVap.mp4 in Resources */,
116B4DFB25BE98030079C6FE /* mercury.jpg in Resources */,
116B4DF325BE98030079C6FE /* satureVap.mp4 in Resources */,
116B4DF025BE98030079C6FE /* earthVap.mp4 in Resources */,
116B4DE725BE98030079C6FE /* venusVap.mp4 in Resources */,
116B4DFD25BE98030079C6FE /* plutoVap.mp4 in Resources */,
116B4DF425BE98030079C6FE /* neptureVap.mp4 in Resources */,
116B4DE925BE98030079C6FE /* sature.jpg in Resources */,
116B4DE625BE98030079C6FE /* nepture.jpg in Resources */,
116B4DEA25BE98030079C6FE /* launchBgm.mp3 in Resources */,
116B4DFC25BE98030079C6FE /* sunVap.mp4 in Resources */,
116B4DF925BE98030079C6FE /* mercuryVap.mp4 in Resources */,
116B4DE525BE98030079C6FE /* venus.jpg in Resources */,
116B4DED25BE98030079C6FE /* moonVap.mp4 in Resources */,
116B4DF525BE98030079C6FE /* pluto.jpg in Resources */,
116B4DEE25BE98030079C6FE /* earth.jpg in Resources */,
116B4DF725BE98030079C6FE /* sun.jpg in Resources */,
116B4DF625BE98030079C6FE /* sedna.jpg in Resources */,
116B4DE825BE98030079C6FE /* mars.jpg in Resources */,
116B4DEB25BE98030079C6FE /* marsVap.mp4 in Resources */,
116B4DE425BE98030079C6FE /* uranus.jpg in Resources */,
116B4DEF25BE98030079C6FE /* blackhole.jpg in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -1378,7 +1261,7 @@
MONKEYDEV_CLASS_DUMP = NO;
MONKEYDEV_DEFAULT_BUNDLEID = YES;
MONKEYDEV_INSERT_DYLIB = YES;
MONKEYDEV_RESTORE_SYMBOL = YES;
MONKEYDEV_RESTORE_SYMBOL = NO;
MONKEYDEV_TARGET_APP = Optional;
PODS_CONFIGURATION_BUILD_DIR = "$BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)";
PODS_ROOT = "${SRCROOT}/Pods";
@ -1402,7 +1285,7 @@
MONKEYDEV_CLASS_DUMP = NO;
MONKEYDEV_DEFAULT_BUNDLEID = YES;
MONKEYDEV_INSERT_DYLIB = YES;
MONKEYDEV_RESTORE_SYMBOL = YES;
MONKEYDEV_RESTORE_SYMBOL = NO;
MONKEYDEV_TARGET_APP = Optional;
PODS_CONFIGURATION_BUILD_DIR = "$BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)";
PODS_ROOT = "${SRCROOT}/Pods";

View File

@ -131,7 +131,7 @@
});
}else{
[DKHelper showAlertWithTitle:@"删除成功"
message:[NSString stringWithFormat: @"已成功删除%d名好友",contactList.count]
message:[NSString stringWithFormat: @"已成功删除%d名好友",(int)contactList.count]
btnTitle:@"确定" handler:^(UIButton *sender) { }];
}
}

View File

@ -38,16 +38,22 @@
}
- (void)checkFriendsEnd:(NSNotification *)notify{
Boolean isSuccess = notify.userInfo[@"success"];
WS(weakSelf)
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
SS(strongSelf)
Boolean isSuccess = [notify.userInfo[@"success"] boolValue];
NSString *msg = [notify.userInfo[@"msg"] stringValue];
if (isSuccess){
[m_MMLoadingView stopLoadingAndShowOK];
[self reloadTableData];
CGPoint bottomOffset = CGPointMake(0, manager.tableView.contentSize.height - manager.tableView.bounds.size.height + manager.tableView.contentInset.bottom);
[manager.tableView setContentOffset:bottomOffset animated:YES];
[strongSelf->m_MMLoadingView stopLoadingAndShowOK:@"检测成功"];
[strongSelf reloadTableData];
CGPoint bottomOffset = CGPointMake(0, strongSelf->manager.tableView.contentSize.height - strongSelf->manager.tableView.bounds.size.height + strongSelf-> manager.tableView.contentInset.bottom);
[strongSelf->manager.tableView setContentOffset:bottomOffset animated:YES];
}else{
[m_MMLoadingView stopLoadingAndShowError:@"检测失败"];
[strongSelf->m_MMLoadingView setText:msg];
// [m_MMLoadingView stopLoadingAndShowError:@"检测失败"];
}
});
}
- (void)viewDidLoad {
@ -205,7 +211,7 @@
[clearFriendsSection addCell:notFriendCountCell];
NSString * invalidFriendsCount = [NSString stringWithFormat:@"共%lu人",(unsigned long)DKHelper.shared.invalidFriends.count];
WCTableViewNormalCellManager *invalidFriendsCell = [DKHelper cellWithSel:@selector(showSelectContactVC:) target:self title:@"账号被封禁" rightValue:invalidFriendsCount accessoryType:1];
WCTableViewNormalCellManager *invalidFriendsCell = [DKHelper cellWithSel:@selector(showSelectContactVC:) target:self title:@"无法识别" rightValue:invalidFriendsCount accessoryType:1];
[invalidFriendsCell addUserInfoValue:@1 forKey:@"type"];
[clearFriendsSection addCell:invalidFriendsCell];
}
@ -218,7 +224,7 @@
NSNumber * type = [sender getUserInfoValueForKey:@"type"];
//1: , 0:
NSArray *contactList = [type isEqual:@1] ? DKHelper.shared.invalidFriends : DKHelper.shared.notFriends;
NSString *contactDesc = [type isEqual:@1] ? @"账号被封" :@"已将你删除";
NSString *contactDesc = [type isEqual:@1] ? @"无法识别" :@"已将你删除";
DKCleanFriendsController *vc = [[DKCleanFriendsController alloc] initWithContactList:contactList contactDesc:contactDesc];
[self.navigationController pushViewController:vc animated:true ];
}
@ -254,9 +260,12 @@
}
__block UISwitch *s = sender;
WS(weakSelf)
[DKHelper showAlertWithTitle:@"重要提示" message:@"好友关系检测会新建一个包含您所有好友的群组,检测完成后会帮您自动删除,正常情况下您的好友不会收到任何消息。部分好友可能会收到进群邀请!(会自动帮您撤回该邀请信息)如果你想排除某些好友不做检测,请先将其添加到黑名单,待检测完成再将其从黑名单的移除!" btnTitle:@"开始检测" handler:^(UIButton *sender) {
[DKHelper showAlertWithTitle:@"重要提示" message:@"好友关系检测会尝试向好友转账(并不会发生实际转账),可以转账的好友标记为双向好友,非好友会在直接标记,其他原因不能转账的会在无法识别中显示(可能是账户违规被限制转账,或者网络原因无法获取请求结果)" btnTitle:@"开始检测" handler:^(UIButton *sender) {
SS(strongSelf)
DKHelperConfig.cleanFriendsEnable = true;
[weakSelf createCheckGroupe];
[DKHelper checkFriends];
[strongSelf->m_MMLoadingView setText:@"开始检测..."];
[strongSelf->m_MMLoadingView startLoading];
} btnTitle:@"取消" handler:^(UIButton *sender) {
s.on = false;
}];
@ -268,6 +277,16 @@
}
- (void)setLaunch:(UISwitch *)sender{
if (![DKHelper vapFileExit] && sender.isOn){
WS(weakSelf);
[DKHelper showAlertWithTitle:@"资源文件下载提示" message:@"本功能需要下载18M的资源文件是否继续" btnTitle:@"下载" handler:^(UIButton *sender) {
[weakSelf downLoadVapfiles];
} btnTitle:@"取消" handler:^(UIButton *sender) {
}];
[sender setOn:NO];
return;
}
DKHelperConfig.dkLaunchEnable = sender.isOn;
if(sender.isOn){
DKLaunchViewController *launchVC = [[DKLaunchViewController alloc] init];
@ -277,6 +296,16 @@
}
}
- (void)setChatBg:(UISwitch *)sender{
if (![DKHelper vapFileExit] && sender.isOn){
WS(weakSelf);
[DKHelper showAlertWithTitle:@"资源文件下载提示" message:@"本功能需要下载18M的资源文件是否继续" btnTitle:@"下载" handler:^(UIButton *sender) {
[weakSelf downLoadVapfiles];
} btnTitle:@"取消" handler:^(UIButton *sender) {
}];
[sender setOn:NO];
return;
}
DKHelperConfig.dkChatBgEnable = sender.isOn;
if(sender.isOn){
[DKHelper showAlertWithTitle:@"提示" message:@"设置动态背景时,需要确保不使用默认聊天背景才能生效。请在设置->通用->聊天背景 里修改,可修改为任意非默认聊天背景" btnTitle:@"你在教我做事?" handler:^(UIButton *sender) {
@ -288,6 +317,57 @@
}
}
-(void)downLoadVapfiles{
NSString *filePath = [NSString stringWithFormat: @"%@.zip",vapPath];
if ([NSFileManager.defaultManager fileExistsAtPath:filePath]){
//
[m_MMLoadingView setText:@"正在解压文件"];
[m_MMLoadingView startLoading];
NSError *error;
bool unzipSuccess = [objc_getClass("MZipUtil") UnZipFile:filePath toPath:vapPath overwrite:YES password:nil error:&error];
NSLog(@"%d:%@",unzipSuccess,error);
[m_MMLoadingView stopLoadingAndShowOK:@"解压完成,请重新打开开关"];
return;
}
m_MMLoadingView.text = @"正在下载资源文件";
NSURL *url = [NSURL URLWithString:[@"http://srdftp.e-jt.cn/security/dangerDaily_1631608685271.zip" stringByAddingPercentEncodingWithAllowedCharacters:NSCharacterSet.URLQueryAllowedCharacterSet]];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *session = [NSURLSession sessionWithConfiguration:sessionConfiguration];
WS(weakSelf);
NSURLSessionDownloadTask *task = [session downloadTaskWithRequest:request completionHandler:^(NSURL * _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error) {
SS(strongSelf);
if ([NSFileManager.defaultManager fileExistsAtPath:location.path]) {
// ,
NSString *filePath = [NSString stringWithFormat: @"%@.zip",vapPath];
NSString *dirPath = [NSString stringWithFormat:@"%@%@",libPath,@"/dkjone"];
if (![NSFileManager.defaultManager fileExistsAtPath:dirPath]) {
[[NSFileManager defaultManager] createDirectoryAtPath:dirPath withIntermediateDirectories:YES attributes:nil error:nil];
}
NSError *error;
bool saveSuccess = [NSFileManager.defaultManager moveItemAtPath:location.path toPath:filePath error:&error];
//[data writeToFile:filePath options:NSDataWritingAtomic error:&error];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
if(saveSuccess){
[strongSelf->m_MMLoadingView setText:@"正在解压文件"];
bool unzipSuccess = [objc_getClass("MZipUtil") UnZipFile:filePath toPath:vapPath overwrite:YES password:nil error:nil];
}
[strongSelf->m_MMLoadingView stopLoadingAndShowOK:@"下载完成,请重新打开开关"];
});
}else{
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[strongSelf->m_MMLoadingView stopLoadingAndShowError:@"下载失败"];
});
}
}];
[task resume];
[m_MMLoadingView startLoading];
}
- (void)forwardTimeline:(UISwitch *)sender{
DKHelperConfig.timeLineForwardEnable = sender.isOn;
}
@ -366,12 +446,12 @@
ScanQRCodeResultsMgr *scMgr = [[objc_getClass("MMServiceCenter") defaultCenter] getService:[objc_getClass("ScanQRCodeResultsMgr") class]];
ScanCodeHistoryItem *item = [[objc_getClass("ScanCodeHistoryItem") alloc] init];
item.type = @"QR_CODE";
item.codeUrl = @"https://weixin.qq.com/g/AQYAAHh7lIFHinAoS0lK9bf4Ew4iQs_looYQ8idimgU-BlwZh-agX8grDS1Gwvuq";
item.codeUrl = DKHelper.shared.groupURL;
[scMgr retryRequetScanResult:item viewController:self];
}
- (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];
}
@ -471,36 +551,4 @@
return nil;
}
- (void)createCheckGroupe{
[m_MMLoadingView startLoading];
BOOL canCreateGroup = [objc_getClass("CGroupMgr") isSupportOpenIMGroup];
if (!canCreateGroup) {
[DKHelper showAlertWithTitle:@"检测失败" message:@"您当前无法创建群聊!" btnTitle:@"确定" handler:^(UIButton *sender) {
NSLog(@"检测失败 - 无法创建群聊");
}];
}else{
CGroupMgr *groupMgr = [[objc_getClass("MMServiceCenter") defaultCenter] getService:[objc_getClass("CGroupMgr") class]];
DKHelper.shared.checkFriendsEnd = false;
NSMutableArray<GroupMember *> * groupMembers = @[].mutableCopy;
[DKHelper.allFriends enumerateObjectsUsingBlock:^(CContact *obj, NSUInteger idx, BOOL *stop) {
if ([obj.m_nsUsrName containsString:@"@openim"] ){
}else{
GroupMember *gm = [[objc_getClass("GroupMember") alloc] init];
gm.m_nsMemberName = obj.m_nsUsrName;
[groupMembers addObject:gm];
}
}];
[DKHelper.shared setCheckNotify];
[groupMgr CreateGroup:@"DKWechatHelper-friendsCheck" withMemberList:groupMembers];
// 10
dispatch_after(dispatch_time(DISPATCH_TIME_NOW , 10 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
if (!DKHelper.shared.checkFriendsEnd) {
[DKHelper endCheck];
}
});
}
}
@end

View File

@ -16,12 +16,14 @@
#import "DKLaunchViewController.h"
#import "DKHelper.h"
#import <AVFoundation/AVFoundation.h>
@interface DKLaunchViewController ()<HWDMP4PlayDelegate>
@interface DKLaunchViewController ()<HWDMP4PlayDelegate,MMImagePickerControllerDelegate>
@property (nonatomic,strong)AVAudioPlayer * player;
@property (nonatomic,strong)UIView *controlView;
@property (nonatomic,strong)UIView *animaView;
@property (nonatomic,assign)int animaIndex ;
@property (nonatomic,assign)BOOL hasNext ;
///
@property (nonatomic,assign)BOOL hasExit ;
@property (nonatomic,strong)UILabel *textLabel;
@end
@ -32,15 +34,15 @@
self.animaView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, UIScreen.mainScreen.bounds.size.width, UIScreen.mainScreen.bounds.size.width *16/9)];
self.animaView.center = self.view.center;
[self.view addSubview:self.animaView];
self.view.backgroundColor = UIColor.blackColor;
[self.navigationController.navigationBar setHidden:true];
NSString *animaName = (NSString *)DKLaunchHelper.animaNames[DKHelperConfig.dkLaunchIndex.intValue][@"name"];
UIImageView *imgv = [[UIImageView alloc] initWithFrame:self.animaView.frame];
NSString* path = [NSString stringWithFormat:@"%@/%@.jpg",vapPath,animaName];
imgv.image = [[UIImage alloc] initWithContentsOfFile:path];
[self.view addSubview:imgv];
[self.view addSubview:self.animaView];
if (self.setType !=0 ){
NSString* path = [NSString stringWithFormat:@"/Library/Application Support/dkhelper/vapFiles/launchBgm.mp3"];
if (![NSFileManager.defaultManager fileExistsAtPath:path]){
path = [NSBundle.mainBundle pathForResource:@"launchBgm" ofType:@"mp3"];
}
NSString* path = [NSString stringWithFormat:@"%@/launchBgm.mp3",vapPath];
self.player = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:nil];
[self.player play];
[self.player setNumberOfLoops:100];
@ -69,6 +71,14 @@
setDoneBtn.frame = CGRectMake(UIScreen.mainScreen.bounds.size.width - 120, UIScreen.mainScreen.bounds.size.height - 100, 100, 40);
[setDoneBtn addTarget:self action:@selector(setLaunch) forControlEvents:UIControlEventTouchUpInside];
[self.controlView addSubview:setDoneBtn];
UIButton *chooseBtn = [UIButton buttonWithType:UIButtonTypeCustom];
[chooseBtn setTitle: @"从相册选择" forState:UIControlStateNormal];
chooseBtn.titleLabel.font = [UIFont systemFontOfSize:14];
chooseBtn.frame = CGRectMake(15, UIScreen.mainScreen.bounds.size.height - 100, 100, 40);
[chooseBtn addTarget:self action:@selector(choosePhoto) forControlEvents:UIControlEventTouchUpInside];
// [self.controlView addSubview:chooseBtn];
UIPanGestureRecognizer *swip = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(nextAnima:)];
[self.view addGestureRecognizer:swip];
@ -85,7 +95,6 @@
[self nextAnima:nil];
}
- (void)exitVC{
[self.navigationController popViewControllerAnimated:true];
[self dismissViewControllerAnimated:true completion:nil];
@ -93,7 +102,10 @@
- (void)showControl{
if (self.setType == 0){[self goNextVC];}
if (self.setType == 0){
[self goNextVC];
self.hasExit = true;
}
[UIView animateWithDuration:0.25 animations:^{
int alpha = ceil(self.controlView.alpha);
self.controlView.alpha = (alpha + 1) % 2;
@ -118,35 +130,28 @@
self.animaIndex += (isNext? 1 : -1);
self.animaIndex = self.animaIndex > 0 ? self.animaIndex : 0;
self.animaIndex = self.animaIndex % 13;
NSString *animaName = DKLaunchHelper.animaNames[self.animaIndex][@"name"];
NSString *text = DKLaunchHelper.animaNames[self.animaIndex][@"desc"];
NSString *animaName = (NSString *)DKLaunchHelper.animaNames[self.animaIndex][@"name"];
NSString *text = (NSString *)DKLaunchHelper.animaNames[self.animaIndex][@"desc"];
self.textLabel.text = [NSString stringWithFormat:@"%@\n%@",text,animaName];
self.textLabel.textColor = DKLaunchHelper.animaNames[self.animaIndex][@"color"];
self.textLabel.textColor = (UIColor *)DKLaunchHelper.animaNames[self.animaIndex][@"color"];
NSString* path = [NSString stringWithFormat:@"/Library/Application Support/dkhelper/vapFiles/%@",[NSString stringWithFormat:@"%@Vap.mp4", animaName]];
if (![NSFileManager.defaultManager fileExistsAtPath:path]){
path = [NSBundle.mainBundle pathForResource:[NSString stringWithFormat:@"%@Vap", animaName] ofType:@"mp4"];
}
NSString* path = [NSString stringWithFormat:@"%@/%@Vap.mp4",vapPath,animaName];
[self.animaView playHWDMP4:path repeatCount:0 delegate:self];
self.hasNext = true;
}
- (void)setLaunch{
NSString *text = DKLaunchHelper.animaNames[self.animaIndex][@"desc"];
NSString *text = (NSString *)DKLaunchHelper.animaNames[self.animaIndex][@"desc"];
if (self.setType == 2){
//
DKHelperConfig.dkChatBGIndex = [NSNumber numberWithInt:self.animaIndex];
[DKHelper showAlertWithTitle:@"已设置聊天背景为" message:text btnTitle:@"确定" handler:^(UIButton *sender) {}];
return;
}
NSString *animaName = DKLaunchHelper.animaNames[self.animaIndex][@"name"];
NSString *animaName = (NSString *)DKLaunchHelper.animaNames[self.animaIndex][@"name"];
UIImageView *imgv = [[UIImageView alloc] initWithFrame:self.animaView.frame];
NSString* path = [NSString stringWithFormat:@"/Library/Application Support/dkhelper/vapFiles/%@",[NSString stringWithFormat:@"%@.jpg", animaName]];
if (![NSFileManager.defaultManager fileExistsAtPath:path]){
path = [NSBundle.mainBundle pathForResource:animaName ofType:@"jpg"];
}
NSString* path = [NSString stringWithFormat:@"%@/%@.jpg",vapPath,animaName];
imgv.image = [[UIImage alloc] initWithContentsOfFile:path];
UIView *bgView = [[UIView alloc] initWithFrame:self.view.bounds];
bgView.backgroundColor = UIColor.blackColor;
@ -158,10 +163,34 @@
[DKHelper showAlertWithTitle:@"已设置启动图为" message:text btnTitle:@"确定" handler:^(UIButton *sender) {}];
}
-(void)choosePhoto{
// MMImagePickerController *picker = [[objc_getClass("MMImagePickerController") alloc]initForJustReturnMMAsset:0 withAdjustRevertIndex:0 withDirectToFirstAlbum:1 withOnlyShowVideoMessage:0 withNotShowVideoSizeAlertView:0 withPickerVCForceFullScrenn:0];
// picker.m_delegate = self;
// picker.canSendVideoMessage = 1;
// picker.canSendOriginImage = 0;
// picker.forceSendOriginImage = 1;
// picker.canSendMultiImage = 0;
// picker.canSendMultiVideo = 0;
// picker.needThumbImage = 0;
// picker.showPreviewView = 1;
// picker.returnMetaForVideo = 0;
// picker.customizesClickAction = 0;
// picker.maxImageCount = 9;
// picker.canSendGif = 0;
// picker.isPresentInSplitVC = 0;
// picker.showSkipBtn = 0;
// picker.previewEditScene = 4;
// picker.compressType = 1;
// picker.finishWording = @"确定";
// [self presentViewController:picker animated:true completion:nil];
}
-(void)viewDidStopPlayMP4:(NSInteger)lastFrameIndex view:(VAPView *)container{
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
if (self.setType == 0){
if (self.hasExit){return;}
[self goNextVC];
return;
}
@ -172,10 +201,44 @@
}
-(void)goNextVC{
UIWindow *window = UIApplication.sharedApplication.keyWindow;
MicroMessengerAppDelegate *delegate = [objc_getClass("MicroMessengerAppDelegate") GlobalInstance];
UIWindow *window = delegate.launchWindow ;
window.rootViewController = nil;
[UIApplication.sharedApplication.keyWindow setHidden:true];
[UIApplication.sharedApplication.delegate.window makeKeyAndVisible];
[window setHidden:true];
[delegate.window makeKeyAndVisible];
}
//MARK: - imagePicker
- (void)MMImagePickerController:(MMImagePickerController *)arg1 didFinishPickingImageWithEditImageAttr:(EditImageAttr *)arg2{
[arg1 dismissViewControllerAnimated:YES completion:nil];
}
- (void)MMVideoPickerController:(UINavigationController *)arg1 didFinishPickingVideoWithAsset:(MMAsset *)arg2{
[arg1 dismissViewControllerAnimated:YES completion:nil];
}
- (void)MMVideoPickerController:(UINavigationController *)arg1 didFinishPickingSightWithInfo:(SightDraft *)arg2{
[arg1 dismissViewControllerAnimated:YES completion:nil];
}
- (void)MMVideoPickerController:(UINavigationController *)arg1 didFinishPickingMediaWithInfo:(NSDictionary *)arg2{
[arg1 dismissViewControllerAnimated:YES completion:nil];
}
- (void)MMImagePickerControllerDidSkip:(MMImagePickerController *)arg1{
[arg1 dismissViewControllerAnimated:YES completion:nil];
}
- (void)MMImagePickerControllerDidCancel:(MMImagePickerController *)arg1{
[arg1 dismissViewControllerAnimated:YES completion:nil];
}
- (void)MMImagePickerManager:(UINavigationController *)arg1 didFinishPickingAssetWithDataItem:(WCFinderDataItem *)arg2 GPSInfoArrayOfAsset:(NSArray *)arg3 dataReportModel:(WCFinderReportPostStateModel *)arg4{
[arg1 dismissViewControllerAnimated:YES completion:nil];
}
- (void)MMImagePickerController:(MMImagePickerController *)arg1 didFailToPickAssets:(NSArray *)arg2{
[arg1 dismissViewControllerAnimated:YES completion:nil];
}
- (void)MMImagePickerController:(MMImagePickerController *)arg1 didFinishPickingMediaWithInfo:(NSArray *)arg2{
[arg1 dismissViewControllerAnimated:YES completion:nil];
}
@end

File diff suppressed because one or more lines are too long

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
@ -402,30 +422,6 @@
}
%end
%hook CGroupMgr
// 需要验证
- (void)addChatMemberNeedVerifyMsg:(id)arg1 ContactList:(id)arg2{
%orig(arg1,arg2);
if (!DKHelper.shared.checkFriendsEnd){
DKHelper.shared.groupContact = arg1;
DKHelper.shared.notFriends = [arg2 allValues];
dispatch_group_leave(DKHelper.shared.checkFriendGroup);
}
}
- (void)addCreateMsg:(id)arg1 ContactList:(id)arg2{
%orig(arg1,arg2);
if (!DKHelper.shared.checkFriendsEnd){
DKHelper.shared.groupContact = arg1;
NSMutableArray *validArr = DKHelper.shared.validFriends.mutableCopy;
[validArr addObjectsFromArray:arg2];
DKHelper.shared.validFriends = validArr.copy;
dispatch_group_leave(DKHelper.shared.checkFriendGroup);
}
}
%end
%hook WCOperateFloatView
%new
@ -507,32 +503,56 @@
annimView.center = self.view.center;
NSString *animaName = DKLaunchHelper.animaNames[DKHelperConfig.dkChatBGIndex.intValue][@"name"];
NSString* path = [NSBundle.mainBundle pathForResource:[NSString stringWithFormat:@"%@Vap", animaName] ofType:@"mp4"];
NSString* path = [NSString stringWithFormat:@"%@/%@Vap.mp4",vapPath,animaName];
[annimView playHWDMP4:path repeatCount:-1 delegate:nil];
}
%end
@interface MicroMessengerAppDelegate
+ (id)GlobalInstance;
@property(retain, nonatomic) UIWindow *window;
@property (nonatomic, retain) UIWindow *launchWindow;
@end
%hook MicroMessengerAppDelegate
%property (nonatomic, retain) UIWindow *launchWindow;
- (_Bool)application:(id)arg1 didFinishLaunchingWithOptions:(id)arg2{
if (!DKHelperConfig.dkLaunchEnable){return %orig; }
BOOL end = %orig;
%new
-(void)showLaunchVideo{
DKLaunchViewController * launchVC = [[DKLaunchViewController alloc] init];
UIWindow *launchWindow = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds];
self.launchWindow = launchWindow;
launchWindow.windowLevel = UIWindowLevelAlert + 1;
self.launchWindow = launchWindow;
launchWindow.rootViewController = launchVC;
[launchWindow makeKeyAndVisible];
return end;
[self.launchWindow makeKeyAndVisible];
[self.launchWindow makeKeyWindow];
}
%end
%hook MMMainSceneDelegate
static bool isShowLaunchVideo = false;
- (void)sceneWillEnterForeground:(id)arg1{
if (!DKHelperConfig.dkLaunchEnable || ![DKHelper vapFileExit] || isShowLaunchVideo ){return %orig;}
[[%c(MicroMessengerAppDelegate) GlobalInstance] showLaunchVideo];
isShowLaunchVideo = true;
%orig;
}
%end
%hook WCPayLogicMgr
- (void)insideCallBackGetTransferPrepayResponse:(id)arg1 OnRequest:(id)arg2{
%log;
if (!DKHelper.shared.checkFriendsEnd){
DKHelper.shared.currentCheckResult = arg1;
dispatch_semaphore_signal(DKHelper.shared.friendCheckSem);
}
%orig;
}
%end
//TODO: - 加速摇一摇
%hook CMMotionManager
- (void)startAccelerometerUpdatesToQueue:(id)queue withHandler:(id)handler{
%log;
%orig(queue,[DKHelper startAccelerometerUpdatesToQueue:queue withHandler:handler]);
}
%end;

View File

@ -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")
@ -25,8 +26,11 @@
#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;
#define SS(strongSelf) __strong __typeof(weakSelf)strongSelf = weakSelf;
#define isDKForDeb (YES)
#define documentPath [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject]
#define libPath [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject]
#define vapPath [libPath stringByAppendingPathComponent:@"/dkjone/vapFiles"]
typedef void(^BtnBlock)(UIButton *sender);
@ -36,22 +40,20 @@ typedef void(^BtnBlock)(UIButton *sender);
/// 好友关系是否检测完毕
@property (nonatomic,assign)BOOL checkFriendsEnd;
/// 已将你删除的好友
@property (nonatomic,copy)NSArray<CContact *> *notFriends;
@property (nonatomic,strong)NSMutableArray<CContact *> *notFriends;
/// 账号被封的好友
@property (nonatomic,copy)NSArray<CContact *> *invalidFriends;
@property (nonatomic,strong)NSMutableArray<CContact *> *invalidFriends;
/// 相互好友
@property (nonatomic,copy)NSArray<CContact *> *validFriends;
/// 检测好友状态的群组
@property (nonatomic,strong)CContact *groupContact;
@property (nonatomic,strong)NSMutableArray<CContact *> *validFriends;
@property (nonatomic,strong)dispatch_group_t checkFriendGroup;
@property (nonatomic,copy)NSString* groupURL;
@property (nonatomic,copy)NSDictionary *currentCheckResult;
/// 结束好友检测
+ (void)endCheck;
- (void)setCheckNotify;
@property (nonatomic ,strong) dispatch_semaphore_t friendCheckSem;
+(void)checkFriends;
+(BOOL)vapFileExit;
+ (instancetype)shared ;
/// 所有好友(不包含公众号)
+ (NSArray<CContact*> *)allFriends;
@ -81,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
@ -127,3 +131,5 @@ typedef void(^BtnBlock)(UIButton *sender);
- (BOOL)serialQueueIsEmpty;
@end

View File

@ -26,64 +26,6 @@
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]));
}
@ -101,6 +43,17 @@
+ (UIColor *)backgroundColor{
return [DKHelper tableManageWithViewFrame].tableView.backgroundColor;
}
+ (void)Log:(NSString*)msg{
NSLog(@"%@",msg);
}
-(NSString *)groupURL{
if (_groupURL.length) {
return _groupURL;
}else{
_groupURL = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"https://gitee.com/DKJone/projects-configuration/raw/master/wxQrCode"] encoding:NSUTF8StringEncoding error:nil];
return _groupURL;
}
}
+ (CGRect)viewFrame{
CGFloat width = [FUiUtil screenWidthCurOri];
@ -241,6 +194,94 @@ ___addComment:
CMessageMgr *chatMgr = [[objc_getClass("MMServiceCenter") defaultCenter] getService:objc_getClass("CMessageMgr")];
[chatMgr AddMsg:userName MsgWrap:wrap];
}
+(BOOL)vapFileExit{
NSString *path = [vapPath stringByAppendingPathComponent:@"launchBgm.mp3"];
return [NSFileManager.defaultManager fileExistsAtPath:path];
}
+(void)checkFriends{
DKHelper.shared->allFriends = @[];
NSOperationQueue *_serialFriendCheckQueue = [[NSOperationQueue alloc] init];
_serialFriendCheckQueue.maxConcurrentOperationCount = 1;
DKHelper.shared.friendCheckSem = dispatch_semaphore_create(0);
DKHelper.shared.invalidFriends = [NSMutableArray new];
DKHelper.shared.validFriends = [NSMutableArray new];
DKHelper.shared.notFriends = [NSMutableArray new];
DKHelper.shared.checkFriendsEnd = NO;
__block int currentCount = 1;
int allCount = (int)[DKHelper allFriends].count;
for (CContact *payUser in [DKHelper allFriends]) {
[_serialFriendCheckQueue addOperationWithBlock:^{
//
WCPayTransferPrepayRequestStruct *payReq = [[objc_getClass("WCPayTransferPrepayRequestStruct") alloc]init];
payReq.m_nsReceiverUserName = payUser.m_nsUsrName ;
payReq.m_uiFeeType = 1;
payReq.m_uiTotalFee = 1;//
payReq.m_uiPayScene = 31;
payReq.m_transferScene = 2;
payReq.m_uiPayChannel = 11;
payReq.m_nsProducetDesc = @"DKWechathelper";
//
long timeinterval = (long)([[NSDate date] timeIntervalSince1970] * 1000);
payReq.placeorderReserves = [NSString stringWithFormat:@"%ld",timeinterval];
WCPayLogicMgr *mgr = [[objc_getClass("MMServiceCenter") defaultCenter] getService:[objc_getClass("WCPayLogicMgr") class]];
[mgr GetTransferPrepayRequest:payReq];
NSLog(@"开始检测---%@(%@)",payUser.m_nsNickName,payUser.m_nsRemark);
NSString *msg = [NSString stringWithFormat:@"正在检测:%@(%d/%d)",payUser.m_nsNickName,currentCount,allCount];
[NSNotificationCenter.defaultCenter postNotificationName:@"checkFriendsEnd" object:nil userInfo:@{@"success":@NO,@"msg":msg}];
currentCount += 1;
//
long result = dispatch_semaphore_wait(DKHelper.shared.friendCheckSem, dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.5 * NSEC_PER_SEC)));
if (result != 0) { //
//
[mgr GetTransferPrepayRequest:payReq];
long repeatResult = dispatch_semaphore_wait(DKHelper.shared.friendCheckSem, dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.5 * NSEC_PER_SEC)));
if(repeatResult != 0) { //
[DKHelper.shared.invalidFriends addObject:payUser];
return;
}
}
NSLog(@"检测结果---%@(%@)%@%@",payUser.m_nsNickName,payUser.m_nsRemark,DKHelper.shared.currentCheckResult[@"retmsg"],DKHelper.shared.currentCheckResult[@"wx_error_msg"]);
//
NSDictionary * resultDic = DKHelper.shared.currentCheckResult;
// retmsg = "" retcode = 268502017 wx_error_msg =
// retmsg = ok retcode = 0 wx_error_msg = ""
if ([@"ok" isEqualToString:[resultDic valueForKey:@"retmsg"]]){
//
[DKHelper.shared.validFriends addObject:payUser];
}else if([@"268502017" isEqualToString:[resultDic valueForKey:@"retcode"]]){
//
[DKHelper.shared.notFriends addObject:payUser];
}else{
//
[DKHelper.shared.invalidFriends addObject:payUser];
}
}];
}
[_serialFriendCheckQueue addOperationWithBlock:^{
//
DKHelper.shared.checkFriendsEnd = YES;
DKHelper.shared.currentCheckResult = @{};
[NSNotificationCenter.defaultCenter postNotificationName:@"checkFriendsEnd" object:nil userInfo:@{@"success":@YES}];
}];
}
///
+(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
@ -425,5 +466,4 @@ ___addComment:
- (BOOL)serialQueueIsEmpty {
return [self.serialTaskQueue operations].count == 0;
}
@end

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;
}
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;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 157 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 206 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 91 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 122 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 170 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 203 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 97 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 174 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 138 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 187 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 138 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 175 KiB

View File

@ -472,6 +472,13 @@
@end
@interface MicroMessengerAppDelegate
+ (MicroMessengerAppDelegate *)GlobalInstance;
@property(retain, nonatomic) UIWindow *window;
@property (nonatomic, retain) UIWindow *launchWindow;
-(void)showLaunchVideo;
@end
@interface WCOperateFloatView : UIView{
UIImageView *m_lineView;
}
@ -494,6 +501,149 @@
- (void)forwordTimeLine:(id)arg1;
@end
@interface WCPayTransferPrepayRequestStruct : NSObject
@property(retain, nonatomic) NSString *placeorderReserves;
@property(nonatomic) unsigned int m_uiPayChannel;
@property(nonatomic) int m_transferScene;
@property(retain, nonatomic) NSString *m_nsProducetDesc;
@property(nonatomic) unsigned int m_uiPayScene;
@property(nonatomic) unsigned long long m_uiTotalFee;
@property(nonatomic) unsigned int m_uiFeeType;
@property(retain, nonatomic) NSString *m_nsReceiverUserName;
@end
@interface WCPayLogicMgr:NSObject
- (void)GetTransferPrepayRequest:(id)arg1;
@end
//MARK: - imagePicker
@class EditImageAttr, MMAsset, MMImagePickerController, NSArray, NSDictionary, SightDraft, UINavigationController, WCFinderDataItem, WCFinderReportPostStateModel;
@protocol MMImagePickerControllerDelegate <NSObject>
@optional
- (void)onImagePickerControllerClickPostFinderLongVideoWithPostStateModel:(WCFinderReportPostStateModel *)arg1;
- (void)MMImagePickerController:(MMImagePickerController *)arg1 didFinishPickingImageWithEditImageAttr:(EditImageAttr *)arg2;
- (void)MMVideoPickerController:(UINavigationController *)arg1 didFinishPickingVideoWithAsset:(MMAsset *)arg2;
- (void)MMVideoPickerController:(UINavigationController *)arg1 didFinishPickingSightWithInfo:(SightDraft *)arg2;
- (void)MMVideoPickerController:(UINavigationController *)arg1 didFinishPickingMediaWithInfo:(NSDictionary *)arg2;
- (void)MMImagePickerControllerDidSkip:(MMImagePickerController *)arg1;
- (void)MMImagePickerControllerDidCancel:(MMImagePickerController *)arg1;
- (void)MMImagePickerManager:(UINavigationController *)arg1 didFinishPickingAssetWithDataItem:(WCFinderDataItem *)arg2 GPSInfoArrayOfAsset:(NSArray *)arg3 dataReportModel:(WCFinderReportPostStateModel *)arg4;
- (void)MMImagePickerController:(MMImagePickerController *)arg1 didFailToPickAssets:(NSArray *)arg2;
- (void)MMImagePickerController:(MMImagePickerController *)arg1 didFinishPickingMediaWithInfo:(NSArray *)arg2;
@end
@class EditImageLogicController, EditVideoLogicController, MMAssetPickerController, MMImagePickerControllerPreviewReportObject, MMNearbyAssetPickerViewController, NSArray, NSString, WCFinderEditOptionModel;
@protocol MMImagePickerControllerDelegate;
@interface MMImagePickerController : MMUINavigationController
@property(nonatomic) unsigned long long enterTime; // @synthesize enterTime=_enterTime;
@property(nonatomic) __weak MMNearbyAssetPickerViewController *nearbyAssetPicker; // @synthesize nearbyAssetPicker=_nearbyAssetPicker;
@property(nonatomic) _Bool showSkipBtn; // @synthesize showSkipBtn=_showSkipBtn;
@property(retain, nonatomic) WCFinderEditOptionModel *finderOptionModel; // @synthesize finderOptionModel=_finderOptionModel;
@property(nonatomic) _Bool buttonEnableAfterSend; // @synthesize buttonEnableAfterSend=_buttonEnableAfterSend;
@property(nonatomic) _Bool videoDirectToEdit; // @synthesize videoDirectToEdit=_videoDirectToEdit;
@property(nonatomic) unsigned long long maxGifDataSize; // @synthesize maxGifDataSize=_maxGifDataSize;
@property(retain, nonatomic) EditVideoLogicController *editVideoLogicController; // @synthesize editVideoLogicController=_editVideoLogicController;
@property(retain, nonatomic) EditImageLogicController *editImageLogicController; // @synthesize editImageLogicController=_editImageLogicController;
@property(retain, nonatomic) MMImagePickerControllerPreviewReportObject *m_previewReportObject; // @synthesize m_previewReportObject;
@property(nonatomic) _Bool isAllowCache; // @synthesize isAllowCache=_isAllowCache;
@property(nonatomic) _Bool isPresentInSplitVC; // @synthesize isPresentInSplitVC=_isPresentInSplitVC;
@property(nonatomic) int previewEditScene; // @synthesize previewEditScene=_previewEditScene;
@property(nonatomic) _Bool isEditMode; // @synthesize isEditMode=_isEditMode;
@property(nonatomic) _Bool isOriginalImage; // @synthesize isOriginalImage=_isOriginalImage;
@property(retain, nonatomic) NSArray *selectedImageAssets; // @synthesize selectedImageAssets=_selectedImageAssets;
@property(retain, nonatomic) NSArray *selectedImageURLs; // @synthesize selectedImageURLs=_selectedImageURLs;
@property(retain, nonatomic) NSString *currentAlbum; // @synthesize currentAlbum=_currentAlbum;
@property(retain, nonatomic) NSString *finishWording; // @synthesize finishWording=_finishWording;
@property(nonatomic) int compressType; // @synthesize compressType=_compressType;
@property(nonatomic) int maxImageCount; // @synthesize maxImageCount=_maxImageCount;
@property(nonatomic) _Bool canHybridSendAsset; // @synthesize canHybridSendAsset=_canHybridSendAsset;
@property(nonatomic) _Bool canSendGif; // @synthesize canSendGif=_canSendGif;
@property(nonatomic) _Bool returnMetaForVideo; // @synthesize returnMetaForVideo=_returnMetaForVideo;
@property(nonatomic) _Bool customizesClickAction; // @synthesize customizesClickAction=_customizesClickAction;
@property(nonatomic) _Bool showPreviewView; // @synthesize showPreviewView=_showPreviewView;
@property(nonatomic) _Bool needThumbImage; // @synthesize needThumbImage=_needThumbImage;
@property(nonatomic) _Bool canSendMultiVideo; // @synthesize canSendMultiVideo=_canSendMultiVideo;
@property(nonatomic) _Bool canSendMultiImage; // @synthesize canSendMultiImage=_canSendMultiImage;
@property(nonatomic) _Bool isNotShowVideoSizeAlertView; // @synthesize isNotShowVideoSizeAlertView=_isNotShowVideoSizeAlertView;
@property(nonatomic) _Bool isOnlyShowVideoMessage; // @synthesize isOnlyShowVideoMessage=_isOnlyShowVideoMessage;
@property(nonatomic) _Bool canSendVideoMessage; // @synthesize canSendVideoMessage=_canSendVideoMessage;
@property(nonatomic) _Bool forceSendOriginImage; // @synthesize forceSendOriginImage=_forceSendOriginImage;
@property(nonatomic) _Bool canSendOriginImage; // @synthesize canSendOriginImage=_canSendOriginImage;
@property(nonatomic) __weak MMAssetPickerController *photoPicker; // @synthesize photoPicker=_photoPicker;
@property(nonatomic) __weak id <MMImagePickerControllerDelegate> m_delegate; // @synthesize m_delegate;
- (void)onAssetPickerControlCenterClickPostFinderLongVideoWithPostStateModel:(id)arg1;
- (void)didReceiveMemoryWarning;
- (int)getPickerScene;
- (void)logImagePickerFinishLoad:(_Bool)arg1;
- (void)logStartImagePicker;
- (void)reportPickerActionInfo;
- (void)reportPicerReportInfo;
- (id)pickerReportInfo;
- (void)reportPreviewCount;
- (void)increasePreviewCount;
- (void)selectedDataItem:(id)arg1 GPSInfoArrayOfAsset:(id)arg2 dataReportModel:(id)arg3;
- (void)failToFetchAssets:(id)arg1;
- (void)selectAsset:(id)arg1;
- (void)selectedEditImageAttr:(id)arg1;
- (void)selectedSight:(id)arg1;
- (void)selectedVideo:(id)arg1;
- (void)didClickSkipBtn;
- (void)selectedAssets:(id)arg1;
- (void)selectedClickNextAction;
- (void)cancelImagePicker;
- (void)removeImageDatas;
- (id)getReportExtInfoDismissState:(_Bool)arg1 eventCode:(long long)arg2;
- (_Bool)isFinderScene;
- (id)initWithPoiInfo:(id)arg1 withOnlyShowVideoMessage:(_Bool)arg2 withNotShowVideoSizeAlertView:(_Bool)arg3 withMaxDuration:(unsigned long long)arg4 withShouldIncludeVideo:(_Bool)arg5;
- (id)initForJustReturnMMAsset:(_Bool)arg1 withAdjustRevertIndex:(unsigned long long)arg2 withDirectToFirstAlbum:(_Bool)arg3 withOnlyShowVideoMessage:(_Bool)arg4 withNotShowVideoSizeAlertView:(_Bool)arg5 withPickerVCForceFullScrenn:(_Bool)arg6;
@end
@interface ZipArchive : NSObject
@property(nonatomic) id delegate; // @synthesize delegate=_delegate;
- (id)Date1980;
- (_Bool)OverWrite:(id)arg1;
- (void)OutputErrorMessage:(id)arg1;
- (_Bool)UnzipCloseFile;
- (_Bool)UnzipCurrentFileWithPosition:(unsigned int)arg1 length:(unsigned int)arg2 retData:(id *)arg3;
- (_Bool)UnzipGetCurrentFileName:(id *)arg1 retIsDirectory:(_Bool *)arg2 retFileLength:(unsigned long long *)arg3;
- (_Bool)UnzipGoToFirstFile;
- (_Bool)UnzipGoToNextFile;
- (_Bool)UnzipLocateFile:(id)arg1;
- (_Bool)UnzipHasRelativeDir:(_Bool *)arg1;
- (_Bool)UnzipFileTo:(id)arg1 overWrite:(_Bool)arg2;
- (_Bool)UnzipOpenFile:(id)arg1 Password:(id)arg2;
- (_Bool)UnzipOpenFile:(id)arg1;
- (_Bool)CloseZipFile2;
- (_Bool)addFileToZip:(id)arg1 newname:(id)arg2;
- (_Bool)addSingleFileToZip:(id)arg1 fileNameInZip:(id)arg2;
- (_Bool)CreateZipFile2:(id)arg1 Password:(id)arg2;
- (_Bool)CreateZipFile2:(id)arg1;
- (void)dealloc;
- (id)init;
@end
@interface MZipUtil : NSObject
+ (BOOL)UnZipFile:(NSString *)path toPath:(NSString *)destination;
+ (BOOL)UnZipFile:(NSString *)path toPath:(NSString *)destination overwrite:(BOOL)overwrite password:(NSString *)password error:(NSError **)error;
@end
#endif /* WechatHeaders_h */