![]() |
|
![]() ![]() ![]() |
|
dsnake |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 13.6.2007 Где: Красноярск Репутация: нет Всего: нет |
Есть откомпилированный проект на Delphi (исходники тоже есть). В программе есть константа (const ver=12)... можно ли изменить ее ЗНАЧЕНИЕ методом перезаписи нескольких байт exe файла? И как найти ее "расположение" в файле. Понимаю, что выглядит коряво, но другого выхода нет.. :-(
|
|||
|
||||
W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: нет Всего: 121 |
Слишком общий вопрос, который к тому же задан не в том разделе. Нужно анализировать ассемблерный листинг готовой программы примерно в тех местах, где в исходнике находится код использующий данную константа. Если константа хранится в памяти и просто читается отттуда, то достаточно будет узнать адрес этой памяти и поменять там её. Если же она вставляется как непосредственный операнд, то придётся искать все места её использования и менять уже там. Проблема решаема только в случае, если ты знаешь ассемблер и умеешь пользоваться хотя бы отладчиком.
Это сообщение отредактировал(а) W4FhLF - 25.7.2007, 11:02 -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
dsnake |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 13.6.2007 Где: Красноярск Репутация: нет Всего: нет |
Ну некоторые (начальные) знания по ассемблеру у меня есть softice я пользовался и куски кода на асме делал. Но или я тебя не понял или ты меня... надо заменять значение константы не в ходе выполнения программы, а изменить это значение записав в файл exe пару байтов туда, куда надо. Я сделал предположение, что раз константа декларируется в исходниках один раз, то и в exe ее легко заменить.
|
|||
|
||||
W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: нет Всего: 121 |
а чтобы это сделать надо наверное программу загрузить в дизассемблер/отладчик и проанализировать код, так ведь? -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
Diesel Draft |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 876 Регистрация: 18.1.2005 Где: Lviv, Ukraine Репутация: нет Всего: 5 |
Константу сложно найти, она заменяется еще на компиляции
|
|||
|
||||
dsnake |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 13.6.2007 Где: Красноярск Репутация: нет Всего: нет |
[quote]
а чтобы это сделать надо наверное программу загрузить в дизассемблер/отладчик и проанализировать код, так ведь? Ну... так-то да. Но я думал, что есть какой-то умный "способ гуру". ![]()
:-( Последний гвоздь в крышку гроба моей мечты. В общем сделать особо_умный_парсер_экзешников для замены константы не получится. ![]() Это плохо. Вот! Сформулировал. А как вообще можно напрямую пришивать какой-то идентификатор в файл, причем пришивать так, чтобы этот самый файл мог его считать? Ресурс? Но всю эту операцию надо производить на freebsd сервере, где есть только php и perl. |
|||
|
||||
Diesel Draft |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 876 Регистрация: 18.1.2005 Где: Lviv, Ukraine Репутация: нет Всего: 5 |
Но можно сделать по другому. Ты можешь менять саму переменную + ты можешь дописать в конце файла данные, а потом считать
Это сообщение отредактировал(а) Diesel Draft - 25.7.2007, 13:38 |
|||
|
||||
dsnake |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 13.6.2007 Где: Красноярск Репутация: нет Всего: нет |
Да-да! Вот этот способ подойдет. Просто тупо дописываю в конец файла какое-то значение, а затем его считываю при выполнении? Насколько я помню сам эксе при этом не пострадает. Реально! А вот еще одна загвоздка - этот ехе файл хранится в setup.exe, который сделан при помощи inno setup... :-( То есть процесс такой: 1) Юзер кликает на ссылку http://www.zlo.ru/evil.php?id=99 2) PHP скрипт дописывает в exe файл значение 99 3) Каким-то образом создается файл setup.exe - тут загвоздка, сервер на freebsd и я вообще в упор не знаю ни одного создателя install, который работает под free, а создает windows setup. ![]() Что можно в этой ситуации наколдовать? ![]() |
|||
|
||||
Diesel Draft |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 876 Регистрация: 18.1.2005 Где: Lviv, Ukraine Репутация: нет Всего: 5 |
Я так понял ты хочешь персонализировать программу, чтоб никто другой не пользовался, да? Я тебе сейчас статью найду на Дельфи, может переделаешь на РНР, єто вполне реально
![]() Добавлено через 6 минут и 18 секунд в DRKB я видел статью как дописать в конец программы, к сожалению сейчас нет собою базы. Кстати я так подумал, ты ж можешь этот ключ заменить по всему файлу. Главное чтоб ничего другое не заменил и чтоб размер совпадал |
|||
|
||||
dsnake |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 13.6.2007 Где: Красноярск Репутация: нет Всего: нет |
Ну, если дашь статью, буду благодарен.
![]()
Не совсем так... программа сетевая и уникальный экзешник нужен только для того, чтобы выяснить по какой ссылке скачана программа. ![]() |
|||
|
||||
Diesel Draft |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 876 Регистрация: 18.1.2005 Где: Lviv, Ukraine Репутация: нет Всего: 5 |
Гм, а файл-ключ использувать не хочеш?
|
|||
|
||||
dsnake |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 13.6.2007 Где: Красноярск Репутация: нет Всего: нет |
Так было бы просто идеально.
![]() Но пользователь не хочет качать файлы, он хочет нажать на одну ссылку и потом нажать на "сохранить". ![]() Нужно именно скачать один файл SETUP.exe, который уже в себе имеет ключ... это заодно снимает проблему подмены ключа - подменить его в ексешнике будет уже значительно труднее. ![]() Добавлено через 1 минуту и 57 секунд Хотя дело тут даже не столько в обеспечении секретности ключа, сколько в обеспечении НЕРАЗРЫВНОСТИ пары ключ-программа. ![]() |
|||
|
||||
Diesel Draft |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 876 Регистрация: 18.1.2005 Где: Lviv, Ukraine Репутация: нет Всего: 5 |
гм, наверно я ошибся, я думал ты забираешь архив прям на сервере.
Тогда тебе лучше вписать в программу константой ключ, только определись з размером, потом поменяіть будет сложно возьми, HEX редактор и найди этот ключ. Теперь у тебя есть адрес где он лежит и ты можешь заменить его. Вариант №2: Возможно инсталлер исказит данные программы, и ты не найдешь их. Тогда ты можешь вписать прям в SETUP.exe. А потом при инфляции запустить программу регистратор, которая считает SETUP.exe и запишет в твою программу. |
|||
|
||||
dsnake |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 13.6.2007 Где: Красноярск Репутация: нет Всего: нет |
О!
Пожалуй этот вариант надо потестить: 1) Юзер кликает на ссылку СКАЧАТЬ. 2) PHP дописывает в конец исполняемого файла SETUP данные из GET переменной. 3) Исполняемый файл SETUP скачивается на комп юзера. 4) Юзер его запускает. 5) Сетуп производит инсталляцию программы 6) Запускается спецпрограмма, которая считывает данные из конца файла SETUP.EXE и дописывает их в конец файла ПРОГРАММА.EXE 7) Спецпрограмма сама себя удаляет. 8) Конец. Спасибо, W4FhLF и Diesel Draft. ![]() Буду реализовывать, если я чего-то не упустил... ![]() |
|||
|
||||
Diesel Draft |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 876 Регистрация: 18.1.2005 Где: Lviv, Ukraine Репутация: нет Всего: 5 |
Не забудь перепроверить даные, а то мало что туда можно записать
|
|||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Технологии: Разные | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |