├── iMemScan
├── en-IN.lproj
│ ├── Main.strings
│ └── LaunchScreen.strings
├── en.lproj
│ ├── LaunchScreen.strings
│ ├── InfoPlist.strings
│ └── Localizable.strings
├── zh-Hans.lproj
│ ├── Main.strings
│ ├── LaunchScreen.strings
│ └── Localizable.strings
├── Assets.xcassets
│ ├── Contents.json
│ ├── auto.imageset
│ │ ├── auto@2x.png
│ │ ├── auto@3x.png
│ │ └── Contents.json
│ ├── AppIcon.appiconset
│ │ ├── lcon-1024.png
│ │ ├── AppIcon-iPad-20.png
│ │ ├── AppIcon-iPad-29.png
│ │ ├── AppIcon-iPad-40.png
│ │ ├── AppIcon-iPad-76.png
│ │ ├── AppIcon-iPad-20@2x.png
│ │ ├── AppIcon-iPad-29@2x.png
│ │ ├── AppIcon-iPad-40@2x.png
│ │ ├── AppIcon-iPad-76@2x.png
│ │ ├── AppIcon-iPad-20@2x-1.png
│ │ ├── AppIcon-iPad-83.5@2x.png
│ │ ├── AppIcon-iPhone-20@3x.png
│ │ ├── AppIcon-iPhone-29@2x.png
│ │ ├── AppIcon-iPhone-29@3x.png
│ │ ├── AppIcon-iPhone-40@2x.png
│ │ ├── AppIcon-iPhone-40@3x.png
│ │ ├── AppIcon-iPhone-60@2x.png
│ │ └── AppIcon-iPhone-60@3x.png
│ ├── sun-dark.imageset
│ │ ├── sun-dark@2x.png
│ │ ├── sun-dark@3x.png
│ │ └── Contents.json
│ ├── moon-light.imageset
│ │ ├── moon-light@2x.png
│ │ ├── moon-light@3x.png
│ │ └── Contents.json
│ ├── color_4.colorset
│ │ └── Contents.json
│ ├── color_3.colorset
│ │ └── Contents.json
│ ├── color_2.colorset
│ │ └── Contents.json
│ └── color_1.colorset
│ │ └── Contents.json
├── Tool
│ ├── LocalFiles
│ │ └── music.m4a
│ ├── Jailbreak
│ │ ├── Root
│ │ │ ├── Root.h
│ │ │ └── Root.m
│ │ ├── Sh
│ │ │ ├── RunCmdModel.swift
│ │ │ ├── CommandLine.swift
│ │ │ ├── Actions.swift
│ │ │ └── NSTask.h
│ │ ├── Pid
│ │ │ └── PidModel.h
│ │ ├── iMemScan.entitlements
│ │ └── NSTask.h
│ ├── VMem
│ │ ├── SetModel.h
│ │ ├── SetModel.m
│ │ ├── MemModel.h
│ │ ├── VMTypeHeader.h
│ │ └── VMTool.h
│ └── Device
│ │ └── UIDevice+Helper.swift
├── Lib
│ ├── MJRefresh
│ │ ├── MJRefresh.bundle
│ │ │ ├── arrow@2x.png
│ │ │ ├── trail_arrow@2x.png
│ │ │ ├── en.lproj
│ │ │ │ └── Localizable.strings
│ │ │ ├── ru.lproj
│ │ │ │ └── Localizable.strings
│ │ │ ├── uk.lproj
│ │ │ │ └── Localizable.strings
│ │ │ ├── zh-Hans.lproj
│ │ │ │ └── Localizable.strings
│ │ │ ├── ko.lproj
│ │ │ │ └── Localizable.strings
│ │ │ └── zh-Hant.lproj
│ │ │ │ └── Localizable.strings
│ │ ├── Base
│ │ │ ├── MJRefreshBackFooter.h
│ │ │ ├── MJRefreshTrailer.h
│ │ │ ├── MJRefreshAutoFooter.h
│ │ │ ├── MJRefreshHeader.h
│ │ │ ├── MJRefreshFooter.h
│ │ │ └── MJRefreshFooter.m
│ │ ├── Custom
│ │ │ ├── Trailer
│ │ │ │ ├── MJRefreshNormalTrailer.h
│ │ │ │ ├── MJRefreshStateTrailer.h
│ │ │ │ └── MJRefreshStateTrailer.m
│ │ │ ├── Header
│ │ │ │ ├── MJRefreshGifHeader.h
│ │ │ │ ├── MJRefreshNormalHeader.h
│ │ │ │ └── MJRefreshStateHeader.h
│ │ │ └── Footer
│ │ │ │ ├── Auto
│ │ │ │ ├── MJRefreshAutoNormalFooter.h
│ │ │ │ ├── MJRefreshAutoGifFooter.h
│ │ │ │ ├── MJRefreshAutoStateFooter.h
│ │ │ │ └── MJRefreshAutoNormalFooter.m
│ │ │ │ └── Back
│ │ │ │ ├── MJRefreshBackGifFooter.h
│ │ │ │ ├── MJRefreshBackNormalFooter.h
│ │ │ │ ├── MJRefreshBackStateFooter.h
│ │ │ │ └── MJRefreshBackStateFooter.m
│ │ ├── MJRefreshConfig.m
│ │ ├── NSBundle+MJRefresh.h
│ │ ├── MJRefreshConfig.h
│ │ ├── MJRefresh.h
│ │ ├── UIView+MJExtension.h
│ │ ├── UIScrollView+MJExtension.h
│ │ ├── UIScrollView+MJRefresh.h
│ │ ├── UIView+MJExtension.m
│ │ └── MJRefreshConst.m
│ ├── KakaJSON
│ │ ├── Metadata
│ │ │ ├── Layout
│ │ │ │ ├── BaseLayout.swift
│ │ │ │ ├── ProtocolLayout.swift
│ │ │ │ ├── FunctionLayout.swift
│ │ │ │ ├── EnumLayout.swift
│ │ │ │ ├── StructLayout.swift
│ │ │ │ ├── TupleLayout.swift
│ │ │ │ ├── FieldList.swift
│ │ │ │ └── Layout.swift
│ │ │ ├── Type
│ │ │ │ ├── MetaType.swift
│ │ │ │ ├── ProtocolType.swift
│ │ │ │ ├── ObjCClassType.swift
│ │ │ │ ├── ForeignClassType.swift
│ │ │ │ ├── StructType.swift
│ │ │ │ ├── OptionalType.swift
│ │ │ │ ├── EnumType.swift
│ │ │ │ ├── FunctionType.swift
│ │ │ │ ├── TupleType.swift
│ │ │ │ ├── ClassType.swift
│ │ │ │ ├── BaseType.swift
│ │ │ │ └── ModelType.swift
│ │ │ ├── Property.swift
│ │ │ ├── Descriptor
│ │ │ │ ├── StructDescriptor.swift
│ │ │ │ ├── EnumDescriptor.swift
│ │ │ │ ├── ClassDescriptor.swift
│ │ │ │ └── FieldDescriptor.swift
│ │ │ └── Metadata.swift
│ │ ├── Extension
│ │ │ ├── NSObject+KJ.swift
│ │ │ ├── Optional+KJ.swift
│ │ │ ├── JSONSerialization+KJ.swift
│ │ │ ├── Pointer+KJ.swift
│ │ │ ├── Data+KJ.swift
│ │ │ └── Array+KJ.swift
│ │ ├── Convert
│ │ │ ├── ConvertibleEnum.swift
│ │ │ ├── TypeProxy.swift
│ │ │ ├── Logger.swift
│ │ │ └── KJ.swift
│ │ └── Global
│ │ │ ├── JSON.swift
│ │ │ └── Coding.swift
│ ├── mem
│ │ ├── mem_utils.h
│ │ ├── search_result.h
│ │ ├── mem.h
│ │ └── search_result_def.h
│ ├── AlertView
│ │ ├── PokerCarda.swift
│ │ ├── UIView+KeyWindow.swift
│ │ ├── Extension+UIImage.swift
│ │ ├── Extension+UILabel.swift
│ │ ├── PokerPresenter.swift
│ │ └── PokerConfirmRepresentable.swift
│ ├── JHLog
│ │ ├── JHLog.h
│ │ └── JHLog.m
│ ├── Appinfo
│ │ └── APP
│ │ │ ├── AppController.h
│ │ │ ├── App.h
│ │ │ └── AppController.m
│ ├── YYModel
│ │ └── YYModel.h
│ ├── UIColor
│ │ └── Utils.swift
│ ├── Categories
│ │ ├── UIView+CGRect.h
│ │ ├── UIResponder+JHRouter.m
│ │ ├── UIResponder+JHRouter.h
│ │ └── UIView+CGRect.m
│ ├── Drops
│ │ ├── AnimationContext.swift
│ │ ├── Weak.swift
│ │ ├── PassthroughView.swift
│ │ ├── UIView+Extensions.swift
│ │ ├── PassthroughWindow.swift
│ │ └── WindowViewController.swift
│ ├── Alamofire
│ │ ├── Alamofire.swift
│ │ ├── DispatchQueue+Alamofire.swift
│ │ ├── URLRequest+Alamofire.swift
│ │ ├── URLSessionConfiguration+Alamofire.swift
│ │ ├── StringEncoding+Alamofire.swift
│ │ └── HTTPMethod.swift
│ ├── JHKeyboard
│ │ ├── UITextView+JHKeyboard.h
│ │ ├── UITextField+JHKeyboard.h
│ │ ├── JHKeyboard.h
│ │ ├── UITextView+JHKeyboard.m
│ │ └── UITextField+JHKeyboard.m
│ └── MD5
│ │ └── StringMD5.swift
├── iMemScan-Bridging-Header.h
├── Ctrl
│ ├── OneKey()
│ │ ├── VMOneKeyTool.h
│ │ ├── VMOneKeyModel.m
│ │ ├── VMOneKeyModel.h
│ │ └── VMOneKeyTool.m
│ ├── OneKey
│ │ ├── VMOneKeyModel.m
│ │ ├── VMOneKeyTool.h
│ │ └── VMOneKeyModel.h
│ ├── Set
│ │ ├── AppNoticeCtrl.swift
│ │ ├── SetModel.swift
│ │ └── AppHtmlCtrl.swift
│ └── TabbarCtrl
│ │ └── VMTabBarCtrl.swift
├── ViewController.swift
├── flexdecrypt.entitlements
├── Base.lproj
│ ├── Main.storyboard
│ └── LaunchScreen.storyboard
├── Info.plist
├── SceneDelegate.swift
└── AppDelegate.swift
├── iMemScanTS.tipa
├── iMemScan.xcodeproj
├── project.xcworkspace
│ ├── contents.xcworkspacedata
│ ├── xcshareddata
│ │ ├── WorkspaceSettings.xcsettings
│ │ └── IDEWorkspaceChecks.plist
│ └── xcuserdata
│ │ └── lilianglin.xcuserdatad
│ │ └── WorkspaceSettings.xcsettings
└── xcuserdata
│ ├── lilianglin.xcuserdatad
│ ├── xcdebugger
│ │ └── Breakpoints_v2.xcbkptlist
│ └── xcschemes
│ │ └── xcschememanagement.plist
│ ├── macbook.xcuserdatad
│ └── xcschemes
│ │ └── xcschememanagement.plist
│ └── kevinmuller.xcuserdatad
│ └── xcschemes
│ └── xcschememanagement.plist
├── README.md
└── Makefile
/iMemScan/en-IN.lproj/Main.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/iMemScan/en.lproj/LaunchScreen.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/iMemScan/zh-Hans.lproj/Main.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/iMemScan/en-IN.lproj/LaunchScreen.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/iMemScan/zh-Hans.lproj/LaunchScreen.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/iMemScanTS.tipa:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zSaaiq/iMemScanTS-Localized/HEAD/iMemScanTS.tipa
--------------------------------------------------------------------------------
/iMemScan/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/iMemScan/Tool/LocalFiles/music.m4a:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zSaaiq/iMemScanTS-Localized/HEAD/iMemScan/Tool/LocalFiles/music.m4a
--------------------------------------------------------------------------------
/iMemScan/Assets.xcassets/auto.imageset/auto@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zSaaiq/iMemScanTS-Localized/HEAD/iMemScan/Assets.xcassets/auto.imageset/auto@2x.png
--------------------------------------------------------------------------------
/iMemScan/Assets.xcassets/auto.imageset/auto@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zSaaiq/iMemScanTS-Localized/HEAD/iMemScan/Assets.xcassets/auto.imageset/auto@3x.png
--------------------------------------------------------------------------------
/iMemScan/Lib/MJRefresh/MJRefresh.bundle/arrow@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zSaaiq/iMemScanTS-Localized/HEAD/iMemScan/Lib/MJRefresh/MJRefresh.bundle/arrow@2x.png
--------------------------------------------------------------------------------
/iMemScan/Assets.xcassets/AppIcon.appiconset/lcon-1024.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zSaaiq/iMemScanTS-Localized/HEAD/iMemScan/Assets.xcassets/AppIcon.appiconset/lcon-1024.png
--------------------------------------------------------------------------------
/iMemScan/en.lproj/InfoPlist.strings:
--------------------------------------------------------------------------------
1 | /*
2 | InfoPlist.strings
3 | iMemScan
4 |
5 | Created by yiming on 2021/8/18.
6 |
7 | */
8 |
9 | "进程" = "Course";
10 |
--------------------------------------------------------------------------------
/iMemScan/Assets.xcassets/sun-dark.imageset/sun-dark@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zSaaiq/iMemScanTS-Localized/HEAD/iMemScan/Assets.xcassets/sun-dark.imageset/sun-dark@2x.png
--------------------------------------------------------------------------------
/iMemScan/Assets.xcassets/sun-dark.imageset/sun-dark@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zSaaiq/iMemScanTS-Localized/HEAD/iMemScan/Assets.xcassets/sun-dark.imageset/sun-dark@3x.png
--------------------------------------------------------------------------------
/iMemScan/Lib/MJRefresh/MJRefresh.bundle/trail_arrow@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zSaaiq/iMemScanTS-Localized/HEAD/iMemScan/Lib/MJRefresh/MJRefresh.bundle/trail_arrow@2x.png
--------------------------------------------------------------------------------
/iMemScan/Assets.xcassets/moon-light.imageset/moon-light@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zSaaiq/iMemScanTS-Localized/HEAD/iMemScan/Assets.xcassets/moon-light.imageset/moon-light@2x.png
--------------------------------------------------------------------------------
/iMemScan/Assets.xcassets/moon-light.imageset/moon-light@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zSaaiq/iMemScanTS-Localized/HEAD/iMemScan/Assets.xcassets/moon-light.imageset/moon-light@3x.png
--------------------------------------------------------------------------------
/iMemScan/Assets.xcassets/AppIcon.appiconset/AppIcon-iPad-20.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zSaaiq/iMemScanTS-Localized/HEAD/iMemScan/Assets.xcassets/AppIcon.appiconset/AppIcon-iPad-20.png
--------------------------------------------------------------------------------
/iMemScan/Assets.xcassets/AppIcon.appiconset/AppIcon-iPad-29.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zSaaiq/iMemScanTS-Localized/HEAD/iMemScan/Assets.xcassets/AppIcon.appiconset/AppIcon-iPad-29.png
--------------------------------------------------------------------------------
/iMemScan/Assets.xcassets/AppIcon.appiconset/AppIcon-iPad-40.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zSaaiq/iMemScanTS-Localized/HEAD/iMemScan/Assets.xcassets/AppIcon.appiconset/AppIcon-iPad-40.png
--------------------------------------------------------------------------------
/iMemScan/Assets.xcassets/AppIcon.appiconset/AppIcon-iPad-76.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zSaaiq/iMemScanTS-Localized/HEAD/iMemScan/Assets.xcassets/AppIcon.appiconset/AppIcon-iPad-76.png
--------------------------------------------------------------------------------
/iMemScan/Assets.xcassets/AppIcon.appiconset/AppIcon-iPad-20@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zSaaiq/iMemScanTS-Localized/HEAD/iMemScan/Assets.xcassets/AppIcon.appiconset/AppIcon-iPad-20@2x.png
--------------------------------------------------------------------------------
/iMemScan/Assets.xcassets/AppIcon.appiconset/AppIcon-iPad-29@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zSaaiq/iMemScanTS-Localized/HEAD/iMemScan/Assets.xcassets/AppIcon.appiconset/AppIcon-iPad-29@2x.png
--------------------------------------------------------------------------------
/iMemScan/Assets.xcassets/AppIcon.appiconset/AppIcon-iPad-40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zSaaiq/iMemScanTS-Localized/HEAD/iMemScan/Assets.xcassets/AppIcon.appiconset/AppIcon-iPad-40@2x.png
--------------------------------------------------------------------------------
/iMemScan/Assets.xcassets/AppIcon.appiconset/AppIcon-iPad-76@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zSaaiq/iMemScanTS-Localized/HEAD/iMemScan/Assets.xcassets/AppIcon.appiconset/AppIcon-iPad-76@2x.png
--------------------------------------------------------------------------------
/iMemScan/Assets.xcassets/AppIcon.appiconset/AppIcon-iPad-20@2x-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zSaaiq/iMemScanTS-Localized/HEAD/iMemScan/Assets.xcassets/AppIcon.appiconset/AppIcon-iPad-20@2x-1.png
--------------------------------------------------------------------------------
/iMemScan/Assets.xcassets/AppIcon.appiconset/AppIcon-iPad-83.5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zSaaiq/iMemScanTS-Localized/HEAD/iMemScan/Assets.xcassets/AppIcon.appiconset/AppIcon-iPad-83.5@2x.png
--------------------------------------------------------------------------------
/iMemScan/Assets.xcassets/AppIcon.appiconset/AppIcon-iPhone-20@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zSaaiq/iMemScanTS-Localized/HEAD/iMemScan/Assets.xcassets/AppIcon.appiconset/AppIcon-iPhone-20@3x.png
--------------------------------------------------------------------------------
/iMemScan/Assets.xcassets/AppIcon.appiconset/AppIcon-iPhone-29@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zSaaiq/iMemScanTS-Localized/HEAD/iMemScan/Assets.xcassets/AppIcon.appiconset/AppIcon-iPhone-29@2x.png
--------------------------------------------------------------------------------
/iMemScan/Assets.xcassets/AppIcon.appiconset/AppIcon-iPhone-29@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zSaaiq/iMemScanTS-Localized/HEAD/iMemScan/Assets.xcassets/AppIcon.appiconset/AppIcon-iPhone-29@3x.png
--------------------------------------------------------------------------------
/iMemScan/Assets.xcassets/AppIcon.appiconset/AppIcon-iPhone-40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zSaaiq/iMemScanTS-Localized/HEAD/iMemScan/Assets.xcassets/AppIcon.appiconset/AppIcon-iPhone-40@2x.png
--------------------------------------------------------------------------------
/iMemScan/Assets.xcassets/AppIcon.appiconset/AppIcon-iPhone-40@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zSaaiq/iMemScanTS-Localized/HEAD/iMemScan/Assets.xcassets/AppIcon.appiconset/AppIcon-iPhone-40@3x.png
--------------------------------------------------------------------------------
/iMemScan/Assets.xcassets/AppIcon.appiconset/AppIcon-iPhone-60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zSaaiq/iMemScanTS-Localized/HEAD/iMemScan/Assets.xcassets/AppIcon.appiconset/AppIcon-iPhone-60@2x.png
--------------------------------------------------------------------------------
/iMemScan/Assets.xcassets/AppIcon.appiconset/AppIcon-iPhone-60@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zSaaiq/iMemScanTS-Localized/HEAD/iMemScan/Assets.xcassets/AppIcon.appiconset/AppIcon-iPhone-60@3x.png
--------------------------------------------------------------------------------
/iMemScan/Lib/MJRefresh/MJRefresh.bundle/en.lproj/Localizable.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zSaaiq/iMemScanTS-Localized/HEAD/iMemScan/Lib/MJRefresh/MJRefresh.bundle/en.lproj/Localizable.strings
--------------------------------------------------------------------------------
/iMemScan/Lib/MJRefresh/MJRefresh.bundle/ru.lproj/Localizable.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zSaaiq/iMemScanTS-Localized/HEAD/iMemScan/Lib/MJRefresh/MJRefresh.bundle/ru.lproj/Localizable.strings
--------------------------------------------------------------------------------
/iMemScan/Lib/MJRefresh/MJRefresh.bundle/uk.lproj/Localizable.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zSaaiq/iMemScanTS-Localized/HEAD/iMemScan/Lib/MJRefresh/MJRefresh.bundle/uk.lproj/Localizable.strings
--------------------------------------------------------------------------------
/iMemScan/Lib/MJRefresh/MJRefresh.bundle/zh-Hans.lproj/Localizable.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zSaaiq/iMemScanTS-Localized/HEAD/iMemScan/Lib/MJRefresh/MJRefresh.bundle/zh-Hans.lproj/Localizable.strings
--------------------------------------------------------------------------------
/iMemScan.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/iMemScan.xcodeproj/xcuserdata/lilianglin.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
--------------------------------------------------------------------------------
/iMemScan/Tool/Jailbreak/Root/Root.h:
--------------------------------------------------------------------------------
1 | //
2 | // Root.h
3 | // Root
4 | //
5 | // Created by yiming on 2021/8/14.
6 | //
7 |
8 | #import
9 |
10 | NS_ASSUME_NONNULL_BEGIN
11 |
12 | @interface Root : NSObject
13 |
14 | @end
15 |
16 | NS_ASSUME_NONNULL_END
17 |
--------------------------------------------------------------------------------
/iMemScan/Tool/Jailbreak/Sh/RunCmdModel.swift:
--------------------------------------------------------------------------------
1 | //
2 | // RunCmdModel.swift
3 | // RunCmdModel
4 | //
5 | // Created by yiming on 2021/8/21.
6 | //
7 |
8 | import UIKit
9 |
10 | struct RunCmdModel: Convertible {
11 | var path: String = ""
12 | var args: [String] = []
13 | }
14 |
--------------------------------------------------------------------------------
/iMemScan/Lib/KakaJSON/Metadata/Layout/BaseLayout.swift:
--------------------------------------------------------------------------------
1 | //
2 | // BaseLayout.swift
3 | // KakaJSON
4 | //
5 | // Created by MJ Lee on 2019/8/2.
6 | // Copyright © 2019 MJ Lee. All rights reserved.
7 | //
8 |
9 | struct BaseLayout: Layout {
10 | let kind: UnsafeRawPointer
11 | }
12 |
--------------------------------------------------------------------------------
/iMemScan/Lib/KakaJSON/Metadata/Layout/ProtocolLayout.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ProtocolLayout.swift
3 | // KakaJSON
4 | //
5 | // Created by MJ Lee on 2019/8/1.
6 | // Copyright © 2019 MJ Lee. All rights reserved.
7 | //
8 |
9 | struct ProtocolLayout: Layout {
10 | let kind: UnsafeRawPointer
11 | }
12 |
13 |
--------------------------------------------------------------------------------
/iMemScan.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreviewsEnabled
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # iMemScan Trollstore localized into English and German
2 |
3 | This version of iMemScan was translated from Chinese into English and German
4 |
5 | ## Installation
6 |
7 | 1. Download the **iMemscan.tipa** and install it in Trollstore
8 |
9 | ## Donations
10 |
11 | Support me, here: https://www.paypal.me/zSaaiq
12 |
--------------------------------------------------------------------------------
/iMemScan.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/iMemScan/Lib/KakaJSON/Metadata/Layout/FunctionLayout.swift:
--------------------------------------------------------------------------------
1 | //
2 | // FunctionLayout.swift
3 | // KakaJSON
4 | //
5 | // Created by MJ Lee on 2019/8/1.
6 | // Copyright © 2019 MJ Lee. All rights reserved.
7 | //
8 |
9 | struct FunctionLayout: Layout {
10 | let kind: UnsafeRawPointer
11 | var flags: Int
12 | var parameters: FieldList
13 | }
14 |
--------------------------------------------------------------------------------
/iMemScan/Lib/KakaJSON/Extension/NSObject+KJ.swift:
--------------------------------------------------------------------------------
1 | //
2 | // NSObject+KJ.swift
3 | // KakaJSON
4 | //
5 | // Created by MJ Lee on 2019/8/15.
6 | // Copyright © 2019 MJ Lee. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | extension NSObject {
12 | static func newConvertible() -> Convertible {
13 | return self.init() as! Convertible
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/iMemScan/Lib/MJRefresh/Base/MJRefreshBackFooter.h:
--------------------------------------------------------------------------------
1 | //
2 | // MJRefreshBackFooter.h
3 | // MJRefreshExample
4 | //
5 | // Created by MJ Lee on 15/4/24.
6 | // Copyright (c) 2015年 小码哥. All rights reserved.
7 | //
8 |
9 | #import "MJRefreshFooter.h"
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @interface MJRefreshBackFooter : MJRefreshFooter
14 |
15 | @end
16 |
17 | NS_ASSUME_NONNULL_END
18 |
--------------------------------------------------------------------------------
/iMemScan/Lib/KakaJSON/Metadata/Layout/EnumLayout.swift:
--------------------------------------------------------------------------------
1 | //
2 | // EnumLayout.swift
3 | // KakaJSON
4 | //
5 | // Created by MJ Lee on 2019/7/31.
6 | // Copyright © 2019 MJ Lee. All rights reserved.
7 | //
8 |
9 | struct EnumLayout: NominalLayout {
10 | let kind: UnsafeRawPointer
11 | /// An out-of-line description of the type
12 | var description: UnsafeMutablePointer
13 | }
14 |
--------------------------------------------------------------------------------
/iMemScan/Lib/KakaJSON/Metadata/Layout/StructLayout.swift:
--------------------------------------------------------------------------------
1 | //
2 | // StructLayout.swift
3 | // KakaJSON
4 | //
5 | // Created by MJ Lee on 2019/7/31.
6 | // Copyright © 2019 MJ Lee. All rights reserved.
7 | //
8 |
9 | struct StructLayout: ModelLayout {
10 | let kind: UnsafeRawPointer
11 | /// An out-of-line description of the type
12 | var description: UnsafeMutablePointer
13 | }
14 |
--------------------------------------------------------------------------------
/iMemScan/Lib/mem/mem_utils.h:
--------------------------------------------------------------------------------
1 | //
2 | // mem_utils.h
3 | // memui
4 | //
5 | // Created by Liu Junqi on 4/24/18.
6 | // Copyright © 2018 DeviLeo. All rights reserved.
7 | //
8 |
9 | #ifndef mem_utils_h
10 | #define mem_utils_h
11 |
12 | #include
13 | #include "search_result_def.h"
14 |
15 | void *search_mem_value(const void *b, size_t len, void *v, size_t vlen, int type, int comparison);
16 |
17 | #endif /* mem_utils_h */
18 |
--------------------------------------------------------------------------------
/iMemScan/Lib/AlertView/PokerCarda.swift:
--------------------------------------------------------------------------------
1 | //
2 | // PokerCarda.swift
3 | // iMemScan
4 | //
5 | // Created by 李良林 on 2021/1/5.
6 | // Copyright © 2021 李良林. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class PokerCarda: NSObject {
12 |
13 | public func showInput(title: String, detail: String? = nil) -> PokerInputView {
14 | return PokerAlertPresenter().showInput(title: title, detail: detail)
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/iMemScan/Lib/KakaJSON/Metadata/Type/MetaType.swift:
--------------------------------------------------------------------------------
1 | //
2 | // MetaType.swift
3 | // KakaJSON
4 | //
5 | // Created by MJ Lee on 2019/8/2.
6 | // Copyright © 2019 MJ Lee. All rights reserved.
7 | //
8 |
9 | public class MetaType: BaseType, LayoutType {
10 | private(set) var layout: UnsafeMutablePointer!
11 |
12 | override func build() {
13 | super.build()
14 |
15 | layout = builtLayout()
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/iMemScan/Lib/KakaJSON/Metadata/Type/ProtocolType.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ProtocolType.swift
3 | // KakaJSON
4 | //
5 | // Created by MJ Lee on 2019/8/1.
6 | // Copyright © 2019 MJ Lee. All rights reserved.
7 | //
8 |
9 | public class ProtocolType: BaseType, LayoutType {
10 | private(set) var layout: UnsafeMutablePointer!
11 |
12 | override func build() {
13 | super.build()
14 |
15 | layout = builtLayout()
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/iMemScan.xcodeproj/xcuserdata/macbook.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | iMemScan.xcscheme_^#shared#^_
8 |
9 | orderHint
10 | 0
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/iMemScan/Lib/JHLog/JHLog.h:
--------------------------------------------------------------------------------
1 | //
2 | // JHLog.h
3 | // A
4 | //
5 | // Created by HaoCold on 2020/11/4.
6 | // Copyright © 2020 HaoCold. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | #define kJHCacheLog(log) [[JHLog share] cache:log];
14 |
15 | @interface JHLog : NSObject
16 |
17 | + (instancetype)share;
18 |
19 | - (void)cache:(NSString *)log;
20 | - (void)save;
21 | @end
22 |
23 | NS_ASSUME_NONNULL_END
24 |
--------------------------------------------------------------------------------
/iMemScan.xcodeproj/xcuserdata/kevinmuller.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | iMemScan.xcscheme_^#shared#^_
8 |
9 | orderHint
10 | 0
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/iMemScan.xcodeproj/xcuserdata/lilianglin.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | iMemScan.xcscheme_^#shared#^_
8 |
9 | orderHint
10 | 0
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/iMemScan/Assets.xcassets/auto.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "auto@2x.png",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "filename" : "auto@3x.png",
14 | "idiom" : "universal",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "author" : "xcode",
20 | "version" : 1
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/iMemScan/Lib/KakaJSON/Metadata/Type/ObjCClassType.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ObjCClassType.swift
3 | // KakaJSON
4 | //
5 | // Created by MJ Lee on 2019/8/2.
6 | // Copyright © 2019 MJ Lee. All rights reserved.
7 | //
8 |
9 | /// e.g. NSString
10 | public class ObjCClassType: BaseType, LayoutType {
11 | private(set) var layout: UnsafeMutablePointer!
12 |
13 | override func build() {
14 | super.build()
15 |
16 | layout = builtLayout()
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/iMemScan/Lib/MJRefresh/Custom/Trailer/MJRefreshNormalTrailer.h:
--------------------------------------------------------------------------------
1 | //
2 | // MJRefreshNormalTrailer.h
3 | // MJRefreshExample
4 | //
5 | // Created by kinarobin on 2020/5/3.
6 | // Copyright © 2020 小码哥. All rights reserved.
7 | //
8 |
9 | #import "MJRefreshStateTrailer.h"
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @interface MJRefreshNormalTrailer : MJRefreshStateTrailer
14 |
15 | @property (weak, nonatomic, readonly) UIImageView *arrowView;
16 |
17 | @end
18 |
19 | NS_ASSUME_NONNULL_END
20 |
--------------------------------------------------------------------------------
/iMemScan/Assets.xcassets/sun-dark.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "sun-dark@2x.png",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "filename" : "sun-dark@3x.png",
14 | "idiom" : "universal",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "author" : "xcode",
20 | "version" : 1
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/iMemScan/Assets.xcassets/moon-light.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "moon-light@2x.png",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "filename" : "moon-light@3x.png",
14 | "idiom" : "universal",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "author" : "xcode",
20 | "version" : 1
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/iMemScan/Lib/KakaJSON/Metadata/Layout/TupleLayout.swift:
--------------------------------------------------------------------------------
1 | //
2 | // TupleLayout.swift
3 | // KakaJSON
4 | //
5 | // Created by MJ Lee on 2019/8/1.
6 | // Copyright © 2019 MJ Lee. All rights reserved.
7 | //
8 |
9 | struct TupleLayout: Layout {
10 | let kind: UnsafeRawPointer
11 | let numElements: Int
12 | let labels: UnsafeMutablePointer
13 | var elements: FieldList
14 | }
15 |
16 | struct TupleElement {
17 | let type: Any.Type
18 | let offset: Int
19 | }
20 |
--------------------------------------------------------------------------------
/iMemScan/Lib/KakaJSON/Extension/Optional+KJ.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Optional+KJ.swift
3 | // KakaJSON
4 | //
5 | // Created by MJ Lee on 2019/8/5.
6 | // Copyright © 2019 MJ Lee. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | protocol OptionalValue {
12 | var kj_value: Any? { get }
13 | }
14 |
15 | extension Optional: OptionalValue {
16 | var kj_value: Any? {
17 | guard let v = self else { return nil }
18 | return (v as? OptionalValue)?.kj_value ?? v
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/iMemScan/Lib/KakaJSON/Metadata/Type/ForeignClassType.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ForeignClassType.swift
3 | // KakaJSON
4 | //
5 | // Created by MJ Lee on 2019/8/2.
6 | // Copyright © 2019 MJ Lee. All rights reserved.
7 | //
8 |
9 | /// e.g. CFArray
10 | public class ForeignClassType: BaseType, LayoutType {
11 | private(set) var layout: UnsafeMutablePointer!
12 |
13 | override func build() {
14 | super.build()
15 |
16 | layout = builtLayout()
17 | }
18 | }
19 |
20 |
--------------------------------------------------------------------------------
/iMemScan/Lib/MJRefresh/MJRefreshConfig.m:
--------------------------------------------------------------------------------
1 | //
2 | // MJRefreshConfig.m
3 | //
4 | // Created by Frank on 2018/11/27.
5 | // Copyright © 2018 小码哥. All rights reserved.
6 | //
7 |
8 | #import "MJRefreshConfig.h"
9 |
10 | @implementation MJRefreshConfig
11 |
12 | static MJRefreshConfig *mj_RefreshConfig = nil;
13 |
14 | + (instancetype)defaultConfig {
15 | static dispatch_once_t onceToken;
16 | dispatch_once(&onceToken, ^{
17 | mj_RefreshConfig = [[self alloc] init];
18 | });
19 | return mj_RefreshConfig;
20 | }
21 |
22 |
23 |
24 | @end
25 |
--------------------------------------------------------------------------------
/iMemScan/iMemScan-Bridging-Header.h:
--------------------------------------------------------------------------------
1 | //
2 | // Use this file to import your target's public headers that you would like to expose to Swift.
3 | //
4 |
5 | #import "JHUIAlertView.h"
6 | #import "UIView+CGRect.h"
7 | #import "UITextField+JHKeyboard.h"
8 | #import "MemModel.h"
9 | #import "VMTool.h"
10 | #import "YYModel.h"
11 | #import "UIResponder+JHRouter.h"
12 | #import "VMOneKeyTool.h"
13 | #import "VMOneKeyModel.h"
14 | #include "mem.h"
15 | #import "PidModel.h"
16 | #import "NSTask.h"
17 | #import "MJRefresh.h"
18 | #import "JHLog.h"
19 | #import "AppController.h"
20 | #import "NSTask.h"
21 |
--------------------------------------------------------------------------------
/iMemScan/Tool/Jailbreak/Pid/PidModel.h:
--------------------------------------------------------------------------------
1 | //
2 | // PidModel.h
3 | // BeautyList
4 | //
5 | // Created by HaoCold on 2020/11/23.
6 | // Copyright © 2020 HaoCold. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @interface PidModel : NSObject
14 |
15 | @property (nonatomic, copy) NSString *name;
16 | @property (nonatomic, copy) NSString *pid;
17 | @property (nonatomic, assign) BOOL selected;
18 |
19 | + (NSArray *)modelArray:(NSString *)input;
20 | + (NSArray *)refreshModelArray;
21 | @end
22 |
23 | NS_ASSUME_NONNULL_END
24 |
--------------------------------------------------------------------------------
/iMemScan/Lib/Appinfo/APP/AppController.h:
--------------------------------------------------------------------------------
1 | //
2 | // AppController.h
3 | // MemSearch
4 | //
5 | // Created by 李良林 on 2020/10/18.
6 | // Copyright © 2020 李良林. All rights reserved.
7 | //
8 |
9 | #import
10 | #import "App.h"
11 |
12 | @interface AppController : NSObject
13 |
14 | @property (nonatomic, readonly) NSArray* installedApplications;
15 |
16 | - (BOOL)openAppWithBundleIdentifier:(NSString*)bundleIdentifier;
17 | - (NSArray*)privateURLSchemes;
18 | - (NSArray*)publicURLSchemes;
19 | - (NSArray*)readApplications;
20 |
21 | + (instancetype)sharedInstance;
22 |
23 | @end
24 |
--------------------------------------------------------------------------------
/iMemScan/Lib/MJRefresh/NSBundle+MJRefresh.h:
--------------------------------------------------------------------------------
1 | //
2 | // NSBundle+MJRefresh.h
3 | // MJRefreshExample
4 | //
5 | // Created by MJ Lee on 16/6/13.
6 | // Copyright © 2016年 小码哥. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @interface NSBundle (MJRefresh)
14 | + (instancetype)mj_refreshBundle;
15 | + (UIImage *)mj_arrowImage;
16 | + (UIImage *)mj_trailArrowImage;
17 | + (NSString *)mj_localizedStringForKey:(NSString *)key value:(nullable NSString *)value;
18 | + (NSString *)mj_localizedStringForKey:(NSString *)key;
19 | @end
20 |
21 | NS_ASSUME_NONNULL_END
22 |
--------------------------------------------------------------------------------
/iMemScan/Ctrl/OneKey()/VMOneKeyTool.h:
--------------------------------------------------------------------------------
1 | //
2 | // VMOneKeyTool.h
3 | // MemView
4 | //
5 | // Created by HaoCold on 2020/9/29.
6 | // Copyright © 2020 HaoCold. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @class VMOneKeyModel;
14 |
15 | @interface VMOneKeyTool : NSObject
16 |
17 | + (void)setup;
18 | + (NSArray *)allRecords;
19 | + (void)deleteRecord:(VMOneKeyModel *)model;
20 | + (void)saveRecord:(VMOneKeyModel *)model;
21 | + (void)save;
22 | + (void)exchange:(NSInteger)idx1 index:(NSInteger)idx2;
23 |
24 | @end
25 |
26 | NS_ASSUME_NONNULL_END
27 |
--------------------------------------------------------------------------------
/iMemScan/Lib/MJRefresh/Custom/Trailer/MJRefreshStateTrailer.h:
--------------------------------------------------------------------------------
1 | //
2 | // MJRefreshStateTrailer.h
3 | // MJRefreshExample
4 | //
5 | // Created by kinarobin on 2020/5/3.
6 | // Copyright © 2020 小码哥. All rights reserved.
7 | //
8 |
9 | #import "MJRefreshTrailer.h"
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 |
14 | @interface MJRefreshStateTrailer : MJRefreshTrailer
15 |
16 | #pragma mark - 状态相关
17 | /** 显示刷新状态的label */
18 | @property (weak, nonatomic, readonly) UILabel *stateLabel;
19 | /** 设置state状态下的文字 */
20 | - (void)setTitle:(NSString *)title forState:(MJRefreshState)state;
21 |
22 | @end
23 |
24 | NS_ASSUME_NONNULL_END
25 |
--------------------------------------------------------------------------------
/iMemScan/Lib/MJRefresh/MJRefreshConfig.h:
--------------------------------------------------------------------------------
1 | //
2 | // MJRefreshConfig.h
3 | //
4 | // Created by Frank on 2018/11/27.
5 | // Copyright © 2018 小码哥. All rights reserved.
6 | //
7 |
8 | #import
9 |
10 | NS_ASSUME_NONNULL_BEGIN
11 |
12 | @interface MJRefreshConfig : NSObject
13 |
14 | /** 默认使用的语言版本, 默认为 nil. 将随系统的语言自动改变 */
15 | @property (copy, nonatomic, nullable) NSString *languageCode;
16 |
17 | /** @return Singleton Config instance */
18 | + (instancetype)defaultConfig;
19 |
20 | - (instancetype)init NS_UNAVAILABLE;
21 | + (instancetype)new NS_UNAVAILABLE;
22 |
23 | @end
24 |
25 | NS_ASSUME_NONNULL_END
26 |
--------------------------------------------------------------------------------
/iMemScan/ViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ViewController.swift
3 | // iMemScan
4 | //
5 | // Created by yiming on 2021/8/4.
6 | //
7 |
8 | import UIKit
9 | import Foundation
10 |
11 | @discardableResult func eng(_ str: String) -> String {
12 | return NSLocalizedString(str, comment: "")
13 | }
14 |
15 | class ViewController: UIViewController {
16 |
17 | override func viewDidLoad() {
18 | super.viewDidLoad()
19 | // Do any additional setup after loading the view.
20 |
21 | UIApplication.shared.delegate?.window?!.rootViewController = VMTabBarCtrl()
22 | }
23 |
24 | }
25 |
26 |
27 |
--------------------------------------------------------------------------------
/iMemScan/zh-Hans.lproj/Localizable.strings:
--------------------------------------------------------------------------------
1 | /*
2 | Localizable.strings
3 | iMemScan
4 |
5 | Created by yiming on 2021/8/19.
6 |
7 | */
8 |
9 | "授权状态" = "VIP status";
10 | "设备已冻结" = "Ban";
11 | "设备标识" = "Serial number";
12 | "购买授权" = "Buy VIP";
13 | "版本" = "Version";
14 | "卸载应用" = "Uninstall app";
15 | "信息" = "Info";
16 | "购买" = "Buy";
17 | "卸载" = "Uninstall";
18 | "暂无更新" = "Update isn’t available";
19 | "您当前版本无需更新" = "You are using latest version";
20 | "确定要卸载本应用吗?" = "Are you sure you want to uninstall this app?";
21 | "确定卸载" = "Complete Uninstallation";
22 | "取消" = "Cancel";
23 | "复制设备码成功" = "Copy device code successfully";
24 |
--------------------------------------------------------------------------------
/iMemScan/Lib/MJRefresh/MJRefresh.h:
--------------------------------------------------------------------------------
1 | // 代码地址: https://github.com/CoderMJLee/MJRefresh
2 | // 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
3 |
4 | #import "UIScrollView+MJRefresh.h"
5 | #import "UIScrollView+MJExtension.h"
6 | #import "UIView+MJExtension.h"
7 |
8 | #import "MJRefreshNormalHeader.h"
9 | #import "MJRefreshGifHeader.h"
10 |
11 | #import "MJRefreshBackNormalFooter.h"
12 | #import "MJRefreshBackGifFooter.h"
13 | #import "MJRefreshAutoNormalFooter.h"
14 | #import "MJRefreshAutoGifFooter.h"
15 |
16 | #import "MJRefreshNormalTrailer.h"
17 |
--------------------------------------------------------------------------------
/iMemScan/Lib/KakaJSON/Metadata/Layout/FieldList.swift:
--------------------------------------------------------------------------------
1 | //
2 | // FieldList.swift
3 | // KakaJSON
4 | //
5 | // Created by MJ Lee on 2019/8/1.
6 | // Copyright © 2019 MJ Lee. All rights reserved.
7 | //
8 |
9 | struct FieldList- {
10 | private let item: Item
11 | mutating func ptr(_ index: Int) -> UnsafeMutablePointer
- {
12 | return withUnsafeMutablePointer(to: &self) {
13 | ($0 + index).kj_raw ~> Item.self
14 | }
15 | }
16 |
17 | mutating func item(_ index: Int) -> Item {
18 | return withUnsafeMutablePointer(to: &self) {
19 | $0[index].item
20 | }
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/iMemScan/Tool/VMem/SetModel.h:
--------------------------------------------------------------------------------
1 | //
2 | // SetModel.h
3 | // iMemScan
4 | //
5 | // Created by HaoCold on 2021/8/16.
6 | //
7 |
8 | #import
9 |
10 | NS_ASSUME_NONNULL_BEGIN
11 |
12 | @interface SetModel : NSObject
13 |
14 | @property (nonatomic, assign) NSString *range;
15 | @property (nonatomic, assign) NSString *addrRangeStart;
16 | @property (nonatomic, assign) NSString *addrRangeEnd;
17 | @property (nonatomic, assign) NSString *LimitCount;
18 | @property (nonatomic, assign) NSString *duration;
19 | @property (nonatomic, assign) NSString *duration1;
20 |
21 | + (instancetype)share;
22 | @end
23 |
24 | NS_ASSUME_NONNULL_END
25 |
--------------------------------------------------------------------------------
/iMemScan/Tool/VMem/SetModel.m:
--------------------------------------------------------------------------------
1 | //
2 | // SetModel.m
3 | // iMemScan
4 | //
5 | // Created by HaoCold on 2021/8/16.
6 | //
7 |
8 | #import
9 | #import "SetModel.h"
10 | #import "YYModel.h"
11 |
12 | @implementation SetModel
13 |
14 | NSMutableArray *_setData;
15 |
16 | + (instancetype)share
17 | {
18 | static SetModel *model;
19 | static dispatch_once_t onceToken;
20 | dispatch_once(&onceToken, ^{
21 | model = [[SetModel alloc] init];
22 | });
23 | return model;
24 | }
25 |
26 | - (instancetype)init
27 | {
28 | self = [super init];
29 | if (self) {
30 |
31 | }
32 | return self;
33 | }
34 |
35 | @end
36 |
--------------------------------------------------------------------------------
/iMemScan/Lib/MJRefresh/Custom/Header/MJRefreshGifHeader.h:
--------------------------------------------------------------------------------
1 | //
2 | // MJRefreshGifHeader.h
3 | // MJRefreshExample
4 | //
5 | // Created by MJ Lee on 15/4/24.
6 | // Copyright (c) 2015年 小码哥. All rights reserved.
7 | //
8 |
9 | #import "MJRefreshStateHeader.h"
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @interface MJRefreshGifHeader : MJRefreshStateHeader
14 | @property (weak, nonatomic, readonly) UIImageView *gifView;
15 |
16 | /** 设置state状态下的动画图片images 动画持续时间duration*/
17 | - (void)setImages:(NSArray *)images duration:(NSTimeInterval)duration forState:(MJRefreshState)state;
18 | - (void)setImages:(NSArray *)images forState:(MJRefreshState)state;
19 | @end
20 |
21 | NS_ASSUME_NONNULL_END
22 |
--------------------------------------------------------------------------------
/iMemScan/Lib/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.h:
--------------------------------------------------------------------------------
1 | //
2 | // MJRefreshAutoNormalFooter.h
3 | // MJRefreshExample
4 | //
5 | // Created by MJ Lee on 15/4/24.
6 | // Copyright (c) 2015年 小码哥. All rights reserved.
7 | //
8 |
9 | #import "MJRefreshAutoStateFooter.h"
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @interface MJRefreshAutoNormalFooter : MJRefreshAutoStateFooter
14 | @property (weak, nonatomic, readonly) UIActivityIndicatorView *loadingView;
15 |
16 | /** 菊花的样式 */
17 | @property (assign, nonatomic) UIActivityIndicatorViewStyle activityIndicatorViewStyle MJRefreshDeprecated("first deprecated in 3.2.2 - Use `loadingView` property");
18 | @end
19 |
20 |
21 | NS_ASSUME_NONNULL_END
22 |
--------------------------------------------------------------------------------
/iMemScan/Lib/YYModel/YYModel.h:
--------------------------------------------------------------------------------
1 | //
2 | // YYModel.h
3 | // YYModel
4 | //
5 | // Created by ibireme on 15/5/10.
6 | // Copyright (c) 2015 ibireme.
7 | //
8 | // This source code is licensed under the MIT-style license found in the
9 | // LICENSE file in the root directory of this source tree.
10 | //
11 |
12 | #import
13 |
14 | #if __has_include()
15 | FOUNDATION_EXPORT double YYModelVersionNumber;
16 | FOUNDATION_EXPORT const unsigned char YYModelVersionString[];
17 | #import
18 | #import
19 | #else
20 | #import "NSObject+YYModel.h"
21 | #import "YYClassInfo.h"
22 | #endif
23 |
--------------------------------------------------------------------------------
/iMemScan/Lib/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.h:
--------------------------------------------------------------------------------
1 | //
2 | // MJRefreshAutoGifFooter.h
3 | // MJRefreshExample
4 | //
5 | // Created by MJ Lee on 15/4/24.
6 | // Copyright (c) 2015年 小码哥. All rights reserved.
7 | //
8 |
9 | #import "MJRefreshAutoStateFooter.h"
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @interface MJRefreshAutoGifFooter : MJRefreshAutoStateFooter
14 | @property (weak, nonatomic, readonly) UIImageView *gifView;
15 |
16 | /** 设置state状态下的动画图片images 动画持续时间duration*/
17 | - (void)setImages:(NSArray *)images duration:(NSTimeInterval)duration forState:(MJRefreshState)state;
18 | - (void)setImages:(NSArray *)images forState:(MJRefreshState)state;
19 | @end
20 |
21 | NS_ASSUME_NONNULL_END
22 |
--------------------------------------------------------------------------------
/iMemScan/Lib/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.h:
--------------------------------------------------------------------------------
1 | //
2 | // MJRefreshBackGifFooter.h
3 | // MJRefreshExample
4 | //
5 | // Created by MJ Lee on 15/4/24.
6 | // Copyright (c) 2015年 小码哥. All rights reserved.
7 | //
8 |
9 | #import "MJRefreshBackStateFooter.h"
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @interface MJRefreshBackGifFooter : MJRefreshBackStateFooter
14 | @property (weak, nonatomic, readonly) UIImageView *gifView;
15 |
16 | /** 设置state状态下的动画图片images 动画持续时间duration*/
17 | - (void)setImages:(NSArray *)images duration:(NSTimeInterval)duration forState:(MJRefreshState)state;
18 | - (void)setImages:(NSArray *)images forState:(MJRefreshState)state;
19 | @end
20 |
21 | NS_ASSUME_NONNULL_END
22 |
--------------------------------------------------------------------------------
/iMemScan.xcodeproj/project.xcworkspace/xcuserdata/lilianglin.xcuserdatad/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | BuildLocationStyle
6 | UseAppPreferences
7 | CustomBuildLocationType
8 | RelativeToDerivedData
9 | DerivedDataLocationStyle
10 | Default
11 | IssueFilterStyle
12 | ShowActiveSchemeOnly
13 | LiveSourceIssuesEnabled
14 |
15 | ShowSharedSchemesAutomaticallyEnabled
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/iMemScan/Tool/Jailbreak/iMemScan.entitlements:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | platform-application
6 |
7 | get-task-allow
8 |
9 | task_for_pid-allow
10 |
11 | proc_info-allow
12 |
13 | run-unsigned-code
14 |
15 | com.apple.springboard.debugapplications
16 |
17 | application-identifier
18 | $(AppIdentifierPrefix)$(CFBundleIdentifier)
19 | com.apple.private.security.no-container
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/iMemScan/Lib/KakaJSON/Convert/ConvertibleEnum.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ConvertibleEnum.swift
3 | // KakaJSON
4 | //
5 | // Created by MJ Lee on 2019/8/13.
6 | // Copyright © 2019 MJ Lee. All rights reserved.
7 | //
8 |
9 | public protocol ConvertibleEnum {
10 | static func kj_convert(from value: Any) -> Self?
11 | var kj_value: Any { get }
12 | static var kj_valueType: Any.Type { get }
13 | }
14 |
15 | public extension RawRepresentable where Self: ConvertibleEnum {
16 | static func kj_convert(from value: Any) -> Self? {
17 | return (value as? RawValue).flatMap { Self.init(rawValue: $0) }
18 | }
19 | var kj_value: Any { return rawValue }
20 | static var kj_valueType: Any.Type { return RawValue.self }
21 | }
22 |
--------------------------------------------------------------------------------
/iMemScan/Lib/MJRefresh/MJRefresh.bundle/ko.lproj/Localizable.strings:
--------------------------------------------------------------------------------
1 | "MJRefreshHeaderIdleText" = "아래로 당겨 새로고침";
2 | "MJRefreshHeaderPullingText" = "놓으면 새로고침";
3 | "MJRefreshHeaderRefreshingText" = "로딩중...";
4 |
5 | "MJRefreshAutoFooterIdleText" = "탭 또는 위로 당겨 로드함";
6 | "MJRefreshAutoFooterRefreshingText" = "로딩중...";
7 | "MJRefreshAutoFooterNoMoreDataText" = "더이상 데이터 없음";
8 |
9 | "MJRefreshBackFooterIdleText" = "위로 당겨 더 로드 가능";
10 | "MJRefreshBackFooterPullingText" = "놓으면 더 로드됨.";
11 | "MJRefreshBackFooterRefreshingText" = "로딩중...";
12 | "MJRefreshBackFooterNoMoreDataText" = "더이상 데이터 없음";
13 |
14 | "MJRefreshHeaderLastTimeText" = "마지막 업데이트: ";
15 | "MJRefreshHeaderDateTodayText" = "오늘";
16 | "MJRefreshHeaderNoneLastDateText" = "기록 없음";
17 |
--------------------------------------------------------------------------------
/iMemScan/Lib/MJRefresh/Base/MJRefreshTrailer.h:
--------------------------------------------------------------------------------
1 | //
2 | // MJRefreshTrailer.h
3 | // MJRefresh
4 | //
5 | // Created by kinarobin on 2020/5/3.
6 | // Copyright © 2020 小码哥. All rights reserved.
7 | //
8 |
9 | #import "MJRefreshComponent.h"
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @interface MJRefreshTrailer : MJRefreshComponent
14 |
15 | /** 创建trailer*/
16 | + (instancetype)trailerWithRefreshingBlock:(MJRefreshComponentAction)refreshingBlock;
17 | /** 创建trailer */
18 | + (instancetype)trailerWithRefreshingTarget:(id)target refreshingAction:(SEL)action;
19 |
20 | /** 忽略多少scrollView的contentInset的right */
21 | @property (assign, nonatomic) CGFloat ignoredScrollViewContentInsetRight;
22 |
23 |
24 | @end
25 |
26 | NS_ASSUME_NONNULL_END
27 |
--------------------------------------------------------------------------------
/iMemScan/Ctrl/OneKey()/VMOneKeyModel.m:
--------------------------------------------------------------------------------
1 | //
2 | // VMOneKeyModel.m
3 | // MemView
4 | //
5 | // Created by HaoCold on 2020/9/28.
6 | // Copyright © 2020 HaoCold. All rights reserved.
7 | //
8 |
9 | #import "VMOneKeyModel.h"
10 |
11 | @implementation VMOneKeyModel
12 |
13 | - (instancetype)init
14 | {
15 | self = [super init];
16 | if (self) {
17 | _steps = @[].mutableCopy;
18 | }
19 | return self;
20 | }
21 |
22 | + (NSDictionary *)modelContainerPropertyGenericClass
23 | {
24 | return @{@"steps": [VMOneKeySubModel class]};
25 | }
26 |
27 | + (nullable NSArray *)modelPropertyBlacklist
28 | {
29 | return @[@"open"];
30 | }
31 |
32 | @end
33 |
34 | @implementation VMOneKeySubModel
35 |
36 | @end
37 |
--------------------------------------------------------------------------------
/iMemScan/Lib/MJRefresh/Custom/Header/MJRefreshNormalHeader.h:
--------------------------------------------------------------------------------
1 | //
2 | // MJRefreshNormalHeader.h
3 | // MJRefreshExample
4 | //
5 | // Created by MJ Lee on 15/4/24.
6 | // Copyright (c) 2015年 小码哥. All rights reserved.
7 | //
8 |
9 | #import "MJRefreshStateHeader.h"
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @interface MJRefreshNormalHeader : MJRefreshStateHeader
14 | @property (weak, nonatomic, readonly) UIImageView *arrowView;
15 | @property (weak, nonatomic, readonly) UIActivityIndicatorView *loadingView;
16 |
17 |
18 | /** 菊花的样式 */
19 | @property (assign, nonatomic) UIActivityIndicatorViewStyle activityIndicatorViewStyle MJRefreshDeprecated("first deprecated in 3.2.2 - Use `loadingView` property");
20 | @end
21 |
22 | NS_ASSUME_NONNULL_END
23 |
--------------------------------------------------------------------------------
/iMemScan/Lib/KakaJSON/Metadata/Type/StructType.swift:
--------------------------------------------------------------------------------
1 | //
2 | // StructType.swift
3 | // KakaJSON
4 | //
5 | // Created by MJ Lee on 2019/7/31.
6 | // Copyright © 2019 MJ Lee. All rights reserved.
7 | //
8 |
9 | public class StructType: ModelType, PropertyType, LayoutType {
10 | private(set) var layout: UnsafeMutablePointer!
11 |
12 | override func build() {
13 | super.build()
14 |
15 | layout = builtLayout()
16 | properties = builtProperties()
17 | genericTypes = builtGenericTypes()
18 | }
19 |
20 | override public var description: String {
21 | return "\(name) { kind = \(kind), properties = \(properties ?? []), genericTypes = \(genericTypes ?? []) }"
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/iMemScan/Lib/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.h:
--------------------------------------------------------------------------------
1 | //
2 | // MJRefreshBackNormalFooter.h
3 | // MJRefreshExample
4 | //
5 | // Created by MJ Lee on 15/4/24.
6 | // Copyright (c) 2015年 小码哥. All rights reserved.
7 | //
8 |
9 | #import "MJRefreshBackStateFooter.h"
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @interface MJRefreshBackNormalFooter : MJRefreshBackStateFooter
14 | @property (weak, nonatomic, readonly) UIImageView *arrowView;
15 | @property (weak, nonatomic, readonly) UIActivityIndicatorView *loadingView;
16 |
17 | /** 菊花的样式 */
18 | @property (assign, nonatomic) UIActivityIndicatorViewStyle activityIndicatorViewStyle MJRefreshDeprecated("first deprecated in 3.2.2 - Use `loadingView` property");
19 | @end
20 |
21 | NS_ASSUME_NONNULL_END
22 |
--------------------------------------------------------------------------------
/iMemScan/Lib/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.h:
--------------------------------------------------------------------------------
1 | //
2 | // MJRefreshBackStateFooter.h
3 | // MJRefreshExample
4 | //
5 | // Created by MJ Lee on 15/6/13.
6 | // Copyright © 2015年 小码哥. All rights reserved.
7 | //
8 |
9 | #import "MJRefreshBackFooter.h"
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @interface MJRefreshBackStateFooter : MJRefreshBackFooter
14 | /** 文字距离圈圈、箭头的距离 */
15 | @property (assign, nonatomic) CGFloat labelLeftInset;
16 | /** 显示刷新状态的label */
17 | @property (weak, nonatomic, readonly) UILabel *stateLabel;
18 | /** 设置state状态下的文字 */
19 | - (void)setTitle:(NSString *)title forState:(MJRefreshState)state;
20 |
21 | /** 获取state状态下的title */
22 | - (NSString *)titleForState:(MJRefreshState)state;
23 | @end
24 |
25 | NS_ASSUME_NONNULL_END
26 |
--------------------------------------------------------------------------------
/iMemScan/Assets.xcassets/color_4.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "srgb",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "1.000",
9 | "green" : "1.000",
10 | "red" : "1.000"
11 | }
12 | },
13 | "idiom" : "universal"
14 | },
15 | {
16 | "appearances" : [
17 | {
18 | "appearance" : "luminosity",
19 | "value" : "dark"
20 | }
21 | ],
22 | "color" : {
23 | "platform" : "ios",
24 | "reference" : "systemGray5Color"
25 | },
26 | "idiom" : "universal"
27 | }
28 | ],
29 | "info" : {
30 | "author" : "xcode",
31 | "version" : 1
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/iMemScan/Assets.xcassets/color_3.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "srgb",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "0.820",
9 | "green" : "0.820",
10 | "red" : "0.820"
11 | }
12 | },
13 | "idiom" : "universal"
14 | },
15 | {
16 | "appearances" : [
17 | {
18 | "appearance" : "luminosity",
19 | "value" : "dark"
20 | }
21 | ],
22 | "color" : {
23 | "platform" : "ios",
24 | "reference" : "opaqueSeparatorColor"
25 | },
26 | "idiom" : "universal"
27 | }
28 | ],
29 | "info" : {
30 | "author" : "xcode",
31 | "version" : 1
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/iMemScan/Lib/KakaJSON/Metadata/Layout/Layout.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Layout.swift
3 | // KakaJSON
4 | //
5 | // Created by MJ Lee on 2019/7/31.
6 | // Copyright © 2019 MJ Lee. All rights reserved.
7 | //
8 |
9 | /// Must be struct, do not use class
10 | /// Memory layout for metadata
11 | protocol Layout {
12 | // Only valid for non-class metadata
13 | var kind: UnsafeRawPointer { get }
14 | }
15 |
16 | protocol NominalLayout: Layout {
17 | associatedtype DescriptorType: NominalDescriptor
18 | var description: UnsafeMutablePointer { get }
19 | var genericTypeOffset: Int { get }
20 | }
21 |
22 | extension NominalLayout {
23 | var genericTypeOffset: Int { return 2 }
24 | }
25 |
26 | protocol ModelLayout: NominalLayout where DescriptorType: ModelDescriptor {}
27 |
--------------------------------------------------------------------------------
/iMemScan/Ctrl/OneKey/VMOneKeyModel.m:
--------------------------------------------------------------------------------
1 | //
2 | // VMOneKeyModel.m
3 | // MemView
4 | //
5 | // Created by HaoCold on 2020/9/28.
6 | // Copyright © 2020 HaoCold. All rights reserved.
7 | //
8 |
9 | #import "VMOneKeyModel.h"
10 |
11 | @implementation VMOneKeyGroupModel
12 |
13 | @end
14 |
15 | @implementation VMOneKeyModel
16 |
17 | - (instancetype)init
18 | {
19 | self = [super init];
20 | if (self) {
21 | _steps = @[].mutableCopy;
22 | }
23 | return self;
24 | }
25 |
26 | + (NSDictionary *)modelContainerPropertyGenericClass
27 | {
28 | return @{@"steps": [VMOneKeySubModel class]};
29 | }
30 |
31 | + (nullable NSArray *)modelPropertyBlacklist
32 | {
33 | return @[@"open"];
34 | }
35 |
36 | @end
37 |
38 | @implementation VMOneKeySubModel
39 |
40 | @end
41 |
--------------------------------------------------------------------------------
/iMemScan/Lib/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.h:
--------------------------------------------------------------------------------
1 | //
2 | // MJRefreshAutoStateFooter.h
3 | // MJRefreshExample
4 | //
5 | // Created by MJ Lee on 15/6/13.
6 | // Copyright © 2015年 小码哥. All rights reserved.
7 | //
8 |
9 | #import "MJRefreshAutoFooter.h"
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @interface MJRefreshAutoStateFooter : MJRefreshAutoFooter
14 | /** 文字距离圈圈、箭头的距离 */
15 | @property (assign, nonatomic) CGFloat labelLeftInset;
16 | /** 显示刷新状态的label */
17 | @property (weak, nonatomic, readonly) UILabel *stateLabel;
18 |
19 | /** 设置state状态下的文字 */
20 | - (void)setTitle:(NSString *)title forState:(MJRefreshState)state;
21 |
22 | /** 隐藏刷新状态的文字 */
23 | @property (assign, nonatomic, getter=isRefreshingTitleHidden) BOOL refreshingTitleHidden;
24 | @end
25 |
26 | NS_ASSUME_NONNULL_END
27 |
--------------------------------------------------------------------------------
/iMemScan/Lib/MJRefresh/MJRefresh.bundle/zh-Hant.lproj/Localizable.strings:
--------------------------------------------------------------------------------
1 | "MJRefreshHeaderIdleText" = "下拉可以刷新";
2 | "MJRefreshHeaderPullingText" = "鬆開立即刷新";
3 | "MJRefreshHeaderRefreshingText" = "正在刷新數據中...";
4 |
5 | "MJRefreshTrailerIdleText" = "滑動查看圖文詳情";
6 | "MJRefreshTrailerPullingText" = "釋放查看圖文詳情";
7 |
8 | "MJRefreshAutoFooterIdleText" = "點擊或上拉加載更多";
9 | "MJRefreshAutoFooterRefreshingText" = "正在加載更多的數據...";
10 | "MJRefreshAutoFooterNoMoreDataText" = "已經全部加載完畢";
11 |
12 | "MJRefreshBackFooterIdleText" = "上拉可以加載更多";
13 | "MJRefreshBackFooterPullingText" = "鬆開立即加載更多";
14 | "MJRefreshBackFooterRefreshingText" = "正在加載更多的數據...";
15 | "MJRefreshBackFooterNoMoreDataText" = "已經全部加載完畢";
16 |
17 | "MJRefreshHeaderLastTimeText" = "最後更新:";
18 | "MJRefreshHeaderDateTodayText" = "今天";
19 | "MJRefreshHeaderNoneLastDateText" = "無記錄";
20 |
--------------------------------------------------------------------------------
/iMemScan/Lib/KakaJSON/Metadata/Type/OptionalType.swift:
--------------------------------------------------------------------------------
1 | //
2 | // OptionalType.swift
3 | // KakaJSON
4 | //
5 | // Created by MJ Lee on 2019/8/2.
6 | // Copyright © 2019 MJ Lee. All rights reserved.
7 | //
8 |
9 | /// Optional metadata share the same basic layout as enum metadata
10 | public class OptionalType: EnumType {
11 | public private(set) var wrapType: Any.Type = Any.self
12 |
13 | override func build() {
14 | super.build()
15 |
16 | var wt: BaseType! = self
17 | while wt.kind == .optional {
18 | wt = Metadata.type((wt as! OptionalType).genericTypes![0])
19 | }
20 | wrapType = wt.type
21 | }
22 |
23 | override public var description: String {
24 | return "\(name) { kind = \(kind), wrapType = \(wrapType) }"
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/iMemScan/Lib/MJRefresh/UIView+MJExtension.h:
--------------------------------------------------------------------------------
1 | // 代码地址: https://github.com/CoderMJLee/MJRefresh
2 | // 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
3 | // UIView+Extension.h
4 | // MJRefreshExample
5 | //
6 | // Created by MJ Lee on 14-5-28.
7 | // Copyright (c) 2014年 小码哥. All rights reserved.
8 | //
9 |
10 | #import
11 |
12 | NS_ASSUME_NONNULL_BEGIN
13 |
14 | @interface UIView (MJExtension)
15 | @property (assign, nonatomic) CGFloat mj_x;
16 | @property (assign, nonatomic) CGFloat mj_y;
17 | @property (assign, nonatomic) CGFloat mj_w;
18 | @property (assign, nonatomic) CGFloat mj_h;
19 | @property (assign, nonatomic) CGSize mj_size;
20 | @property (assign, nonatomic) CGPoint mj_origin;
21 | @end
22 |
23 | NS_ASSUME_NONNULL_END
24 |
--------------------------------------------------------------------------------
/iMemScan/Lib/UIColor/Utils.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Utils.swift
3 | // ControlBoardSwift
4 | //
5 | // Created by 李良林 on 2020/11/21.
6 | // Copyright © 2020 李良林. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import UIKit
11 |
12 | extension UIColor {
13 | convenience init(rgb: UInt) {
14 | self.init(red: CGFloat((rgb & 0xFF0000) >> 16) / 255.0, green: CGFloat((rgb & 0x00FF00) >> 8) / 255.0, blue: CGFloat(rgb & 0x0000FF) / 255.0, alpha: CGFloat(1.0))
15 | }
16 |
17 | static func dynamicColor(_ lightColor: UIColor, darkColor: UIColor? = UIColor.white) -> UIColor {
18 | return UIColor.init { (traitCollection) -> UIColor in
19 | if traitCollection.userInterfaceStyle == .light {
20 | return lightColor
21 | }else{
22 | return darkColor!
23 | }
24 | }
25 | }
26 | }
27 |
28 |
29 |
--------------------------------------------------------------------------------
/iMemScan/Lib/mem/search_result.h:
--------------------------------------------------------------------------------
1 | //
2 | // search_result.h
3 | // mem
4 | //
5 | // Created by Liu Junqi on 3/27/18.
6 | // Copyright © 2018 DeviLeo. All rights reserved.
7 | //
8 |
9 | #ifndef search_result_h
10 | #define search_result_h
11 |
12 | #include
13 | #include
14 | #include "search_result_def.h"
15 |
16 | search_result_chain_t create_search_result_chain(mach_vm_address_t address, void *value, int size, int type, int protection);
17 | void destroy_search_result_chain(search_result_chain_t chain);
18 | void destroy_all_search_result_chain(search_result_chain_t chain);
19 | void show_search_result_chain(search_result_chain_t chain);
20 | int compare_value(void *value1, int size1, void *value2, int size2, int type);
21 | int size_of_type(int type);
22 | void *value_of_type(const char *value_str, int type, int *value_size);
23 |
24 | #endif /* search_result_h */
25 |
--------------------------------------------------------------------------------
/iMemScan/Lib/KakaJSON/Global/JSON.swift:
--------------------------------------------------------------------------------
1 | //
2 | // JSON.swift
3 | // KakaJSON
4 | //
5 | // Created by MJ Lee on 2019/8/2.
6 | // Copyright © 2019 MJ Lee. All rights reserved.
7 | //
8 |
9 | // MARK: Model -> JSON
10 | public func JSONObject(from model: M) -> [String: Any] {
11 | return model.kj_JSONObject()
12 | }
13 |
14 | public func JSONObjectArray(from models: [M]) -> [[String: Any]] {
15 | return models.kj.JSONObjectArray()
16 | }
17 |
18 | //public func JSONArray(from value: [Any]) -> [Any] {
19 | // return value.kj.JSONArray()
20 | //}
21 | //
22 | //public func JSON(from value: Any) -> Any? {
23 | // return Values.JSONValue(value)
24 | //}
25 |
26 | public func JSONString(from value: Any,
27 | prettyPrinted: Bool = false) -> String {
28 | return Values.JSONString(value, prettyPrinted: prettyPrinted) ?? ""
29 | }
30 |
--------------------------------------------------------------------------------
/Makefile:
--------------------------------------------------------------------------------
1 | TARGET_CODESIGN = $(shell which ldid)
2 | TARGET_DPKG = $(shell which dpkg)
3 |
4 | APP_TMP = $(TMPDIR)/iMemScan-build
5 | APP_BUNDLE_PATH = $(APP_TMP)/Build/Products/Release-iphoneos/iMemScan.app
6 |
7 | all:
8 | xcodebuild -quiet -jobs $(shell sysctl -n hw.ncpu) -project 'iMemScan.xcodeproj' -scheme iMemScan -configuration Release -arch arm64 -sdk iphoneos -derivedDataPath $(APP_TMP) \
9 | CODE_SIGNING_ALLOWED=NO DSTROOT=$(APP_TMP)/install
10 |
11 | ldid -Sentitlements.plist $(APP_BUNDLE_PATH)/iMemScan
12 | rm -rf build
13 | mkdir -p build/Payload
14 |
15 | mv $(APP_BUNDLE_PATH) build/Payload
16 |
17 | # make TrollStore tipa
18 | @ln -sf build/Payload Payload
19 | zip -r9 iMemScanTS.tipa Payload
20 | @rm -rf Payload
21 |
22 | # lol
23 | find . -name ".DS_Store" -delete
24 |
25 | @rm -rf build
26 |
27 | @echo TrollStore .tipa written to build/iMemScanTS.tipa
28 |
--------------------------------------------------------------------------------
/iMemScan/Assets.xcassets/color_2.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "srgb",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "1.000",
9 | "green" : "1.000",
10 | "red" : "1.000"
11 | }
12 | },
13 | "idiom" : "universal"
14 | },
15 | {
16 | "appearances" : [
17 | {
18 | "appearance" : "luminosity",
19 | "value" : "dark"
20 | }
21 | ],
22 | "color" : {
23 | "color-space" : "srgb",
24 | "components" : {
25 | "alpha" : "1.000",
26 | "blue" : "0.000",
27 | "green" : "0.000",
28 | "red" : "0.000"
29 | }
30 | },
31 | "idiom" : "universal"
32 | }
33 | ],
34 | "info" : {
35 | "author" : "xcode",
36 | "version" : 1
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/iMemScan/Assets.xcassets/color_1.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "srgb",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "0.000",
9 | "green" : "0.000",
10 | "red" : "0.000"
11 | }
12 | },
13 | "idiom" : "universal"
14 | },
15 | {
16 | "appearances" : [
17 | {
18 | "appearance" : "luminosity",
19 | "value" : "dark"
20 | }
21 | ],
22 | "color" : {
23 | "color-space" : "extended-srgb",
24 | "components" : {
25 | "alpha" : "1.000",
26 | "blue" : "0.820",
27 | "green" : "0.820",
28 | "red" : "0.820"
29 | }
30 | },
31 | "idiom" : "universal"
32 | }
33 | ],
34 | "info" : {
35 | "author" : "xcode",
36 | "version" : 1
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/iMemScan/Lib/MJRefresh/Custom/Header/MJRefreshStateHeader.h:
--------------------------------------------------------------------------------
1 | //
2 | // MJRefreshStateHeader.h
3 | // MJRefreshExample
4 | //
5 | // Created by MJ Lee on 15/4/24.
6 | // Copyright (c) 2015年 小码哥. All rights reserved.
7 | //
8 |
9 | #import "MJRefreshHeader.h"
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @interface MJRefreshStateHeader : MJRefreshHeader
14 | #pragma mark - 刷新时间相关
15 | /** 利用这个block来决定显示的更新时间文字 */
16 | @property (copy, nonatomic, nullable) NSString *(^lastUpdatedTimeText)(NSDate * _Nullable lastUpdatedTime);
17 | /** 显示上一次刷新时间的label */
18 | @property (weak, nonatomic, readonly) UILabel *lastUpdatedTimeLabel;
19 |
20 | #pragma mark - 状态相关
21 | /** 文字距离圈圈、箭头的距离 */
22 | @property (assign, nonatomic) CGFloat labelLeftInset;
23 | /** 显示刷新状态的label */
24 | @property (weak, nonatomic, readonly) UILabel *stateLabel;
25 | /** 设置state状态下的文字 */
26 | - (void)setTitle:(NSString *)title forState:(MJRefreshState)state;
27 | @end
28 |
29 | NS_ASSUME_NONNULL_END
30 |
--------------------------------------------------------------------------------
/iMemScan/en.lproj/Localizable.strings:
--------------------------------------------------------------------------------
1 | /*
2 | Localizable.strings
3 | iMemScan
4 |
5 | Created by yiming on 2021/8/19.
6 |
7 | */
8 |
9 | "授权状态" = "VIP status";
10 | "设备已冻结" = "Ban";
11 | "设备标识" = "Serial number";
12 | "购买授权" = "Buy VIP";
13 | "版本" = "Version";
14 | "卸载应用" = "Uninstall app";
15 | "信息" = "Info";
16 | "购买" = "Buy";
17 | "卸载" = "Uninstall";
18 | "暂无更新" = "Update isn’t available";
19 | "您当前版本无需更新" = "You are using latest version";
20 | "确定要卸载本应用吗?" = "Are you sure you want to uninstall this app?";
21 | "确定卸载" = "Complete Uninstallation";
22 | "取消" = "Cancel";
23 | "复制设备码成功" = "Copy device code successfully";
24 | "modify Value" = "Modify Value %@";
25 | "modifyValueRecord" = "Modify Value %@";
26 | "Complete change" = "Save";
27 | "Nearby Search" = "<>";
28 | "Nearby" = "Search range";
29 | "Add to" = "Add";
30 | "Select First Half" = " < ";
31 | "Select Second Half" = " > ";
32 | "Numeric Search" = "Search";
33 | "Value Search" = "Search";
34 |
--------------------------------------------------------------------------------
/iMemScan/Lib/MJRefresh/Base/MJRefreshAutoFooter.h:
--------------------------------------------------------------------------------
1 | //
2 | // MJRefreshAutoFooter.h
3 | // MJRefreshExample
4 | //
5 | // Created by MJ Lee on 15/4/24.
6 | // Copyright (c) 2015年 小码哥. All rights reserved.
7 | //
8 |
9 | #import "MJRefreshFooter.h"
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @interface MJRefreshAutoFooter : MJRefreshFooter
14 | /** 是否自动刷新(默认为YES) */
15 | @property (assign, nonatomic, getter=isAutomaticallyRefresh) BOOL automaticallyRefresh;
16 |
17 | /** 当底部控件出现多少时就自动刷新(默认为1.0,也就是底部控件完全出现时,才会自动刷新) */
18 | @property (assign, nonatomic) CGFloat appearencePercentTriggerAutoRefresh MJRefreshDeprecated("请使用triggerAutomaticallyRefreshPercent属性");
19 |
20 | /** 当底部控件出现多少时就自动刷新(默认为1.0,也就是底部控件完全出现时,才会自动刷新) */
21 | @property (assign, nonatomic) CGFloat triggerAutomaticallyRefreshPercent;
22 |
23 | /** 自动触发次数, 默认为 1, 仅在拖拽 ScrollView 时才生效,
24 |
25 | 如果为 -1, 则为无限触发
26 | */
27 | @property (nonatomic) NSInteger autoTriggerTimes;
28 | @end
29 |
30 | NS_ASSUME_NONNULL_END
31 |
--------------------------------------------------------------------------------
/iMemScan/Lib/KakaJSON/Convert/TypeProxy.swift:
--------------------------------------------------------------------------------
1 | //
2 | // TypeProxy.swift
3 | // KakaJSON
4 | //
5 | // Created by MJ Lee on 2019/8/13.
6 | // Copyright © 2019 MJ Lee. All rights reserved.
7 | //
8 |
9 | protocol TypeProxy: Convertible {}
10 |
11 | extension TypeProxy {
12 | static func `is`(_ value: Any) -> Bool {
13 | return value is Self
14 | }
15 |
16 | static func `is`(_ type: Any.Type) -> Bool {
17 | return type is Self.Type
18 | }
19 |
20 | static func `as`(_ value: Any) -> Self? {
21 | return value as? Self
22 | }
23 |
24 | static func `as`(_ type: Any.Type) -> Self.Type? {
25 | return type as? Self.Type
26 | }
27 | }
28 |
29 | func typeProxy(_ type: Any.Type) -> TypeProxy.Type {
30 | // Any.Type(8 bytes) + Int(8 bytes) == Protocol.Type(16 bytes)
31 | return (type, 0) ~>> TypeProxy.Type.self
32 | }
33 |
34 | typealias TypeKey = UInt
35 | func typeKey(_ type: Any.Type) -> TypeKey {
36 | return type ~>> TypeKey.self
37 | }
38 |
--------------------------------------------------------------------------------
/iMemScan/flexdecrypt.entitlements:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | application-identifier
6 | -
7 | com.apple.developer.team-identifier
8 | -
9 | com.apple.diagnosticd.diagnostic
10 |
11 | com.apple.frontboard.debugapplications
12 |
13 | com.apple.multitasking.termination
14 |
15 | com.apple.private.cs.debugger
16 |
17 | com.apple.private.security.no-sandbox
18 |
19 | com.apple.private.skip-library-validation
20 |
21 | com.apple.springboard.launchapplications
22 |
23 | dynamic-codesigning
24 |
25 | get-task-allow
26 |
27 | platform-application
28 |
29 | task_for_pid-allow
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/iMemScan/Lib/MJRefresh/UIScrollView+MJExtension.h:
--------------------------------------------------------------------------------
1 | // 代码地址: https://github.com/CoderMJLee/MJRefresh
2 | // 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
3 | // UIScrollView+Extension.h
4 | // MJRefreshExample
5 | //
6 | // Created by MJ Lee on 14-5-28.
7 | // Copyright (c) 2014年 小码哥. All rights reserved.
8 | //
9 |
10 | #import
11 |
12 | NS_ASSUME_NONNULL_BEGIN
13 |
14 | @interface UIScrollView (MJExtension)
15 | @property (readonly, nonatomic) UIEdgeInsets mj_inset;
16 |
17 | @property (assign, nonatomic) CGFloat mj_insetT;
18 | @property (assign, nonatomic) CGFloat mj_insetB;
19 | @property (assign, nonatomic) CGFloat mj_insetL;
20 | @property (assign, nonatomic) CGFloat mj_insetR;
21 |
22 | @property (assign, nonatomic) CGFloat mj_offsetX;
23 | @property (assign, nonatomic) CGFloat mj_offsetY;
24 |
25 | @property (assign, nonatomic) CGFloat mj_contentW;
26 | @property (assign, nonatomic) CGFloat mj_contentH;
27 | @end
28 |
29 | NS_ASSUME_NONNULL_END
30 |
--------------------------------------------------------------------------------
/iMemScan/Ctrl/OneKey/VMOneKeyTool.h:
--------------------------------------------------------------------------------
1 | //
2 | // VMOneKeyTool.h
3 | // MemView
4 | //
5 | // Created by HaoCold on 2020/9/29.
6 | // Copyright © 2020 HaoCold. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @class VMOneKeyModel;
14 | @class VMOneKeyGroupModel;
15 |
16 | typedef NS_ENUM(NSUInteger, VMOneKeyType) {
17 | VMOneKeyType_Record, // 记录
18 | VMOneKeyType_Group, // 组
19 | };
20 |
21 | @interface VMOneKeyTool : NSObject
22 |
23 | + (void)setup;
24 |
25 | + (void)saveAll;
26 | + (NSArray *)allRecords:(VMOneKeyType)type;
27 | + (void)save:(VMOneKeyType)type;
28 | + (void)exchange:(NSInteger)idx1 index:(NSInteger)idx2 type:(VMOneKeyType)type;
29 |
30 | // ================== 脚本 ==================
31 | + (void)deleteRecord:(VMOneKeyModel *)model;
32 | + (void)saveRecord:(VMOneKeyModel *)model;
33 |
34 | // ================== 组 ==================
35 | + (void)deleteGroup:(VMOneKeyGroupModel *)model;
36 | + (void)saveGroup:(VMOneKeyGroupModel *)model;
37 |
38 | @end
39 |
40 | NS_ASSUME_NONNULL_END
41 |
--------------------------------------------------------------------------------
/iMemScan/Tool/VMem/MemModel.h:
--------------------------------------------------------------------------------
1 | //
2 | // MemModel.h
3 | // ViewMem
4 | //
5 | // Created by HaoCold on 2020/8/27.
6 | // Copyright © 2020 HaoCold. All rights reserved.
7 | //
8 |
9 | #import
10 | #import "VMTypeHeader.h"
11 |
12 | NS_ASSUME_NONNULL_BEGIN
13 |
14 | @interface MemModel : NSObject
15 |
16 | @property (nonatomic) UInt64 o_addr;
17 | @property (nonatomic, copy) NSString *address;
18 | @property (nonatomic, copy) NSString *value;
19 | @property (nonatomic, copy) NSString *key;
20 | @property (nonatomic, assign) VMMemValueType type;
21 |
22 | // ===== 部分修改使用 =====
23 | @property (nonatomic, assign) BOOL selected;
24 | @property (nonatomic, assign) NSInteger index;
25 |
26 | // ===== 储存记录使用 =====
27 | @property (nonatomic, copy) NSString *recordName;
28 |
29 | // ===== 查看内存使用 =====
30 | @property (nonatomic, assign) VMMemValueType valueType;
31 | @property (nonatomic, copy) NSString *value_16;
32 | @property (nonatomic, copy) NSString *value_10;
33 |
34 |
35 | - (MemModel *)clone;
36 |
37 | @end
38 |
39 | NS_ASSUME_NONNULL_END
40 |
--------------------------------------------------------------------------------
/iMemScan/Lib/Categories/UIView+CGRect.h:
--------------------------------------------------------------------------------
1 | //
2 | // UIView+CGRect.h
3 | // MemModify
4 | //
5 | // Created by HaoCold on 2020/6/19.
6 | // Copyright © 2020 HaoCold. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @interface UIView (CGRect)
14 | @property (nonatomic) CGFloat left; ///< Shortcut for frame.origin.x.
15 | @property (nonatomic) CGFloat top; ///< Shortcut for frame.origin.y
16 | @property (nonatomic) CGFloat right; ///< Shortcut for frame.origin.x + frame.size.width
17 | @property (nonatomic) CGFloat bottom; ///< Shortcut for frame.origin.y + frame.size.height
18 | @property (nonatomic) CGFloat width; ///< Shortcut for frame.size.width.
19 | @property (nonatomic) CGFloat height; ///< Shortcut for frame.size.height.
20 | @property (nonatomic) CGFloat centerX; ///< Shortcut for center.x
21 | @property (nonatomic) CGFloat centerY; ///< Shortcut for center.y
22 | @property (nonatomic) CGPoint origin; ///< Shortcut for frame.origin.
23 | @property (nonatomic) CGSize size; ///< Shortcut for frame.size.
24 | @end
25 |
26 | NS_ASSUME_NONNULL_END
27 |
--------------------------------------------------------------------------------
/iMemScan/Lib/KakaJSON/Extension/JSONSerialization+KJ.swift:
--------------------------------------------------------------------------------
1 | //
2 | // JSONSerialization+KJ.swift
3 | // KakaJSON
4 | //
5 | // Created by MJ Lee on 2019/8/2.
6 | // Copyright © 2019 MJ Lee. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | extension JSONSerialization {
12 | static func kj_JSON(_ string: String, _ type: T.Type) -> T? {
13 | return string.data(using: .utf8).flatMap { kj_JSON($0, type) }
14 | }
15 |
16 | static func kj_JSON(_ data: Data, _ type: T.Type) -> T? {
17 | return try? jsonObject(with: data,
18 | options: .allowFragments) as? T
19 | }
20 |
21 | static func kj_string(_ json: Any?,
22 | prettyPrinted: Bool = false) -> String? {
23 | guard let value = json.kj_value else { return nil }
24 | guard value is [Any] || value is [String: Any] else {
25 | return "\(value)"
26 | }
27 | guard let data = try? data(withJSONObject: value,
28 | options: prettyPrinted ? [.prettyPrinted] : [])
29 | else { return nil }
30 | return String(data: data, encoding: .utf8)
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/iMemScan/Lib/KakaJSON/Metadata/Type/EnumType.swift:
--------------------------------------------------------------------------------
1 | //
2 | // EnumType.swift
3 | // KakaJSON
4 | //
5 | // Created by MJ Lee on 2019/7/31.
6 | // Copyright © 2019 MJ Lee. All rights reserved.
7 | //
8 |
9 | public class EnumType: BaseType, NominalType, LayoutType {
10 | private(set) var layout: UnsafeMutablePointer!
11 | public private(set) var genericTypes: [Any.Type]?
12 | public private(set) var cases: [String]?
13 |
14 | override func build() {
15 | super.build()
16 |
17 | layout = builtLayout()
18 | genericTypes = builtGenericTypes()
19 |
20 | let description = layout.pointee.description
21 | let count = Int(description.pointee.numEmptyCases)
22 | guard count > 0 else { return }
23 | let descriptor = description.pointee.fields.advanced()
24 | cases = (0..=
30 | VMMemComparisonGT, // >
31 | } VMMemComparison;
32 |
33 | typedef enum : NSUInteger {
34 | VMMemSearchType_1 = 1, // 1
35 | VMMemSearchType_2 = 2, // 2
36 | VMMemSearchType_4 = 4, // 4
37 | VMMemSearchType_8 = 8, // 8
38 | } VMMemSearchType;
39 |
40 | #endif /* VMTypeHeader_h */
41 |
--------------------------------------------------------------------------------
/iMemScan/Lib/MJRefresh/UIScrollView+MJRefresh.h:
--------------------------------------------------------------------------------
1 | // 代码地址: https://github.com/CoderMJLee/MJRefresh
2 | // 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
3 | // UIScrollView+MJRefresh.h
4 | // MJRefreshExample
5 | //
6 | // Created by MJ Lee on 15/3/4.
7 | // Copyright (c) 2015年 小码哥. All rights reserved.
8 | // 给ScrollView增加下拉刷新、上拉刷新、 左滑刷新的功能
9 |
10 | #import
11 | #import "MJRefreshConst.h"
12 |
13 | @class MJRefreshHeader, MJRefreshFooter, MJRefreshTrailer;
14 |
15 | NS_ASSUME_NONNULL_BEGIN
16 |
17 | @interface UIScrollView (MJRefresh)
18 | /** 下拉刷新控件 */
19 | @property (strong, nonatomic, nullable) MJRefreshHeader *mj_header;
20 | @property (strong, nonatomic, nullable) MJRefreshHeader *header MJRefreshDeprecated("使用mj_header");
21 | /** 上拉刷新控件 */
22 | @property (strong, nonatomic, nullable) MJRefreshFooter *mj_footer;
23 | @property (strong, nonatomic, nullable) MJRefreshFooter *footer MJRefreshDeprecated("使用mj_footer");
24 |
25 | /** 左滑刷新控件 */
26 | @property (strong, nonatomic, nullable) MJRefreshTrailer *mj_trailer;
27 |
28 | #pragma mark - other
29 | - (NSInteger)mj_totalDataCount;
30 |
31 | @end
32 |
33 | NS_ASSUME_NONNULL_END
34 |
--------------------------------------------------------------------------------
/iMemScan/Lib/MJRefresh/Base/MJRefreshHeader.h:
--------------------------------------------------------------------------------
1 | // 代码地址: https://github.com/CoderMJLee/MJRefresh
2 | // 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
3 | // MJRefreshHeader.h
4 | // MJRefreshExample
5 | //
6 | // Created by MJ Lee on 15/3/4.
7 | // Copyright (c) 2015年 小码哥. All rights reserved.
8 | // 下拉刷新控件:负责监控用户下拉的状态
9 |
10 | #import "MJRefreshComponent.h"
11 |
12 | NS_ASSUME_NONNULL_BEGIN
13 |
14 | @interface MJRefreshHeader : MJRefreshComponent
15 | /** 创建header */
16 | + (instancetype)headerWithRefreshingBlock:(MJRefreshComponentAction)refreshingBlock;
17 | /** 创建header */
18 | + (instancetype)headerWithRefreshingTarget:(id)target refreshingAction:(SEL)action;
19 |
20 | /** 这个key用来存储上一次下拉刷新成功的时间 */
21 | @property (copy, nonatomic) NSString *lastUpdatedTimeKey;
22 | /** 上一次下拉刷新成功的时间 */
23 | @property (strong, nonatomic, readonly, nullable) NSDate *lastUpdatedTime;
24 |
25 | /** 忽略多少scrollView的contentInset的top */
26 | @property (assign, nonatomic) CGFloat ignoredScrollViewContentInsetTop;
27 |
28 | /** 默认是关闭状态, 如果遇到 CollectionView 的动画异常问题可以尝试打开 */
29 | @property (nonatomic) BOOL isCollectionViewAnimationBug;
30 | @end
31 |
32 | NS_ASSUME_NONNULL_END
33 |
--------------------------------------------------------------------------------
/iMemScan/Lib/KakaJSON/Metadata/Property.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Property.swift
3 | // KakaJSON
4 | //
5 | // Created by MJ Lee on 2019/7/30.
6 | // Copyright © 2019 MJ Lee. All rights reserved.
7 | //
8 |
9 | /// Info for stored property(存储属性的相关信息)
10 | public class Property: CustomStringConvertible {
11 | public let name: String
12 | public let type: Any.Type
13 | public private(set) lazy var dataType: Any.Type = type~!
14 | public let isVar: Bool
15 | public let offset: Int
16 | public let ownerType: Any.Type
17 |
18 | init(name: String, type: Any.Type,
19 | isVar: Bool, offset: Int,
20 | ownerType: Any.Type) {
21 | self.name = name
22 | self.type = type
23 | self.isVar = isVar
24 | self.offset = offset
25 | self.ownerType = ownerType
26 | }
27 |
28 | func set(_ value: Any, for model: UnsafeMutableRawPointer) {
29 | (model + offset).kj_set(value, type)
30 | }
31 |
32 | func get(from model: UnsafeMutableRawPointer) -> Any {
33 | return (model + offset).kj_get(type)
34 | }
35 |
36 | public var description: String {
37 | return "\(name) { type = \(type), isVar = \(isVar), offset = \(offset), ownerType = \(ownerType) }"
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/iMemScan/Lib/KakaJSON/Metadata/Type/FunctionType.swift:
--------------------------------------------------------------------------------
1 | //
2 | // FunctionType.swift
3 | // KakaJSON
4 | //
5 | // Created by MJ Lee on 2019/8/1.
6 | // Copyright © 2019 MJ Lee. All rights reserved.
7 | //
8 |
9 | public class FunctionType: BaseType, LayoutType {
10 | private(set) var layout: UnsafeMutablePointer!
11 | public private(set) var `throws`: Bool = false
12 | public private(set) var returnType: Any.Type = Any.self
13 | public private(set) var argumentTypes: [Any.Type]?
14 |
15 | override func build() {
16 | super.build()
17 |
18 | layout = builtLayout()
19 |
20 | `throws` = (layout.pointee.flags & 0x01000000) != 0
21 | returnType = layout.pointee.parameters.item(0)
22 |
23 | let argumentsCount = layout.pointee.flags & 0x00FFFFFF
24 | guard argumentsCount > 0 else { return }
25 | var arr = [Any.Type]()
26 | for i in 1...argumentsCount {
27 | arr.append(layout.pointee.parameters.item(i))
28 | }
29 | argumentTypes = arr
30 | }
31 |
32 | override public var description: String {
33 | return "\(name) { kind = \(kind), argumentTypes = \(argumentTypes ?? []), returnType = \(returnType), throws = \(`throws`) }"
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/iMemScan/Lib/KakaJSON/Metadata/Type/TupleType.swift:
--------------------------------------------------------------------------------
1 | //
2 | // TupleType.swift
3 | // KakaJSON
4 | //
5 | // Created by MJ Lee on 2019/8/1.
6 | // Copyright © 2019 MJ Lee. All rights reserved.
7 | //
8 |
9 | public class TupleType: BaseType, LayoutType {
10 | private(set) var layout: UnsafeMutablePointer!
11 | public private(set) var properties: [Property]!
12 |
13 | override func build() {
14 | super.build()
15 |
16 | layout = builtLayout()
17 |
18 | let elementsCount = layout.pointee.numElements
19 | guard elementsCount > 0 else { return }
20 | var names: [String]
21 | if layout.pointee.labels ~>> Int.self == 0 {
22 | names = Array(repeating: "", count: elementsCount)
23 | } else {
24 | names = String(cString: layout.pointee.labels).components(separatedBy: " ")
25 | }
26 | properties = (0..
18 |
19 | /// A pointer to the metadata access function for this type
20 | let accessFunctionPtr: RelativeDirectPointer
21 |
22 | /// A pointer to the field descriptor for the type, if any
23 | var fields: RelativeDirectPointer
24 |
25 | /// The number of stored properties in the struct. If there is a field offset vector, this is its length
26 | let numFields: UInt32
27 |
28 | /// The offset of the field offset vector for this struct's stored properties in its metadata, if any. 0 means there is no field offset vector
29 | let fieldOffsetVectorOffset: FieldOffsetPointer
30 |
31 | let genericContextHeader: TargetTypeGenericContextDescriptorHeader
32 | }
33 |
--------------------------------------------------------------------------------
/iMemScan/Lib/KakaJSON/Metadata/Type/ClassType.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ClassType.swift
3 | // KakaJSON
4 | //
5 | // Created by MJ Lee on 2019/7/31.
6 | // Copyright © 2019 MJ Lee. All rights reserved.
7 | //
8 |
9 | public class ClassType: ModelType, PropertyType, LayoutType {
10 | private(set) var layout: UnsafeMutablePointer!
11 | public private(set) var `super`: ClassType?
12 | // public private(set) var isPureSwiftClass: Bool = false
13 |
14 | override func build() {
15 | super.build()
16 |
17 | layout = builtLayout()
18 | genericTypes = builtGenericTypes()
19 | properties = builtProperties()
20 |
21 | `super` = Metadata.type(layout.pointee.superclass) as? ClassType
22 | if let superProperties = `super`?.properties {
23 | properties = properties ?? []
24 | properties!.insert(contentsOf: superProperties, at: 0)
25 | }
26 |
27 | /// Not sure
28 | // isPureSwiftClass = (layout.pointee.rodata ~>> UnsafePointer.self).pointee > 0
29 | }
30 |
31 | override public var description: String {
32 | return "\(name) { kind = \(kind), properties = \(properties ?? []), genericTypes = \(genericTypes ?? []), super = \(`super` != nil ? String(describing: `super`!) : "nil") }"
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/iMemScan/Lib/KakaJSON/Metadata/Type/BaseType.swift:
--------------------------------------------------------------------------------
1 | //
2 | // BaseType.swift
3 | // KakaJSON
4 | //
5 | // Created by MJ Lee on 2019/7/30.
6 | // Copyright © 2019 MJ Lee. All rights reserved.
7 | //
8 |
9 | /// Info for type(类型的相关信息)
10 | public class BaseType: Type, CustomStringConvertible {
11 | public let name: String
12 | public let type: Any.Type
13 | public let kind: Kind
14 | public private(set) var module: String = ""
15 | public private(set) var isSystemModule: Bool = false
16 |
17 | required init(name: String, type: Any.Type, kind: Kind) {
18 | self.name = name
19 | self.type = type
20 | self.kind = kind
21 |
22 | build()
23 | }
24 |
25 | func build() {
26 | switch kind {
27 | case .optional, .struct, .class, .existential,
28 | .enum, .objCClassWrapper, .foreignClass:
29 | let name = String(reflecting: type)
30 | guard let end = name.firstIndex(of: ".") else { break }
31 | module = String(name[name.startIndex.. Bool {
14 | // 判断 iPhone/iPad
15 | var _isIdiomPhone = true // 默认是iPhone
16 | let currentDevice = UIDevice.current
17 |
18 | if currentDevice.userInterfaceIdiom == .phone {
19 | // iPhone
20 | _isIdiomPhone = true
21 | } else if currentDevice.userInterfaceIdiom == .pad {
22 | // iPad
23 | _isIdiomPhone = false
24 | }
25 |
26 | return _isIdiomPhone
27 | }
28 |
29 | // class func rootRemoval() -> String? {
30 | //
31 | // /*
32 | // UniqueDeviceID
33 | // WifiAddress
34 | // BluetoothAddress
35 | // SerialNumber
36 | // */
37 | //
38 | // let gestalt = dlopen(VMImage.r1, RTLD_GLOBAL | RTLD_LAZY)
39 | // typealias MGCopyAnswerFunc = @convention(c) (CFString) -> CFString
40 | // let MGCopyAnswer = unsafeBitCast(dlsym(gestalt, VMImage.r2), to: MGCopyAnswerFunc.self)
41 | //
42 | // return MGCopyAnswer(VMImage.r3 as CFString) as String
43 | // }
44 |
45 |
46 | }
47 |
--------------------------------------------------------------------------------
/iMemScan/Lib/mem/mem.h:
--------------------------------------------------------------------------------
1 | //
2 | // mem.h
3 | // mem
4 | //
5 | // Created by Liu Junqi on 3/23/18.
6 | // Copyright © 2018 DeviLeo. All rights reserved.
7 | //
8 |
9 | #ifndef mem_h
10 | #define mem_h
11 |
12 | #include
13 | #include
14 | #include
15 | #include
16 | #include
17 | #include
18 | #include
19 | #include
20 | #include "search_result.h"
21 | #import
22 |
23 | void all_processes(int uid);
24 | mach_port_t get_task(int pid, NSString* name);
25 | vm_map_offset_t get_base_address(mach_port_t task);
26 | void read_mem(mach_port_t task);
27 | void *read_range_mem(mach_port_t task, mach_vm_address_t address, int forward, int backward, mach_vm_address_t *ret_address, mach_vm_size_t *ret_data_size);
28 | int write_mem(mach_port_t task, mach_vm_address_t address, void *value, int size);
29 | void print_mem(void *data, mach_vm_size_t data_size);
30 |
31 | void review_mem_in_chain(mach_port_t task, search_result_chain_t chain);
32 | search_result_chain_t search_mem(mach_port_t task, void *value, int size, int type, int comparison, search_result_chain_t chain, int *length);
33 | search_result_chain_t near_mem_search_func(mach_port_t task,void *value,int size,int type,search_result_chain_t chain,int *length,int range);
34 |
35 | #endif /* mem_h */
36 |
--------------------------------------------------------------------------------
/iMemScan/Lib/KakaJSON/Metadata/Descriptor/EnumDescriptor.swift:
--------------------------------------------------------------------------------
1 | //
2 | // EnumDescriptor.swift
3 | // KakaJSON
4 | //
5 | // Created by MJ Lee on 2019/7/31.
6 | // Copyright © 2019 MJ Lee. All rights reserved.
7 | //
8 |
9 | struct EnumDescriptor: NominalDescriptor {
10 | /// Flags describing the context, including its kind and format version
11 | let flags: ContextDescriptorFlags
12 |
13 | /// The parent context, or null if this is a top-level context.
14 | let parent: RelativeContextPointer
15 |
16 | /// The name of the type
17 | var name: RelativeDirectPointer
18 |
19 | /// A pointer to the metadata access function for this type
20 | let accessFunctionPtr: RelativeDirectPointer
21 |
22 | /// A pointer to the field descriptor for the type, if any
23 | var fields: RelativeDirectPointer
24 |
25 | /// The number of non-empty cases in the enum are in the low 24 bits; the offset of the payload size in the metadata record in words, if any, is stored in the high 8 bits
26 | let numPayloadCasesAndPayloadSizeOffset: UInt32
27 |
28 | /// The number of empty cases in the enum
29 | let numEmptyCases: UInt32
30 |
31 | let fieldOffsetVectorOffset: FieldOffsetPointer
32 |
33 | let genericContextHeader: TargetTypeGenericContextDescriptorHeader
34 | }
35 |
--------------------------------------------------------------------------------
/iMemScan/Lib/Drops/AnimationContext.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Drops
3 | //
4 | // Copyright (c) 2021-Present Omar Albeik - https://github.com/omaralbeik
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 |
24 | import UIKit
25 |
26 | struct AnimationContext {
27 | let view: UIView
28 | let container: UIView
29 | }
30 |
--------------------------------------------------------------------------------
/iMemScan/Lib/Drops/Weak.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Drops
3 | //
4 | // Copyright (c) 2021-Present Omar Albeik - https://github.com/omaralbeik
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 |
24 | struct Weak {
25 | init(value: T?) {
26 | self.value = value
27 | }
28 |
29 | weak var value: T?
30 | }
31 |
--------------------------------------------------------------------------------
/iMemScan/Tool/Jailbreak/Sh/CommandLine.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CommandLine.swift
3 | // CommandLine
4 | //
5 | // Created by yiming on 2021/8/20.
6 | //
7 |
8 | import Foundation
9 |
10 | func runCmd(path: String, args: [String]) {
11 | let task = NSTask()
12 | task?.launchPath = path
13 | task?.arguments = args
14 |
15 | let pipe = Pipe()
16 | task?.setStandardOutput(pipe)
17 | task?.launch()
18 |
19 | //let data = pipe.fileHandleForReading.readDataToEndOfFile()
20 | task?.waitUntilExit()
21 |
22 | // let status = String(data: data, encoding: .utf8)
23 | // JHLog.share().cache(status!)
24 | // JHLog.share().save()
25 | }
26 |
27 | //func runCmd(path: String, args: [String]) {
28 | //
29 | // var model = RunCmdModel()
30 | // model.path = path
31 | // model.args = args
32 | //
33 | // // Model -> Json
34 | // let jsonStr = model.kj.JSONString()
35 | // //NSLog("memlog: Model -> Json = \(jsonStr)")
36 | //
37 | // // Base64
38 | // let enc = jsonStr.toBase64()
39 | // NSLog("memlog: Json -> enc = \(enc!)")
40 | //
41 | // let url = "http://localhost:8081/rucmd/params&&\(enc!)"
42 | // AF.request(url, method: .post, parameters: nil, headers: nil).responseJSON { (response) in
43 | // switch response.result {
44 | // case .success(let json):
45 | // print(json)
46 | // case .failure(let error):
47 | // print(error)
48 | // }
49 | // }
50 | //}
51 |
--------------------------------------------------------------------------------
/iMemScan/Ctrl/OneKey()/VMOneKeyModel.h:
--------------------------------------------------------------------------------
1 | //
2 | // VMOneKeyModel.h
3 | // MemView
4 | //
5 | // Created by HaoCold on 2020/9/28.
6 | // Copyright © 2020 HaoCold. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | typedef NS_ENUM(NSUInteger, VMOneKeySubType) {
14 | VMOneKeySubType_NumberSearch, // 数值搜索
15 | VMOneKeySubType_NearRange, // 邻近范围
16 | VMOneKeySubType_NearSearch, // 邻近搜索
17 | VMOneKeySubType_Result, // 修改结果
18 | VMOneKeySubType_Clear // 清除结果
19 | };
20 |
21 | @interface VMOneKeyModel : NSObject
22 | @property (nonatomic, copy) NSString *name;
23 | @property (nonatomic, strong) NSMutableArray *steps;
24 | @property (nonatomic, assign) BOOL open;
25 | @end
26 |
27 |
28 | @interface VMOneKeySubModel : NSObject
29 |
30 | @property (nonatomic, copy) NSString *name;
31 | @property (nonatomic, assign) VMOneKeySubType type;
32 | @property (nonatomic, copy) NSString *typeName;
33 |
34 | /// 类型(I8,I16,I32,I64,F32,F64)
35 | @property (nonatomic, copy) NSString *key;
36 | /// 数值
37 | @property (nonatomic, copy) NSString *value;
38 | /// 要修改的位置(-1,全部。1,3,第1个,第3个)
39 | @property (nonatomic, copy) NSString *indexs;
40 | /// 通知开关
41 | @property (nonatomic, assign) BOOL switOpen;
42 | /// 清除通知开关
43 | @property (nonatomic, assign) BOOL clearOpen;
44 | /// 偏移量
45 | @property (nonatomic, copy) NSString *offset;
46 | @end
47 |
48 | NS_ASSUME_NONNULL_END
49 |
--------------------------------------------------------------------------------
/iMemScan/Tool/Jailbreak/Root/Root.m:
--------------------------------------------------------------------------------
1 | //
2 | // Root.m
3 | // Root
4 | //
5 | // Created by yiming on 2021/8/14.
6 | //
7 |
8 | #import "Root.h"
9 | #import
10 | #import
11 |
12 | @implementation Root
13 |
14 | void patch_setuid(void) {
15 | void* handle = dlopen("/usr/lib/libjailbreak.dylib", RTLD_LAZY);
16 | if (!handle)
17 | return;
18 |
19 | // Reset errors
20 | dlerror();
21 | typedef void (*fix_setuid_prt_t)(pid_t pid);
22 | fix_setuid_prt_t ptr = (fix_setuid_prt_t)dlsym(handle, "jb_oneshot_fix_setuid_now");
23 |
24 | const char *dlsym_error = dlerror();
25 | if (dlsym_error)
26 | return;
27 |
28 | ptr(getpid());
29 | }
30 |
31 | /* Set platform binary flag */
32 | #define FLAG_PLATFORMIZE (1 << 1)
33 |
34 | void platformize_me(void) {
35 | void* handle = dlopen("/usr/lib/libjailbreak.dylib", RTLD_LAZY);
36 | if (!handle) return;
37 |
38 | // Reset errors
39 | dlerror();
40 | typedef void (*fix_entitle_prt_t)(pid_t pid, uint32_t what);
41 | fix_entitle_prt_t ptr = (fix_entitle_prt_t)dlsym(handle, "jb_oneshot_entitle_now");
42 |
43 | const char *dlsym_error = dlerror();
44 | if (dlsym_error) return;
45 |
46 | ptr(getpid(), FLAG_PLATFORMIZE);
47 | }
48 |
49 | void iOSRoot(void){
50 | patch_setuid();
51 | platformize_me();
52 | setuid(0);
53 | setgid(0);
54 | }
55 |
56 | + (void)load
57 | {
58 | iOSRoot();
59 | }
60 |
61 | @end
62 |
--------------------------------------------------------------------------------
/iMemScan/Lib/Drops/PassthroughView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Drops
3 | //
4 | // Copyright (c) 2021-Present Omar Albeik - https://github.com/omaralbeik
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 |
24 | import UIKit
25 |
26 | final class PassthroughView: UIView {
27 | override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
28 | let view = super.hitTest(point, with: event)
29 | return view == self ? nil : view
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/iMemScan/Lib/Drops/UIView+Extensions.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Drops
3 | //
4 | // Copyright (c) 2021-Present Omar Albeik - https://github.com/omaralbeik
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 |
24 | import UIKit
25 |
26 | extension UIView {
27 | var safeArea: UILayoutGuide {
28 | if #available(iOS 11.0, *) {
29 | return safeAreaLayoutGuide
30 | } else {
31 | return layoutMarginsGuide
32 | }
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/iMemScan/Lib/Alamofire/Alamofire.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Alamofire.swift
3 | //
4 | // Copyright (c) 2014-2018 Alamofire Software Foundation (http://alamofire.org/)
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 | //
24 |
25 | /// Reference to `Session.default` for quick bootstrapping and examples.
26 | public let AF = Session.default
27 |
28 | /// Current Alamofire version. Necessary since SPM doesn't use dynamic libraries. Plus this will be more accurate.
29 | let version = "5.4.0"
30 |
--------------------------------------------------------------------------------
/iMemScan/Lib/KakaJSON/Convert/Logger.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Logger.swift
3 | // KakaJSON
4 | //
5 | // Created by MJ Lee on 2019/8/2.
6 | // Copyright © 2019 MJ Lee. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | struct Logger {
12 | private static func _log(_ title: String, _ msg: T, _ file: NSString,
13 | _ fn: String, _ line: Int) {
14 | #if DEBUG
15 | print("「 KakaJSON 」\(title) \(file.lastPathComponent) >> \(line) >> \(fn) :\(msg)")
16 | #endif
17 | }
18 |
19 | static func error(_ msg: T,
20 | _ file: NSString = #file,
21 | _ fn: String = #function,
22 | _ line: Int = #line) {
23 | _log("❌", msg, file, fn, line)
24 | }
25 |
26 | static func warnning(_ msg: T,
27 | _ file: NSString = #file,
28 | _ fn: String = #function,
29 | _ line: Int = #line) {
30 | _log("⚠️", msg, file, fn, line)
31 | }
32 |
33 | static func success(_ msg: T,
34 | _ file: NSString = #file,
35 | _ fn: String = #function,
36 | _ line: Int = #line) {
37 | _log("✔️", msg, file, fn, line)
38 | }
39 |
40 | static func info(_ msg: T,
41 | _ file: NSString = #file,
42 | _ fn: String = #function,
43 | _ line: Int = #line) {
44 | _log("✔️", msg, file, fn, line)
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/iMemScan/Lib/Appinfo/APP/App.h:
--------------------------------------------------------------------------------
1 | //
2 | // App.h
3 | // MemSearch
4 | //
5 | // Created by 李良林 on 2020/10/18.
6 | // Copyright © 2020 李良林. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 |
12 | @interface App : NSObject
13 |
14 | @property (nonatomic, readonly) NSString* bundleIdentifier;
15 | @property (nonatomic, readonly) NSString* name;
16 | @property (nonatomic, readonly) UIImage* icon;
17 |
18 | @property (nonatomic, readonly) NSString *applicationDSID;
19 | @property (nonatomic, readonly) NSString *applicationIdentifier;
20 | @property (nonatomic, readonly) NSString *applicationType;
21 | @property (nonatomic, readonly) NSNumber *dynamicDiskUsage;
22 |
23 | @property (nonatomic, readonly) NSArray *groupIdentifiers;
24 | @property (nonatomic, readonly) NSNumber *itemID;
25 | @property (nonatomic, readonly) NSString *itemName;
26 | @property (nonatomic, readonly) NSString *minimumSystemVersion;
27 | @property (nonatomic, readonly) NSArray *requiredDeviceCapabilities;
28 | @property (nonatomic, readonly) NSString *roleIdentifier;
29 | @property (nonatomic, readonly) NSString *sdkVersion;
30 | @property (nonatomic, readonly) NSString *shortVersionString;
31 | @property (nonatomic, readonly) NSString *sourceAppIdentifier;
32 | @property (nonatomic, readonly) NSNumber *staticDiskUsage;
33 | @property (nonatomic, readonly) NSString *teamID;
34 | @property (nonatomic, readonly) NSString *vendorName;
35 |
36 | @property (nonatomic, readonly) BOOL isHiddenApp;
37 |
38 | + (instancetype)appWithPrivateProxy:(id)privateProxy;
39 | + (instancetype)appWithBundleIdentifier:(NSString*)bundleIdentifier;
40 |
41 | @end
42 |
43 |
--------------------------------------------------------------------------------
/iMemScan/Lib/JHKeyboard/UITextView+JHKeyboard.h:
--------------------------------------------------------------------------------
1 | //
2 | // UITextView+JHKeyboard.h
3 | // JHKeyboard
4 | //
5 | // Created by HaoCold on 2020/8/18.
6 | // Copyright © 2020 HaoCold. All rights reserved.
7 | //
8 | // Copyright (c) 2020 xjh093
9 | //
10 | // Permission is hereby granted, free of charge, to any person obtaining a copy
11 | // of this software and associated documentation files (the "Software"), to deal
12 | // in the Software without restriction, including without limitation the rights
13 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
14 | // copies of the Software, and to permit persons to whom the Software is
15 | // furnished to do so, subject to the following conditions:
16 | //
17 | // The above copyright notice and this permission notice shall be included in all
18 | // copies or substantial portions of the Software.
19 | //
20 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26 | // SOFTWARE.
27 |
28 | #import
29 | #import "JHKeyboard.h"
30 |
31 | NS_ASSUME_NONNULL_BEGIN
32 |
33 | @interface UITextView (JHKeyboard)
34 | @property (nonatomic, strong) JHKeyboard *jh_keyboard;
35 | @end
36 |
37 | NS_ASSUME_NONNULL_END
38 |
--------------------------------------------------------------------------------
/iMemScan/Lib/JHKeyboard/UITextField+JHKeyboard.h:
--------------------------------------------------------------------------------
1 | //
2 | // UITextField+JHKeyboard.h
3 | // JHKeyboard
4 | //
5 | // Created by HaoCold on 2020/8/18.
6 | // Copyright © 2020 HaoCold. All rights reserved.
7 | //
8 | // Copyright (c) 2020 xjh093
9 | //
10 | // Permission is hereby granted, free of charge, to any person obtaining a copy
11 | // of this software and associated documentation files (the "Software"), to deal
12 | // in the Software without restriction, including without limitation the rights
13 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
14 | // copies of the Software, and to permit persons to whom the Software is
15 | // furnished to do so, subject to the following conditions:
16 | //
17 | // The above copyright notice and this permission notice shall be included in all
18 | // copies or substantial portions of the Software.
19 | //
20 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26 | // SOFTWARE.
27 |
28 | #import
29 | #import "JHKeyboard.h"
30 |
31 | NS_ASSUME_NONNULL_BEGIN
32 |
33 | @interface UITextField (JHKeyboard)
34 | @property (nonatomic, strong) JHKeyboard *jh_keyboard;
35 | @end
36 |
37 | NS_ASSUME_NONNULL_END
38 |
--------------------------------------------------------------------------------
/iMemScan/Ctrl/Set/AppNoticeCtrl.swift:
--------------------------------------------------------------------------------
1 | //
2 | // VMHelpCtrl.swift
3 | // YMTool
4 | //
5 | // Created by yiming on 2021/7/7.
6 | //
7 |
8 | import UIKit
9 |
10 | class AppNoticeCtrl: UIViewController {
11 |
12 | override func viewDidLoad() {
13 | super.viewDidLoad()
14 | // Do any additional setup after loading the view.
15 |
16 | navigationItem.title = NSLocalizedString("Terms of Service Notification", comment: "")
17 | //setupViews()
18 | }
19 |
20 | // func setupViews() {
21 | // navigationController?.navigationBar.shadowImage = UIImage()
22 | // navigationItem.largeTitleDisplayMode = .never
23 | // view.addSubview(textView)
24 | //
25 | // let udid = UIDevice.rootRemoval()
26 | //
27 | // VMWLTool.query(udid!) { [self] (result) in
28 | // //
29 | // let dict = result
30 | // let notice = dict[Key._14.rawValue].stringValue
31 | //
32 | // let text = """
33 | // \(notice)
34 | // """
35 | // textView.text = text
36 | // }
37 | // }
38 |
39 | // MARK: - 懒加载
40 |
41 | lazy var textView: UITextView = {
42 | let textView = UITextView()
43 | textView.frame = self.view.bounds
44 | textView.text = NSLocalizedString("Loading...", comment: "")
45 | textView.font = UIFont.systemFont(ofSize: 14)
46 | textView.textAlignment = .left
47 | textView.showsVerticalScrollIndicator = false
48 | textView.isEditable = false
49 | textView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
50 |
51 | return textView
52 | }()
53 | }
54 |
--------------------------------------------------------------------------------
/iMemScan/Base.lproj/Main.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/iMemScan/Lib/AlertView/UIView+KeyWindow.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UIView+KeyWindow.swift
3 | // PokerCard
4 | //
5 | // Created by Weslie on 2019/9/11.
6 | // Copyright © 2019 Weslie (https://www.iweslie.com)
7 | //
8 | // Permission is hereby granted, free of charge, to any person obtaining a copy
9 | // of this software and associated documentation files (the "Software"), to deal
10 | // in the Software without restriction, including without limitation the rights
11 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12 | // copies of the Software, and to permit persons to whom the Software is
13 | // furnished to do so, subject to the following conditions:
14 | //
15 | // The above copyright notice and this permission notice shall be included in
16 | // all copies or substantial portions of the Software.
17 | //
18 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24 | // THE SOFTWARE.
25 | //
26 |
27 | import UIKit
28 |
29 | /// current keyWindow
30 | public var currentWindow: UIWindow? = {
31 | if #available(iOS 13.0, *) {
32 | let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene
33 | return windowScene?.windows.first
34 | } else {
35 | return UIApplication.shared.keyWindow
36 | }
37 | }()
38 |
--------------------------------------------------------------------------------
/iMemScan/Ctrl/OneKey/VMOneKeyModel.h:
--------------------------------------------------------------------------------
1 | //
2 | // VMOneKeyModel.h
3 | // MemView
4 | //
5 | // Created by HaoCold on 2020/9/28.
6 | // Copyright © 2020 HaoCold. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | typedef NS_ENUM(NSUInteger, VMOneKeySubType) {
14 | VMOneKeySubType_NumberSearch, // 数值搜索
15 | VMOneKeySubType_NearRange, // 邻近范围
16 | VMOneKeySubType_NearSearch, // 邻近搜索
17 | VMOneKeySubType_Result, // 修改结果
18 | VMOneKeySubType_Clear // 清除结果
19 | };
20 |
21 | @interface VMOneKeyGroupModel : NSObject
22 | /// 组名
23 | @property (nonatomic, copy) NSString *name;
24 | /// 组 id
25 | @property (nonatomic, assign) NSInteger gid;
26 | @end
27 |
28 | @interface VMOneKeyModel : NSObject
29 | @property (nonatomic, copy) NSString *name;
30 | /// 组 id
31 | @property (nonatomic, assign) NSInteger gid;
32 | @property (nonatomic, strong) NSMutableArray *steps;
33 | @property (nonatomic, assign) BOOL open;
34 | @end
35 |
36 |
37 | @interface VMOneKeySubModel : NSObject
38 |
39 | @property (nonatomic, copy) NSString *name;
40 | @property (nonatomic, assign) VMOneKeySubType type;
41 | @property (nonatomic, copy) NSString *typeName;
42 |
43 | /// 类型(I8,I16,I32,I64,F32,F64)
44 | @property (nonatomic, copy) NSString *key;
45 | /// 数值
46 | @property (nonatomic, copy) NSString *value;
47 | /// 要修改的位置(-1,全部。1,3,第1个,第3个)
48 | @property (nonatomic, copy) NSString *indexs;
49 | /// 通知开关
50 | @property (nonatomic, assign) BOOL switOpen;
51 | /// 清除通知开关
52 | @property (nonatomic, assign) BOOL clearOpen;
53 | /// 偏移量
54 | @property (nonatomic, copy) NSString *offset;
55 | @end
56 |
57 | NS_ASSUME_NONNULL_END
58 |
--------------------------------------------------------------------------------
/iMemScan/Ctrl/Set/SetModel.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SetModel.swift
3 | // SetModel
4 | //
5 | // Created by yiming on 2021/8/16.
6 | //
7 |
8 | import Foundation
9 |
10 | struct SetModel: Convertible {
11 | var range: String = ""
12 | var addrRangeStart: String = ""
13 | var addrRangeEnd: String = ""
14 | var LimitCount: String = ""
15 | var duration: String = ""
16 | var duration1: String = ""
17 |
18 | static func fetch() -> SetModel {
19 |
20 | guard let json = try? String(contentsOf: Self.path()) else {
21 |
22 | var model = SetModel()
23 | model.range = "0x20"
24 | model.addrRangeStart = "0x100000000"
25 | model.addrRangeEnd = "0x160000000"
26 | model.LimitCount = "1000000"
27 | model.duration = "100"
28 | model.duration1 = "20"
29 |
30 | return model
31 | }
32 |
33 | let model = json.kj.model(SetModel.self)
34 |
35 | return model!
36 | }
37 |
38 | func save() {
39 | let json = self.kj.JSONString()
40 | //print("json",json)
41 | do {
42 | try json.write(to: Self.path(), atomically: true, encoding: .utf8)
43 | } catch let error {
44 | print("error", error)
45 | }
46 | }
47 |
48 | private static func path() -> URL {
49 |
50 | #if false
51 | let documentURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first
52 | let fileURL = documentURL?.appendingPathComponent("Set.data")
53 | return fileURL!
54 | #else
55 | let url = URL.init(fileURLWithPath: "/var/mobile/Media/iMemScan(Script)/Set.data")
56 | return url
57 | #endif
58 | }
59 | }
60 |
--------------------------------------------------------------------------------
/iMemScan/Lib/AlertView/Extension+UIImage.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Extension+UIImage.swift
3 | // PokerCard
4 | //
5 | // Created by Weslie Chen on 2019/10/20.
6 | // Copyright © 2019 Weslie (https://www.iweslie.com)
7 | //
8 | // Permission is hereby granted, free of charge, to any person obtaining a copy
9 | // of this software and associated documentation files (the "Software"), to deal
10 | // in the Software without restriction, including without limitation the rights
11 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12 | // copies of the Software, and to permit persons to whom the Software is
13 | // furnished to do so, subject to the following conditions:
14 | //
15 | // The above copyright notice and this permission notice shall be included in
16 | // all copies or substantial portions of the Software.
17 | //
18 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24 | // THE SOFTWARE.
25 | //
26 |
27 | import UIKit
28 |
29 | extension UIImage {
30 | convenience init?(pointSize: CGFloat, name: String) {
31 | if #available(iOS 13.0, *) {
32 | let configuration = UIImage.SymbolConfiguration(pointSize: pointSize, weight: .light)
33 | self.init(systemName: name, withConfiguration: configuration)
34 | } else {
35 | self.init(named: name)
36 | }
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/iMemScan/Lib/Alamofire/DispatchQueue+Alamofire.swift:
--------------------------------------------------------------------------------
1 | //
2 | // DispatchQueue+Alamofire.swift
3 | //
4 | // Copyright (c) 2014-2018 Alamofire Software Foundation (http://alamofire.org/)
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 | //
24 |
25 | import Dispatch
26 | import Foundation
27 |
28 | extension DispatchQueue {
29 | /// Execute the provided closure after a `TimeInterval`.
30 | ///
31 | /// - Parameters:
32 | /// - delay: `TimeInterval` to delay execution.
33 | /// - closure: Closure to execute.
34 | func after(_ delay: TimeInterval, execute closure: @escaping () -> Void) {
35 | asyncAfter(deadline: .now() + delay, execute: closure)
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/iMemScan/Lib/JHKeyboard/JHKeyboard.h:
--------------------------------------------------------------------------------
1 | //
2 | // JHKeyboard.h
3 | // JHKeyboard
4 | //
5 | // Created by HaoCold on 2020/8/18.
6 | // Copyright © 2020 HaoCold. All rights reserved.
7 | //
8 | // MIT License
9 | //
10 | // Copyright (c) 2020 xjh093
11 | //
12 | // Permission is hereby granted, free of charge, to any person obtaining a copy
13 | // of this software and associated documentation files (the "Software"), to deal
14 | // in the Software without restriction, including without limitation the rights
15 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
16 | // copies of the Software, and to permit persons to whom the Software is
17 | // furnished to do so, subject to the following conditions:
18 | //
19 | // The above copyright notice and this permission notice shall be included in all
20 | // copies or substantial portions of the Software.
21 | //
22 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
25 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
26 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
27 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
28 | // SOFTWARE.
29 |
30 | #import
31 | #import
32 |
33 | NS_ASSUME_NONNULL_BEGIN
34 |
35 | typedef void(^JHKeyboardBlock)(NSNotificationName name, CGRect beginFrame, CGRect endFrame, CGFloat duration, UIViewAnimationCurve curve);
36 |
37 | @interface JHKeyboard : NSObject
38 | @property (nonatomic, copy) JHKeyboardBlock changeBlock;
39 | @end
40 |
41 | NS_ASSUME_NONNULL_END
42 |
--------------------------------------------------------------------------------
/iMemScan/Tool/Jailbreak/Sh/Actions.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Actions.swift
3 | // YMTool
4 | //
5 | // Created by yiming on 2021/7/8.
6 | //
7 |
8 | import Foundation
9 |
10 | func runCmd(path: String, args: [String]) -> Int32 {
11 | let argv: [UnsafeMutablePointer?] = args.map { $0.withCString(strdup) }
12 | defer { for case let arg? in argv { free(arg) } }
13 |
14 | var pid = pid_t(0)
15 | var status = posix_spawn(&pid, path.cString(using: .utf8), nil, nil, argv + [nil], environ)
16 | if status == 0 {
17 | if waitpid(pid, &status, 0) == -1 {
18 | //NSLog("*** 等待进程")
19 | }
20 | } else {
21 | NSLog("*** posix_spawn: \(status)")
22 | }
23 |
24 | return status
25 | }
26 |
27 | func userspaceRebootSupported() -> Bool {
28 | FileManager.default.fileExists(atPath: "/odyssey/jailbreakd.plist") || FileManager.default.fileExists(atPath: "/taurine/jailbreakd.plist")
29 | }
30 |
31 | func enableTweaks() {
32 | _ = runCmd(path: Bundle.main.path(forResource: "giveMeRoot", ofType: "") ?? "", args: ["giveMeRoot", "enableTweaks"])
33 | }
34 |
35 | func disableTweaks() {
36 | _ = runCmd(path: Bundle.main.path(forResource: "giveMeRoot", ofType: "") ?? "", args: ["giveMeRoot", "disableTweaks"])
37 | }
38 |
39 | func respring() {
40 | _ = runCmd(path: "/usr/bin/sbreload", args: ["sbreload"])
41 | }
42 |
43 | func userspaceReboot() {
44 | guard userspaceRebootSupported() else {
45 | ldRestart()
46 | return
47 | }
48 | _ = runCmd(path: Bundle.main.path(forResource: "giveMeRoot", ofType: "") ?? "", args: ["giveMeRoot", "userspaceReboot"])
49 | }
50 |
51 | func ldRestart() {
52 | _ = runCmd(path: Bundle.main.path(forResource: "giveMeRoot", ofType: "") ?? "", args: ["giveMeRoot", "ldRestart"])
53 | }
54 |
55 |
--------------------------------------------------------------------------------
/iMemScan/Lib/MJRefresh/Base/MJRefreshFooter.m:
--------------------------------------------------------------------------------
1 | // 代码地址: https://github.com/CoderMJLee/MJRefresh
2 | // 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
3 | // MJRefreshFooter.m
4 | // MJRefreshExample
5 | //
6 | // Created by MJ Lee on 15/3/5.
7 | // Copyright (c) 2015年 小码哥. All rights reserved.
8 | //
9 |
10 | #import "MJRefreshFooter.h"
11 | #include "UIScrollView+MJRefresh.h"
12 |
13 | @interface MJRefreshFooter()
14 |
15 | @end
16 |
17 | @implementation MJRefreshFooter
18 | #pragma mark - 构造方法
19 | + (instancetype)footerWithRefreshingBlock:(MJRefreshComponentAction)refreshingBlock
20 | {
21 | MJRefreshFooter *cmp = [[self alloc] init];
22 | cmp.refreshingBlock = refreshingBlock;
23 | return cmp;
24 | }
25 | + (instancetype)footerWithRefreshingTarget:(id)target refreshingAction:(SEL)action
26 | {
27 | MJRefreshFooter *cmp = [[self alloc] init];
28 | [cmp setRefreshingTarget:target refreshingAction:action];
29 | return cmp;
30 | }
31 |
32 | #pragma mark - 重写父类的方法
33 | - (void)prepare
34 | {
35 | [super prepare];
36 |
37 | // 设置自己的高度
38 | self.mj_h = MJRefreshFooterHeight;
39 |
40 | // 默认不会自动隐藏
41 | // self.automaticallyHidden = NO;
42 | }
43 |
44 | #pragma mark - 公共方法
45 | - (void)endRefreshingWithNoMoreData
46 | {
47 | MJRefreshDispatchAsyncOnMainQueue(self.state = MJRefreshStateNoMoreData;)
48 | }
49 |
50 | - (void)noticeNoMoreData
51 | {
52 | [self endRefreshingWithNoMoreData];
53 | }
54 |
55 | - (void)resetNoMoreData
56 | {
57 | MJRefreshDispatchAsyncOnMainQueue(self.state = MJRefreshStateIdle;)
58 | }
59 |
60 | - (void)setAutomaticallyHidden:(BOOL)automaticallyHidden
61 | {
62 | _automaticallyHidden = automaticallyHidden;
63 | }
64 | @end
65 |
--------------------------------------------------------------------------------
/iMemScan/Lib/KakaJSON/Convert/KJ.swift:
--------------------------------------------------------------------------------
1 | //
2 | // KJ.swift
3 | // KakaJSON
4 | //
5 | // Created by MJ Lee on 2019/7/30.
6 | // Copyright © 2019 MJ Lee. All rights reserved.
7 | //
8 |
9 | public struct KJ {
10 | let base: Base
11 | init(_ base: Base) {
12 | self.base = base
13 | }
14 | }
15 |
16 | // MARK: - protocol for normal types
17 | public protocol KJCompatible {}
18 | public extension KJCompatible {
19 | static var kj: KJ.Type {
20 | get { return KJ.self }
21 | set {}
22 | }
23 | var kj: KJ {
24 | get { return KJ(self) }
25 | set {}
26 | }
27 | }
28 |
29 | // MARK: - protocol for types with a generic parameter
30 | public struct KJGeneric {
31 | let base: Base
32 | init(_ base: Base) {
33 | self.base = base
34 | }
35 | }
36 | public protocol KJGenericCompatible {
37 | associatedtype T
38 | }
39 | public extension KJGenericCompatible {
40 | static var kj: KJGeneric.Type {
41 | get { return KJGeneric.self }
42 | set {}
43 | }
44 | var kj: KJGeneric {
45 | get { return KJGeneric(self) }
46 | set {}
47 | }
48 | }
49 |
50 | // MARK: - protocol for types with two generic parameter2
51 | public struct KJGeneric2 {
52 | let base: Base
53 | init(_ base: Base) {
54 | self.base = base
55 | }
56 | }
57 | public protocol KJGenericCompatible2 {
58 | associatedtype T1
59 | associatedtype T2
60 | }
61 | public extension KJGenericCompatible2 {
62 | static var kj: KJGeneric2.Type {
63 | get { return KJGeneric2.self }
64 | set {}
65 | }
66 | var kj: KJGeneric2 {
67 | get { return KJGeneric2(self) }
68 | set {}
69 | }
70 | }
71 |
--------------------------------------------------------------------------------
/iMemScan/Lib/AlertView/Extension+UILabel.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Extension+UILabel.swift
3 | // PokerCard
4 | //
5 | // Created by Weslie on 2019/10/1.
6 | // Copyright © 2019 Weslie (https://www.iweslie.com)
7 | //
8 | // Permission is hereby granted, free of charge, to any person obtaining a copy
9 | // of this software and associated documentation files (the "Software"), to deal
10 | // in the Software without restriction, including without limitation the rights
11 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12 | // copies of the Software, and to permit persons to whom the Software is
13 | // furnished to do so, subject to the following conditions:
14 | //
15 | // The above copyright notice and this permission notice shall be included in
16 | // all copies or substantial portions of the Software.
17 | //
18 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24 | // THE SOFTWARE.
25 | //
26 |
27 | import UIKit
28 |
29 | extension UILabel {
30 | /// Calculate label's intrisic content height with horizontal inset in superview
31 | internal func estimatedHeight(for horizontalInset: CGFloat) -> CGFloat {
32 | guard let superView = self.superview else { return 0 }
33 | let labelWidth = superView.frame.width - 2 * horizontalInset
34 | self.preferredMaxLayoutWidth = labelWidth
35 | return self.intrinsicContentSize.height
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/iMemScan/Lib/Alamofire/URLRequest+Alamofire.swift:
--------------------------------------------------------------------------------
1 | //
2 | // URLRequest+Alamofire.swift
3 | //
4 | // Copyright (c) 2019 Alamofire Software Foundation (http://alamofire.org/)
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 | //
24 |
25 | import Foundation
26 |
27 | extension URLRequest {
28 | /// Returns the `httpMethod` as Alamofire's `HTTPMethod` type.
29 | public var method: HTTPMethod? {
30 | get { httpMethod.flatMap(HTTPMethod.init) }
31 | set { httpMethod = newValue?.rawValue }
32 | }
33 |
34 | public func validate() throws {
35 | if method == .get, let bodyData = httpBody {
36 | throw AFError.urlRequestValidationFailed(reason: .bodyDataInGETRequest(bodyData))
37 | }
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/iMemScan/Lib/JHLog/JHLog.m:
--------------------------------------------------------------------------------
1 | //
2 | // JHLog.m
3 | // A
4 | //
5 | // Created by HaoCold on 2020/11/4.
6 | // Copyright © 2020 HaoCold. All rights reserved.
7 | //
8 |
9 | #import "JHLog.h"
10 |
11 | @interface JHLog()
12 | @property (nonatomic, strong) NSString *path;
13 | @property (nonatomic, strong) NSMutableArray *logArray;
14 | @property (nonatomic, strong) NSDateFormatter *formatter;
15 | @end
16 |
17 | @implementation JHLog
18 |
19 | + (instancetype)share
20 | {
21 | static JHLog *log;
22 | static dispatch_once_t onceToken;
23 | dispatch_once(&onceToken, ^{
24 | log = [[JHLog alloc] init];
25 | });
26 | return log;
27 | }
28 |
29 | - (instancetype)init
30 | {
31 | self = [super init];
32 | if (self) {
33 | _logArray = @[].mutableCopy;
34 |
35 | _formatter = [[NSDateFormatter alloc] init];
36 | _formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
37 |
38 | // 这个路径改一下
39 | // _path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject] stringByAppendingPathComponent:@"Memlog.txt"];
40 |
41 | _path = @"/var/mobile/Media/iMemScan(Script)/Memlog.txt";
42 | }
43 |
44 | return self;
45 | }
46 |
47 | - (void)cache:(NSString *)log
48 | {
49 | if (log.length == 0) {
50 | return;
51 | }
52 |
53 | NSString *time = [_formatter stringFromDate:[NSDate date]];
54 | log = [NSString stringWithFormat:@"%@\n%@",time,log];
55 | [_logArray addObject:log];
56 |
57 | // log = [NSString stringWithFormat:@"%@",log];
58 | // [_logArray addObject:log];
59 | }
60 |
61 | - (void)save
62 | {
63 | NSString *log = [_logArray componentsJoinedByString:@"\n\n"];
64 | [log writeToFile:_path atomically:YES encoding:NSUTF8StringEncoding error:NULL];
65 | }
66 |
67 | @end
68 |
--------------------------------------------------------------------------------
/iMemScan/Lib/MJRefresh/UIView+MJExtension.m:
--------------------------------------------------------------------------------
1 | // 代码地址: https://github.com/CoderMJLee/MJRefresh
2 | // 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
3 | // UIView+Extension.m
4 | // MJRefreshExample
5 | //
6 | // Created by MJ Lee on 14-5-28.
7 | // Copyright (c) 2014年 小码哥. All rights reserved.
8 | //
9 |
10 | #import "UIView+MJExtension.h"
11 |
12 | @implementation UIView (MJExtension)
13 | - (void)setMj_x:(CGFloat)mj_x
14 | {
15 | CGRect frame = self.frame;
16 | frame.origin.x = mj_x;
17 | self.frame = frame;
18 | }
19 |
20 | - (CGFloat)mj_x
21 | {
22 | return self.frame.origin.x;
23 | }
24 |
25 | - (void)setMj_y:(CGFloat)mj_y
26 | {
27 | CGRect frame = self.frame;
28 | frame.origin.y = mj_y;
29 | self.frame = frame;
30 | }
31 |
32 | - (CGFloat)mj_y
33 | {
34 | return self.frame.origin.y;
35 | }
36 |
37 | - (void)setMj_w:(CGFloat)mj_w
38 | {
39 | CGRect frame = self.frame;
40 | frame.size.width = mj_w;
41 | self.frame = frame;
42 | }
43 |
44 | - (CGFloat)mj_w
45 | {
46 | return self.frame.size.width;
47 | }
48 |
49 | - (void)setMj_h:(CGFloat)mj_h
50 | {
51 | CGRect frame = self.frame;
52 | frame.size.height = mj_h;
53 | self.frame = frame;
54 | }
55 |
56 | - (CGFloat)mj_h
57 | {
58 | return self.frame.size.height;
59 | }
60 |
61 | - (void)setMj_size:(CGSize)mj_size
62 | {
63 | CGRect frame = self.frame;
64 | frame.size = mj_size;
65 | self.frame = frame;
66 | }
67 |
68 | - (CGSize)mj_size
69 | {
70 | return self.frame.size;
71 | }
72 |
73 | - (void)setMj_origin:(CGPoint)mj_origin
74 | {
75 | CGRect frame = self.frame;
76 | frame.origin = mj_origin;
77 | self.frame = frame;
78 | }
79 |
80 | - (CGPoint)mj_origin
81 | {
82 | return self.frame.origin;
83 | }
84 | @end
85 |
--------------------------------------------------------------------------------
/iMemScan/Lib/Categories/UIResponder+JHRouter.m:
--------------------------------------------------------------------------------
1 | //
2 | // UIResponder+JHRouter.m
3 | // JHKit
4 | //
5 | // Created by HaoCold on 2017/12/7.
6 | // Copyright © 2017年 HaoCold. All rights reserved.
7 | //
8 | // MIT License
9 | //
10 | // Copyright (c) 2017 xjh093
11 | //
12 | // Permission is hereby granted, free of charge, to any person obtaining a copy
13 | // of this software and associated documentation files (the "Software"), to deal
14 | // in the Software without restriction, including without limitation the rights
15 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
16 | // copies of the Software, and to permit persons to whom the Software is
17 | // furnished to do so, subject to the following conditions:
18 | //
19 | // The above copyright notice and this permission notice shall be included in all
20 | // copies or substantial portions of the Software.
21 | //
22 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
25 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
26 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
27 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
28 | // SOFTWARE.
29 |
30 | #import "UIResponder+JHRouter.h"
31 |
32 | @implementation UIResponder (JHRouter)
33 |
34 | - (void)jh_routerWithSelector:(NSString *)selector
35 | sender:(id)sender
36 | info:(NSDictionary *)info
37 | {
38 | [[self nextResponder] jh_routerWithSelector:selector
39 | sender:sender
40 | info:info];
41 | }
42 |
43 | @end
44 |
--------------------------------------------------------------------------------
/iMemScan/Lib/KakaJSON/Metadata/Metadata.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Metadata.swift
3 | // KakaJSON
4 | //
5 | // Created by MJ Lee on 2019/8/4.
6 | // Copyright © 2019 MJ Lee. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | public struct Metadata {
12 | private static let typeLock = NSRecursiveLock()
13 | private static var types = [TypeKey: BaseType]()
14 |
15 | public static func type(_ type: Any.Type) -> BaseType? {
16 | typeLock.lock()
17 | defer { typeLock.unlock() }
18 |
19 | // get from cache
20 | let key = typeKey(type)
21 | if let mt = types[key] { return mt }
22 |
23 | // name
24 | let name = String(describing: type)
25 | if name == "Swift._SwiftObject"
26 | || name == "NSObject"
27 | || name == "_TtCs12_SwiftObject" { return nil }
28 |
29 | // type judge
30 | var mtt: BaseType.Type
31 | let kind = Kind(type)
32 | switch kind {
33 | case .class: mtt = ClassType.self
34 | case .struct: mtt = StructType.self
35 | case .enum: mtt = EnumType.self
36 | case .optional: mtt = OptionalType.self
37 | case .objCClassWrapper: mtt = ObjCClassType.self
38 | case .foreignClass: mtt = ForeignClassType.self
39 | case .tuple: mtt = TupleType.self
40 | case .function: mtt = FunctionType.self
41 | case .existential: mtt = ProtocolType.self
42 | case .metatype: mtt = MetaType.self
43 | default: mtt = BaseType.self
44 | }
45 |
46 | // ceate and put it into cache
47 | let mt = mtt.init(name: name, type: type, kind: kind)
48 | types[key] = mt
49 | return mt
50 | }
51 |
52 | public static func type(_ obj: Any) -> BaseType? {
53 | return type(Swift.type(of: obj))
54 | }
55 | }
56 |
--------------------------------------------------------------------------------
/iMemScan/Lib/mem/search_result_def.h:
--------------------------------------------------------------------------------
1 | //
2 | // search_result_def.h
3 | // mem
4 | //
5 | // Created by Liu Junqi on 3/27/18.
6 | // Copyright © 2018 DeviLeo. All rights reserved.
7 | //
8 |
9 | #ifndef search_result_def_h
10 | #define search_result_def_h
11 |
12 | #include
13 |
14 | #define SearchResultValueTypeUndef 0
15 | #define SearchResultValueTypeUInt8 1
16 | #define SearchResultValueTypeSInt8 2
17 | #define SearchResultValueTypeUInt16 3
18 | #define SearchResultValueTypeSInt16 4
19 | #define SearchResultValueTypeUInt32 5
20 | #define SearchResultValueTypeSInt32 6
21 | #define SearchResultValueTypeUInt64 7
22 | #define SearchResultValueTypeSInt64 8
23 | #define SearchResultValueTypeFloat 9
24 | #define SearchResultValueTypeDouble 10
25 |
26 | #define SearchResultComparisonLT -2
27 | #define SearchResultComparisonLE -1
28 | #define SearchResultComparisonEQ 0
29 | #define SearchResultComparisonGE 1
30 | #define SearchResultComparisonGT 2
31 |
32 | struct search_result {
33 | mach_vm_address_t address;
34 | // Modify by innovator
35 | union {
36 | uint8_t uint8Value;
37 | int8_t sint8Value;
38 | uint16_t uint16Value;
39 | int16_t sint16Value;
40 | uint32_t uint32Value;
41 | int32_t sint32Value;
42 | uint64_t uint64Value;
43 | int64_t sint64Value;
44 | float floatValue;
45 | double doubleValue;
46 | char * charValue;
47 | } value;
48 | //void *value;
49 | int size;
50 | int type;
51 | int protection;
52 | };
53 | typedef struct search_result *search_result_t;
54 |
55 | struct search_result_chain {
56 | search_result_t result;
57 | struct search_result_chain *next;
58 | };
59 | typedef struct search_result_chain *search_result_chain_t;
60 |
61 | #endif /* search_result_def_h */
62 |
--------------------------------------------------------------------------------
/iMemScan/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE)
17 | CFBundleShortVersionString
18 | $(MARKETING_VERSION)
19 | CFBundleVersion
20 | 1
21 | LSRequiresIPhoneOS
22 |
23 | NSAppTransportSecurity
24 |
25 | NSAllowsArbitraryLoads
26 |
27 |
28 | UIApplicationSupportsIndirectInputEvents
29 |
30 | UIBackgroundModes
31 |
32 | audio
33 |
34 | UILaunchStoryboardName
35 | LaunchScreen
36 | UIMainStoryboardFile
37 | Main
38 | UIRequiredDeviceCapabilities
39 |
40 | armv7
41 |
42 | UISupportedInterfaceOrientations
43 |
44 | UIInterfaceOrientationPortrait
45 | UIInterfaceOrientationLandscapeLeft
46 |
47 | UISupportedInterfaceOrientations~ipad
48 |
49 | UIInterfaceOrientationPortrait
50 | UIInterfaceOrientationPortraitUpsideDown
51 | UIInterfaceOrientationLandscapeLeft
52 | UIInterfaceOrientationLandscapeRight
53 |
54 |
55 |
56 |
--------------------------------------------------------------------------------
/iMemScan/Lib/Alamofire/URLSessionConfiguration+Alamofire.swift:
--------------------------------------------------------------------------------
1 | //
2 | // URLSessionConfiguration+Alamofire.swift
3 | //
4 | // Copyright (c) 2014-2018 Alamofire Software Foundation (http://alamofire.org/)
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 | //
24 |
25 | import Foundation
26 |
27 | extension URLSessionConfiguration: AlamofireExtended {}
28 | extension AlamofireExtension where ExtendedType: URLSessionConfiguration {
29 | /// Alamofire's default configuration. Same as `URLSessionConfiguration.default` but adds Alamofire default
30 | /// `Accept-Language`, `Accept-Encoding`, and `User-Agent` headers.
31 | public static var `default`: URLSessionConfiguration {
32 | let configuration = URLSessionConfiguration.default
33 | configuration.headers = .default
34 |
35 | return configuration
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/iMemScan/Lib/Drops/PassthroughWindow.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Drops
3 | //
4 | // Copyright (c) 2021-Present Omar Albeik - https://github.com/omaralbeik
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 |
24 | import UIKit
25 |
26 | final class PassthroughWindow: UIWindow {
27 | init(hitTestView: UIView) {
28 | self.hitTestView = hitTestView
29 | super.init(frame: .zero)
30 | }
31 |
32 | required init?(coder: NSCoder) {
33 | return nil
34 | }
35 |
36 | override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
37 | let view = super.hitTest(point, with: event)
38 | if let view = view, let hitTestView = hitTestView, hitTestView.isDescendant(of: view) && hitTestView != view {
39 | return nil
40 | }
41 | return view
42 | }
43 |
44 | private weak var hitTestView: UIView?
45 | }
46 |
--------------------------------------------------------------------------------
/iMemScan/Lib/KakaJSON/Metadata/Type/ModelType.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ModelType.swift
3 | // KakaJSON
4 | //
5 | // Created by MJ Lee on 2019/8/13.
6 | // Copyright © 2019 MJ Lee. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | public class ModelType: BaseType {
12 | public internal(set) var properties: [Property]?
13 | public internal(set) var genericTypes: [Any.Type]?
14 | private var modelKeysLock = DispatchSemaphore(value: 1)
15 | private var modelKeys: [String: ModelPropertyKey] = [:]
16 | private var jsonKeysLock = DispatchSemaphore(value: 1)
17 | private var jsonKeys: [String: String] = [:]
18 |
19 | func modelKey(from propertyName: String,
20 | _ createdKey: @autoclosure () -> ModelPropertyKey) -> ModelPropertyKey {
21 | modelKeysLock.wait()
22 | defer { modelKeysLock.signal() }
23 | if let key = modelKeys[propertyName] { return key }
24 |
25 | var resultKey = createdKey()
26 | if let stringKey = resultKey as? String {
27 | if stringKey != propertyName {
28 | resultKey = [stringKey, propertyName]
29 | }
30 | } else if var arrayKey = resultKey as? [String] {
31 | if arrayKey.count == 0 {
32 | resultKey = propertyName
33 | } else if arrayKey.last != propertyName {
34 | arrayKey.append(propertyName)
35 | resultKey = arrayKey
36 | }
37 | }
38 | modelKeys[propertyName] = resultKey;
39 | return resultKey
40 | }
41 |
42 | func JSONKey(from propertyName: String,
43 | _ createdKey: @autoclosure () -> String) -> String {
44 | jsonKeysLock.wait()
45 | defer { jsonKeysLock.signal() }
46 | if let key = jsonKeys[propertyName] { return key }
47 |
48 | let resultKey = createdKey()
49 | jsonKeys[propertyName] = resultKey
50 | return resultKey
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/iMemScan/Lib/JHKeyboard/UITextView+JHKeyboard.m:
--------------------------------------------------------------------------------
1 | //
2 | // UITextView+JHKeyboard.m
3 | // JHKeyboard
4 | //
5 | // Created by HaoCold on 2020/8/18.
6 | // Copyright © 2020 HaoCold. All rights reserved.
7 | //
8 | // Copyright (c) 2020 xjh093
9 | //
10 | // Permission is hereby granted, free of charge, to any person obtaining a copy
11 | // of this software and associated documentation files (the "Software"), to deal
12 | // in the Software without restriction, including without limitation the rights
13 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
14 | // copies of the Software, and to permit persons to whom the Software is
15 | // furnished to do so, subject to the following conditions:
16 | //
17 | // The above copyright notice and this permission notice shall be included in all
18 | // copies or substantial portions of the Software.
19 | //
20 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26 | // SOFTWARE.
27 |
28 | #import "UITextView+JHKeyboard.h"
29 | #import
30 |
31 | @implementation UITextView (JHKeyboard)
32 |
33 | - (JHKeyboard *)jh_keyboard{
34 | JHKeyboard *keyboard = objc_getAssociatedObject(self, _cmd);
35 | if (!keyboard) {
36 | keyboard = [[JHKeyboard alloc] init];
37 | [keyboard setValue:self forKey:@"textView"];
38 | self.jh_keyboard = keyboard;
39 | }
40 | return keyboard;
41 | }
42 |
43 | - (void)setJh_keyboard:(JHKeyboard *)jh_keyboard{
44 | objc_setAssociatedObject(self, @selector(jh_keyboard), jh_keyboard, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
45 | }
46 |
47 | @end
48 |
--------------------------------------------------------------------------------
/iMemScan/Lib/JHKeyboard/UITextField+JHKeyboard.m:
--------------------------------------------------------------------------------
1 | //
2 | // UITextField+JHKeyboard.m
3 | // JHKeyboard
4 | //
5 | // Created by HaoCold on 2020/8/18.
6 | // Copyright © 2020 HaoCold. All rights reserved.
7 | //
8 | // Copyright (c) 2020 xjh093
9 | //
10 | // Permission is hereby granted, free of charge, to any person obtaining a copy
11 | // of this software and associated documentation files (the "Software"), to deal
12 | // in the Software without restriction, including without limitation the rights
13 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
14 | // copies of the Software, and to permit persons to whom the Software is
15 | // furnished to do so, subject to the following conditions:
16 | //
17 | // The above copyright notice and this permission notice shall be included in all
18 | // copies or substantial portions of the Software.
19 | //
20 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26 | // SOFTWARE.
27 |
28 | #import "UITextField+JHKeyboard.h"
29 | #import
30 |
31 | @implementation UITextField (JHKeyboard)
32 |
33 | - (JHKeyboard *)jh_keyboard{
34 | JHKeyboard *keyboard = objc_getAssociatedObject(self, _cmd);
35 | if (!keyboard) {
36 | keyboard = [[JHKeyboard alloc] init];
37 | [keyboard setValue:self forKey:@"textField"];
38 | self.jh_keyboard = keyboard;
39 | }
40 | return keyboard;
41 | }
42 |
43 | - (void)setJh_keyboard:(JHKeyboard *)jh_keyboard{
44 | objc_setAssociatedObject(self, @selector(jh_keyboard), jh_keyboard, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
45 | }
46 |
47 | @end
48 |
--------------------------------------------------------------------------------
/iMemScan/Lib/KakaJSON/Global/Coding.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Coding.swift
3 | // KakaJSON
4 | //
5 | // Created by MJ Lee on 2019/8/22.
6 | // Copyright © 2019 MJ Lee. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | @discardableResult
12 | public func write(_ value: Any,
13 | to file: String,
14 | atomically: Bool = true,
15 | encoding: String.Encoding = .utf8) -> String? {
16 | return write(value, to: URL(fileURLWithPath: file), encoding: encoding)
17 | }
18 |
19 | @discardableResult
20 | public func write(_ value: Any,
21 | to URL: URL,
22 | atomically: Bool = true,
23 | encoding: String.Encoding = .utf8) -> String? {
24 | if URL.isFileURL {
25 | let dir = (URL.path as NSString).deletingLastPathComponent
26 | let mgr = FileManager.default
27 | if !mgr.fileExists(atPath: dir) {
28 | try? mgr.createDirectory(atPath: dir,
29 | withIntermediateDirectories: true,
30 | attributes: nil)
31 | }
32 | }
33 | let string = Values.JSONString(value)
34 | try? string?.write(to: URL,
35 | atomically: atomically,
36 | encoding: .utf8)
37 | return string
38 | }
39 |
40 | public func read(_ type: T.Type,
41 | from file: String,
42 | encoding: String.Encoding = .utf8) -> T? {
43 | return read(type,
44 | from: URL(fileURLWithPath: file),
45 | encoding: encoding)
46 | }
47 |
48 | public func read(_ type: T.Type,
49 | from URL: URL,
50 | encoding: String.Encoding = .utf8) -> T? {
51 | guard let data = try? Data(contentsOf: URL) else { return nil }
52 |
53 | var value = JSONSerialization.kj_JSON(data, Any.self)
54 | if value == nil {
55 | value = String(data: data, encoding: encoding)
56 | }
57 | return Values.value(value, T.self) as? T
58 | }
59 |
--------------------------------------------------------------------------------
/iMemScan/Lib/AlertView/PokerPresenter.swift:
--------------------------------------------------------------------------------
1 | //
2 | // PokerPresenter.swift
3 | // PokerCard
4 | //
5 | // Created by Weslie on 2019/10/7.
6 | // Copyright © 2019 Weslie (https://www.iweslie.com)
7 | //
8 | // Permission is hereby granted, free of charge, to any person obtaining a copy
9 | // of this software and associated documentation files (the "Software"), to deal
10 | // in the Software without restriction, including without limitation the rights
11 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12 | // copies of the Software, and to permit persons to whom the Software is
13 | // furnished to do so, subject to the following conditions:
14 | //
15 | // The above copyright notice and this permission notice shall be included in
16 | // all copies or substantial portions of the Software.
17 | //
18 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24 | // THE SOFTWARE.
25 | //
26 |
27 | import UIKit
28 |
29 | /// Abstract class of a poker view presenter
30 | public class PokerPresenter {
31 | /// current window for presenting a poker view
32 | internal var keyWindow: UIWindow
33 | /// poker view container background view
34 | internal var backgroundView: PokerPresenterView
35 | /// Create a `PokerPresenter` instance.
36 | init() {
37 | guard let keyWindow = currentWindow else {
38 | fatalError("cannot retrive current window")
39 | }
40 | let backgroundView = PokerPresenterView(frame: keyWindow.frame)
41 | keyWindow.addSubview(backgroundView)
42 |
43 | self.keyWindow = keyWindow
44 | self.backgroundView = backgroundView
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/iMemScan/Lib/KakaJSON/Metadata/Descriptor/ClassDescriptor.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ClassDescriptor.swift
3 | // KakaJSON
4 | //
5 | // Created by MJ Lee on 2019/7/31.
6 | // Copyright © 2019 MJ Lee. All rights reserved.
7 | //
8 |
9 | struct ClassDescriptor: ModelDescriptor {
10 | /// Flags describing the context, including its kind and format version
11 | let flags: ContextDescriptorFlags
12 |
13 | /// The parent context, or null if this is a top-level context.
14 | let parent: RelativeContextPointer
15 |
16 | /// The name of the type
17 | var name: RelativeDirectPointer
18 |
19 | /// A pointer to the metadata access function for this type
20 | let accessFunctionPtr: RelativeDirectPointer
21 |
22 | /// A pointer to the field descriptor for the type, if any
23 | var fields: RelativeDirectPointer
24 |
25 | /// The type of the superclass, expressed as a mangled type name that can refer to the generic arguments of the subclass type
26 | let superclassType: RelativeDirectPointer
27 |
28 | /// If this descriptor does not have a resilient superclass, this is the negative size of metadata objects of this class (in words)
29 | let metadataNegativeSizeInWords: UInt32
30 |
31 | /// If this descriptor does not have a resilient superclass, this is the positive size of metadata objects of this class (in words)
32 | let metadataPositiveSizeInWords: UInt32
33 |
34 | /// The number of additional members added by this class to the class metadata
35 | let numImmediateMembers: UInt32
36 |
37 | /// The number of stored properties in the class, not including its superclasses. If there is a field offset vector, this is its length.
38 | let numFields: UInt32
39 |
40 | /// The offset of the field offset vector for this class's stored properties in its metadata, in words. 0 means there is no field offset vector
41 | let fieldOffsetVectorOffset: FieldOffsetPointer
42 |
43 | let genericContextHeader: TargetTypeGenericContextDescriptorHeader
44 | }
45 |
--------------------------------------------------------------------------------
/iMemScan/Lib/Appinfo/APP/AppController.m:
--------------------------------------------------------------------------------
1 | //
2 | // AppController.m
3 | // MemSearch
4 | //
5 | // Created by 李良林 on 2020/10/18.
6 | // Copyright © 2020 李良林. All rights reserved.
7 | //
8 |
9 | #import "AppController.h"
10 |
11 | @interface PrivateApi_LSApplicationWorkspace
12 | - (NSArray*)allInstalledApplications;
13 | - (bool)openApplicationWithBundleID:(id)arg1;
14 | - (NSArray*)privateURLSchemes;
15 | - (NSArray*)publicURLSchemes;
16 | @end
17 |
18 |
19 | #pragma mark -
20 |
21 | @implementation AppController
22 | {
23 | PrivateApi_LSApplicationWorkspace* _workspace;
24 | NSArray* _installedApplications;
25 | }
26 |
27 | - (instancetype)init
28 | {
29 | self = [super init];
30 | if(self != nil)
31 | {
32 | _workspace = [NSClassFromString(@"LSApplicationWorkspace") new];
33 | }
34 |
35 | return self;
36 | }
37 |
38 | - (NSArray*)privateURLSchemes
39 | {
40 | return [_workspace privateURLSchemes];
41 | }
42 |
43 | - (NSArray*)publicURLSchemes
44 | {
45 | return [_workspace publicURLSchemes];
46 | }
47 |
48 | - (NSArray*)readApplications
49 | {
50 | NSArray* allInstalledApplications = [_workspace allInstalledApplications];
51 | NSMutableArray* applications = [NSMutableArray arrayWithCapacity:allInstalledApplications.count];
52 | for(id proxy in allInstalledApplications)
53 | {
54 | App* app = [App appWithPrivateProxy:proxy];
55 | if(!app.isHiddenApp)
56 | {
57 | [applications addObject:app];
58 | }
59 | }
60 |
61 | return applications;
62 | }
63 |
64 | - (NSArray*)installedApplications
65 | {
66 | if(nil == _installedApplications)
67 | {
68 | _installedApplications = [self readApplications];
69 | }
70 |
71 | return _installedApplications;
72 | }
73 |
74 | - (BOOL)openAppWithBundleIdentifier:(NSString *)bundleIdentifier
75 | {
76 | return (BOOL)[_workspace openApplicationWithBundleID:bundleIdentifier];
77 | }
78 |
79 | + (instancetype)sharedInstance
80 | {
81 | static dispatch_once_t once;
82 | static id sharedInstance;
83 | dispatch_once(&once, ^{
84 | sharedInstance = [[self alloc] init];
85 | });
86 | return sharedInstance;
87 | }
88 |
89 | @end
90 |
--------------------------------------------------------------------------------
/iMemScan/Lib/MJRefresh/MJRefreshConst.m:
--------------------------------------------------------------------------------
1 | // 代码地址: https://github.com/CoderMJLee/MJRefresh
2 | // 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
3 | #import
4 |
5 | const CGFloat MJRefreshLabelLeftInset = 25;
6 | const CGFloat MJRefreshHeaderHeight = 54.0;
7 | const CGFloat MJRefreshFooterHeight = 44.0;
8 | const CGFloat MJRefreshTrailWidth = 60.0;
9 | const CGFloat MJRefreshFastAnimationDuration = 0.25;
10 | const CGFloat MJRefreshSlowAnimationDuration = 0.4;
11 |
12 | NSString *const MJRefreshKeyPathContentOffset = @"contentOffset";
13 | NSString *const MJRefreshKeyPathContentInset = @"contentInset";
14 | NSString *const MJRefreshKeyPathContentSize = @"contentSize";
15 | NSString *const MJRefreshKeyPathPanState = @"state";
16 |
17 | NSString *const MJRefreshHeaderLastUpdatedTimeKey = @"MJRefreshHeaderLastUpdatedTimeKey";
18 |
19 | NSString *const MJRefreshHeaderIdleText = @"MJRefreshHeaderIdleText";
20 | NSString *const MJRefreshHeaderPullingText = @"MJRefreshHeaderPullingText";
21 | NSString *const MJRefreshHeaderRefreshingText = @"MJRefreshHeaderRefreshingText";
22 |
23 | NSString *const MJRefreshTrailerIdleText = @"MJRefreshTrailerIdleText";
24 | NSString *const MJRefreshTrailerPullingText = @"MJRefreshTrailerPullingText";
25 |
26 | NSString *const MJRefreshAutoFooterIdleText = @"MJRefreshAutoFooterIdleText";
27 | NSString *const MJRefreshAutoFooterRefreshingText = @"MJRefreshAutoFooterRefreshingText";
28 | NSString *const MJRefreshAutoFooterNoMoreDataText = @"MJRefreshAutoFooterNoMoreDataText";
29 |
30 | NSString *const MJRefreshBackFooterIdleText = @"MJRefreshBackFooterIdleText";
31 | NSString *const MJRefreshBackFooterPullingText = @"MJRefreshBackFooterPullingText";
32 | NSString *const MJRefreshBackFooterRefreshingText = @"MJRefreshBackFooterRefreshingText";
33 | NSString *const MJRefreshBackFooterNoMoreDataText = @"MJRefreshBackFooterNoMoreDataText";
34 |
35 | NSString *const MJRefreshHeaderLastTimeText = @"";
36 | NSString *const MJRefreshHeaderDateTodayText = @"";
37 | NSString *const MJRefreshHeaderNoneLastDateText = @"";
38 |
--------------------------------------------------------------------------------
/iMemScan/Lib/KakaJSON/Extension/Pointer+KJ.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Pointer+KJ.swift
3 | // KakaJSON
4 | //
5 | // Created by MJ Lee on 2019/8/1.
6 | // Copyright © 2019 MJ Lee. All rights reserved.
7 | //
8 |
9 | extension UnsafePointer {
10 | var kj_raw: UnsafeRawPointer {
11 | return UnsafeRawPointer(self)
12 | }
13 | var kj_mutable: UnsafeMutablePointer {
14 | return UnsafeMutablePointer(mutating: self)
15 | }
16 | }
17 |
18 | extension UnsafeMutablePointer {
19 | var kj_raw: UnsafeMutableRawPointer {
20 | return UnsafeMutableRawPointer(self)
21 | }
22 |
23 | var kj_immutable: UnsafePointer {
24 | return UnsafePointer(self)
25 | }
26 | }
27 |
28 | extension UnsafeRawPointer {
29 | var kj_mutable: UnsafeMutableRawPointer {
30 | return UnsafeMutableRawPointer(mutating: self)
31 | }
32 |
33 | static func ~>(ptr: UnsafeRawPointer, type: T.Type) -> UnsafePointer {
34 | return ptr.assumingMemoryBound(to: type)
35 | }
36 | }
37 |
38 | extension UnsafeMutableRawPointer {
39 | var kj_immutable: UnsafeRawPointer {
40 | return UnsafeRawPointer(self)
41 | }
42 |
43 | func kj_set(_ value: Any, _ type: Any.Type) {
44 | return typeProxy(type)._set(value, self)
45 | }
46 |
47 | func kj_get(_ type: Any.Type) -> Any {
48 | return typeProxy(type)._get(self)
49 | }
50 |
51 | static func ~>(ptr: UnsafeMutableRawPointer, type: T.Type) -> UnsafeMutablePointer {
52 | return ptr.assumingMemoryBound(to: type)
53 | }
54 | }
55 |
56 | private extension TypeProxy {
57 | static func _set(_ value: Any, _ ptr: UnsafeMutableRawPointer) {
58 | (value as? Self).flatMap { (ptr ~> self).pointee = $0 }
59 | }
60 |
61 | static func _get(_ ptr: UnsafeMutableRawPointer) -> Any {
62 | return (ptr ~> self).pointee
63 | }
64 | }
65 |
66 | infix operator ~>> : MultiplicationPrecedence
67 | func ~>> (type1: T1, type2: T2.Type) -> T2 {
68 | return unsafeBitCast(type1, to: type2)
69 | }
70 |
71 | infix operator ~> : MultiplicationPrecedence
72 |
--------------------------------------------------------------------------------
/iMemScan/Base.lproj/LaunchScreen.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/iMemScan/Tool/VMem/VMTool.h:
--------------------------------------------------------------------------------
1 | //
2 | // VMTool.h
3 | // ViewMem
4 | //
5 | // Created by HaoCold on 2020/8/26.
6 | // Copyright © 2020 HaoCold. All rights reserved.
7 | //
8 |
9 | #import
10 | #import "VMTypeHeader.h"
11 |
12 | @class MemRecordModel;
13 |
14 | NS_ASSUME_NONNULL_BEGIN
15 |
16 | typedef void(^VMToolSearchBlock)(NSInteger count, NSArray *array);
17 |
18 | @interface VMTool : NSObject
19 |
20 | + (instancetype)share;
21 |
22 | - (void)setPid:(int)pid name:(NSString *)name;
23 | - (mach_port_t)getTask;
24 |
25 | //-(void)kais:(uint64_t)address bt:(NSString *)Bytes;
26 |
27 | // 搜索
28 | - (void)nearMemSearch:(NSString *)value type:(VMMemValueType)type range:(int)range callback:(VMToolSearchBlock)block;
29 | - (void)searchValue:(NSString *)value type:(VMMemValueType)type comparison:(VMMemComparison)comparison callback:(VMToolSearchBlock)block;
30 | - (void)modifyValue:(NSString *)value address:(NSString *)address type:(VMMemValueType)type;
31 |
32 | - (void)reset;
33 | - (void)refreshWithCallback:(VMToolSearchBlock)block;
34 |
35 | // 查看内存
36 | - (NSArray *)memory:(NSString *)address size:(NSString *)size type:(VMMemSearchType)type valueType:(VMMemValueType)valueType;
37 |
38 | // 邻近范围
39 | - (int)rangeValue;
40 | - (NSString *)rangeStringValue;
41 | - (void)setRange:(NSString *)range;
42 |
43 | // 下限
44 | - (uint64_t)addrLowValue;
45 | - (NSString *)addrRange;
46 | - (void)setAddrRange:(NSString *)low;
47 |
48 | // 上限
49 | - (uint64_t)addrUppValue;
50 | - (NSString *)addrRangeUpp;
51 | - (void)setAddrRangeUpp:(NSString *)Upp;
52 |
53 | // 结果数里限制
54 | - (void)setLimitCount:(NSString *)count;
55 | - (NSInteger)limitCount;
56 |
57 | // 定时修改
58 | - (void)setDuration:(NSString *)duration;
59 | - (NSInteger)duration;
60 | - (void)setDuration1:(NSString *)duration;
61 | - (NSInteger)duration1;
62 |
63 | // 类型对应的 枚举
64 | - (NSArray *)allKeys;
65 | - (NSDictionary *)keyValues;
66 |
67 |
68 | // 修改中
69 | @property (nonatomic, assign) BOOL modifying;
70 | // 一键修改
71 | //- (void)oneKeyModify:(MemRecordModel *)model;
72 | // 一键设置
73 | - (void)oneKeySetup:(NSArray *)array;
74 |
75 | @end
76 |
77 | NS_ASSUME_NONNULL_END
78 |
--------------------------------------------------------------------------------
/iMemScan/Lib/AlertView/PokerConfirmRepresentable.swift:
--------------------------------------------------------------------------------
1 | //
2 | // PokerConfirmRepresentable.swift
3 | // PokerCard
4 | //
5 | // Created by Weslie Chen on 2019/10/16.
6 | // Copyright © 2019 Weslie (https://www.iweslie.com)
7 | //
8 | // Permission is hereby granted, free of charge, to any person obtaining a copy
9 | // of this software and associated documentation files (the "Software"), to deal
10 | // in the Software without restriction, including without limitation the rights
11 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12 | // copies of the Software, and to permit persons to whom the Software is
13 | // furnished to do so, subject to the following conditions:
14 | //
15 | // The above copyright notice and this permission notice shall be included in
16 | // all copies or substantial portions of the Software.
17 | //
18 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24 | // THE SOFTWARE.
25 | //
26 |
27 | import UIKit
28 |
29 | protocol PokerConfirmRepresentable {
30 | func setupCancelButton(with title: String?)
31 | }
32 |
33 | extension PokerConfirmRepresentable {
34 | func setupCancelButton(with title: String) {}
35 |
36 | func setupConfirmButton(for pokerView: PokerView, with title: String) -> PKButton {
37 | let button = PKButton(title: "Confirm", fontSize: 20)
38 | button.isConfirmButton = true
39 | button.addTarget(pokerView, action: #selector(pokerView.dismiss), for: .touchUpInside)
40 | button.backgroundColor = PKColor.blue
41 | pokerView.addSubview(button)
42 | button.constraint(withLeadingTrailing: 40)
43 | button.heightAnchor.constraint(equalToConstant: 38).isActive = true
44 |
45 | return button
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/iMemScan/Ctrl/Set/AppHtmlCtrl.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AppHtmlCtrl.swift
3 | // YMTool
4 | //
5 | // Created by yiming on 2021/7/8.
6 | //
7 |
8 | import UIKit
9 | import WebKit
10 |
11 | class AppHtmlCtrl: UIViewController, WKUIDelegate, WKNavigationDelegate {
12 |
13 | override func viewDidLoad() {
14 | super.viewDidLoad()
15 |
16 | // Do any additional setup after loading the view.
17 |
18 | navigationItem.title = NSLocalizedString("Release Notes", comment: "")
19 | setupViews()
20 | }
21 |
22 | func setupViews() {
23 | navigationController?.navigationBar.shadowImage = UIImage()
24 | navigationItem.largeTitleDisplayMode = .never
25 |
26 | view.addSubview(webView)
27 | }
28 |
29 | @objc func buttonAction(_ button: UIButton?) {
30 | if button?.tag == 0 {
31 | dismiss(animated: true)
32 | }
33 | }
34 |
35 | // MARK: - 懒加载
36 |
37 | lazy var webView: WKWebView = {
38 | let webView = WKWebView()
39 | webView.frame = self.view.bounds
40 | webView.uiDelegate = self
41 | webView.navigationDelegate = self
42 | webView.allowsBackForwardNavigationGestures = true
43 |
44 | let backForwardList = webView.backForwardList
45 |
46 | let bundlePath = Bundle.main.bundlePath
47 |
48 | let path = "file://\(bundlePath)/LocalFiles/updaterecord.html"
49 | let request = URLRequest(url: URL(string: path)!)
50 |
51 | // 加载本地html文件
52 | webView.load(request)
53 | // 页面后退
54 | webView.goBack()
55 | // 页面前进
56 | webView.goForward()
57 | // 刷新当前页面
58 | webView.reload()
59 |
60 | return webView
61 | }()
62 |
63 |
64 | /*
65 | // MARK: - Navigation
66 |
67 | // In a storyboard-based application, you will often want to do a little preparation before navigation
68 | override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
69 | // Get the new view controller using segue.destination.
70 | // Pass the selected object to the new view controller.
71 | }
72 | */
73 |
74 | }
75 |
--------------------------------------------------------------------------------
/iMemScan/Lib/MD5/StringMD5.swift:
--------------------------------------------------------------------------------
1 | //
2 | // StringMD5.swift
3 | // iMemScan
4 | //
5 | // Created by 李良林 on 2020/12/9.
6 | // Copyright © 2020 李良林. All rights reserved.
7 | //
8 |
9 | import UIKit
10 | import CommonCrypto
11 |
12 | extension String {
13 |
14 | // MARK: - 32位 小写
15 |
16 | func md5ForLower32Bate() -> String {
17 | let str = self.cString(using: String.Encoding.utf8)
18 | let strLen = CUnsignedInt(self.lengthOfBytes(using: String.Encoding.utf8))
19 | let result = UnsafeMutablePointer.allocate(capacity: Int(CC_MD5_DIGEST_LENGTH))
20 |
21 | CC_MD5(str!, strLen, result)
22 |
23 | let hash = NSMutableString()
24 |
25 | for i in 0 ..< Int(CC_MD5_DIGEST_LENGTH) {
26 | hash.appendFormat("%02x", result[i])
27 | }
28 |
29 | return String(format: hash as String)
30 | }
31 | }
32 |
33 | class Filezmd5: NSObject {
34 |
35 | static func fileMD5(path: String) -> String? {
36 |
37 | let handle = FileHandle(forReadingAtPath: path)
38 |
39 | if handle == nil {
40 | return nil
41 | }
42 |
43 | let ctx = UnsafeMutablePointer.allocate(capacity: MemoryLayout.size)
44 |
45 | CC_MD5_Init(ctx)
46 |
47 | var done = false
48 |
49 | while !done {
50 | let fileData = handle?.readData(ofLength: 256)
51 | fileData?.withUnsafeBytes {(bytes: UnsafePointer)->Void in
52 | CC_MD5_Update(ctx, bytes, CC_LONG(fileData!.count))
53 | }
54 |
55 | if fileData?.count == 0 {
56 | done = true
57 | }
58 | }
59 |
60 | //unsigned char digest[CC_MD5_DIGEST_LENGTH];
61 | let digestLen = Int(CC_MD5_DIGEST_LENGTH)
62 | let digest = UnsafeMutablePointer.allocate(capacity: digestLen)
63 | CC_MD5_Final(digest, ctx);
64 |
65 | var hash = ""
66 | for i in 0..
10 |
11 | @class NSString, NSArray, NSDictionary;
12 |
13 | @interface NSTask : NSObject
14 |
15 | // Create an NSTask which can be run at a later time
16 | // An NSTask can only be run once. Subsequent attempts to
17 | // run an NSTask will raise.
18 | // Upon task death a notification will be sent
19 | // { Name = NSTaskDidTerminateNotification; object = task; }
20 | //
21 |
22 | - (instancetype)init;
23 |
24 | // set parameters
25 | // these methods can only be done before a launch
26 | // if not set, use current
27 | // if not set, use current
28 |
29 | // set standard I/O channels; may be either an NSFileHandle or an NSPipe
30 | - (void)setStandardInput:(id)input;
31 | - (void)setStandardOutput:(id)output;
32 | - (void)setStandardError:(id)error;
33 |
34 | // get parameters
35 | @property (NS_NONATOMIC_IOSONLY, copy) NSString *launchPath;
36 | @property (NS_NONATOMIC_IOSONLY, copy) NSArray *arguments;
37 | @property (NS_NONATOMIC_IOSONLY, copy) NSDictionary *environment;
38 | @property (NS_NONATOMIC_IOSONLY, copy) NSString *currentDirectoryPath;
39 |
40 | // get standard I/O channels; could be either an NSFileHandle or an NSPipe
41 | - (id)standardInput;
42 | - (id)standardOutput;
43 | - (id)standardError;
44 |
45 | // actions
46 | - (void)launch;
47 |
48 | - (void)interrupt; // Not always possible. Sends SIGINT.
49 | - (void)terminate; // Not always possible. Sends SIGTERM.
50 |
51 | @property (NS_NONATOMIC_IOSONLY, readonly) BOOL suspend;
52 | @property (NS_NONATOMIC_IOSONLY, readonly) BOOL resume;
53 |
54 | // status
55 | @property (NS_NONATOMIC_IOSONLY, readonly) int processIdentifier;
56 | @property (NS_NONATOMIC_IOSONLY, getter=isRunning, readonly) BOOL running;
57 |
58 | @property (NS_NONATOMIC_IOSONLY, readonly) int terminationStatus;
59 |
60 | @end
61 |
62 | @interface NSTask (NSTaskConveniences)
63 |
64 | + (NSTask *)launchedTaskWithLaunchPath:(NSString *)path arguments:(NSArray *)arguments;
65 | // convenience; create and launch
66 |
67 | - (void)waitUntilExit;
68 | // poll the runLoop in defaultMode until task completes
69 |
70 | @end
71 |
72 | FOUNDATION_EXPORT NSString * const NSTaskDidTerminateNotification;
73 |
--------------------------------------------------------------------------------
/iMemScan/Tool/Jailbreak/Sh/NSTask.h:
--------------------------------------------------------------------------------
1 | //
2 | // NSTask.h
3 | // MemSearchTest
4 | //
5 | // Created by 李良林 on 2020/11/21.
6 | // Copyright © 2020 李良林. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @class NSString, NSArray, NSDictionary;
12 |
13 | @interface NSTask : NSObject
14 |
15 | // Create an NSTask which can be run at a later time
16 | // An NSTask can only be run once. Subsequent attempts to
17 | // run an NSTask will raise.
18 | // Upon task death a notification will be sent
19 | // { Name = NSTaskDidTerminateNotification; object = task; }
20 | //
21 |
22 | - (instancetype)init;
23 |
24 | // set parameters
25 | // these methods can only be done before a launch
26 | // if not set, use current
27 | // if not set, use current
28 |
29 | // set standard I/O channels; may be either an NSFileHandle or an NSPipe
30 | - (void)setStandardInput:(id)input;
31 | - (void)setStandardOutput:(id)output;
32 | - (void)setStandardError:(id)error;
33 |
34 | // get parameters
35 | @property (NS_NONATOMIC_IOSONLY, copy) NSString *launchPath;
36 | @property (NS_NONATOMIC_IOSONLY, copy) NSArray *arguments;
37 | @property (NS_NONATOMIC_IOSONLY, copy) NSDictionary *environment;
38 | @property (NS_NONATOMIC_IOSONLY, copy) NSString *currentDirectoryPath;
39 |
40 | // get standard I/O channels; could be either an NSFileHandle or an NSPipe
41 | - (id)standardInput;
42 | - (id)standardOutput;
43 | - (id)standardError;
44 |
45 | // actions
46 | - (void)launch;
47 |
48 | - (void)interrupt; // Not always possible. Sends SIGINT.
49 | - (void)terminate; // Not always possible. Sends SIGTERM.
50 |
51 | @property (NS_NONATOMIC_IOSONLY, readonly) BOOL suspend;
52 | @property (NS_NONATOMIC_IOSONLY, readonly) BOOL resume;
53 |
54 | // status
55 | @property (NS_NONATOMIC_IOSONLY, readonly) int processIdentifier;
56 | @property (NS_NONATOMIC_IOSONLY, getter=isRunning, readonly) BOOL running;
57 |
58 | @property (NS_NONATOMIC_IOSONLY, readonly) int terminationStatus;
59 |
60 | @end
61 |
62 | @interface NSTask (NSTaskConveniences)
63 |
64 | + (NSTask *)launchedTaskWithLaunchPath:(NSString *)path arguments:(NSArray *)arguments;
65 | // convenience; create and launch
66 |
67 | - (void)waitUntilExit;
68 | // poll the runLoop in defaultMode until task completes
69 |
70 | @end
71 |
72 | FOUNDATION_EXPORT NSString * const NSTaskDidTerminateNotification;
73 |
--------------------------------------------------------------------------------
/iMemScan/Ctrl/OneKey()/VMOneKeyTool.m:
--------------------------------------------------------------------------------
1 | //
2 | // VMOneKeyTool.m
3 | // MemView
4 | //
5 | // Created by HaoCold on 2020/9/29.
6 | // Copyright © 2020 HaoCold. All rights reserved.
7 | //
8 |
9 | #import "VMOneKeyTool.h"
10 | #import "YYModel.h"
11 | #import "VMOneKeyModel.h"
12 | #import
13 |
14 | #define doc [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:@"iMemScan(Script)"]
15 |
16 | #define kPath [doc stringByAppendingPathComponent:@"recordData.data"]
17 |
18 | NSMutableArray *_allData;
19 |
20 | @implementation VMOneKeyTool
21 |
22 | + (void)setup
23 | {
24 | static dispatch_once_t onceToken;
25 | dispatch_once(&onceToken, ^{
26 |
27 | if (![[NSFileManager defaultManager] fileExistsAtPath:kPath]) {
28 | [[NSFileManager defaultManager] createDirectoryAtPath:doc withIntermediateDirectories:YES attributes:nil error:nil];
29 | [[NSFileManager defaultManager] createFileAtPath:kPath contents:nil attributes:nil];
30 | }
31 |
32 | NSArray *array = @[];
33 | NSString *string = [[NSString alloc] initWithContentsOfFile:kPath encoding:NSUTF8StringEncoding error:NULL];
34 | //NSLog(@"*** string = %@",string);
35 | if (string.length > 0) {
36 | array = [NSArray yy_modelArrayWithClass:[VMOneKeyModel class] json:string];
37 | }
38 | _allData = @[].mutableCopy;
39 | if (array.count > 0) {
40 | [_allData addObjectsFromArray:array];
41 | }
42 |
43 | [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(save) name:UIApplicationWillTerminateNotification object:nil];
44 | });
45 | }
46 |
47 | + (NSArray *)allRecords
48 | {
49 | return [NSArray arrayWithArray:_allData];
50 | }
51 |
52 | + (void)deleteRecord:(VMOneKeyModel *)model
53 | {
54 | [_allData removeObject:model];
55 | }
56 |
57 | + (void)saveRecord:(VMOneKeyModel *)model
58 | {
59 | [_allData addObject:model];
60 | }
61 |
62 | + (void)save
63 | {
64 | NSString *string = [_allData yy_modelToJSONString];
65 | [string writeToFile:kPath atomically:YES encoding:NSUTF8StringEncoding error:NULL];
66 | }
67 |
68 | + (void)exchange:(NSInteger)idx1 index:(NSInteger)idx2
69 | {
70 | [_allData exchangeObjectAtIndex:idx1 withObjectAtIndex:idx2];
71 | }
72 |
73 | @end
74 |
--------------------------------------------------------------------------------
/iMemScan/Lib/Alamofire/StringEncoding+Alamofire.swift:
--------------------------------------------------------------------------------
1 | //
2 | // StringEncoding+Alamofire.swift
3 | //
4 | // Copyright (c) 2020 Alamofire Software Foundation (http://alamofire.org/)
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 | //
24 |
25 | import Foundation
26 |
27 | extension String.Encoding {
28 | /// Creates an encoding from the IANA charset name.
29 | ///
30 | /// - Notes: These mappings match those [provided by CoreFoundation](https://opensource.apple.com/source/CF/CF-476.18/CFStringUtilities.c.auto.html)
31 | ///
32 | /// - Parameter name: IANA charset name.
33 | init?(ianaCharsetName name: String) {
34 | switch name.lowercased() {
35 | case "utf-8":
36 | self = .utf8
37 | case "iso-8859-1":
38 | self = .isoLatin1
39 | case "unicode-1-1", "iso-10646-ucs-2", "utf-16":
40 | self = .utf16
41 | case "utf-16be":
42 | self = .utf16BigEndian
43 | case "utf-16le":
44 | self = .utf16LittleEndian
45 | case "utf-32":
46 | self = .utf32
47 | case "utf-32be":
48 | self = .utf32BigEndian
49 | case "utf-32le":
50 | self = .utf32LittleEndian
51 | default:
52 | return nil
53 | }
54 | }
55 | }
56 |
--------------------------------------------------------------------------------
/iMemScan/Lib/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.m:
--------------------------------------------------------------------------------
1 | //
2 | // MJRefreshBackStateFooter.m
3 | // MJRefreshExample
4 | //
5 | // Created by MJ Lee on 15/6/13.
6 | // Copyright © 2015年 小码哥. All rights reserved.
7 | //
8 |
9 | #import "MJRefreshBackStateFooter.h"
10 |
11 | @interface MJRefreshBackStateFooter()
12 | {
13 | /** 显示刷新状态的label */
14 | __unsafe_unretained UILabel *_stateLabel;
15 | }
16 | /** 所有状态对应的文字 */
17 | @property (strong, nonatomic) NSMutableDictionary *stateTitles;
18 | @end
19 |
20 | @implementation MJRefreshBackStateFooter
21 | #pragma mark - 懒加载
22 | - (NSMutableDictionary *)stateTitles
23 | {
24 | if (!_stateTitles) {
25 | self.stateTitles = [NSMutableDictionary dictionary];
26 | }
27 | return _stateTitles;
28 | }
29 |
30 | - (UILabel *)stateLabel
31 | {
32 | if (!_stateLabel) {
33 | [self addSubview:_stateLabel = [UILabel mj_label]];
34 | }
35 | return _stateLabel;
36 | }
37 |
38 | #pragma mark - 公共方法
39 | - (void)setTitle:(NSString *)title forState:(MJRefreshState)state
40 | {
41 | if (title == nil) return;
42 | self.stateTitles[@(state)] = title;
43 | self.stateLabel.text = self.stateTitles[@(self.state)];
44 | }
45 |
46 | - (NSString *)titleForState:(MJRefreshState)state {
47 | return self.stateTitles[@(state)];
48 | }
49 |
50 | #pragma mark - 重写父类的方法
51 | - (void)prepare
52 | {
53 | [super prepare];
54 |
55 | // 初始化间距
56 | self.labelLeftInset = MJRefreshLabelLeftInset;
57 |
58 | // 初始化文字
59 | [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshBackFooterIdleText] forState:MJRefreshStateIdle];
60 | [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshBackFooterPullingText] forState:MJRefreshStatePulling];
61 | [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshBackFooterRefreshingText] forState:MJRefreshStateRefreshing];
62 | [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshBackFooterNoMoreDataText] forState:MJRefreshStateNoMoreData];
63 | }
64 |
65 | - (void)placeSubviews
66 | {
67 | [super placeSubviews];
68 |
69 | if (self.stateLabel.constraints.count) return;
70 |
71 | // 状态标签
72 | self.stateLabel.frame = self.bounds;
73 | }
74 |
75 | - (void)setState:(MJRefreshState)state
76 | {
77 | MJRefreshCheckState
78 |
79 | // 设置状态文字
80 | self.stateLabel.text = self.stateTitles[@(state)];
81 | }
82 | @end
83 |
--------------------------------------------------------------------------------
/iMemScan/Lib/Drops/WindowViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Drops
3 | //
4 | // Copyright (c) 2021-Present Omar Albeik - https://github.com/omaralbeik
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 |
24 | import UIKit
25 |
26 | final class WindowViewController: UIViewController {
27 | init() {
28 | let view = PassthroughView()
29 | let window = PassthroughWindow(hitTestView: view)
30 | self.window = window
31 | super.init(nibName: nil, bundle: nil)
32 | self.view = view
33 | window.rootViewController = self
34 | }
35 |
36 | required init?(coder: NSCoder) {
37 | return nil
38 | }
39 |
40 | func install() {
41 | window?.frame = UIScreen.main.bounds
42 | window?.isHidden = false
43 | if #available(iOS 13, *) {
44 | let activeScene = UIApplication.shared.connectedScenes
45 | .compactMap { $0 as? UIWindowScene }
46 | .first { $0.activationState == .foregroundActive }
47 | window?.windowScene = activeScene
48 | }
49 | }
50 |
51 | func uninstall() {
52 | window?.isHidden = true
53 | if #available(iOS 13, *) {
54 | window?.windowScene = nil
55 | }
56 | window = nil
57 | }
58 |
59 | var window: UIWindow?
60 | }
61 |
--------------------------------------------------------------------------------
/iMemScan/Lib/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.m:
--------------------------------------------------------------------------------
1 | //
2 | // MJRefreshAutoNormalFooter.m
3 | // MJRefreshExample
4 | //
5 | // Created by MJ Lee on 15/4/24.
6 | // Copyright (c) 2015年 小码哥. All rights reserved.
7 | //
8 |
9 | #import "MJRefreshAutoNormalFooter.h"
10 |
11 | @interface MJRefreshAutoNormalFooter()
12 | @property (weak, nonatomic) UIActivityIndicatorView *loadingView;
13 | @end
14 |
15 | @implementation MJRefreshAutoNormalFooter
16 | #pragma mark - 懒加载子控件
17 | - (UIActivityIndicatorView *)loadingView
18 | {
19 | if (!_loadingView) {
20 | UIActivityIndicatorView *loadingView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:_activityIndicatorViewStyle];
21 | loadingView.hidesWhenStopped = YES;
22 | [self addSubview:_loadingView = loadingView];
23 | }
24 | return _loadingView;
25 | }
26 |
27 | - (void)setActivityIndicatorViewStyle:(UIActivityIndicatorViewStyle)activityIndicatorViewStyle
28 | {
29 | _activityIndicatorViewStyle = activityIndicatorViewStyle;
30 |
31 | [self.loadingView removeFromSuperview];
32 | self.loadingView = nil;
33 | [self setNeedsLayout];
34 | }
35 | #pragma mark - 重写父类的方法
36 | - (void)prepare
37 | {
38 | [super prepare];
39 |
40 | #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000
41 | if (@available(iOS 13.0, *)) {
42 | _activityIndicatorViewStyle = UIActivityIndicatorViewStyleMedium;
43 | return;
44 | }
45 | #endif
46 |
47 | _activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray;
48 | }
49 |
50 | - (void)placeSubviews
51 | {
52 | [super placeSubviews];
53 |
54 | if (self.loadingView.constraints.count) return;
55 |
56 | // 圈圈
57 | CGFloat loadingCenterX = self.mj_w * 0.5;
58 | if (!self.isRefreshingTitleHidden) {
59 | loadingCenterX -= self.stateLabel.mj_textWidth * 0.5 + self.labelLeftInset;
60 | }
61 | CGFloat loadingCenterY = self.mj_h * 0.5;
62 | self.loadingView.center = CGPointMake(loadingCenterX, loadingCenterY);
63 | }
64 |
65 | - (void)setState:(MJRefreshState)state
66 | {
67 | MJRefreshCheckState
68 |
69 | // 根据状态做事情
70 | if (state == MJRefreshStateNoMoreData || state == MJRefreshStateIdle) {
71 | [self.loadingView stopAnimating];
72 | } else if (state == MJRefreshStateRefreshing) {
73 | [self.loadingView startAnimating];
74 | }
75 | }
76 |
77 | @end
78 |
--------------------------------------------------------------------------------
/iMemScan/Lib/KakaJSON/Extension/Data+KJ.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Data+KJ.swift
3 | // KakaJSON
4 | //
5 | // Created by MJ Lee on 2019/8/18.
6 | // Copyright © 2019 MJ Lee. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | extension Data: KJCompatible {}
12 | extension NSData: KJCompatible {}
13 |
14 | public extension KJ where Base == Data {
15 | /// JSONObject -> Model
16 | func model(_ type: M.Type) -> M? {
17 | return model(type: type) as? M
18 | }
19 |
20 | /// JSONObject -> Model
21 | func model(type: Convertible.Type) -> Convertible? {
22 | if let json = JSONSerialization.kj_JSON(base, [String: Any].self) {
23 | return json.kj.model(type: type)
24 | }
25 | Logger.error("Failed to get JSON from JSONData.")
26 | return nil
27 | }
28 |
29 | /// JSONObjectArray -> ModelArray
30 | func modelArray(_ type: M.Type) -> [M] {
31 | return modelArray(type: type) as! [M]
32 | }
33 |
34 | /// JSONObjectArray -> ModelArray
35 | func modelArray(type: Convertible.Type) -> [Convertible] {
36 | if let json = JSONSerialization.kj_JSON(base, [Any].self) {
37 | return json.kj.modelArray(type: type)
38 | }
39 | Logger.error("Failed to get JSON from JSONData.")
40 | return []
41 | }
42 | }
43 |
44 | public extension KJ where Base: NSData {
45 | /// JSONObject -> Model
46 | func model(_ type: M.Type) -> M? {
47 | return (base as Data).kj.model(type)
48 | }
49 |
50 | /// JSONObject -> Model
51 | func model(type: Convertible.Type) -> Convertible? {
52 | return (base as Data).kj.model(type: type)
53 | }
54 |
55 | /// JSONObjectArray -> ModelArray
56 | func modelArray(_ type: M.Type) -> [M] {
57 | return (base as Data).kj.modelArray(type)
58 | }
59 |
60 | /// JSONObjectArray -> ModelArray
61 | func modelArray(type: Convertible.Type) -> [Convertible] {
62 | return (base as Data).kj.modelArray(type: type)
63 | }
64 | }
65 |
66 | extension Data {
67 | func kj_fastModel(_ type: Convertible.Type) -> Convertible? {
68 | if let json = JSONSerialization.kj_JSON(self, [String: Any].self) {
69 | return json.kj_fastModel(type)
70 | }
71 | Logger.error("Failed to get JSON from JSONData.")
72 | return nil
73 | }
74 | }
75 |
--------------------------------------------------------------------------------
/iMemScan/SceneDelegate.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SceneDelegate.swift
3 | // iMemScan
4 | //
5 | // Created by yiming on 2021/8/12.
6 | //
7 |
8 | import UIKit
9 |
10 | class SceneDelegate: UIResponder, UIWindowSceneDelegate {
11 |
12 | var window: UIWindow?
13 |
14 |
15 | func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
16 | // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
17 | // If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
18 | // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).
19 | guard let _ = (scene as? UIWindowScene) else { return }
20 | }
21 |
22 | func sceneDidDisconnect(_ scene: UIScene) {
23 | // Called as the scene is being released by the system.
24 | // This occurs shortly after the scene enters the background, or when its session is discarded.
25 | // Release any resources associated with this scene that can be re-created the next time the scene connects.
26 | // The scene may re-connect later, as its session was not necessarily discarded (see `application:didDiscardSceneSessions` instead).
27 | }
28 |
29 | func sceneDidBecomeActive(_ scene: UIScene) {
30 | // Called when the scene has moved from an inactive state to an active state.
31 | // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive.
32 | }
33 |
34 | func sceneWillResignActive(_ scene: UIScene) {
35 | // Called when the scene will move from an active state to an inactive state.
36 | // This may occur due to temporary interruptions (ex. an incoming phone call).
37 | }
38 |
39 | func sceneWillEnterForeground(_ scene: UIScene) {
40 | // Called as the scene transitions from the background to the foreground.
41 | // Use this method to undo the changes made on entering the background.
42 | }
43 |
44 | func sceneDidEnterBackground(_ scene: UIScene) {
45 | // Called as the scene transitions from the foreground to the background.
46 | // Use this method to save data, release shared resources, and store enough scene-specific state information
47 | // to restore the scene back to its current state.
48 | }
49 |
50 |
51 | }
52 |
53 |
--------------------------------------------------------------------------------
/iMemScan/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.swift
3 | // iMemScan
4 | //
5 | // Created by yiming on 2021/8/4.
6 | //
7 |
8 | import UIKit
9 | import AVFoundation
10 | import MediaPlayer
11 |
12 | @main
13 | class AppDelegate: UIResponder, UIApplicationDelegate {
14 |
15 | var window: UIWindow?
16 | var audioPlayer:AVAudioPlayer?
17 |
18 | // 用于保存后台下载的completionHandler
19 | var backgroundSessionCompletionHandler: (() -> Void)?
20 |
21 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
22 | // Override point for customization after application launch.
23 |
24 | Audio()
25 | overrideUserInterfacrStyle()
26 |
27 | return true
28 | }
29 |
30 | // 禁用掉第三方输入法
31 | // func application(_ application: UIApplication, shouldAllowExtensionPointIdentifier extensionPointIdentifier: UIApplication.ExtensionPointIdentifier) -> Bool {
32 | // return false
33 | // }
34 |
35 | func Audio() {
36 |
37 | let bundlePath = Bundle.main.bundlePath
38 | let path = "file://\(bundlePath)/LocalFiles/music.m4a"
39 | let url = URL(string: path)!
40 |
41 | do {
42 | audioPlayer = try AVAudioPlayer(contentsOf: url)
43 | } catch {
44 | audioPlayer = nil
45 | }
46 |
47 | audioPlayer?.prepareToPlay()
48 | audioPlayer?.volume = 0
49 | audioPlayer?.numberOfLoops = -1 // 循环播放
50 |
51 | do {
52 | // 后台播放音频
53 | try AVAudioSession.sharedInstance().setCategory(.playback, options: .mixWithOthers)
54 | } catch {
55 |
56 | }
57 |
58 | // 接受远程控制
59 | UIApplication.shared.beginReceivingRemoteControlEvents()
60 | }
61 |
62 | // 进入后台模式
63 | func applicationDidEnterBackground(_ application: UIApplication) {
64 |
65 | do {
66 | try AVAudioSession.sharedInstance().setActive(true)
67 | audioPlayer?.play() // 播放
68 | } catch {
69 |
70 | }
71 | }
72 |
73 | // APP从后台进入到前台
74 | func applicationWillEnterForeground(_ application: UIApplication) {
75 |
76 | do {
77 | try AVAudioSession.sharedInstance().setActive(false)
78 | audioPlayer?.pause() // 暂停
79 | } catch {
80 |
81 | }
82 | }
83 | }
84 |
85 |
--------------------------------------------------------------------------------
/iMemScan/Lib/KakaJSON/Metadata/Descriptor/FieldDescriptor.swift:
--------------------------------------------------------------------------------
1 | //
2 | // FieldDescriptor.swift
3 | // KakaJSON
4 | //
5 | // Created by MJ Lee on 2019/7/31.
6 | // Copyright © 2019 MJ Lee. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | struct FieldRecord {
12 | let flags: Int32
13 | var _mangledTypeName: RelativeDirectPointer
14 | var _fieldName: RelativeDirectPointer
15 | var isVar: Bool { return (flags & 0x2) == 0x2 }
16 | mutating func fieldName() -> String { return String(cString: _fieldName.advanced()) }
17 | mutating func mangledTypeName() -> String { return String(cString: _mangledTypeName.advanced()) }
18 |
19 | mutating func type(_ genericContext: UnsafeRawPointer?,
20 | _ genericArguments: UnsafeRawPointer?) -> Any.Type {
21 | let name = _mangledTypeName.advanced()
22 | return _getTypeByMangledNameInContext(
23 | name,
24 | nameLength(name),
25 | genericContext,
26 | genericArguments
27 | )!
28 | }
29 |
30 | func nameLength(_ begin: UnsafeRawPointer) -> UInt {
31 | var end = begin
32 | let size = MemoryLayout.size
33 | while true {
34 | let cur = end.load(as: UInt8.self)
35 | if cur == 0 { break }
36 | end += 1
37 | if cur <= 0x17 {
38 | end += 4
39 | } else if cur <= 0x1F {
40 | end += size
41 | }
42 | }
43 | return UInt(end - begin)
44 | }
45 | }
46 |
47 | struct FieldDescriptor {
48 | let mangledTypeName: RelativeDirectPointer
49 | let superclass: RelativeDirectPointer
50 | let _kind : UInt16
51 | let fieldRecordSize : UInt16
52 | let numFields : UInt32
53 | var fieldRecords: FieldList
54 | var kind: FieldDescriptorKind { return FieldDescriptorKind(rawValue: _kind)! }
55 | }
56 |
57 | enum FieldDescriptorKind: UInt16 {
58 | case `struct`
59 | case `class`
60 | case `enum`
61 | case multiPayloadEnum
62 | case `protocol`
63 | case classProtocol
64 | case objCProtocol
65 | case objCClass
66 | }
67 |
68 | @_silgen_name("swift_getTypeByMangledNameInContext")
69 | private func _getTypeByMangledNameInContext(
70 | _ name: UnsafePointer,
71 | _ nameLength: UInt,
72 | _ genericContext: UnsafeRawPointer?,
73 | _ genericArguments: UnsafeRawPointer?)
74 | -> Any.Type?
75 |
--------------------------------------------------------------------------------
/iMemScan/Lib/Categories/UIResponder+JHRouter.h:
--------------------------------------------------------------------------------
1 | //
2 | // UIResponder+JHRouter.h
3 | // JHKit
4 | //
5 | // Created by HaoCold on 2017/12/7.
6 | // Copyright © 2017年 HaoCold. All rights reserved.
7 | //
8 | // MIT License
9 | //
10 | // Copyright (c) 2017 xjh093
11 | //
12 | // Permission is hereby granted, free of charge, to any person obtaining a copy
13 | // of this software and associated documentation files (the "Software"), to deal
14 | // in the Software without restriction, including without limitation the rights
15 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
16 | // copies of the Software, and to permit persons to whom the Software is
17 | // furnished to do so, subject to the following conditions:
18 | //
19 | // The above copyright notice and this permission notice shall be included in all
20 | // copies or substantial portions of the Software.
21 | //
22 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
25 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
26 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
27 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
28 | // SOFTWARE.
29 |
30 | #import
31 |
32 | @interface UIResponder (JHRouter)
33 |
34 | /**
35 | if
36 | [object respondsToSelector:NSSelectorFromString(selector)]
37 | or
38 | [selector isEqualToString:@"xxx"]
39 | you should do something.
40 |
41 | if you override this method, see this example:
42 |
43 | @code
44 | - (void)jh_routerWithSelector:(NSString *)selector sender:(id)sender info:(NSDictionary *)info{
45 | if ([self respondsToSelector:NSSelectorFromString(selector)]){
46 | [self performSelector:NSSelectorFromString(selector) withObjects:info];
47 | }
48 | else if ([selector isEqualToString:@"xxx"]) {
49 | // do something with info.
50 | }
51 | else{
52 |
53 | // This is important!!!
54 | // if you can't handle it, pass it to nextResponder to handle it.
55 |
56 | [self.nextResponder jh_routerWithSelector:selector sender:sender info:info];
57 | }
58 | }
59 |
60 | @endcode
61 |
62 | */
63 | - (void)jh_routerWithSelector:(NSString *)selector
64 | sender:(id)sender
65 | info:(NSDictionary *)info;
66 |
67 | @end
68 |
--------------------------------------------------------------------------------
/iMemScan/Lib/Categories/UIView+CGRect.m:
--------------------------------------------------------------------------------
1 | //
2 | // UIView+CGRect.m
3 | // MemModify
4 | //
5 | // Created by HaoCold on 2020/6/19.
6 | // Copyright © 2020 HaoCold. All rights reserved.
7 | //
8 |
9 | #import "UIView+CGRect.h"
10 |
11 | @implementation UIView (CGRect)
12 | - (CGFloat)left {
13 | return self.frame.origin.x;
14 | }
15 |
16 | - (void)setLeft:(CGFloat)x {
17 | CGRect frame = self.frame;
18 | frame.origin.x = x;
19 | self.frame = frame;
20 | }
21 |
22 | - (CGFloat)top {
23 | return self.frame.origin.y;
24 | }
25 |
26 | - (void)setTop:(CGFloat)y {
27 | CGRect frame = self.frame;
28 | frame.origin.y = y;
29 | self.frame = frame;
30 | }
31 |
32 | - (CGFloat)right {
33 | return self.frame.origin.x + self.frame.size.width;
34 | }
35 |
36 | - (void)setRight:(CGFloat)right {
37 | CGRect frame = self.frame;
38 | frame.origin.x = right - frame.size.width;
39 | self.frame = frame;
40 | }
41 |
42 | - (CGFloat)bottom {
43 | return self.frame.origin.y + self.frame.size.height;
44 | }
45 |
46 | - (void)setBottom:(CGFloat)bottom {
47 | CGRect frame = self.frame;
48 | frame.origin.y = bottom - frame.size.height;
49 | self.frame = frame;
50 | }
51 |
52 | - (CGFloat)width {
53 | return self.frame.size.width;
54 | }
55 |
56 | - (void)setWidth:(CGFloat)width {
57 | CGRect frame = self.frame;
58 | frame.size.width = width;
59 | self.frame = frame;
60 | }
61 |
62 | - (CGFloat)height {
63 | return self.frame.size.height;
64 | }
65 |
66 | - (void)setHeight:(CGFloat)height {
67 | CGRect frame = self.frame;
68 | frame.size.height = height;
69 | self.frame = frame;
70 | }
71 |
72 | - (CGFloat)centerX {
73 | return self.center.x;
74 | }
75 |
76 | - (void)setCenterX:(CGFloat)centerX {
77 | self.center = CGPointMake(centerX, self.center.y);
78 | }
79 |
80 | - (CGFloat)centerY {
81 | return self.center.y;
82 | }
83 |
84 | - (void)setCenterY:(CGFloat)centerY {
85 | self.center = CGPointMake(self.center.x, centerY);
86 | }
87 |
88 | - (CGPoint)origin {
89 | return self.frame.origin;
90 | }
91 |
92 | - (void)setOrigin:(CGPoint)origin {
93 | CGRect frame = self.frame;
94 | frame.origin = origin;
95 | self.frame = frame;
96 | }
97 |
98 | - (CGSize)size {
99 | return self.frame.size;
100 | }
101 |
102 | - (void)setSize:(CGSize)size {
103 | CGRect frame = self.frame;
104 | frame.size = size;
105 | self.frame = frame;
106 | }
107 | @end
108 |
--------------------------------------------------------------------------------
/iMemScan/Lib/KakaJSON/Extension/Array+KJ.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Array+KJ.swift
3 | // KakaJSON
4 | //
5 | // Created by MJ Lee on 2019/8/12.
6 | // Copyright © 2019 MJ Lee. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | extension NSArray: KJCompatible {}
12 | extension Array: KJCompatible {}
13 | extension Set: KJCompatible {}
14 | extension NSSet: KJCompatible {}
15 |
16 | public extension KJ where Base: ExpressibleByArrayLiteral & Sequence {
17 | /// JSONObjectArray -> EnumArray
18 | func enumArray(_ type: M.Type) -> [M] {
19 | return enumArray(type: type) as! [M]
20 | }
21 |
22 | /// JSONObjectArray -> EnumArray
23 | func enumArray(type: ConvertibleEnum.Type) -> [ConvertibleEnum] {
24 | guard let _ = Metadata.type(type) as? EnumType else { return [] }
25 | return base.compactMap {
26 | let vv = Values.value($0, type.kj_valueType)
27 | return type.kj_convert(from: vv as Any)
28 | }
29 | }
30 |
31 | /// JSONObjectArray -> ModelArray
32 | func modelArray(_ type: M.Type) -> [M] {
33 | return modelArray(type: type) as! [M]
34 | }
35 |
36 | /// JSONObjectArray -> ModelArray
37 | func modelArray(type: Convertible.Type) -> [Convertible] {
38 | guard let mt = Metadata.type(type) as? ModelType,
39 | let _ = mt.properties
40 | else { return [] }
41 | return base.compactMap {
42 | switch $0 {
43 | case let dict as [String: Any]: return dict.kj_fastModel(type)
44 | case let dict as Data: return dict.kj_fastModel(type)
45 | case let dict as String: return dict.kj_fastModel(type)
46 | default: return nil
47 | }
48 | }
49 | }
50 |
51 | /// ModelArray -> JSONObjectArray
52 | func JSONObjectArray() -> [[String: Any]] {
53 | return base.compactMap {
54 | ($0~! as? Convertible)?.kj_JSONObject()
55 | }
56 | }
57 |
58 | /// Array -> JSONArray
59 | func JSONArray() -> [Any] {
60 | return Values.JSONValue(base) as! [Any]
61 | }
62 |
63 | /// Array -> JSONString
64 | func JSONString(prettyPrinted: Bool = false) -> String {
65 | if let str = JSONSerialization.kj_string(JSONArray(),
66 | prettyPrinted: prettyPrinted) {
67 | return str
68 | }
69 | Logger.error("Failed to get JSONString from JSON.")
70 | return ""
71 | }
72 | }
73 |
--------------------------------------------------------------------------------
/iMemScan/Lib/Alamofire/HTTPMethod.swift:
--------------------------------------------------------------------------------
1 | //
2 | // HTTPMethod.swift
3 | //
4 | // Copyright (c) 2014-2018 Alamofire Software Foundation (http://alamofire.org/)
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 | //
24 |
25 | /// Type representing HTTP methods. Raw `String` value is stored and compared case-sensitively, so
26 | /// `HTTPMethod.get != HTTPMethod(rawValue: "get")`.
27 | ///
28 | /// See https://tools.ietf.org/html/rfc7231#section-4.3
29 | public struct HTTPMethod: RawRepresentable, Equatable, Hashable {
30 | /// `CONNECT` method.
31 | public static let connect = HTTPMethod(rawValue: "CONNECT")
32 | /// `DELETE` method.
33 | public static let delete = HTTPMethod(rawValue: "DELETE")
34 | /// `GET` method.
35 | public static let get = HTTPMethod(rawValue: "GET")
36 | /// `HEAD` method.
37 | public static let head = HTTPMethod(rawValue: "HEAD")
38 | /// `OPTIONS` method.
39 | public static let options = HTTPMethod(rawValue: "OPTIONS")
40 | /// `PATCH` method.
41 | public static let patch = HTTPMethod(rawValue: "PATCH")
42 | /// `POST` method.
43 | public static let post = HTTPMethod(rawValue: "POST")
44 | /// `PUT` method.
45 | public static let put = HTTPMethod(rawValue: "PUT")
46 | /// `TRACE` method.
47 | public static let trace = HTTPMethod(rawValue: "TRACE")
48 |
49 | public let rawValue: String
50 |
51 | public init(rawValue: String) {
52 | self.rawValue = rawValue
53 | }
54 | }
55 |
--------------------------------------------------------------------------------