├── LANRevealLoader.xcodeproj └── project.pbxproj ├── LANRevealLoader ├── LANRevealLoader-Prefix.pch ├── LANRevealLoader.mm └── Package │ ├── DEBIAN │ └── control │ └── Library │ └── MobileSubstrate │ └── DynamicLibraries │ ├── LANRevealLoader.dylib │ └── LANRevealLoader.plist ├── LatestBuild ├── Packages ├── com.lanvsblue.LANRevealLoader_0.1-1_iphoneos-arm.deb └── com.lanvsblue.LANRevealLoader_0.1-1_iphoneos-arm.zip ├── README.md └── img ├── Cydia_Reveal_Loader.png └── Reveal.png /LANRevealLoader.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 48; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 3F6F33402094B92100F2228C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3F6F333F2094B92100F2228C /* Foundation.framework */; }; 11 | 3F6F33482094B92100F2228C /* LANRevealLoader.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3F6F33472094B92100F2228C /* LANRevealLoader.mm */; }; 12 | /* End PBXBuildFile section */ 13 | 14 | /* Begin PBXFileReference section */ 15 | 3F6F333C2094B92100F2228C /* LANRevealLoader.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = LANRevealLoader.dylib; sourceTree = BUILT_PRODUCTS_DIR; }; 16 | 3F6F333F2094B92100F2228C /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 17 | 3F6F33442094B92100F2228C /* control */ = {isa = PBXFileReference; lastKnownFileType = text; name = control; path = Package/DEBIAN/control; sourceTree = ""; }; 18 | 3F6F33462094B92100F2228C /* LANRevealLoader-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "LANRevealLoader-Prefix.pch"; sourceTree = ""; }; 19 | 3F6F33472094B92100F2228C /* LANRevealLoader.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = LANRevealLoader.mm; sourceTree = ""; }; 20 | 3F6F334C2094B92100F2228C /* LANRevealLoader.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = LANRevealLoader.plist; path = Package/Library/MobileSubstrate/DynamicLibraries/LANRevealLoader.plist; sourceTree = ""; }; 21 | /* End PBXFileReference section */ 22 | 23 | /* Begin PBXFrameworksBuildPhase section */ 24 | 3F6F33382094B92100F2228C /* Frameworks */ = { 25 | isa = PBXFrameworksBuildPhase; 26 | buildActionMask = 2147483647; 27 | files = ( 28 | 3F6F33402094B92100F2228C /* Foundation.framework in Frameworks */, 29 | ); 30 | runOnlyForDeploymentPostprocessing = 0; 31 | }; 32 | /* End PBXFrameworksBuildPhase section */ 33 | 34 | /* Begin PBXGroup section */ 35 | 3F6F33322094B92100F2228C = { 36 | isa = PBXGroup; 37 | children = ( 38 | 3F6F33412094B92100F2228C /* LANRevealLoader */, 39 | 3F6F333E2094B92100F2228C /* Frameworks */, 40 | 3F6F333D2094B92100F2228C /* Products */, 41 | ); 42 | sourceTree = ""; 43 | }; 44 | 3F6F333D2094B92100F2228C /* Products */ = { 45 | isa = PBXGroup; 46 | children = ( 47 | 3F6F333C2094B92100F2228C /* LANRevealLoader.dylib */, 48 | ); 49 | name = Products; 50 | sourceTree = ""; 51 | }; 52 | 3F6F333E2094B92100F2228C /* Frameworks */ = { 53 | isa = PBXGroup; 54 | children = ( 55 | 3F6F333F2094B92100F2228C /* Foundation.framework */, 56 | ); 57 | name = Frameworks; 58 | sourceTree = ""; 59 | }; 60 | 3F6F33412094B92100F2228C /* LANRevealLoader */ = { 61 | isa = PBXGroup; 62 | children = ( 63 | 3F6F33472094B92100F2228C /* LANRevealLoader.mm */, 64 | 3F6F33422094B92100F2228C /* Package */, 65 | 3F6F33452094B92100F2228C /* Supporting Files */, 66 | ); 67 | path = LANRevealLoader; 68 | sourceTree = ""; 69 | }; 70 | 3F6F33422094B92100F2228C /* Package */ = { 71 | isa = PBXGroup; 72 | children = ( 73 | 3F6F33432094B92100F2228C /* DEBIAN */, 74 | 3F6F33492094B92100F2228C /* Library */, 75 | ); 76 | name = Package; 77 | sourceTree = ""; 78 | }; 79 | 3F6F33432094B92100F2228C /* DEBIAN */ = { 80 | isa = PBXGroup; 81 | children = ( 82 | 3F6F33442094B92100F2228C /* control */, 83 | ); 84 | name = DEBIAN; 85 | sourceTree = ""; 86 | }; 87 | 3F6F33452094B92100F2228C /* Supporting Files */ = { 88 | isa = PBXGroup; 89 | children = ( 90 | 3F6F33462094B92100F2228C /* LANRevealLoader-Prefix.pch */, 91 | ); 92 | name = "Supporting Files"; 93 | sourceTree = ""; 94 | }; 95 | 3F6F33492094B92100F2228C /* Library */ = { 96 | isa = PBXGroup; 97 | children = ( 98 | 3F6F334A2094B92100F2228C /* MobileSubstrate */, 99 | ); 100 | name = Library; 101 | sourceTree = ""; 102 | }; 103 | 3F6F334A2094B92100F2228C /* MobileSubstrate */ = { 104 | isa = PBXGroup; 105 | children = ( 106 | 3F6F334B2094B92100F2228C /* DynamicLibraries */, 107 | ); 108 | name = MobileSubstrate; 109 | sourceTree = ""; 110 | }; 111 | 3F6F334B2094B92100F2228C /* DynamicLibraries */ = { 112 | isa = PBXGroup; 113 | children = ( 114 | 3F6F334C2094B92100F2228C /* LANRevealLoader.plist */, 115 | ); 116 | name = DynamicLibraries; 117 | sourceTree = ""; 118 | }; 119 | /* End PBXGroup section */ 120 | 121 | /* Begin PBXHeadersBuildPhase section */ 122 | 3F6F33392094B92100F2228C /* Headers */ = { 123 | isa = PBXHeadersBuildPhase; 124 | buildActionMask = 2147483647; 125 | files = ( 126 | ); 127 | runOnlyForDeploymentPostprocessing = 0; 128 | }; 129 | /* End PBXHeadersBuildPhase section */ 130 | 131 | /* Begin PBXNativeTarget section */ 132 | 3F6F333B2094B92100F2228C /* LANRevealLoader */ = { 133 | isa = PBXNativeTarget; 134 | buildConfigurationList = 3F6F334F2094B92100F2228C /* Build configuration list for PBXNativeTarget "LANRevealLoader" */; 135 | buildPhases = ( 136 | 3F6F33372094B92100F2228C /* Sources */, 137 | 3F6F33382094B92100F2228C /* Frameworks */, 138 | 3F6F33392094B92100F2228C /* Headers */, 139 | 3F6F333A2094B92100F2228C /* ShellScript */, 140 | ); 141 | buildRules = ( 142 | ); 143 | dependencies = ( 144 | ); 145 | name = LANRevealLoader; 146 | productName = LANRevealLoader; 147 | productReference = 3F6F333C2094B92100F2228C /* LANRevealLoader.dylib */; 148 | productType = "com.apple.product-type.library.dynamic"; 149 | }; 150 | /* End PBXNativeTarget section */ 151 | 152 | /* Begin PBXProject section */ 153 | 3F6F33332094B92100F2228C /* Project object */ = { 154 | isa = PBXProject; 155 | attributes = { 156 | LastUpgradeCheck = 0910; 157 | TargetAttributes = { 158 | 3F6F333B2094B92100F2228C = { 159 | CreatedOnToolsVersion = 9.1; 160 | ProvisioningStyle = Automatic; 161 | }; 162 | }; 163 | }; 164 | buildConfigurationList = 3F6F33362094B92100F2228C /* Build configuration list for PBXProject "LANRevealLoader" */; 165 | compatibilityVersion = "Xcode 8.0"; 166 | developmentRegion = en; 167 | hasScannedForEncodings = 0; 168 | knownRegions = ( 169 | en, 170 | ); 171 | mainGroup = 3F6F33322094B92100F2228C; 172 | productRefGroup = 3F6F333D2094B92100F2228C /* Products */; 173 | projectDirPath = ""; 174 | projectRoot = ""; 175 | targets = ( 176 | 3F6F333B2094B92100F2228C /* LANRevealLoader */, 177 | ); 178 | }; 179 | /* End PBXProject section */ 180 | 181 | /* Begin PBXShellScriptBuildPhase section */ 182 | 3F6F333A2094B92100F2228C /* ShellScript */ = { 183 | isa = PBXShellScriptBuildPhase; 184 | buildActionMask = 2147483647; 185 | files = ( 186 | ); 187 | inputPaths = ( 188 | ); 189 | outputPaths = ( 190 | ); 191 | runOnlyForDeploymentPostprocessing = 0; 192 | shellPath = /bin/sh; 193 | shellScript = "/opt/MonkeyDev/bin/md --xcbp"; 194 | }; 195 | /* End PBXShellScriptBuildPhase section */ 196 | 197 | /* Begin PBXSourcesBuildPhase section */ 198 | 3F6F33372094B92100F2228C /* Sources */ = { 199 | isa = PBXSourcesBuildPhase; 200 | buildActionMask = 2147483647; 201 | files = ( 202 | 3F6F33482094B92100F2228C /* LANRevealLoader.mm in Sources */, 203 | ); 204 | runOnlyForDeploymentPostprocessing = 0; 205 | }; 206 | /* End PBXSourcesBuildPhase section */ 207 | 208 | /* Begin XCBuildConfiguration section */ 209 | 3F6F334D2094B92100F2228C /* Release */ = { 210 | isa = XCBuildConfiguration; 211 | buildSettings = { 212 | CODE_SIGN_IDENTITY = "iPhone Developer"; 213 | COPY_PHASE_STRIP = YES; 214 | EXCLUDED_RECURSIVE_SEARCH_PATH_SUBDIRECTORIES = "*.nib *.lproj *.gch (*) .DS_Store CVS .svn .git .hg *.xcodeproj *.xcode *.pbproj *.pbxproj"; 215 | FRAMEWORK_SEARCH_PATHS = ( 216 | "$(MonkeyDevPath)/frameworks/**", 217 | "$(MonkeyDevTheosPath)/vendor/lib", 218 | ); 219 | GCC_C_LANGUAGE_STANDARD = gnu99; 220 | GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; 221 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 222 | GCC_WARN_UNUSED_VARIABLE = YES; 223 | HEADER_SEARCH_PATHS = "$(MonkeyDevTheosPath)/vendor/include/**"; 224 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 225 | LIBRARY_SEARCH_PATHS = "$(MonkeyDevTheosPath)/vendor/lib/**"; 226 | MonkeyDevPath = /opt/MonkeyDev; 227 | MonkeyDevTheosPath = /opt/theos; 228 | OTHER_CFLAGS = "-DTHEOS_INSTANCE_NAME=\"\\\"LANRevealLoader\\\"\""; 229 | SDKROOT = iphoneos; 230 | TARGETED_DEVICE_FAMILY = "1,2"; 231 | VALIDATE_PRODUCT = YES; 232 | }; 233 | name = Release; 234 | }; 235 | 3F6F334E2094B92100F2228C /* Debug */ = { 236 | isa = XCBuildConfiguration; 237 | buildSettings = { 238 | CODE_SIGN_IDENTITY = "iPhone Developer"; 239 | COPY_PHASE_STRIP = NO; 240 | EXCLUDED_RECURSIVE_SEARCH_PATH_SUBDIRECTORIES = "*.nib *.lproj *.gch (*) .DS_Store CVS .svn .git .hg *.xcodeproj *.xcode *.pbproj *.pbxproj"; 241 | FRAMEWORK_SEARCH_PATHS = ( 242 | "$(MonkeyDevPath)/frameworks/**", 243 | "$(MonkeyDevTheosPath)/vendor/lib", 244 | ); 245 | GCC_C_LANGUAGE_STANDARD = gnu99; 246 | GCC_DYNAMIC_NO_PIC = NO; 247 | GCC_OPTIMIZATION_LEVEL = 0; 248 | GCC_PREPROCESSOR_DEFINITIONS = ( 249 | "DEBUG=1", 250 | "$(inherited)", 251 | ); 252 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 253 | GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; 254 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 255 | GCC_WARN_UNUSED_VARIABLE = YES; 256 | HEADER_SEARCH_PATHS = "$(MonkeyDevTheosPath)/vendor/include/**"; 257 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 258 | LIBRARY_SEARCH_PATHS = "$(MonkeyDevTheosPath)/vendor/lib/**"; 259 | MonkeyDevPath = /opt/MonkeyDev; 260 | MonkeyDevTheosPath = /opt/theos; 261 | ONLY_ACTIVE_ARCH = YES; 262 | OTHER_CFLAGS = "-DTHEOS_INSTANCE_NAME=\"\\\"LANRevealLoader\\\"\""; 263 | SDKROOT = iphoneos; 264 | TARGETED_DEVICE_FAMILY = "1,2"; 265 | VALIDATE_PRODUCT = NO; 266 | }; 267 | name = Debug; 268 | }; 269 | 3F6F33502094B92100F2228C /* Release */ = { 270 | isa = XCBuildConfiguration; 271 | buildSettings = { 272 | CLANG_ENABLE_OBJC_ARC = YES; 273 | CODE_SIGN_IDENTITY = ""; 274 | CODE_SIGN_STYLE = Automatic; 275 | DEVELOPMENT_TEAM = MXJL78S842; 276 | DYLIB_COMPATIBILITY_VERSION = 1; 277 | DYLIB_CURRENT_VERSION = 1; 278 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 279 | GCC_PREFIX_HEADER = "LANRevealLoader/LANRevealLoader-Prefix.pch"; 280 | HEADER_SEARCH_PATHS = ( 281 | "$(MonkeyDevPath)/include", 282 | "$(MonkeyDevTheosPath)/vendor/include/**", 283 | ); 284 | INSTALL_PATH = /Library/MobileSubstrate/DynamicLibraries; 285 | MonkeyDevBuildPackageOnAnyBuild = NO; 286 | MonkeyDevClearUiCacheOnInstall = NO; 287 | MonkeyDevCopyOnBuild = NO; 288 | MonkeyDevDeviceIP = ""; 289 | MonkeyDevDevicePassword = ""; 290 | MonkeyDevDevicePort = ""; 291 | MonkeyDevInstallOnAnyBuild = YES; 292 | MonkeyDevInstallOnProfiling = YES; 293 | MonkeyDevkillProcessOnInstall = SpringBoard; 294 | PRODUCT_NAME = "$(TARGET_NAME)"; 295 | TARGETED_DEVICE_FAMILY = "1,2"; 296 | }; 297 | name = Release; 298 | }; 299 | 3F6F33512094B92100F2228C /* Debug */ = { 300 | isa = XCBuildConfiguration; 301 | buildSettings = { 302 | CLANG_ENABLE_OBJC_ARC = YES; 303 | CODE_SIGN_IDENTITY = ""; 304 | CODE_SIGN_STYLE = Automatic; 305 | DEVELOPMENT_TEAM = MXJL78S842; 306 | DYLIB_COMPATIBILITY_VERSION = 1; 307 | DYLIB_CURRENT_VERSION = 1; 308 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 309 | GCC_PREFIX_HEADER = "LANRevealLoader/LANRevealLoader-Prefix.pch"; 310 | HEADER_SEARCH_PATHS = ( 311 | "$(MonkeyDevPath)/include", 312 | "$(MonkeyDevTheosPath)/vendor/include/**", 313 | ); 314 | INSTALL_PATH = /Library/MobileSubstrate/DynamicLibraries; 315 | MonkeyDevBuildPackageOnAnyBuild = NO; 316 | MonkeyDevClearUiCacheOnInstall = NO; 317 | MonkeyDevCopyOnBuild = NO; 318 | MonkeyDevDeviceIP = ""; 319 | MonkeyDevDevicePassword = ""; 320 | MonkeyDevDevicePort = ""; 321 | MonkeyDevInstallOnAnyBuild = YES; 322 | MonkeyDevInstallOnProfiling = YES; 323 | MonkeyDevkillProcessOnInstall = SpringBoard; 324 | PRODUCT_NAME = "$(TARGET_NAME)"; 325 | TARGETED_DEVICE_FAMILY = "1,2"; 326 | }; 327 | name = Debug; 328 | }; 329 | /* End XCBuildConfiguration section */ 330 | 331 | /* Begin XCConfigurationList section */ 332 | 3F6F33362094B92100F2228C /* Build configuration list for PBXProject "LANRevealLoader" */ = { 333 | isa = XCConfigurationList; 334 | buildConfigurations = ( 335 | 3F6F334D2094B92100F2228C /* Release */, 336 | 3F6F334E2094B92100F2228C /* Debug */, 337 | ); 338 | defaultConfigurationIsVisible = 0; 339 | defaultConfigurationName = Release; 340 | }; 341 | 3F6F334F2094B92100F2228C /* Build configuration list for PBXNativeTarget "LANRevealLoader" */ = { 342 | isa = XCConfigurationList; 343 | buildConfigurations = ( 344 | 3F6F33502094B92100F2228C /* Release */, 345 | 3F6F33512094B92100F2228C /* Debug */, 346 | ); 347 | defaultConfigurationIsVisible = 0; 348 | defaultConfigurationName = Release; 349 | }; 350 | /* End XCConfigurationList section */ 351 | }; 352 | rootObject = 3F6F33332094B92100F2228C /* Project object */; 353 | } 354 | -------------------------------------------------------------------------------- /LANRevealLoader/LANRevealLoader-Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header for all source files of the 'LANRevealLoader' target in the 'LANRevealLoader' project 3 | // 4 | 5 | #ifdef __OBJC__ 6 | #import 7 | #endif 8 | -------------------------------------------------------------------------------- /LANRevealLoader/LANRevealLoader.mm: -------------------------------------------------------------------------------- 1 | // 2 | // LANRevealLoader.mm 3 | // LANRevealLoader 4 | // 5 | // Created by 蓝布鲁 on 2018/4/28. 6 | // Copyright (c) 2018年 ___ORGANIZATIONNAME___. All rights reserved. 7 | // 8 | 9 | // CaptainHook by Ryan Petrich 10 | // see https://github.com/rpetrich/CaptainHook/ 11 | 12 | #define REVEAL_SERVER_PATH @"/Library/TweakInject/RevealServer" 13 | 14 | #import 15 | #import "CaptainHook/CaptainHook.h" 16 | #include // not required; for examples only 17 | #include 18 | 19 | // Objective-C runtime hooking using CaptainHook: 20 | // 1. declare class using CHDeclareClass() 21 | // 2. load class using CHLoadClass() or CHLoadLateClass() in CHConstructor 22 | // 3. hook method using CHOptimizedMethod() 23 | // 4. register hook using CHHook() in CHConstructor 24 | // 5. (optionally) call old method using CHSuper() 25 | 26 | 27 | __attribute__((constructor)) static void entry() { 28 | @autoreleasepool 29 | { 30 | NSLog(@"########## [Reveal 4] Loading by lanvsblue ##########"); 31 | NSString *libraryPath = REVEAL_SERVER_PATH; 32 | 33 | if ([[NSFileManager defaultManager] fileExistsAtPath:libraryPath]){ 34 | dlopen([libraryPath UTF8String], RTLD_NOW); 35 | NSLog(@"########## [Reveal 4] Loaded by lanvsblue ##########"); 36 | } 37 | } 38 | } 39 | 40 | -------------------------------------------------------------------------------- /LANRevealLoader/Package/DEBIAN/control: -------------------------------------------------------------------------------- 1 | Package: com.lanvsblue.LANRevealLoader 2 | Name: LANRevealLoader 3 | Version: 0.1-1 4 | Description: 5 | Section: Tweaks 6 | Depends: firmware (>= 5.0), mobilesubstrate 7 | Conflicts: 8 | Replaces: 9 | Priority: optional 10 | Architecture: iphoneos-arm 11 | Author: 蓝布鲁 12 | dev: 13 | Homepage: 14 | Depiction: 15 | Maintainer: 16 | Icon: 17 | 18 | -------------------------------------------------------------------------------- /LANRevealLoader/Package/Library/MobileSubstrate/DynamicLibraries/LANRevealLoader.dylib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lanvsblue/LANRevealLoader/483730c7be63c5d9689e3013e81fa51bc3d03e75/LANRevealLoader/Package/Library/MobileSubstrate/DynamicLibraries/LANRevealLoader.dylib -------------------------------------------------------------------------------- /LANRevealLoader/Package/Library/MobileSubstrate/DynamicLibraries/LANRevealLoader.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Filter 6 | 7 | Bundles 8 | 9 | com.target.bundleid 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /LatestBuild: -------------------------------------------------------------------------------- 1 | /Users/lan/Library/Developer/Xcode/DerivedData/LANRevealLoader-bjtzwzwfbrxnrkcekfvpqntmydbp/Build/Products/Debug-iphoneos -------------------------------------------------------------------------------- /Packages/com.lanvsblue.LANRevealLoader_0.1-1_iphoneos-arm.deb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lanvsblue/LANRevealLoader/483730c7be63c5d9689e3013e81fa51bc3d03e75/Packages/com.lanvsblue.LANRevealLoader_0.1-1_iphoneos-arm.deb -------------------------------------------------------------------------------- /Packages/com.lanvsblue.LANRevealLoader_0.1-1_iphoneos-arm.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lanvsblue/LANRevealLoader/483730c7be63c5d9689e3013e81fa51bc3d03e75/Packages/com.lanvsblue.LANRevealLoader_0.1-1_iphoneos-arm.zip -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## LANRevealLoader 2 | 3 | ![Reveal](img/Reveal.png) 4 | LANRevealLoader用来在iOS 11越狱环境下加载RevealServer。~~由于在Reveal2版本以后,Reveal移除了动态库(libReveal.dyilb),而改用了静态库(RevealServer.framework)。但是Mobile Substrate需要使用动态库才能正确得注入到目标应用中,这部分的原因自行脑补关于动态库与静态库的区别。~~(详见[issue#1](https://github.com/lanvsblue/LANRevealLoader/issues/1)) 5 | 6 | 在iOS11以前,还可以使用Cydia中的[Reveal Loader](https://github.com/heardrwt/RevealLoader)加载RevealServer,但由于Cydia在iOS11中的表现导致Cydia中的Reveal Loader无法正常安装。 7 | 8 | ![Cydia_Reveal_Loader](img/Cydia_Reveal_Loader.png) 9 | 10 | LANRevealLoader简化了Reveal Loader,并在iOS11中能够正常加载RevealServer,LANRevealLoader由三部分组成: 11 | 12 | * LANRevealLoader.dylib:用于加载RevealServer 13 | * LANRevealLoader.plist:用于指定注入Target 14 | * RevealServer:从RevealServer.framework/RevealServer中获得的文件 15 | 16 | Loader与Server分开的好处显而易见,不同的Reveal版本只要替换不同的RevealServer就可以了,而不需要再次编译生成类似于libReveal.dylib动态库。 17 | 18 | ## Install 19 | 20 | 从RevealServer.framework/RevealServer获取RevealServer,并下载[LANRevealLoader](https://github.com/lanvsblue/LANRevealLoader/releases/download/0.1/LANRevealLoader.zip),解压后将LANRevealLoader.dylib、LANRevealLoader.plist、RevealServer放在已越狱iOS的/Library/MobileSubstrate/DynamicLibraries目录下。 -------------------------------------------------------------------------------- /img/Cydia_Reveal_Loader.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lanvsblue/LANRevealLoader/483730c7be63c5d9689e3013e81fa51bc3d03e75/img/Cydia_Reveal_Loader.png -------------------------------------------------------------------------------- /img/Reveal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lanvsblue/LANRevealLoader/483730c7be63c5d9689e3013e81fa51bc3d03e75/img/Reveal.png --------------------------------------------------------------------------------