diff options
| author | kat <kat@vector35.com> | 2024-06-16 10:36:16 -0400 |
|---|---|---|
| committer | kat <kat@vector35.com> | 2024-06-17 11:46:17 -0400 |
| commit | a29b3227ded18cf7f8e0e31968d410eeb99dd8e3 (patch) | |
| tree | f2de930943f84e84ed7c11456bdca51b0d7519ae /view/macho/machoview.cpp | |
| parent | 1daa4f494a3915c01a4b9cd915ff7682c10cbe31 (diff) | |
[Objective-C] Parse CFStrings seperately from main Objective-C Processing.
Diffstat (limited to 'view/macho/machoview.cpp')
| -rw-r--r-- | view/macho/machoview.cpp | 32 |
1 files changed, 31 insertions, 1 deletions
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> 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<bool>("loader.macho.processObjectiveC", this); + if (settings && settings->Contains("loader.macho.processCFStrings")) + parseCFStrings = settings->Get<bool>("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<Settings> 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", |
