Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Запись в exe-файл

Автор: KoboL
Дата сообщения: 25.03.2004 13:39
Салам товарищи.
Подскажите, если не трудно, следующее:
как в результате выполнения проги изменить ее екзе-файл.
ну типа надо счетчик запусков сделать.
И все прописывать в сам файл с прогой.
И ваапше: какая структура у exe-файла??? Почему он вообще впыолняется??7
Извините за идиотский вопрос, но почему-то никто мне не дал толкового ответа.
Заранее очень сильно за руку благодарю
Автор: redp
Дата сообщения: 25.03.2004 13:49
Ыыыыыы
щас тебе тут скажут. Много нового узнаешь, ага
под какую операционку то .exe ? ежели под Win32 - PE формат, болезный...
Автор: KoboL
Дата сообщения: 25.03.2004 14:14
под win32
Автор: CaptainFlint
Дата сообщения: 25.03.2004 14:55
Выполняется, потому что система его выполняет А структура его не настолько простая, чтобы это можно было в одном топике описать. Лезь в гуглы да яндексы, ищи описание PE-формата...
Кстати, напрямую в EXE-файл ты ничего не запишешь, по крайней мере, запустив сам этот файл, ибо винда не даёт возможности записывать в EXE-шники, которые запущены. Обойти это можно так: сделать копию файла, записать то, что тебе надо, а после того, как программа отработает, удалить старый EXE и переименовать новый в старое имя (обычно для этого программно пишется батничек, запускается в отдельном процессе, и прога завершается. Когда система освобождает файл, батник может его удалить, а потом удаляет себя самого).
Автор: Sleepwalker
Дата сообщения: 25.03.2004 15:05
CaptainFlint
потом удаляет себя самого
угу.. вот так вот берет и удаляет
Автор: CaptainFlint
Дата сообщения: 25.03.2004 15:08
Sleepwalker
А что такого? BAT-файл сам себя спокойно удалить может.
Автор: Sleepwalker
Дата сообщения: 25.03.2004 15:30
CaptainFlint
извиняюсь, был не прав

а ты уверен, что запущенный из-под процесса батник не умрет при смерти процесса? если нет, то как реализовать?
Автор: CaptainFlint
Дата сообщения: 25.03.2004 15:48
Sleepwalker
Нет, не уверен... Может быть, есть какой-то промежуток от момента освобождения EXE-шника до момента убиения всех дочерних процессов, а может, и не убиваются дочерние процессы вовсе, это ведь не потоки... Всё руки не доходили разобраться поподробнее.
Пример лежит здесь.
Автор: drobitko
Дата сообщения: 26.03.2004 12:45
Вот пример кода

Цитата:
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int main(int argc,char** argv) {

char* originalExeName = argv[0];
char* execCopy;

// Создаем строку с новым именем исполняемого файла
execCopy = (char*)calloc(sizeof(char),(strlen(originalExeName)+5));
strcpy(execCopy,originalExeName);
strcat(execCopy,"copy");


// Удаляем копию файла если она существует
DeleteFile(execCopy);

// Переименовываем текущий испоняемы файл в новое имя
MoveFile(originalExeName,execCopy);

// Делаем копию исполняемого файла с оригинальным именем
CopyFile(execCopy,originalExeName,false);


}


Там собственно все написано. Код проверял под XP и W2K - работает.
Копию исполняемого файла можно скрыть, скопировав в какую либо другую директорию.

Или можно убить bat.файлом.

А еще можно сделать следующее. Сделать программу "обертку" из которой вызывается уже правильный exe, а она дожидается когда он завершится и удаляет все временные файлы. А для того что-бы злоумышленник не исправил файлы в рантайм их можно заблокировать.

Но ничто не мешает ему сделать копию exe перед первым вызовом и каждый раз класть ее на место.
Автор: KoboL
Дата сообщения: 26.03.2004 13:03
Саул всем за отклик.
ТО, что с ходу в файл записать нельзя, я и так знал. Идея создавать копию, а потом заменять исходный файл тоже была.
Я хотел узнать: как записать что-то в исполняемый файл, чтобы он не перестал быть исполняемым, чтобы потом записанную инфу можно было прочесть как из текстового файла?? И все это на паскале или на дельфи заколбасить. А то с си не знаком...
Нужно чтобы прога записывала счетчик в свой же exeшник.... а как??
Саул всем.
Автор: KoboL
Дата сообщения: 21.04.2004 16:18
Ну не хотите хелпать сам сделаю...
Точнее уже сделал....
И получил освобождение от экзамена...
Всем большое просто огромнейшее спасибо за отклики...
Автор: UncoNNecteD
Дата сообщения: 21.04.2004 18:25
Сказки.
А толку мало если на ехе просто повесить атрибут ридонли.
Автор: vito333
Дата сообщения: 22.04.2004 02:31
а просто в конец копии свой счетчик нельзя писать, что-ли, если знаешь размер?
Автор: ShIvADeSt
Дата сообщения: 22.04.2004 03:20

