![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Перевести из 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;
это и есть в Дельфи.
А что данные код делает, приведи формулу.