Jeg lærer at adskille og analysere objektiv-c-binære filer. En af mine frustrationer er, at i Hopper og IDA ser det ud til, at de korrekte krydsreferencer og kontrolflow ikke bevares. Jeg tror, det er på grund af Objective-C's meddelelsesoverførselsteknik.
For eksempel er her et nøglegenme, jeg arbejder på:
Som du kan se, at det er meget svært at følge. Alt ser ud til at falde sammen ved afsendelse af meddelelser med meget lidt indikation af, hvor kontrolflowet faktisk begynder. For eksempel prøver jeg at bestemme, hvad der kalder mk. Det sendes tydeligvis via afsendelse af beskeder, men hvor kommer opkaldet fra? Selvfølgelig synes krydsreferencer, som IDA giver, at stoppe ved enhver Objective-C-funktion - hvilket gør det svært at bestemme, hvem der kalder det.
Jeg har prøvet dette plugin: https://github.com/zynamics/objc-helper-plugin-ida
Men det resulterer i "intet at lappe. "
Har IDA en funktion til at hjælpe med dette? Hvordan kan jeg spore dette i hånden, hvis det er nødvendigt?
Nogle har allerede foreslået, at jeg bare løser dette gennem dynamisk analyse, men jeg foretrækker at forstå den rette måde at analysere det statisk på.