Цитата:
а просто в конец копии свой счетчик нельзя писать, что-ли, если знаешь размер?

Можно, у меня даже пример есть (или это риторический вопрос )
Только вот KoboL

Цитата:
Ну не хотите хелпать сам сделаю...
Точнее уже сделал....
И получил освобождение от экзамена...
Всем большое просто огромнейшее спасибо за отклики...

А как не написал,
Автор: OldGopher
Дата сообщения: 22.04.2004 10:04
Пишите счетчик в ответственную DLL и загружайте ее по мере надобности.
LoadLibrary Вас выручит...

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

Тут есть еще один прикол: если файл оценивается как критичный по системе, то просто так в нем ничего изменять нельзя (системная DLL, системный EXE, SYS и т.д.). Надо еще и контрольную сумму (а она очень хитрая) поправить. Иначе система заартачится грузить.
Я как-то делел драйвер с самомодификацией, так меня в ядре послали подальше, пока не нашел программу, которая устанавливает CRC в заголовке. А как самому его посчитать, так и не понял...
Автор: Pupsik
Дата сообщения: 22.04.2004 10:30
Господа, что спорить и умничать, никакая это не защита от копирования:

Цитата:
И получил освобождение от экзамена...


OldGopher

Цитата:
которая устанавливает CRC в заголовке. А как самому его посчитать, так и не понял.

Где-то читал - алгоритм - собственность Microsoft, которую они никому не показывают. Там не простой CRC32, а какая-то закоряка. Если не - прав - опровергните. Причем этот CRC проверяется только в драйверах, в экзешниках игнорируется.
Автор: KoboL
Дата сообщения: 28.04.2004 11:02
Салам всем...
В общем, я сделал эту прогу на паскале. Описал одну константу, потом короче через mem[cseg:смещение костанты] изменял ее на единицу...
Типа под досом работает.. Преподу показал, он остался доволен, освободил от экзамена... Но для винды тоже посоветовал сделать...
спасибо всем.
удачи

Добавлено
Да, кстати, в конец тоже можно дописывать... ТОка почему екзешник долго после этого запускается... не знаю какое-то некрасивое решение...
Автор: ShIvADeSt
Дата сообщения: 28.04.2004 23:59

Цитата:
Да, кстати, в конец тоже можно дописывать... ТОка почему екзешник долго после этого запускается... не знаю какое-то некрасивое решение...

Видать криво в конец писал, у меня все нормально запускалось

Цитата:
mem[cseg:смещение костанты] изменял ее на единицу...

Так это ты ее в памяти или в файле изменял? Если в памяти, то это счетчик запусков во время одной дос сессии.
Автор: UncoNNecteD
Дата сообщения: 29.04.2004 13:59
KoboL
Преподу привет.
Автор: KoboL
Дата сообщения: 03.05.2004 11:24
Типа не докончил в прошлый раз... на каком-то форуме нашел формулу, которая по смещению константы в памятти находит смещение в екзешнике.. ну туда и записал.. ток не помню щас формулу, не с хаты сижу...
Насчет записи в екзешник под виндой:
после 4-х часового чтения документации на РЕ-формат, голову осенила мысля!! а что если записывать туда, где написано This program cannot be run in DOS mode, по-моему так... Короче, в 82 байт записываю инфу, там батник вещи делаетЮ короче красиво все работает... прогу на днях выложу если интересно...
вопрос: короче, можно ли вместо баника как-нить использовать VBS или WSH (так по-моему пишется)... Проясните плиз ситуацию... А то батник как-то смущает.. неэстетично что ли.. заранее благодарю...
Автор: dDE
Дата сообщения: 06.05.2004 11:46
http://www.uzhosting.com/hide.htm
Автор: KoboL
Дата сообщения: 06.05.2004 14:49
Повторяю вопрос ввиду того что некоторые тут рекламу опубликовали


