Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.03.27;
Скачать: CL | DM;

Вниз

Перевести из ASM в Delphi   Найти похожие ветки 

 
Ji ©   (2005-03-13 14:47) [0]

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

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;


 
Anatoly Podgoretsky ©   (2005-03-13 14:49) [1]

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

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


 
Ji ©   (2005-03-13 15:04) [2]

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


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

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


 
Ji ©   (2005-03-13 15:22) [4]

Можно :) Но мне нужно не шифровать, а РАСШИФРОВАТЬ... Это в продолжение темы про XOR текста, которую обсуждали наднях:
http://delphimaster.net/view/1-1110574689/
Простой xor как оказалось там не работает... Что-то сложнее, и как раз вот этот код делает то что мне нужно и я смог расшифровать тот файл с помощью этого кода


 
Anatoly Podgoretsky ©   (2005-03-13 15:32) [5]

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


 
DrPass ©   (2005-03-13 15:33) [6]


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

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


 
Ji ©   (2005-03-13 15:36) [7]

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

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


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

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

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

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


 
Anatoly Podgoretsky ©   (2005-03-13 15:48) [9]

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


 
DrPass ©   (2005-03-13 15:49) [10]

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


 
Ji ©   (2005-03-13 15:59) [11]

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

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

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


 
Anton_K ©   (2005-03-13 16:01) [12]

>Ji

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


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

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


 
Ji ©   (2005-03-13 16:21) [14]

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

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


 
begin...end ©   (2005-03-13 17:37) [15]

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

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



Страницы: 1 вся ветка

Текущий архив: 2005.03.27;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.03 c
1-1110441679
shadowonline
2005-03-10 11:01
2005.03.27
Присвоение OnClientRead обработчика


3-1109679828
Valeriya
2005-03-01 15:23
2005.03.27
Drop table


14-1110291057
Knight
2005-03-08 17:10
2005.03.27
Aura Fate of the Ages


3-1109152784
juice
2005-02-23 12:59
2005.03.27
Выборка из набора данных


1-1110462023
mariya_mezenceva
2005-03-10 16:40
2005.03.27
fastreport