Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Прямое изменение экзешника. Запись в exe файл напряму. 
V
    Опции темы
dsnake
Дата 25.7.2007, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 13.6.2007
Где: Красноярск

Репутация: нет
Всего: нет



Есть откомпилированный проект на Delphi (исходники тоже есть). В программе есть константа (const ver=12)... можно ли изменить ее ЗНАЧЕНИЕ методом перезаписи нескольких байт exe файла? И как найти ее "расположение" в файле. Понимаю, что выглядит коряво, но другого выхода нет.. :-(
PM MAIL WWW   Вверх
W4FhLF
Дата 25.7.2007, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: нет
Всего: 121



Слишком общий вопрос, который к тому же задан не в том разделе. Нужно анализировать ассемблерный листинг готовой программы примерно в тех местах, где в исходнике находится код использующий данную константа. Если константа хранится в памяти и просто читается отттуда, то достаточно будет узнать адрес этой памяти и поменять там её. Если же она вставляется как непосредственный операнд, то придётся искать все места её использования и менять уже там. Проблема решаема только в случае, если ты знаешь ассемблер и умеешь пользоваться хотя бы отладчиком. 

Это сообщение отредактировал(а) W4FhLF - 25.7.2007, 11:02


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
dsnake
Дата 25.7.2007, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 13.6.2007
Где: Красноярск

Репутация: нет
Всего: нет



Ну некоторые (начальные) знания по ассемблеру у меня есть softice я пользовался и куски кода на асме делал. Но или я тебя не понял или ты меня... надо заменять значение константы не в  ходе выполнения программы, а изменить это значение записав в файл exe пару байтов туда, куда надо. Я сделал предположение, что раз константа декларируется в исходниках один раз, то и в exe ее легко заменить.
PM MAIL WWW   Вверх
W4FhLF
Дата 25.7.2007, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: нет
Всего: 121



Цитата(dsnake @  25.7.2007,  11:18 Найти цитируемый пост)
а изменить это значение записав в файл exe пару байтов туда, куда надо.


а чтобы это сделать надо наверное программу загрузить в дизассемблер/отладчик и проанализировать код, так ведь? 


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
Diesel Draft
Дата 25.7.2007, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 876
Регистрация: 18.1.2005
Где: Lviv, Ukraine

Репутация: нет
Всего: 5



Константу сложно найти, она заменяется еще на компиляции


--------------------
НЕДОМА в маси 
PM MAIL WWW ICQ GTalk   Вверх
dsnake
Дата 25.7.2007, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 13.6.2007
Где: Красноярск

Репутация: нет
Всего: нет



[quote]
а чтобы это сделать надо наверное программу загрузить в дизассемблер/отладчик и проанализировать код, так ведь? 

Ну... так-то да. Но я думал, что есть какой-то умный "способ гуру". smile
Цитата
Константу сложно найти, она заменяется еще на компиляции

:-( Последний гвоздь в крышку гроба моей мечты.

В общем сделать особо_умный_парсер_экзешников для замены константы не получится. smile Дело еще в том, что версии софтины все равно будут меняться достаточно интенсивно... и даже, если после анализ удастся сделать "заменитель констант", который будет напрямую писать в экзешник все равно придется каждую версию программы изучать заново. :-(

Это плохо.

Вот! Сформулировал.
А как вообще можно напрямую пришивать какой-то идентификатор в файл, причем пришивать так, чтобы этот самый файл мог его считать? Ресурс? Но всю эту операцию надо производить на freebsd сервере, где есть только php и perl.
PM MAIL WWW   Вверх
Diesel Draft
Дата 25.7.2007, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 876
Регистрация: 18.1.2005
Где: Lviv, Ukraine

Репутация: нет
Всего: 5



Но можно сделать по другому. Ты можешь менять саму переменную + ты можешь дописать в конце файла данные, а потом считать

Это сообщение отредактировал(а) Diesel Draft - 25.7.2007, 13:38


--------------------
НЕДОМА в маси 
PM MAIL WWW ICQ GTalk   Вверх
dsnake
Дата 25.7.2007, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 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.  smile 

Что можно в этой ситуации наколдовать? smile 
PM MAIL WWW   Вверх
Diesel Draft
Дата 25.7.2007, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 876
Регистрация: 18.1.2005
Где: Lviv, Ukraine

Репутация: нет
Всего: 5



Я так понял ты хочешь персонализировать программу, чтоб никто другой не пользовался, да? Я тебе сейчас статью найду на Дельфи, может переделаешь на РНР, єто вполне реально  smile

Добавлено через 6 минут и 18 секунд
в DRKB я видел статью как дописать в конец программы, к сожалению сейчас нет собою базы. 

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


--------------------
НЕДОМА в маси 
PM MAIL WWW ICQ GTalk   Вверх
dsnake
Дата 25.7.2007, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 13.6.2007
Где: Красноярск

Репутация: нет
Всего: нет



Ну, если дашь статью, буду благодарен.  smile 

Цитата
Я так понял ты хочешь персонализировать программу, чтоб никто другой не пользовался


Не совсем так... программа сетевая и уникальный экзешник нужен только для того, чтобы выяснить по какой ссылке скачана программа.  smile Т.е. программа обращается по сети к серверу и передает некоторые параметры (как раз этот идентификатор экзешника), чтобы сервер понял, откуда взята эта программа.
PM MAIL WWW   Вверх
Diesel Draft
Дата 25.7.2007, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 876
Регистрация: 18.1.2005
Где: Lviv, Ukraine

Репутация: нет
Всего: 5



Гм, а файл-ключ использувать не хочеш?


--------------------
НЕДОМА в маси 
PM MAIL WWW ICQ GTalk   Вверх
dsnake
Дата 25.7.2007, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 13.6.2007
Где: Красноярск

Репутация: нет
Всего: нет



Так было бы просто идеально. smile
Но пользователь не хочет качать файлы, он хочет нажать на одну ссылку и потом нажать на "сохранить". smile 

Нужно именно скачать один файл SETUP.exe, который уже в себе имеет ключ... это заодно снимает проблему подмены ключа - подменить его в ексешнике будет уже значительно труднее. smile

Добавлено через 1 минуту и 57 секунд
Хотя дело тут даже не столько в обеспечении секретности ключа, сколько в обеспечении НЕРАЗРЫВНОСТИ пары ключ-программа. smile 
PM MAIL WWW   Вверх
Diesel Draft
Дата 25.7.2007, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 876
Регистрация: 18.1.2005
Где: Lviv, Ukraine

Репутация: нет
Всего: 5



гм, наверно я ошибся, я думал ты забираешь архив прям на сервере.

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


Вариант №2: Возможно инсталлер исказит данные программы, и ты не найдешь их. Тогда ты можешь вписать прям в SETUP.exe. А потом при инфляции запустить программу регистратор, которая считает SETUP.exe и запишет  в твою программу.




--------------------
НЕДОМА в маси 
PM MAIL WWW ICQ GTalk   Вверх
dsnake
Дата 25.7.2007, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 13.6.2007
Где: Красноярск

Репутация: нет
Всего: нет



О!

Пожалуй этот вариант надо потестить:

1) Юзер кликает на ссылку СКАЧАТЬ.
2) PHP дописывает в конец исполняемого файла SETUP данные из GET переменной.
3) Исполняемый файл SETUP скачивается на комп юзера.
4) Юзер его запускает.
5) Сетуп производит инсталляцию программы
6) Запускается спецпрограмма, которая считывает данные из конца файла SETUP.EXE и дописывает их в конец файла ПРОГРАММА.EXE
7) Спецпрограмма сама себя удаляет.
8) Конец.

Спасибо, W4FhLF и Diesel Draft.  smile 

Буду реализовывать, если я чего-то не упустил... smile 
PM MAIL WWW   Вверх
Diesel Draft
Дата 26.7.2007, 00:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 876
Регистрация: 18.1.2005
Где: Lviv, Ukraine

Репутация: нет
Всего: 5



Не забудь перепроверить даные, а то мало что туда можно записать


--------------------
НЕДОМА в маси 
PM MAIL WWW ICQ GTalk   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Технологии: Разные | Следующая тема »


 




[ Время генерации скрипта: 0.1364 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.