Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Перевести из ASM в Delphi [D6, WinXP]


Ji ©   (2005-03-13 14:47:00) 

Кто знает ассемблер, помогите, плз перевести данный код в Делфи:

var
 s:string;
 key:integer;

 asm
 mov ecx, key
 mov dl, cl
 shr ecx, 20
 mov dh, cl

 mov esi, s
 mov esi, [esi]
 or  esi, esi    
 jz  @OUT
 mov ah, 10111000b

 mov ecx, [esi-4]
 or  ecx, ecx
 jz  @OUT
@IN:
 mov al, [esi]
 xor al, ah
 rol al, 3
 xor al, dh
 sub al, dl

 mov [esi], al
 inc esi
 ror ah, 3
 dec ecx
 jnz @IN
@OUT:
 end;


begin...end   (2005-03-13 17:37:00) [1]

> Ji ©   (13.03.05 16:21) [14]

Регистры EAX, ECX и EDX сохранять не нужно.


Ji   (2005-03-13 16:21:00) [2]

> DrPass ©   (13.03.05 15:49) [10]

Помогло. Реальное спасибо.
Только я регистры сохранил все подряд. Не знаю, является ли это необходимым, но теперь работает.
Я написал:
 push esi
 push ecx
и pop соответственно.


Anatoly Podgoretsky   (2005-03-13 16:02:00) [3]

DrPass ©   (13.03.05 15:49) [10]
Согласно спецификации Дельфи, данный код не нужен как бессмысленный. Сохранять надо совсем другие регистры.


Anton_K   (2005-03-13 16:01:00) [4]

>Ji

За умеренную плату напишу тебе процедуру на ассемблере для расшифровки.


Ji   (2005-03-13 15:59:00) [5]

DrPass ©   (13.03.05 15:49) [10]
> Там можно и без ассемблера вполне обойтись.

Ну я в общем-то для этого и создал тему.

Хотя это не совсем xor. Простой Xor дает другие результаты.


DrPass   (2005-03-13 15:49:00) [6]

push eax
push ecx
push edx
...
pop edx
pop ecx
pop eax
Но насколько я вижу, это код побайтового XOR строки. Там можно и без ассемблера вполне обойтись.


Anatoly Podgoretsky   (2005-03-13 15:48:00) [7]

Скажем так данная процедура нерабочая, является замаскированым трояном, втихую портит регистры и память. Ты ее выбрось от греха подальше.


Ji   (2005-03-13 15:39:00) [8]

> DrPass ©   (13.03.05 15:33) [6]

> Наверное же перед вызовом этой процедуры не мешало бы регистры > в стек посбрасывать, а после - поднять.

А можно чуть подробней?


Ji   (2005-03-13 15:36:00) [9]

Ясно...  Конечно было бы интересно с алгоритмом разобраться...

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


DrPass   (2005-03-13 15:33:00) [10]


> в том месте где я эту процедуру использую, она изменяет
> переменные к этой процедуре никак не относящиеся

Наверное же перед вызовом этой процедуры не мешало бы регистры в стек посбрасывать, а после - поднять.


Anatoly Podgoretsky   (2005-03-13 15:32:00) [11]

Возможно и похитрее, насчет XOR были только предположения.
А разбираться с этим кодом нет желания. Совсем другое дело если тебе поступает зашифрованный код и тебе надо расшифровывать, но в этом случае от адресатов надо потребовать алгоритм расшифровки и/или готовые библиотеки.
А если с разбираться данным кодом, то надо вручную на бумаге прогнать алогритм с эталонным текстом. Код здесь не сложный, но нужно желание.


Ji   (2005-03-13 15:22:00) [12]

Можно :) Но мне нужно не шифровать, а РАСШИФРОВАТЬ... Это в продолжение темы про XOR текста, которую обсуждали наднях:
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1110574689&n=0
Простой xor как оказалось там не работает... Что-то сложнее, и как раз вот этот код делает то что мне нужно и я смог расшифровать тот файл с помощью этого кода


Anatoly Podgoretsky   (2005-03-13 15:11:00) [13]

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


Ji   (2005-03-13 15:04:00) [14]

Это не знаю, что он конкретно делает... Эту процедуру я взял из исходников... Это какой-то алгоритм простого шифрования. Здесь S - шифруемая строка, K - ключ для шифрования.
Все бы ничего, но... Если я вставляю этот код в программу в виде процедуры, то в том месте где я эту процедуру использую, она изменяет переменные к этой процедуре никак не относящиеся. Хочу разобраться и заодно понять что делает этот алгоритм со строкой


Anatoly Podgoretsky   (2005-03-13 14:49:00) [15]

Судя по
var
s:string;
key:integer;

это и есть в Дельфи.
А что данные код делает, приведи формулу.


Наверх

Титульная страница Поиск, карта сайта Написать письмо