Сейчас на форуме: hgdagon, asfa (+5 невидимых)

 eXeL@B —› Программирование —› Вставка ассемблерного кода в delphi
. 1 . 2 . >>
Посл.ответ Сообщение

Ранг: 138.7 (ветеран), 135thx
Активность: 0.110
Статус: Участник

Создано: 27 апреля 2007 12:38 · Поправил: crc1
· Личное сообщение · #1

Привет парни
Есть прога "Нормы времени" производитель [url=http://www.autodealer.ru
]http://www.autodealer.ru
[/url]
В ней присутствует Б.Д.
В базе шифрованные данные (поле WORKS). Вот эти данные я и пытаюсь вытащить.
Что я сделал:
1. Отмал прогу от starforce
2. Разобрал алгоритм шифрования
3. Написал на ассемблере процедуру расшифровки
Все замечательно. НО, мне хочется перетащить эти шифр. данные в свою таблицу. НО, там более 20000 записей и в ручную их перепихивать геморно, поэтому прошу помощи: нужно внедрить asm вставку в delphi с обработкой всех строк и записью расшифрованного поля WORKS в другое поле
ЗЫ Пытался сделать это сам, но башка уже не варит:s14
ЗЗЫ: Всевопросы по снятию starforce в ПМ Здесь не флудить



Ранг: 20.8 (новичок)
Активность: 0.010
Статус: Участник

Создано: 27 апреля 2007 13:04
· Личное сообщение · #2

asm
// Ассемблерный код
end;
Если я правильно понял, вроде так, внутри можно обращаться к переменным (mov, EAX, var1).



Ранг: 138.7 (ветеран), 135thx
Активность: 0.110
Статус: Участник

Создано: 27 апреля 2007 13:09
· Личное сообщение · #3

Player
Ежили было так все просто я б не спрашивал




Ранг: 353.0 (мудрец)
Активность: 0.370
Статус: Участник
resreveR

Создано: 27 апреля 2007 13:16
· Личное сообщение · #4

crc1 пишет:
Все замечательно. НО, мне хочется перетащить эти шифр. данные в свою таблицу. НО, там более 20000 записей и в ручную их перепихивать геморно, поэтому прошу помощи: нужно внедрить asm вставку в delphi с обработкой всех строк и записью расшифрованного поля WORKS в другое поле

Вырежи расшифровщик и напиши свою прогу, которая достанет записи, расшифрует и запишет в твою таблицу

-----
Тут не могла быть ваша реклама




Ранг: 65.3 (постоянный), 10thx
Активность: 0.020
Статус: Участник

Создано: 27 апреля 2007 13:21
· Личное сообщение · #5

Ну так спрашивай что конкретно не получается, а то не понятно что надо. ИМХО Player ответил на вопрос.
Максимум могу добавить что возможно имеет смысл написать на асме DLL с расшифровкой



Ранг: 138.7 (ветеран), 135thx
Активность: 0.110
Статус: Участник

Создано: 27 апреля 2007 13:45
· Личное сообщение · #6

lord_Phoenix пишет:
Вырежи расшифровщик и напиши свою прогу, которая достанет записи, расшифрует и запишет в твою таблицу

Мля, дык расшифвщик то еть (asm и он работает), нуна его внедрить в длфя, организоавать цикл ну и т.д.
Вот это я и прошу




Ранг: 420.3 (мудрец)
Активность: 0.240
Статус: Участник

Создано: 27 апреля 2007 13:54
· Личное сообщение · #7

crc1
Может реально собрать библиотеку, экспортировать эту функцию в ней, подключить библиотеку. И не мучаться.

ЗЫ Что у тебя на входе процедуры, что на выходе?

-----
Сколько ни наталкивали на мысль – все равно сумел увернуться




Ранг: 138.7 (ветеран), 135thx
Активность: 0.110
Статус: Участник

Создано: 27 апреля 2007 13:55
· Личное сообщение · #8

tomac
Непонятно следующее
я объявляю строковую переменную, далее пишу asm код

var txtcr: AnsiString;
asm
MOV ESI, txtPnt
ля-ля-ля
MOV BYTE PTR DS:[ESI], AL ; вот в этом месте получаю аксес виолант
Почему то адрес переменной оказывается в секции code и я в ауте




Ранг: 85.4 (постоянный)
Активность: 0.080
Статус: Участник

Создано: 27 апреля 2007 13:56 · Поправил: Icelot
· Личное сообщение · #9

crc1 поправь если не так:
1. взять шифрованное значение из таблицы
2. расшифровать
3. записать в свою таблицу

ADD:
помоему надо так mov ESI,[some var]
или lea ESI

-----
radio uno in ibisa ...




