Pull to refresh

Comments 13

Я жажду еще!
P. S. Спасибо за перевод.
Советую еще обратить внимание на дизассемблер/декомпилятор/отладик Hopper.
И вместо возни с поиском файлового смещения можно:
1)Отредактировать файл в самой IDA
2)Скопировать часть байт в окрестности прыжка, и искать сразу их. Если последовательность уникальна, то остановитесь как раз в нужном месте.
Пробовал Hopper (являюсь обладателем и IDA и Hopper), но он совершенно неудобен, имхо.
Я бы порекомендовал попробовать radare2. Да, в командной строке, но реверсера/ресёрчера это не должно пугать. Причем в radare2 есть весь инструментарий для инъекции кода — и отладчик (r2 -d), и ассемблер (rasm2 — для сборки шеллкода). Вот пример последовательности действий для простого crackme для x86 c помощью radare2.

А для GDB рекомендую этот патч от osxreverser — reverse.put.as/2013/11/08/one-small-patch-for-gdb-one-giant-leap-for-reversers/ — позволяет удобно отлаживать ASLR код на Mac OS X.
Спасибо за перевод, эта часть уже гораздо интереснее. Хотя, конечно, лучше было бы (это уже к автору оригинала) показывать всё на девайсе — с симулятором всё слишком просто.
Заодно можно было бы затронуть тему с переподписыванием программы после модификации.
Дык программа не переподписывается после. Ну точнее переподписывается, но своим, левым сертификатом. Её можно будет только на джелбрейкнутом девайсе запустить, с модифицированным инсталлером.
Ну так я о том и говорю: в статье не указано, что после модификации реальной программы её требуется подписать, чтобы запустить на jb-девайсе. Без jb весь взлом методом модификации бинарника (да и содержимого бандла) не имеет смысла. Если нет jb, уповать стоит только на модификацию содержимого /Documents и user defaults.
«Какая обфускация кода?» говорили они. «твои исходники никто не увидет, кроме тебя» говорили они. «Это же Apple, там все секьюрно»!
Правильные (purchaseMoney, getMoneyAmount и т.п.) имена классов и селекторов в каком то смысле быстрый путь к раскрытию и взлому. Об этом сарказм от usgleb и говорит.
Вы дочитали до этого коммента? Сюрприз! #include <sys/ptrace.h> не работает на реальном устройстве. Решение:

#import <dlfcn.h>
#import <sys/types.h>

typedef int (* ptrace_ptr_t)(int _request, pid_t _pid, caddr_t _addr, int _data);
#if !defined(PT_DENY_ATTACH)
#define PT_DENY_ATTACH 31
#endif  // !defined(PT_DENY_ATTACH)

void disable_gdb() {
  void * handle = dlopen(0, RTLD_GLOBAL | RTLD_NOW);
  ptrace_ptr_t ptrace_ptr = dlsym(handle, "ptrace");
  ptrace_ptr(PT_DENY_ATTACH, 0, 0, 0);
  dlclose(handle);
}

Далее в функцию main() добавить:

#ifndef DEBUG
    disable_gdb();
#endif

И, наконец, обфусцировать константу "ptrace" (домашнее задание). Всю эту инфу прислал автор одной статьи, которая лежит в песочнице и очень ждёт инвайта.
UFO just landed and posted this here
UFO just landed and posted this here
UFO just landed and posted this here
Sign up to leave a comment.

Articles