Декомпилировать фреймворк Obj C - PullRequest
5 голосов
/ 02 декабря 2011

Я хочу декомпилировать iOS Twitter-фреймворк, если я возьму файл twitterd из симулятора xcode, который предварительно скомпилирован для запуска на x86 (?), А не на ARM. Что касается инструмента, я использую http://code.google.com/p/i386codedump/ Инструкция:

Usage: code-dump [options] <mach-o-file> where options are:
    -a             show instance variable offsets
    -A             show implementation addresses
    --arch <arch>  choose a specific architecture from a universal binary (ppc, i386, etc.)
    -C <regex>     only display classes matching regular expression
    -H             generate header files in current directory, or directory specified with -o
    -I             sort classes, categories, and protocols by inheritance (overrides -s)
    -o <dir>       output directory used for -H
    -r             recursively expand frameworks and fixed VM shared libraries
    -s             sort classes and categories by name
    -S             sort methods by name
    -t             suppress header in output, for testing
    -d             decompile
    -D <arch>       decompilation architecture

Я вроде не понимаю, какие варианты мне нужно выбрать, вот что я пытаюсь:

iMac:documents $ ./code-dump -d twitterd
2011-12-02 18:56:35.885 code-dump[1643:707] feedface, ao: 0
2011-12-02 18:56:35.886 code-dump[1643:707] process: feedface (86000)
/*
 *     Generated by code-dump 2.0.
 */
This file does not contain any Objective-C runtime information.
2011-12-02 18:56:35.888 code-dump[1643:707] Building lookup table...
2011-12-02 18:56:40.308 code-dump[1643:707] Finished lookup table
/usr/bin/lipo: input file (twitterd) must be a fat file when the -extract option is specified
2011-12-02 18:56:40.868 code-dump[1643:707] CDAssemblyProcessor, 22288 instructions, 0 functions
Segmentation fault: 11

Что это значит, что мне нужно делать? :)

1 Ответ

4 голосов
/ 02 декабря 2011

Этот файл не содержит никакой информации о времени выполнения Objective C.

Это означает, что файл не определяет классы, протоколы или категории. Он может использовать target-c, но не содержит никакой полезной информации о классах, которые он использует.

CDAssemblyProcessor, 22288 инструкций, 0 функций

Это указывает на то, что у файла были удалены символы. Он содержит код, но не указывает, где начинается или заканчивается какая-либо функция, поэтому его нельзя декомпилировать.

Вы получаете это, потому что twitterd не является платформой, это программа, которая включена в платформу. Фактический код фреймворка находится в файле Twitter. Если бы вы попытались декомпилировать это, вы, по крайней мере, получили бы несколько заголовков цель-c. Я предлагаю использовать параметр -H, чтобы заголовки создавались как файлы в текущем каталоге. Без этого заголовки будут отправляться на ваш терминал один за другим, и будет очень сложно что-либо найти. Однако, скорее всего, у него тоже было убрано большинство символов, поэтому декомпиляция не даст много.

...