Типа не докончил в прошлый раз... на каком-то форуме нашел формулу, которая по смещению константы в памятти находит смещение в екзешнике.. ну туда и записал.. ток не помню щас формулу, не с хаты сижу...
Насчет записи в екзешник под виндой:
после 4-х часового чтения документации на РЕ-формат, голову осенила мысля!! а что если записывать туда, где написано This program cannot be run in DOS mode, по-моему так... Короче, в 82 байт записываю инфу, там батник вещи делаетЮ короче красиво все работает... прогу на днях выложу если интересно...
вопрос: короче, можно ли вместо баника как-нить использовать VBS или WSH (так по-моему пишется)... Проясните плиз ситуацию... А то батник как-то смущает.. неэстетично что ли.. заранее благодарю...
Автор: ShIvADeSt
Дата сообщения: 06.05.2004 23:50

Цитата:
там батник вещи

Какие вещи может делать батник кроме как повотрного запуска программы (или ты запускаешь DEBUG с параметрами для записи в файл тогда ты извращенец без обид, единтсвенное дя чего я вижу применение здесь батника, это запуск копии программы с последующим ее удалением и удалением себя о чем уже писали, короче сорцы в студию
Автор: dDE
Дата сообщения: 07.05.2004 06:43
Прежде чем бросаться словами ("некоторые тут рекламу опубликовали ") пошёл бы по этой ссылке и почитал материал. Это один из вариантов записи в EXE файл.

Заранее извиняюсь если кого-нибудь неправильно понял
Автор: Pupsik
Дата сообщения: 07.05.2004 07:17
Уууууу, какая умная статья!
Написали копирование файла на Delphi!
Вау!
Супер!
Супер-мега-хрякеры!!!
Автор: KoboL
Дата сообщения: 07.05.2004 09:19
Вот что у меня вышло
Исходник
сама прога

Добавлено
ShIvADeSt для тебя
Вот что делает батник:
erase counter.exe
cd data
copy tmp.exe ..\counter.exe
erase tmp.com,tmp.exe
cd ..
rmdir /S /Q data
Автор: UncoNNecteD
Дата сообщения: 07.05.2004 09:37
KoboL
404 - файла нет
Автор: KoboL
Дата сообщения: 07.05.2004 09:51
скопируй и вставь в браузере , а то чё то при переходи с этого сайта, сервак файл не даёт....видать не хотят чтоб на ихнем сервере был склад архивов
сама прога: rinoktruda.amillo.net/counter.rar
исходник: rinoktruda.amillo.net/s.rar
Автор: ShIvADeSt
Дата сообщения: 08.05.2004 00:30
KoboL
без обид, но на хр..а тебе батник, когда можно просто было сделать так. Копируешь файл в папку темп, потом правишь его (ктати собыие OnClose может и не возникнуть если процессу сказать терминэйт так что патчить надо перед запуском это так на будущее , Потом запускаешь его из временной папки ждешь его запуска и после этого закрываешься , а тот файл файл смотрит если ты закрылся, то копирует себя в исзодную папку, запускает себя от туда с другим ключом, а сам закрывается, и вот теперь ты в уже пропатченном файле удаляешь файл из временной папки. А то что ты написал это извини для идиотов особенно идея засунуть batник в ресурс. Уж если он тебе так нужен то создавай его сам, а то я возьму ресторатор, сотру в батнике все строки и буду запукать твою прогу до скончания века. Кстати можно писать не только туда куда ты писал, а еще и в конец файла, так как я например всегда просматриваю заголовки файлов на предмет того каким упаковщиком они упакованы и сразу бы увидел, что заголовок какой то не правильный. Короче как сказал UncoNNecteD преподу привет, он лопух.
Автор: KoboL
Дата сообщения: 08.05.2004 15:13
Да эти способы полюбому беспантовые..
Я тут хочу другой способ сделать...
Основаный на этой статье "4" пункт: http://power.org.ru/modules.php?op=modload&name=News&file=article&sid=13&mode=thread&order=0&thold=0&POSTNUKESID=dfef069245ae15cb908ea0da08e78b63

по статье Я уже залез в адресное пространство эксплорера
там нужно выделить память, и создать там поток... и думаю как это сделать
мож кто поможет

Страницы: 123

Предыдущая тема: Эволюция в виртуальной машине


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.