Skip to content

Commit ab720fd

Browse files
committed
addded capability to dump mach-O info
1 parent d052223 commit ab720fd

3 files changed

Lines changed: 561 additions & 152 deletions

File tree

Sources/Model/ALTApplication.swift

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,56 @@ private extension ALTApplication {
210210
cachedEntitlementsString = string
211211
return string
212212
}
213+
214+
@objc
215+
public func dumpMachOInfo() -> String {
216+
let executableURL = bundle.executableURL ?? fileURL.appendingPathComponent(fileURL.deletingPathExtension().lastPathComponent)
217+
guard let parser = try? MachOParser(url: executableURL) else {
218+
return "[AltSign] MachOParser failed to load \(executableURL.lastPathComponent)"
219+
}
220+
221+
var info = "--- Mach-O Binary Info: \(executableURL.lastPathComponent) ---\n"
222+
info += "Path: \(fileURL.path)\n"
223+
info += "Architectures: \(parser.architectures().joined(separator: ", "))\n"
224+
if let platform = parser.platformType() {
225+
info += "Platform: \(platform)\n"
226+
}
227+
if let minOS = parser.minimumOSVersion() {
228+
info += "Min OS Version: \(minOS)\n"
229+
}
230+
info += "Encrypted (DRM): \(parser.isEncrypted() ? "Yes" : "No")\n"
231+
if let teamID = parser.teamID() {
232+
info += "Team ID: \(teamID)\n"
233+
}
234+
235+
let certs = parser.certificates()
236+
if !certs.isEmpty {
237+
info += "Certificates (\(certs.count)):\n"
238+
for (index, cert) in certs.enumerated() {
239+
let subject = SecCertificateCopySubjectSummary(cert) as String? ?? "Unknown Subject"
240+
info += " [\(index)] \(subject)\n"
241+
}
242+
}
243+
244+
let libs = parser.linkedLibraries()
245+
if !libs.isEmpty {
246+
info += "Linked Libraries (\(libs.count)):\n"
247+
for lib in libs {
248+
info += " - \(lib)\n"
249+
}
250+
}
251+
252+
let segs = parser.segments()
253+
if !segs.isEmpty {
254+
info += "Segments (\(segs.count)):\n"
255+
for seg in segs {
256+
info += " - \(seg.name) (offset: \(seg.offset), size: \(seg.size))\n"
257+
}
258+
}
259+
260+
info += "----------------------------------------"
261+
return info
262+
}
213263
}
214264

215265

SwiftBridge/LdidBridge.swift

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -195,8 +195,10 @@ public enum LdidBridge {
195195
}
196196

197197
do {
198-
let result = try MachOParser.extractEntitlements(from: targetURL)
198+
let parser = try MachOParser(url: targetURL)
199+
let result = try parser.entitlements()
199200
verboseLog("[AltSign] LdidBridge.entitlements parsed successfully. Length: \(result.count) chars")
201+
verboseLog("[AltSign] LdidBridge.entitlements: \(result)")
200202
return result
201203
} catch MachOParserError.missingSignature {
202204
verboseLog("[AltSign] LdidBridge.entitlements parsed successfully: unsigned/no entitlements. Returning empty string.")
@@ -226,7 +228,8 @@ public enum LdidBridge {
226228
}
227229

228230
do {
229-
let result = try MachOParser.extractRequirements(from: targetURL)
231+
let parser = try MachOParser(url: targetURL)
232+
let result = try parser.requirements()
230233
verboseLog("[AltSign] LdidBridge.requirements parsed successfully. Length: \(result.count) chars")
231234
return result
232235
} catch MachOParserError.missingSignature {

0 commit comments

Comments
 (0)