├── .gitignore ├── FakeSMBIOS.cpp ├── FakeSMBIOS.hpp ├── FakeSMBIOS.xcodeproj ├── project.pbxproj └── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcuserdata │ └── syscl.xcuserdatad │ └── UserInterfaceState.xcuserstate ├── Info.plist └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | # ignore xcuserdata/ 2 | 3 | *.xcuserstate 4 | -------------------------------------------------------------------------------- /FakeSMBIOS.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016 syscl/lighting/Yating Zhou. All rights reserved. 3 | * 4 | * Thanks to Apple and Voodoo Project, but it is 5 | * time for us to push the envelope and add some really interesting stuff. 6 | * 7 | * This work is licensed under the Creative Commons Attribution-NonCommercial 8 | * 4.0 Unported License => http://creativecommons.org/licenses/by-nc/4.0 9 | */ 10 | 11 | #include 12 | #include 13 | #include 14 | #include 15 | #include 16 | #include "FakeSMBIOS.hpp" 17 | 18 | #include 19 | extern kmod_info_t kmod_info; 20 | 21 | OSDefineMetaClassAndStructors(FakeSMBIOS, IOService) 22 | 23 | bool FakeSMBIOS::init(OSDictionary *dict) 24 | { 25 | IOLog("FakeSMBIOS: Version %s starting on OS X Darwin %d.%d.\n", kmod_info.version, version_major, version_minor); 26 | bool ret = super::init(dict); 27 | if (ret != true) 28 | { 29 | IOLog("FakeSMBIOS::init() failed\n"); 30 | return ret; 31 | } 32 | IOLog("FakeSMBIOS::init()\n"); 33 | setProperty("Build", "Release"); 34 | setProperty("Author", "syscl"); 35 | return ret; 36 | } 37 | 38 | bool FakeSMBIOS::start(IOService* provider) 39 | { 40 | bool ret = super::start(provider); 41 | if (ret != true) 42 | { 43 | IOLog("FakeSMBIOS::start() failed\n"); 44 | return ret; 45 | } 46 | IOLog("FakeSMBIOS::start()\n"); 47 | fRoot = getServiceRoot(); 48 | if (!provider || !fRoot) 49 | { 50 | IOLog("FakeSMBIOS: unable to get provider or Service Root\n"); 51 | return false; 52 | } 53 | 54 | // get properties from Info.plist 55 | OSDictionary* providerDict = OSDynamicCast(OSDictionary, getProperty("FakeProperties")); 56 | OSObject* dictStr = NULL; 57 | UInt8 length; 58 | // inject compatible 59 | dictStr = providerDict->getObject("compatible"); 60 | if (dictStr) 61 | { 62 | OSString* gFakeCompatible = OSDynamicCast(OSString, dictStr); 63 | length = gFakeCompatible->getLength(); 64 | if (length) 65 | { 66 | if (fRoot->compareName(gFakeCompatible) != true) 67 | { 68 | IOLog("FakeSMBIOS: Inject compatible %s\n", gFakeCompatible->getCStringNoCopy()); 69 | fRoot->setProperty("compatible", OSData::withBytes(gFakeCompatible->getCStringNoCopy(), length + 1)); 70 | } 71 | else 72 | { 73 | IOLog("FakeSMBIOS: Same compatible : %s, do nothing.\n", gFakeCompatible->getCStringNoCopy()); 74 | } 75 | } 76 | } 77 | // inject product-name 78 | dictStr = providerDict->getObject("product-name"); 79 | if (dictStr) 80 | { 81 | OSString* gFakeProductName = OSDynamicCast(OSString, dictStr); 82 | length = gFakeProductName->getLength(); 83 | if (length) 84 | { 85 | if (fRoot->compareName(gFakeProductName) != true) 86 | { 87 | IOLog("FakeSMBIOS: Inject ProductName %s\n", gFakeProductName->getCStringNoCopy()); 88 | fRoot->setProperty("product-name", OSData::withBytes(gFakeProductName->getCStringNoCopy(), length + 1)); 89 | } 90 | else 91 | { 92 | IOLog("FakeSMBIOS: Same product name: %s, do nothing.\n", gFakeProductName->getCStringNoCopy()); 93 | } 94 | } 95 | } 96 | // inject model 97 | dictStr = providerDict->getObject("model"); 98 | if (dictStr) 99 | { 100 | OSString* gFakeModel = OSDynamicCast(OSString, dictStr); 101 | length = gFakeModel->getLength(); 102 | if (length) 103 | { 104 | if (fRoot->compareName(gFakeModel) != true) 105 | { 106 | IOLog("FakeSMBIOS: Inject model %s\n", gFakeModel->getCStringNoCopy()); 107 | fRoot->setProperty("model", OSData::withBytes(gFakeModel->getCStringNoCopy(), length + 1)); 108 | fRoot->setName(gFakeModel->getCStringNoCopy()); 109 | } 110 | else 111 | { 112 | IOLog("FakeSMBIOS: Same model: %s, do nothing.\n", gFakeModel->getCStringNoCopy()); 113 | } 114 | } 115 | } 116 | 117 | publishResource(kCurrentDrvName); 118 | registerService(); 119 | 120 | return ret; 121 | } 122 | 123 | void FakeSMBIOS::stop(IOService* provider) 124 | { 125 | IOLog("FakeSMBIOS::stop()\n"); 126 | super::stop(provider); 127 | } 128 | 129 | void FakeSMBIOS::free(void) 130 | { 131 | IOLog("FakeSMBIOS::free()\n"); 132 | fRoot->release(); 133 | super::free(); 134 | } 135 | -------------------------------------------------------------------------------- /FakeSMBIOS.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016 syscl/lighting/Yating Zhou. All rights reserved. 3 | * 4 | * Thanks to Apple and Voodoo Project, but it is 5 | * time for us to push the envelope and add some really interesting stuff. 6 | * 7 | * This work is licensed under the Creative Commons Attribution-NonCommercial 8 | * 4.0 Unported License => http://creativecommons.org/licenses/by-nc/4.0 9 | */ 10 | 11 | #ifndef FakeSMBIOS_hpp 12 | #define FakeSMBIOS_hpp 13 | 14 | #define kCurrentDrvName "FakeSMBIOS" 15 | 16 | class FakeSMBIOS : public IOService 17 | { 18 | OSDeclareDefaultStructors(FakeSMBIOS) 19 | typedef IOService super; 20 | 21 | protected: 22 | IOService* fRoot; 23 | 24 | public: 25 | virtual bool init(OSDictionary* dict); 26 | virtual bool start(IOService* provider); 27 | virtual void stop(IOService* provider); 28 | virtual void free(void); 29 | 30 | }; 31 | 32 | #endif /* FakeSMBIOS_hpp */ 33 | 34 | -------------------------------------------------------------------------------- /FakeSMBIOS.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 32D94FC60562CBF700B6AF17 /* FakeSMBIOS.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 1A224C3EFF42367911CA2CB7 /* FakeSMBIOS.hpp */; }; 11 | 32D94FCA0562CBF700B6AF17 /* FakeSMBIOS.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A224C3FFF42367911CA2CB7 /* FakeSMBIOS.cpp */; settings = {ATTRIBUTES = (); }; }; 12 | /* End PBXBuildFile section */ 13 | 14 | /* Begin PBXFileReference section */ 15 | 1A224C3EFF42367911CA2CB7 /* FakeSMBIOS.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = FakeSMBIOS.hpp; sourceTree = ""; }; 16 | 1A224C3FFF42367911CA2CB7 /* FakeSMBIOS.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FakeSMBIOS.cpp; sourceTree = ""; }; 17 | 32D94FCF0562CBF700B6AF17 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 18 | 32D94FD00562CBF700B6AF17 /* FakeSMBIOS.kext */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FakeSMBIOS.kext; sourceTree = BUILT_PRODUCTS_DIR; }; 19 | 8DA8362C06AD9B9200E5AC22 /* Kernel.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Kernel.framework; path = /System/Library/Frameworks/Kernel.framework; sourceTree = ""; }; 20 | /* End PBXFileReference section */ 21 | 22 | /* Begin PBXFrameworksBuildPhase section */ 23 | 32D94FCB0562CBF700B6AF17 /* Frameworks */ = { 24 | isa = PBXFrameworksBuildPhase; 25 | buildActionMask = 2147483647; 26 | files = ( 27 | ); 28 | runOnlyForDeploymentPostprocessing = 0; 29 | }; 30 | /* End PBXFrameworksBuildPhase section */ 31 | 32 | /* Begin PBXGroup section */ 33 | 089C166AFE841209C02AAC07 /* FakeSMBIOS */ = { 34 | isa = PBXGroup; 35 | children = ( 36 | 247142CAFF3F8F9811CA285C /* Source */, 37 | 8DA8362C06AD9B9200E5AC22 /* Kernel.framework */, 38 | 089C167CFE841241C02AAC07 /* Resources */, 39 | 19C28FB6FE9D52B211CA2CBB /* Products */, 40 | ); 41 | name = FakeSMBIOS; 42 | sourceTree = ""; 43 | }; 44 | 089C167CFE841241C02AAC07 /* Resources */ = { 45 | isa = PBXGroup; 46 | children = ( 47 | 32D94FCF0562CBF700B6AF17 /* Info.plist */, 48 | ); 49 | name = Resources; 50 | sourceTree = ""; 51 | }; 52 | 19C28FB6FE9D52B211CA2CBB /* Products */ = { 53 | isa = PBXGroup; 54 | children = ( 55 | 32D94FD00562CBF700B6AF17 /* FakeSMBIOS.kext */, 56 | ); 57 | name = Products; 58 | sourceTree = ""; 59 | }; 60 | 247142CAFF3F8F9811CA285C /* Source */ = { 61 | isa = PBXGroup; 62 | children = ( 63 | 1A224C3EFF42367911CA2CB7 /* FakeSMBIOS.hpp */, 64 | 1A224C3FFF42367911CA2CB7 /* FakeSMBIOS.cpp */, 65 | ); 66 | name = Source; 67 | sourceTree = ""; 68 | }; 69 | /* End PBXGroup section */ 70 | 71 | /* Begin PBXHeadersBuildPhase section */ 72 | 32D94FC50562CBF700B6AF17 /* Headers */ = { 73 | isa = PBXHeadersBuildPhase; 74 | buildActionMask = 2147483647; 75 | files = ( 76 | 32D94FC60562CBF700B6AF17 /* FakeSMBIOS.hpp in Headers */, 77 | ); 78 | runOnlyForDeploymentPostprocessing = 0; 79 | }; 80 | /* End PBXHeadersBuildPhase section */ 81 | 82 | /* Begin PBXNativeTarget section */ 83 | 32D94FC30562CBF700B6AF17 /* FakeSMBIOS */ = { 84 | isa = PBXNativeTarget; 85 | buildConfigurationList = 1DEB91D908733DB10010E9CD /* Build configuration list for PBXNativeTarget "FakeSMBIOS" */; 86 | buildPhases = ( 87 | 32D94FC50562CBF700B6AF17 /* Headers */, 88 | 32D94FC70562CBF700B6AF17 /* Resources */, 89 | 32D94FC90562CBF700B6AF17 /* Sources */, 90 | 32D94FCB0562CBF700B6AF17 /* Frameworks */, 91 | 32D94FCC0562CBF700B6AF17 /* Rez */, 92 | ); 93 | buildRules = ( 94 | ); 95 | dependencies = ( 96 | ); 97 | name = FakeSMBIOS; 98 | productInstallPath = "$(SYSTEM_LIBRARY_DIR)/Extensions"; 99 | productName = FakeSMBIOS; 100 | productReference = 32D94FD00562CBF700B6AF17 /* FakeSMBIOS.kext */; 101 | productType = "com.apple.product-type.kernel-extension.iokit"; 102 | }; 103 | /* End PBXNativeTarget section */ 104 | 105 | /* Begin PBXProject section */ 106 | 089C1669FE841209C02AAC07 /* Project object */ = { 107 | isa = PBXProject; 108 | attributes = { 109 | LastUpgradeCheck = 0810; 110 | }; 111 | buildConfigurationList = 1DEB91DD08733DB10010E9CD /* Build configuration list for PBXProject "FakeSMBIOS" */; 112 | compatibilityVersion = "Xcode 3.2"; 113 | developmentRegion = English; 114 | hasScannedForEncodings = 1; 115 | knownRegions = ( 116 | en, 117 | ); 118 | mainGroup = 089C166AFE841209C02AAC07 /* FakeSMBIOS */; 119 | projectDirPath = ""; 120 | projectRoot = ""; 121 | targets = ( 122 | 32D94FC30562CBF700B6AF17 /* FakeSMBIOS */, 123 | ); 124 | }; 125 | /* End PBXProject section */ 126 | 127 | /* Begin PBXResourcesBuildPhase section */ 128 | 32D94FC70562CBF700B6AF17 /* Resources */ = { 129 | isa = PBXResourcesBuildPhase; 130 | buildActionMask = 2147483647; 131 | files = ( 132 | ); 133 | runOnlyForDeploymentPostprocessing = 0; 134 | }; 135 | /* End PBXResourcesBuildPhase section */ 136 | 137 | /* Begin PBXRezBuildPhase section */ 138 | 32D94FCC0562CBF700B6AF17 /* Rez */ = { 139 | isa = PBXRezBuildPhase; 140 | buildActionMask = 2147483647; 141 | files = ( 142 | ); 143 | runOnlyForDeploymentPostprocessing = 0; 144 | }; 145 | /* End PBXRezBuildPhase section */ 146 | 147 | /* Begin PBXSourcesBuildPhase section */ 148 | 32D94FC90562CBF700B6AF17 /* Sources */ = { 149 | isa = PBXSourcesBuildPhase; 150 | buildActionMask = 2147483647; 151 | files = ( 152 | 32D94FCA0562CBF700B6AF17 /* FakeSMBIOS.cpp in Sources */, 153 | ); 154 | runOnlyForDeploymentPostprocessing = 0; 155 | }; 156 | /* End PBXSourcesBuildPhase section */ 157 | 158 | /* Begin XCBuildConfiguration section */ 159 | 1DEB91DA08733DB10010E9CD /* Debug */ = { 160 | isa = XCBuildConfiguration; 161 | buildSettings = { 162 | COPY_PHASE_STRIP = NO; 163 | CURRENT_PROJECT_VERSION = 1.0.2; 164 | GCC_DYNAMIC_NO_PIC = NO; 165 | GCC_MODEL_TUNING = G5; 166 | GCC_OPTIMIZATION_LEVEL = 0; 167 | INFOPLIST_FILE = Info.plist; 168 | INFOPLIST_PREPROCESS = YES; 169 | MODULE_NAME = org.syscl.FakeSMBIOS; 170 | MODULE_VERSION = 1.0.2; 171 | PRODUCT_BUNDLE_IDENTIFIER = org.syscl.FakeSMBIOS; 172 | PRODUCT_NAME = FakeSMBIOS; 173 | SDKROOT = macosx; 174 | WRAPPER_EXTENSION = kext; 175 | }; 176 | name = Debug; 177 | }; 178 | 1DEB91DB08733DB10010E9CD /* Release */ = { 179 | isa = XCBuildConfiguration; 180 | buildSettings = { 181 | CURRENT_PROJECT_VERSION = 1.0.2; 182 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 183 | GCC_GENERATE_DEBUGGING_SYMBOLS = NO; 184 | GCC_MODEL_TUNING = G5; 185 | INFOPLIST_FILE = Info.plist; 186 | INFOPLIST_PREPROCESS = YES; 187 | MODULE_NAME = org.syscl.FakeSMBIOS; 188 | MODULE_VERSION = 1.0.2; 189 | PRODUCT_BUNDLE_IDENTIFIER = org.syscl.FakeSMBIOS; 190 | PRODUCT_NAME = FakeSMBIOS; 191 | SDKROOT = macosx; 192 | VALID_ARCHS = "x86_64 i386"; 193 | WRAPPER_EXTENSION = kext; 194 | }; 195 | name = Release; 196 | }; 197 | 1DEB91DE08733DB10010E9CD /* Debug */ = { 198 | isa = XCBuildConfiguration; 199 | buildSettings = { 200 | CLANG_WARN_BOOL_CONVERSION = YES; 201 | CLANG_WARN_CONSTANT_CONVERSION = YES; 202 | CLANG_WARN_EMPTY_BODY = YES; 203 | CLANG_WARN_ENUM_CONVERSION = YES; 204 | CLANG_WARN_INFINITE_RECURSION = YES; 205 | CLANG_WARN_INT_CONVERSION = YES; 206 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 207 | CLANG_WARN_UNREACHABLE_CODE = YES; 208 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 209 | ENABLE_STRICT_OBJC_MSGSEND = YES; 210 | ENABLE_TESTABILITY = YES; 211 | GCC_ENABLE_SSE3_EXTENSIONS = YES; 212 | GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS = YES; 213 | GCC_NO_COMMON_BLOCKS = YES; 214 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 215 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 216 | GCC_WARN_UNDECLARED_SELECTOR = YES; 217 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 218 | GCC_WARN_UNUSED_FUNCTION = YES; 219 | GCC_WARN_UNUSED_VARIABLE = YES; 220 | MACOSX_DEPLOYMENT_TARGET = 10.11; 221 | ONLY_ACTIVE_ARCH = YES; 222 | PREBINDING = NO; 223 | SDKROOT = macosx; 224 | VALID_ARCHS = "x86_64 i386"; 225 | }; 226 | name = Debug; 227 | }; 228 | 1DEB91DF08733DB10010E9CD /* Release */ = { 229 | isa = XCBuildConfiguration; 230 | buildSettings = { 231 | CLANG_WARN_BOOL_CONVERSION = YES; 232 | CLANG_WARN_CONSTANT_CONVERSION = YES; 233 | CLANG_WARN_EMPTY_BODY = YES; 234 | CLANG_WARN_ENUM_CONVERSION = YES; 235 | CLANG_WARN_INFINITE_RECURSION = YES; 236 | CLANG_WARN_INT_CONVERSION = YES; 237 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 238 | CLANG_WARN_UNREACHABLE_CODE = YES; 239 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 240 | ENABLE_STRICT_OBJC_MSGSEND = YES; 241 | GCC_ENABLE_SSE3_EXTENSIONS = YES; 242 | GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS = YES; 243 | GCC_NO_COMMON_BLOCKS = YES; 244 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 245 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 246 | GCC_WARN_UNDECLARED_SELECTOR = YES; 247 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 248 | GCC_WARN_UNUSED_FUNCTION = YES; 249 | GCC_WARN_UNUSED_VARIABLE = YES; 250 | MACOSX_DEPLOYMENT_TARGET = 10.11; 251 | PREBINDING = NO; 252 | SDKROOT = macosx; 253 | VALID_ARCHS = "x86_64 i386"; 254 | }; 255 | name = Release; 256 | }; 257 | /* End XCBuildConfiguration section */ 258 | 259 | /* Begin XCConfigurationList section */ 260 | 1DEB91D908733DB10010E9CD /* Build configuration list for PBXNativeTarget "FakeSMBIOS" */ = { 261 | isa = XCConfigurationList; 262 | buildConfigurations = ( 263 | 1DEB91DA08733DB10010E9CD /* Debug */, 264 | 1DEB91DB08733DB10010E9CD /* Release */, 265 | ); 266 | defaultConfigurationIsVisible = 0; 267 | defaultConfigurationName = Release; 268 | }; 269 | 1DEB91DD08733DB10010E9CD /* Build configuration list for PBXProject "FakeSMBIOS" */ = { 270 | isa = XCConfigurationList; 271 | buildConfigurations = ( 272 | 1DEB91DE08733DB10010E9CD /* Debug */, 273 | 1DEB91DF08733DB10010E9CD /* Release */, 274 | ); 275 | defaultConfigurationIsVisible = 0; 276 | defaultConfigurationName = Release; 277 | }; 278 | /* End XCConfigurationList section */ 279 | }; 280 | rootObject = 089C1669FE841209C02AAC07 /* Project object */; 281 | } 282 | -------------------------------------------------------------------------------- /FakeSMBIOS.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /FakeSMBIOS.xcodeproj/project.xcworkspace/xcuserdata/syscl.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/syscl/FakeSMBIOS/8c091bf64b69e3889df66213d055c01146ce7dcc/FakeSMBIOS.xcodeproj/project.xcworkspace/xcuserdata/syscl.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /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 | KEXT 17 | CFBundleVersion 18 | 1.0.3 19 | IOKitPersonalities 20 | 21 | Platform SMBIOS Match 22 | 23 | CFBundleIdentifier 24 | org.syscl.FakeSMBIOS 25 | FakeProperties 26 | 27 | compatible 28 | MacBookPro13,1 29 | model 30 | MacBookPro13,1 31 | product-name 32 | MacBookPro13,1 33 | 34 | IOClass 35 | FakeSMBIOS 36 | IOMatchCategory 37 | FakeSMBIOS 38 | IOProviderClass 39 | IOPlatformExpertDevice 40 | IOResourceMatch 41 | SMBIOS 42 | 43 | 44 | OSBundleLibraries 45 | 46 | com.apple.kpi.bsd 47 | 10.4 48 | com.apple.kpi.iokit 49 | 10.4 50 | com.apple.kpi.libkern 51 | 10.4 52 | com.apple.kpi.mach 53 | 10.4 54 | com.apple.kpi.unsupported 55 | 10.5 56 | 57 | OSBundleRequired 58 | Root 59 | 60 | 61 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # FakeSMBIOS 2 | 3 | This project targets at filling the truncated SMBIOS information for macOS. 4 | 5 | # How to install 6 | You can inject FakeSMBIOS.kext through Clover/Chameleon 7 | 8 | # How to tune FakeSMBIOS 9 | - Opne Info.plist under FakeSMBIOS.kext/Contents 10 | - Expand ```/IOKitPersonalities/Platform SMBIOS Match/FakeProperties``` 11 | - Change compatible, model, product-name as you like(In our case, MacBookPro13,1) 12 | 13 | # Contribution 14 | Credit also Voodoo Project 15 | 16 | # Change 17 | 2016-12-21 18 | - Fixed some bugs 19 | - Refined code 20 | --------------------------------------------------------------------------------