Реверс-инжиниринг ОС?

Всем привет. Мою голову взрывают несколько вопросов по поводу закрытых ОС. Чем отличается декомпиляция ОС от декомпиляции обычной программы? Почему до сих пор никому не удалось восстановить исходники IOS (даже самых старых версий) или Windows? Поясните, пожалуйста, как можно подробнее.
Всем спасибо.
UPD1: По причине того, что многие не знают зачем может преследоваться цель декомпиляции ОС - поясняю: Поиск дырок, модификация и т.д. ...
UPD2: Всем спасибо за ответы. Теоретически, это возможно сделать, но очень затратно. Всё ясно.
  • Вопрос задан
  • 3691 просмотр
Решения вопроса 3
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
если у вас есть куча свободного времени (пара тройка лет) и вы хорошо разбираетесь в железе и процессе дизассемблирования, реализуете все необходимые инструменты для упрощения процесса - то пишите клон iOS совместимый с их ПО. Только вас либо засудят по итогу либо у вас ничего не выйдет.
Ответ написан
Отличия только в кольцах привелегий и, соответственно с этим, множеством инструкций данной архитектуры.
Исходники восстанавливаются, раньше это было доступно энтузиастам ввиду простоты систем, сейчас же это дело безопасников (целых коллективов) ищущих детально незадокументированные возможности.
Ответ написан
Комментировать
Наёмные убийцы из Microsoft и Apple найдут тебя. Если решишь этим заняться, то знай тебе, что дизассемблирование не всегда даёт адекватный результат, а многие компоненты ядра как Windows так и iOS написаны обфусцированном коде, посему разобарться в нём очень сложно, тем паче в одиночку. Например, вот обфусцированный код:
F
U (Y (t + 28) + 1536) |=
62 & -n;
M
U (d + D) =
X (D, Y (t + 12) + 26628, 412162) ? X (D, Y (t + 12) + 27653,
                    410112) ? 31 : 0 : U (d + D);
for (; j < 12800; j += 8)
    P (d + 27653 + Y (t + 12) + ' ' * (j & ~511) + j % 512,
        U (Y (t + 28) + j / 8 + 64 * Y (t + 20)), 0);
}

а вот его расшифровка:
case msg_render:
    /* This code draws content of window (black frame, white area and text) */
    {
        char *dest = (char *)arg;
        if(shell){
            (*content)[(LINES - 1) * COLUMNS] = '>';
        }
        /* Frame */
        draw_rectangle(dest + my_task->begin, TITLE_HEIGHT + 8, 4,            LINES * SYMBOL_HEIGHT + 3, COLUMNS * SYMBOL_WIDTH + 2, BLACK);
        /* Area */
        draw_rectangle(dest + my_task->begin, CONTENT_TOP,      CONTENT_LEFT, LINES * SYMBOL_HEIGHT + 1, COLUMNS * SYMBOL_WIDTH,     WHITE);
        /* Text */
        for(int i = 0; i != LINES; ++i){
            for(int j = 0; j != COLUMNS; ++j){
                draw_symbol(dest + my_task->begin + (CONTENT_TOP + i * SYMBOL_HEIGHT) * SCREEN_WIDTH + CONTENT_LEFT + j * SYMBOL_WIDTH, (*content)[(*line + i) * COLUMNS + j], BLACK);
            }
        }
    }
    break;

(источник здесь.
Проще написать свою ОС, совместимую с какой-то, но это опять же очень долго и успеха не будет.
Как доказательство - ReactOS.
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
Taraflex
@Taraflex
Ищу работу. Контакты в профиле.
1. Это незаконно
2. Это очень дорого и трудозатратно
3. Это очень долго
Ответ написан
svd71
@svd71
Декомпиляция ничем не отличается.
восстанавливать исходники - дело неблагодарное и ненужное. Во первых компилятор генерирует инструкции ЯВУ в ассемблерные и есть возможность найти совпадения нужных инструкций. Но пока вы будете искать эти совпадения, вам уже не нужно будет декодировать в ЯВУ - вы прекрасно начнете разбираться во всем и на ассемблере.
Во вторых какая цель будет преследоваться? Перепродажа? Это не законно и наказуемо. Да и без пояснительных комментариев это мало представляет интереса.
Втретьих декодировать исходники желательно до выхода новой версии операционки.
Ответ написан
donkaban
@donkaban
Умею рисовать тени
А зачем?
Я поясню. Зачем декомпилировать os, если ее API и ABI документированы?
Ответ написан
@l0gg3r
Зачем реверсить, ядро iOS свободно доступно :)
www.opensource.apple.com/source/xnu/xnu-1456.1.26

а вот Windows активно реверсят, смотри https://www.reactos.org/
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы