Как преобразовать ASM в читаемый код? - PullRequest
7 голосов
/ 03 сентября 2010

У меня есть exe-файл, который я открыл с помощью PE Explorer Disassembler.Теперь я вижу код asm, который выглядит так:

    push    ebx
    push    esi
    mov ebx,eax
    mov eax,[ebx+38h]
    push    eax
    mov eax,[ebx+3Ch]
    push    eax
    mov ecx,edx
    mov eax,ebx
    mov edx,[ebx+30h]
    mov esi,[eax]
    call    [esi+7Ch]
    or  byte ptr [ebx+00000088h],02h
    pop esi
    pop ebx
    retn

Я понятия не имею, что это значит.Есть ли способ преобразовать это сейчас в читаемый код (C, C ++, C # или VB.NET)?

Справочная информация: причина, по которой мне это нужно, заключается в том, что мне нужно вызвать вышеуказанную функцию измое приложение для Windows.Теперь эта функция находится в exe третьей стороны - для нее нет API или исходного кода.Любая помощь или совет приветствуется.

Ответы [ 6 ]

2 голосов
/ 04 октября 2010

Вам необходимо знать, какие аргументы используются. В этом случае похоже, что аргументы передаются этой подпрограмме в регистрах eax & edx. Как только вы узнаете, что означают эти значения, вы, вероятно, сможете выяснить, как используется эта подпрограмма, и перекодировать ее на любом языке, который вы используете.

1 голос
/ 03 сентября 2010

Если вы сможете заполучить его, IDA Pro + Hex-Rays может декомпилировать его в получитаемый код.

0 голосов
/ 13 декабря 2010

Я немного опаздываю, чтобы ответить на этот пост, но, увидев, что принятый ответ неверен, я все равно дам свои 0,2 в случае, если другие люди ищут то же самое.

То, что вы ищетеfor не является "декомпиляцией", поскольку вы уже декомпилировали его в код asm.То, что вам нужно, это своего рода компиляция дизассемблированного кода в нечто, что вы можете прочитать (например, C)

Эта область обратного инжиниринга все еще недостаточно развита.Некоторые упоминали IDA с некоторыми дорогими плагинами, но это не принесет вам пользы ... Я упомяну единственную программу, которая может вам помочь: REC

Вывод может быть не точным, или вы могли быне сможет получить никакого кода C вообще в зависимости от программы, которую вы хотите отлаживать.Но это лучший вариант, который у вас есть, если вы не знаете сборку.

Что касается того, что вы пытаетесь сделать, то опубликованная вами функция ничего не делает.Вызывает другую функцию с параметрами и получает возвращаемое значение.То, что вас интересует, это звоните [esi + 7Ch].Вы нуждаетесь в отладчике и вступаете в этот вызов.

Чтобы перехватить эту функцию внутри вашей программы - это другая история ... Вам лучше написать ее самостоятельно.

0 голосов
/ 11 октября 2010

На первый взгляд это объектный код; он получает (как минимум) объект в качестве аргумента, вызывает метод этого объекта, который принимает в качестве аргументов три атрибута объекта, а затем устанавливает бит (флаг?) в другом атрибуте того же объекта в один.

IDA Pro, вероятно, сможет определить прототип функции, и у него есть бесплатная версия, которая имеет все необходимые функции: http://www.hex -rays.com / idapro / idadownfreeware.htm . Однако он только даст вам представление о прототипе функции, а не о ее поведении (если вы не можете «прочитать» сборку x86). Для возврата к простому C / C ++ требуется плагин HexRays, который довольно дорогой и не всегда работает (декомпиляция на язык высокого уровня довольно сложна).

0 голосов

Вы можете декомпилировать его в C или другой язык с помощью указателей, но он по-прежнему будет нечитаемым.

0 голосов
/ 03 сентября 2010

То, что вы хотите, называется «декомпиляцией».

Это непросто решить задачу, а часто и вовсе невозможно.Вы можете попробовать Google в качестве начала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...