Ранг: 138.7 (ветеран), 135thx
Активность: 0.110
Статус: Участник

Создано: 27 апреля 2007 14:00
· Личное сообщение · #10

ValdiS
На входе строка типа:
F9EDB0F53BD450B753F906D72597E1258EAC674281A7C9339E3125723BD556447BA074 C61C32E430C019EE4B644FC1A34782286E5A781B9CDC0267B546AF
на выходе должна быть такая строка:
Боковой повторитель указателя поворота на переднем крыле - с/у
Все это работает, но 20000 сток, руками




Ранг: 420.3 (мудрец)
Активность: 0.240
Статус: Участник

Создано: 27 апреля 2007 14:09
· Личное сообщение · #11

crc1 пишет:
var txtcr: AnsiString;
asm
MOV ESI, txtPnt
ля-ля-ля
MOV BYTE PTR DS:[ESI], AL ; вот в этом месте получаю аксес виолант

Проверяй стек, может не выравниваешь после работы процедуры. В начале/конце поставь pushad/popad, чтобы с регистрами косяков не было.
После компиляции проекта загружай полученный файл в ольку и смотри, что куда... Насколько изменится твой код после компиляции.

-----
Сколько ни наталкивали на мысль – все равно сумел увернуться




Ранг: 20.8 (новичок)
Активность: 0.010
Статус: Участник

Создано: 27 апреля 2007 14:18
· Личное сообщение · #12

crc1 пишет:
var txtcr: AnsiString;
asm
MOV ESI, txtPnt
ля-ля-ля
MOV BYTE PTR DS:[ESI], AL ;


Ну другое же дело, так гораздо ясней. AnsiString, как и String содержит адрес указателя на данные, поэтому надо
mov eax, txtPnt
mov esi, [eax]
и понеслась
P.S. Длина строки будет в [eax - 4]



Ранг: 138.7 (ветеран), 135thx
Активность: 0.110
Статус: Участник

Создано: 27 апреля 2007 14:19
· Личное сообщение · #13

Мужики
Мне нужна конкретная помощь
У меня есть (не воровал, сам распатронил) готовый алгоритм написанный на asme. на ЯВУ перекинуть не получается, нету времени Нужно срочно сваять файло, который линкуется к Б.Д. (dbf; mdb я ее конвертнул)считывает из поля зашифрованныый стринг передает в мою asm вставку и в соседнее поле пишет расшифровку



Ранг: 138.7 (ветеран), 135thx
Активность: 0.110
Статус: Участник

Создано: 27 апреля 2007 14:39
· Личное сообщение · #14

Player пишет:
mov eax, txtPnt
mov esi, [eax]
и понеслась

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



Ранг: 60.4 (постоянный)
Активность: 0.030
Статус: Участник

Создано: 27 апреля 2007 14:44
· Личное сообщение · #15

crc1, тебе ValdiS реальную штуку предложил. Оформи свой алгоритм в виде функции, сгороди DLL-библиотеку и юзай её из любого языка. Если надо поищу доку, как DLL'ки на асме городить.



Ранг: 138.7 (ветеран), 135thx
Активность: 0.110
Статус: Участник

Создано: 27 апреля 2007 14:56
· Личное сообщение · #16

Vedrus
Да сгородил я dll на асме и она работает с моим exe'шником. Но я не умею на асме линковаться к Б.Д.
З.Ы. Исходники могу выложить
Ребята, прошу только конкретной помощи
Хотя бы ответте на вопрос
crc1 пишет:
Почему то адрес переменной оказывается в секции code

ПОЧЕМУ???????????????




Ранг: 85.4 (постоянный)
Активность: 0.080
Статус: Участник

Создано: 27 апреля 2007 15:00
· Личное сообщение · #17

crc1 пишет:
ПОЧЕМУ

Загрузи в Ольку да посмотри почему. Бряк на память или потрейсь. А в esi надо указатель на первый байт загружать.

-----
radio uno in ibisa ...




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

Создано: 27 апреля 2007 15:00
· Личное сообщение · #18

> P.S. Длина строки будет в [eax - 4]
или в [eax-1] если строка задана String[X]

-----
Shalom ebanats!




Ранг: 75.0 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 27 апреля 2007 15:11
· Личное сообщение · #19

crc1 пишет:
tomac
Непонятно следующее
я объявляю строковую переменную, далее пишу asm код

var txtcr: AnsiString;
asm
MOV ESI, txtPnt
ля-ля-ля
MOV BYTE PTR DS:[ESI], AL ; вот в этом месте получаю аксес виолант
Почему то адрес переменной оказывается в секции code и я в ауте


Мля, AnsiString - это КЛАСС, вот именно поэтому адрес получается в секции кода.
ИМХО, надо txtPnt.c_str() - это на с++ (не помню какой у дельфы синтаксис)



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

