Перейти к содержанию
  • записи
    104
  • комментариев
    125
  • просмотров
    15 458

Встраиваем C декомпилятор в CE 6.8.3


MasterGH

1 470 просмотров

Вступление

Спойлер

Можно представить километры дизассемблерного кода и выделить в них:

  1. математические инструкции
  2. логические инструкции
  3. инструкции на чтение, запись
  4. условные и безусловные прыжки, вызовы функций

 

Получается как бы так. В первую очередь удобно обращать внимание на математические операции, т.к. что-то высчитывается, рассчитывается.

Потом интересны логические сравнения и переходы на ветви кода. Что-то посчитали, что-то сравнили, что записали.

 

Видеть дизассемблерный код по приоритетам можно так: математические инструкции (сумма, разность и так далее),  логические (cmp, test и так далее),  прыжки или вызовы call после сравнения, чтение и запись, тут как бы прочитали и записали.

 

В CE выделим участок кода и функцию

Спойлер

image.png

Sub eax,edx - вычитание и наиболее значимее чем запись и чтение.

После декомпиляции

Спойлер

image.png

Если выделили две инструкции

Спойлер

image.png

 

Обращать внимание будем на математику, логику, условия и потом на чтение и запись.

В данном случае, нужно найти вычитание из адреса "eax4->f1152 = eax4->f1152 - (eax3 + 1)"

 

Спойлер


void func_40d5f0(void* ecx);

int32_t func_40f1e0(void* ecx);

int32_t func_40e910(void* ecx);

struct s0 {
    signed char[1152] pad1152;
    int32_t f1152;
};

void func_43a4a0(void* ecx);

void func_494780(void* ecx);

void func_51b230(void* ecx);

void func_40d870(void* ecx);

void func_403bf0(void* ecx);

void func_40d9a0(void* ecx);

void func_423e70() {
    void* ecx1;
    int32_t eax2;
    int32_t eax3;
    struct s0* eax4;

    ecx1 = (void*)((int32_t)__zero_stack_offset() - 4 - 12);
    func_40d5f0(ecx1);
    eax2 = func_40f1e0(ecx1);
    if (!eax2 && (eax3 = func_40e910(ecx1), eax4->f1152 = eax4->f1152 - (eax3 + 1), func_43a4a0(ecx1), func_494780(ecx1), eax4->f1152 < 0)) {
        func_51b230(ecx1);
        eax4->f1152 = 100;
        func_43a4a0(ecx1);
        func_494780(ecx1);
    }
    func_40d870(ecx1);
    func_403bf0(ecx1);
    if (eax2) {
        func_40d9a0(ecx1);
    }
    return;
}

 

 

Как поставить декомпилятор

1. С форума Cheat Engine качаем архив

2. Распаковываем в папку с Cheat Engine

3. В настройках открываем плагин cesmartdec.dll

Спойлер

image.png

4. Идем на инструкцию, выделяем функцию 

Спойлер

image.png

5. Декомпилируем на первой выделенной инструкции из всех выделенных

Спойлер

image.png

 

  • Понравилось 1
  • Плюс 2

2 Комментария


Рекомендуемые комментарии

В 21.02.2019 в 15:28, partoftheworlD сказал:

Вывод декомпилятора похож на снеговика в x64dbg.

Как сказал DarkByte
 

Цитата

it is the snowman decompiler. I only added a interface for the ce plugin system to it (and forced it to use c syntax instead of c++)


неплохо былоб обновить исходники под ласт версию CE.

Ссылка на комментарий

Пожалуйста, войдите, чтобы комментировать

Вы сможете оставить комментарий после входа в



Войти
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.