Hello guys,
I made some research about the above title and I am still not satisfied. My team requires app obfuscation, we know solutions such as DexProtector, but we aren't sure of no one of them. We have a simple macOS app that uses our custom framework. The app could be unobfuscated, but the framework keeps secret hardcoded etc., and it requires that.
How do you think, what solution should we use and why?
Which one is most secure, from your experience?
And how secure is the macOS signed app natively, without additional protection?
Thanks in advance!
Post
Replies
Boosts
Views
Activity
Hello folks!
I stumbled upon a curious problem. After adding xcframework Web RTC from here my app starts to crash on one of the clients' mac mini with Catalina. What is strange, on identical hardware with the same macOS other clients don't have problems. Below I attached crash logs.
What should I do? I haven't got any more ideas, I've tried in many ways, but nothing helped. Any tips?
Thanks in advance!
Process: App [1105]
Path: /Applications/App.app/Contents/MacOS/App
Identifier: com.App.App.App
Version: ???
Code Type: X86-64 (Native)
Parent Process: ??? [1]
Responsible: App [1105]
User ID: 501
Date/Time: 2022-09-28 12:31:13.421 +0200
OS Version: Mac OS X 10.15.7 (19H2026)
Report Version: 12
Bridge OS Version: 6.6 (19P6067)
Anonymous UUID: 7F49F999-4D0A-App-App-9F329D971941
Sleep/Wake UUID: 2C5BBFC2-F2AC-App-App-B15E72E0404A
Time Awake Since Boot: 5800 seconds
Time Since Wake: 300 seconds
System Integrity Protection: enabled
Crashed Thread: 0
Exception Type: EXC_CRASH (Code Signature Invalid)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note: EXC_CORPSE_NOTIFY
Termination Reason: Namespace CODESIGNING, Code 0x1
kernel messages:
VM Regions Near 0 (cr2):
-->
__TEXT 0000000105d2a000-0000000105ec6000 [ 1648K] r-x/r-x SM=COW
Thread 0 Crashed:
0 ??? 0x00000001070c8000 _dyld_start + 0
Thread 0 crashed with X86 Thread State (64-bit):
rax: 0x0000000000000000 rbx: 0x0000000000000000 rcx: 0x0000000000000000 rdx: 0x0000000000000000
rdi: 0x0000000000000000 rsi: 0x0000000000000000 rbp: 0x0000000000000000 rsp: 0x00007ffee9ed5c40
r8: 0x0000000000000000 r9: 0x0000000000000000 r10: 0x0000000000000000 r11: 0x0000000000000000
r12: 0x0000000000000000 r13: 0x0000000000000000 r14: 0x0000000000000000 r15: 0x0000000000000000
rip: 0x00000001070c8000 rfl: 0x0000000000000200 cr2: 0x0000000000000000
Logical CPU: 0
Error Code: 0x00000000
Trap Number: 0
Binary Images:
0x105d2a000 - 0x105ec5fff +??? (0) <CFBFDC76-34DF-33CA-91D4-2D7257A49D73> (null)
0x1070c7000 - 0x107159267 +??? (750.7) <9F48F7F8-94D0-3793-99B7-DDEF657EF956> (null)
External Modification Summary:
Calls made by other processes targeting this process:
task_for_pid: 0
thread_create: 0
thread_set_state: 0
Calls made by this process:
task_for_pid: 0
thread_create: 0
thread_set_state: 0
Calls made by all processes on this machine:
task_for_pid: 2945
thread_create: 0
thread_set_state: 0
VM Region Summary:
ReadOnly portion of Libraries: Total=6448K resident=0K(0%) swapped_out_or_unallocated=6448K(100%)
Writable regions: Total=8436K written=0K(0%) resident=0K(0%) swapped_out=0K(0%) unallocated=8436K(100%)
VIRTUAL REGION
REGION TYPE SIZE COUNT (non-coalesced)
=========== ======= =======
STACK GUARD 56.0M 1
Stack 8192K 1
__DATA 312K 4
__DATA_CONST 52K 2
__LINKEDIT 4224K 3
__TEXT 2236K 2
shared memory 8K 2
=========== ======= =======
TOTAL 70.7M 15
Hello there,
I stumbled on the issue of observing UserDefaults. My need is to "listening"/observing UD key named "com.apple.configuration.managed" which is responsible for reading provided MDM external plist. I checked that on the opened app it is possible to provide that plist, and app read this payload correctly.
My problem is to observing that change, when plist is uploading. Requirement is to support iOS 13, this is why I can't use AppStorage.
Despite using some similar solutions like:
someone own implementation of AppStorage,
and using StackOverflow solutions like this,
it still doesn't work.
My, I feel, the closest one solution was:
@objc dynamic var mdmConfiguration: Dictionary<String, String> {
get { (dictionary(forKey: MDM.ConfigurationPayloadKey) != nil) ? dictionary(forKey: MDM.ConfigurationPayloadKey)! as! Dictionary<String, String> : Dictionary<String, String>() }
set { setValue(newValue, forKey: MDM.ConfigurationPayloadKey)}
}
}
class MDMConfiguration: ObservableObject {
//@Binding private var bindedValue: Bool
@Published var configuration: Dictionary = UserDefaults.standard.mdmConfiguration {
didSet {
UserDefaults.standard.mdmConfiguration = configuration
// bindedValue.toggle()
}
}
private var cancelable: AnyCancellable?
init() {
// init(toggle: Binding<Bool>) {
//_bindedValue = toggle
cancelable = UserDefaults.standard.publisher(for: \.mdmConfiguration)
.sink(receiveValue: { [weak self] newValue in
guard let self = self else { return }
if newValue != self.configuration { // avoid cycling !!
self.configuration = newValue
}
})
}
}
struct ContentView: View {
@State private var isConfigurationAvailable: Bool = false
@State private var showLoadingIndicator: Bool = true
@ObservedObject var configuration = MDMConfiguration()
var body: some View {
GeometryReader { geometry in
let width = geometry.size.width
let height = geometry.size.height
VStack {
Text("CONTENT -> \(configuration.configuration.debugDescription)").padding()
Spacer()
if !configuration.configuration.isEmpty {
Text("AVAILABLE").padding()
} else {
Text("NIL NULL ZERO EMPTY")
.padding()
}
}
}
}
}
But it still doesn't ensure any changes in view, when I manually click on f.e. button, which prints the configuration in the console when it has uploaded, it does it well.
Please help, my headache is reaching the zenith. I am a newbie in Swift development, maybe I did something weird and stupid. I hope so :D
Thank in advance!