Создано: 27 апреля 2007 15:15
· Личное сообщение · #20

> AnsiString - это КЛАСС
гг... докажи.. покажи код создания экземпляра и деструкции.. так же методы, свойства... на дельфи...

-----
Shalom ebanats!




Ранг: 60.4 (постоянный)
Активность: 0.030
Статус: Участник

Создано: 27 апреля 2007 15:17 · Поправил: Vedrus
· Личное сообщение · #21

crc1 пишет:
Но я не умею на асме линковаться к Б.Д.

Я тоже (но по этой фигне у меня тоже доки есть, но это ). Так можно же подцепиться к базе из Delphi, а обработать всё через асмовскую функцию которая в DLL, или я не прав? Разбираться в коде если честно не охото.



Ранг: 138.7 (ветеран), 135thx
Активность: 0.110
Статус: Участник

Создано: 27 апреля 2007 15:27
· Личное сообщение · #22

Rush пишет:
Мля, AnsiString - это КЛАСС

Да я разные типы прсваивал переменной , эфект - читай выше
Ребята, я конечно решу эту проблему, но нужно срочно. Может пойти на другой форум?
Дело в том, что бы добыть эту Б.Д. я раковырял StarForce, отломал exe'шник, нашел алго, реализовал его на асме и попал в ступор остался один шаг....



Ранг: 138.7 (ветеран), 135thx
Активность: 0.110
Статус: Участник

Создано: 27 апреля 2007 15:29 · Поправил: crc1
· Личное сообщение · #23

Vedrus пишет:
Разбираться в коде если честно не охото.

А кто просит разбираться в коде? Все разобрано. Нужно: читай выше



Ранг: 138.7 (ветеран), 135thx
Активность: 0.110
Статус: Участник

Создано: 27 апреля 2007 15:39
· Личное сообщение · #24

ValdiS пишет:
Проверяй стек, может не выравниваешь после работы процедуры. В начале/конце поставь pushad/popad, чтобы с регистрами косяков не было.
После компиляции проекта загружай полученный файл в ольку и смотри, что куда... Насколько изменится твой код после компиляции.

Валис, почитай внимательно мои сообщения, стек тут не причем. Под OllyDbg я смотрел, все работает до MOV BYTE PTR DS:[ESI], AL В ESI указатель на мою строку, НО дело в том, что он находится в секции кода
Я начинаю стучатся абпол




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

Создано: 27 апреля 2007 15:40 · Поправил: Hellspawn
· Личное сообщение · #25

я бы лучше посоветовал делать так

var
sTmp:string[255];
begin
zeromemory(@sTmp,255);
asm
lea eax,sTmp
бла бла
end;
end;


ну и конечно взять код в рамки - pushad/popad

-----
[nice coder and reverser]




Ранг: 138.7 (ветеран), 135thx
Активность: 0.110
Статус: Участник

Создано: 27 апреля 2007 15:44
· Личное сообщение · #26

Hellspawn пишет:
var
sTmp:string[255];

Делал и так. Все равно строка лежит в секции кода И я получаю акццес виолант
Может у меня Delphi 7 глючит при компиляции



Ранг: 20.8 (новичок)
Активность: 0.010
Статус: Участник

Создано: 27 апреля 2007 15:44
· Личное сообщение · #27

crc1 пишет:
Не понял. куда понеслось???

Извини сам себя перехитрил.
Только, что проверил следующее
var
Str: AnsiString;
begin
Str := 'bla-bla';
asm
mov eax, Str;
mov byte ptr DS:[eax], 'c';
end;
end;

Всё работает как надо. Ключевой момент - это то, что пока строке ничего не присвоено, её несуществует и надо обязательно выделять память под неё перед использованием.



Ранг: 138.7 (ветеран), 135thx
Активность: 0.110
Статус: Участник

Создано: 27 апреля 2007 16:17
· Личное сообщение · #28

Player пишет:
надо обязательно выделять память под неё перед использованием.

Как её выделить?



Ранг: 456.3 (мудрец), 340thx
Активность: 0.280.02
Статус: Участник
Android Reverser

Создано: 27 апреля 2007 16:26
· Личное сообщение · #29

crc1
но пример вот так:
Player пишет:
Str := 'bla-bla';


-----
SaNX





Ранг: 85.4 (постоянный)
Активность: 0.080
Статус: Участник

Создано: 27 апреля 2007 16:36
· Личное сообщение · #30

Она и будет в секции кода. Это же локальная переменная. Надо размер задать для ней и всё. Hellspawn вроде правильно показал, как под локаль выделить 255 байт. Тоже скомпилировал - всё работает..

-----
radio uno in ibisa ...



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