Сейчас на форуме: asfa, _MBK_, Adler, bartolomeo (+8 невидимых)

 eXeL@B —› Вопросы новичков —› Помощь с командой ассемблер
Посл.ответ Сообщение

Ранг: -0.1 (гость), 6thx
Активность: 0.010
Статус: Участник

Создано: 14 сентября 2012 08:29
· Личное сообщение · #1

Приветствую

Я являюсь новичком в ассемлере и при анализе программы застрял на таком моменте:

Трассирую программу, берется символ D=44
MOV DL,BYTE PTR DS:[ECX+EDI] D=44 в EDX
XOR EDX,EAX - хорим FFFFFFFF и 44
AND EDX,0FFh плюсуем 0FF
MOV EBX,DWORD PTR DS:[EDX*4+050AFE0h] - На этой строке вижу:

DS:[0050B2CC]=5CB36A04
EBX=00000000

И далее используется 5CB36A04 - вопрос как из 0050B2CC - получается 5CB36A04 ?
Чето как не пытался понять никак не догоню, есть вариант что это преобразование в DWORD ?
Если можно пример на каком-нибудь ЯВУ ?
Извиняюсь если вопрос нубский - я только учусь




Ранг: 328.7 (мудрец), 73thx
Активность: 0.170.01
Статус: Участник

Создано: 14 сентября 2012 08:51
· Личное сообщение · #2

слишком сложный вопрос




Ранг: 164.6 (ветеран), 65thx
Активность: 0.120
Статус: Участник
Волшебник

Создано: 14 сентября 2012 09:22 · Поправил: neomant
· Личное сообщение · #3

Ответ на ваш вопрос 42. А если серьёзно, то стоит почитать какое-нибудь введение в ассемблер x86.
По вашему примеру: значение 5CB36A04 попадает в EBX из таблицы DWORDов, которая начинается по адресу 050AFE0. Инвертированный DL служит индексом в этой таблице. Размер таблицы - 256 DWORDов.

-----
Следуй за белым кроликом


| Сообщение посчитали полезным: SergeyIvan


Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 14 сентября 2012 09:23
· Личное сообщение · #4

это похоже на какую-то таблицу двордов. собственно 050AFE0h - начало таблицы EDX*4 - индекс элемента
теперь допустим EDX = 1, то MOV EBX,DWORD PTR DS:[EDX*4+050AFE0h] преобразуется в
MOV EBX,DWORD PTR DS:[1*4+050AFE0h] -> MOV EBX,DWORD PTR DS:[050AFE4h]

з.ы. опередили меня)))

-----
[nice coder and reverser]


| Сообщение посчитали полезным: SergeyIvan

Ранг: -0.1 (гость), 6thx
Активность: 0.010
Статус: Участник

Создано: 14 сентября 2012 09:42 · Поправил: SergeyIvan
· Личное сообщение · #5

Ну точно, спасибо за подсказки

Code:
  1. 0050B2A0  8C B3 61 CB 1A 83 66 BC A0 D2 6F 25 36 E2 68 52  ЊіaЛѓfј Тo%6вhR
  2. 0050B2B0  95 77 0C CC 03 47 0B BB B9 16 02 22 2F 26 05 55  •w.МG»№"/&U
  3. 0050B2C0  BE 3B BA C5 28 0B BD B2 92 5A B4 2B >> 04 6A B3 5C <<  ѕ;єЕ(ЅІ’Zґ+jі\


Получается для кейгена мне нужно добавить таблицу dword-ов и тянуть от туда значения

neomant

Откуда известно, что таблица содержит 256 элементов ?




Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 14 сентября 2012 09:45
· Личное сообщение · #6

SergeyIvan вот эта команда AND EDX,0FFh накладывает маску будет взят только младший байт, а это 00..FF

-----
[nice coder and reverser]





Ранг: 253.5 (наставник), 684thx
Активность: 0.260.25
Статус: Участник
radical

Создано: 14 сентября 2012 09:46 · Поправил: DimitarSerg
· Личное сообщение · #7

что-то похожее на CRC ?

const crcTable: array [0..255] of DWORD = (.... 256 двордов)

var s:string;
i:byte;
EAX,EDX:DWORD;
...
цикл... к примеру for i:=1 to length(s) do
EAX:=EAX xor ord(s[i]);
EDX:=EDX and $0FF;
EBX:=crcTable[EDX];
...

SergeyIvan
--> Delphi source CRC32<--

Hellspawn
Да, наверное, просто столько разных модификаций за последнее время попадало, что я даже не смотрю что это конкретно за CRC, сразу рипаю табличку DataRipper'ом ну и соответственно и саму функу подсчета црц

-----
ds


| Сообщение посчитали полезным: SergeyIvan


Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 14 сентября 2012 09:48
· Личное сообщение · #8

DimitarSerg по константе 5CB36A04 походу CRC32

-----
[nice coder and reverser]




Ранг: -0.1 (гость), 6thx
Активность: 0.010
Статус: Участник

Создано: 14 сентября 2012 10:28 · Поправил: SergeyIvan
· Личное сообщение · #9

Hellspawn

Все понял - извиняюсь за невнимательность, а я решил код писать в лоб - а похоже действительно CRC32

CryptoAnalizer выдал:

BLOWFISH [sbox] :: 000EE7D0 :: 004EE7D0
CRC32 [poly] :: 00105608 :: 00505608
PI fraction (NIMBUS / BLOWFISH) :: 000EE788 :: 004EE788

Upd
Вообщем все получилось, всем спасибо


 eXeL@B —› Вопросы новичков —› Помощь с командой ассемблер
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати