2013-12-16 2 views
0

Я декомпилировал программу с VB Decompiler, и она говорит, что моя целевая функция (та, которую я хочу видеть код) находится по адресу 0x00617B70. Поэтому, как только я разобрал приложение я иду на этот адрес памяти, и я вижу:Адрес памяти функции (ASM)

CALL 0861BBA1 
    ADD  BYTE PTR [EAX], DH 
    IN  AL, 0 
    XOR  AL, 0 
    ADD  BYTE PTR [EAX], AL 
    ADD  BYTE PTR [EAX], AL 
    ADD  BYTE PTR [EAX], AL 
    SBB  BYTE PTR [EAX], AL 
    ADD  BYTE PTR [EAX], AL 
    ADD  BYTE PTR [EAX], AL 
    SBB  AL, 0 
    ADD  BYTE PTR [EAX], AL 
    ADD  BYTE PTR [EAX], AL 
    ADD  AL, 0 
    ADD  BYTE PTR [EAX], AL 
    ADD  BYTE PTR [EAX], AL 
    OR  AL, FF 
    ADD  EAX, DWORD PTR [EAX] 
    JE  00617B99 
    ADD  DWORD PTR [EAX], EAX 
    INSB 
    INC  DWORD PTR [EBX] 
    ADD  BYTE PTR [EAX-1], DH 
    ADD  EAX, DWORD PTR [EAX] 
    AND  BYTE PTR [EAX], AL 
    ADD  BYTE PTR [EAX], AL 
    ADD  BYTE PTR [EAX], AL 
    ADD  EAX, 0 
    ADD  BYTE PTR [EAX-1], AL 
    ADD  DWORD PTR [EAX], EAX 
    INC  ESP 
    INC  DWORD PTR [EBX] 
    ADD  BYTE PTR [EAX-1], BL 
    ADD  AL, BYTE PTR [EAX] 
    XOR  BH, BH 
    ADD  AL, BYTE PTR [EAX] 
    ADC  BH, BH 
    ADD  AL, BYTE PTR [EAX] 
    INSB 
    OR  AL, 0 
    OR  BYTE PTR [EAX], CL 
    ADD  BYTE PTR [ESI], AL 
    INC  EAX 
    ADD  BYTE PTR [EAX+71], AL 
    PUSHAD 
-- 
    SHL  BYTE PTR [EAX-1], 1 
    PUSH ES 
    ADD  AH, BH 
    ADC  AL, 8 
    OR  BYTE PTR [EAX], AL 
    MOV  DWORD PTR [EAX+6E70AD00], EAX 
-- 
    SHL  BYTE PTR [EAX-1], 1 
    POP  ES 
    ADD  AH, BH 
    ADC  AL, 8 
    OR  BYTE PTR [EAX], AL 
    MOV  DWORD PTR [EDX+6C70AD00], EAX 
    JMP  FAR FWORD PTR [EBX+6E] 

Это не выглядит как функция, не так ли? Я ничего об ASM не знаю, но я надеюсь, что-то вроде этого:

PUSH EBP 
MOV EBP, ESP 
SUB ESP, 8 
...more stuff here... 
RETN 

Специально RETN инструкция говорит, что речь идет о функции, не так ли?

Любые идеи, что я делаю неправильно?

+0

Вы можете показать соответствующие части ** разборки исполняемого файла **? Эта ** разборка области памяти ** является почти наверняка данными и, следовательно, не предназначена для выполнения. И декомпилированный код тоже. – nrz

+1

'add [eax], al' - 0. Вы разбираете неправильную вещь. – Griwes

+0

К сожалению, я пока не понимаю ASM. Каковы соответствующие части разборки? Этот код является одним, автоматически выбранным MHS6.1, когда я делаю правый щелчок в первой строке ASM> Выберите функцию. – cdonts

ответ

0

Мне кажется, что ваша основная ошибка заключается в том, что это должен быть код процессора x86. Вместо этого код, который вы получили и показанный декомпилятором VB, является своего рода промежуточным байт-кодом, который выполняется не самим ЦП, а промежуточным интерпретатором. (Извините, если вы уже это знаете, но ваш вопрос в этом неясен.) Это основной метод для JVM, .NET runtime и т. Д. Google для некоторых слов в вашем списке (FStStrCopy, CBoolVarNull) дает подсказки, это VB специфический P -код. И он явно не будет раскрывать инструкции, такие как «mov ebp, esp» или «retn»; даже если код декодируется таким образом, это будет явный повод, а не преднамеренный результат. Даже если вы знаете, что есть точка входа чего-то, эта точка входа может обрабатываться не процессором, а интерпретатором P-кода.

Итак, чтобы решить эту проблему, вы должны определить, где именно p-код используется в анализируемом двоичном файле и где должен быть собственный код (если должен). Если вы считали, что это должен быть собственный код, что-то не так в вашем методе анализа и/или компиляции.

+0

Привет, спасибо за ответ. Я не ожидаю, что VBDecompiler покажет мне инструкции, такие как «mov ebp, esp» или «retn». Я ожидаю, что демонстрация покажет мне это. Первый код - это разборка, а последний - это P-код, который дал мне VBDecompiler. Как я уже сказал в другом комментарии, при декомпиляции других программ я просто копирую адрес, указанный в VBDecompiler, а затем перехожу к дизассемблеру для этого адреса; и там он показывает мне, что я ожидаю в конце «mov ebp, esp» и 'retn'instruction. Я не понимаю, почему в некоторых программах это показывает мне то, что я ожидаю, а в других - нет – cdonts

Смежные вопросы