From a29b3227ded18cf7f8e0e31968d410eeb99dd8e3 Mon Sep 17 00:00:00 2001 From: kat Date: Sun, 16 Jun 2024 10:36:16 -0400 Subject: [Objective-C] Parse CFStrings seperately from main Objective-C Processing. --- view/macho/machoview.cpp | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) (limited to 'view/macho/machoview.cpp') diff --git a/view/macho/machoview.cpp b/view/macho/machoview.cpp index ac3ab884..17165aa0 100644 --- a/view/macho/machoview.cpp +++ b/view/macho/machoview.cpp @@ -1834,13 +1834,21 @@ bool MachoView::InitializeHeader(MachOHeader& header, bool isMainHeader, uint64_ Ref platform = m_plat ? m_plat : g_machoViewType->GetPlatform(0, m_arch); bool parseObjCStructs = true; + bool parseCFStrings = true; if (settings && settings->Contains("loader.macho.processObjectiveC")) parseObjCStructs = settings->Get("loader.macho.processObjectiveC", this); + if (settings && settings->Contains("loader.macho.processCFStrings")) + parseCFStrings = settings->Get("loader.macho.processCFStrings", this); if (!ObjCProcessor::ViewHasObjCMetadata(this)) parseObjCStructs = false; - if (parseObjCStructs) + if (!GetSectionByName("__cfstring")) + parseCFStrings = false; + if (parseObjCStructs || parseCFStrings) { m_objcProcessor = new ObjCProcessor(this, m_backedByDatabase); + } + if (parseObjCStructs) + { if (!settings) // Add our defaults { @@ -2297,6 +2305,18 @@ bool MachoView::InitializeHeader(MachOHeader& header, bool isMainHeader, uint64_ } } + if (parseCFStrings) + { + try { + m_objcProcessor->ProcessCFStrings(); + } + catch (std::exception& ex) + { + m_logger->LogError("Failed to process CFStrings. Binary may be malformed"); + m_logger->LogError("Error: %s", ex.what()); + } + } + if (parseObjCStructs) { try { @@ -3632,6 +3652,16 @@ Ref MachoViewType::GetLoadSettingsForData(BinaryView* data) programSettings->Set("workflows.functionWorkflow", "core.function.objectiveC", viewRef); } } + if (viewRef->GetSectionByName("__cfstring")) + { + settings->RegisterSetting("loader.macho.processCFStrings", + R"({ + "title" : "Process CFString Metadata", + "type" : "boolean", + "default" : true, + "description" : "Processes CoreFoundation strings, applying string values from encoded metadata" + })"); + } // register additional settings settings->RegisterSetting("loader.macho.processFunctionStarts", -- cgit v1.3.1