Прочитал несколько статей по работе дизассемблер(ов) и разочаровался Пишут следующее: "Что касается дизассемблирования вообще, то тут четко необходимо уяснить для себя одну вещь: вследствие того, что ассемблирование - это однонаправленный процесс с потерями, автоматическое восстановление исходного текста невозможно" Понял так, что при "exe"->"исходник"->"exe" нет гарантий что прога будет работать корректно. Так ли это?! Так же попалась информация о возможности добавить в файл ОпКод, что то типа вируса. Как это сделать посредством редактора? Обьясните по шагам ПЛИZZZZZZZZ! Есть вероятность, что AV выкинит такой код при проверке?
Понял так, что при "exe"->"исходник"->"exe" нет гарантий что прога будет работать корректно. Так ли это?! какой исходник ты имеешь в виду то ? тот, который получишь в результате дизассемблирования ? т.е. ассемблерный листинг .exe файла ? ну, тот же самый .ехе ты уже никогда, конечно же, не получишь, да и вообще, столько придется подгонять, чтобы все скомпилировалось допустим в том же MASMе.. неделя работы для какого-нибудь блокнота и зачем тебе это вообще ? хочешь добавить что-нибудь в уже существующую программу ? тогда придется разбираться с ассемблером и дописывать на ассемблере. по другому никак. чуть легче - можно подцепить дллку к этому .exeшнику, написанную на любом языке, и каким-нибудь образом организовать процесс её взаимодействия с .ехе файлом... Так же попалась информация о возможности добавить в файл ОпКод, что то типа вируса. можешь добавить. только куда и какой? Как это сделать посредством редактора? открой программу в любом бинарном редакторе файлов и добавь/измени нужный байт. удобнее в hiew. Обьясните по шагам ПЛИZZZZZZZZ! по-моему ты слишком широко поставил вопрос. какая у тебя цель то ?
2Funbit Под исходником подразумевался ассемблерный листинг. Цель я указал канкретно! Если конкретней: надо привязать прогу(исходники ёхтер к железу. Вопросов для одного топика много, NR новечек в этом. Я сюда и обратился в надежде, что гуру поможАт! А что ты имееш в виду "придется разбираться с ассемблером и дописывать на ассемблере", поясни подробней куда и как дописывать! С асМоМ чуть чуть дружу, EXEшник учусь модифицировать, задачка 8)
цель ты указал во втором ответе, а я начал писать еще до его появления перед тем, как давать рекомендации, хотелось бы узнать, какого уровня защиту ты хочешь сделать? т.к. любую защиту можно сломать, какую степень сложности ты хочешь ? от обычных юзеров, или от всех, даже от крякеров ? может быть лучше воспользоваться готовыми навесными средставми и не парить мозги ? или ты именно сам хочешь эту защиту написать ? p.s> с этим английским.. уже разучился формулировать русские предложения =\
Ненадо мне сложной защиты, достаточно защиты от простых юзверей! Хочю "просто"(мне не просто, чтоб при несоответствии сарий ника HDD(непример) был переход на точку выхода из программы. Серийник получать уже могу, пытаюсь добавить сие в прогу. А какие "готовые навесные средстава" есть??!!!!! Очень интересно!!!! Де их можно взять, хоть кусочек исходника глянуть????? Чето поиск не дает ниче ((((( ЗЫ Конечно хотелось бы и самому написать, но щАс надо хоть какнитЬ сделатЬ!
ну если для простых, тогда тебе лучше будет написать DLLку, в которой организуешь проверку HDD iD, если iD плохой - сделаешь прямо там ExitProcess... проверку можешь вставить в какую-нибудь эскпортируемую ф-цию, а потом где-нибудь около EP .ехешника сделать прыжок на эту ф-цию. (на адрес в импорте). как дллку подцепить? подцепить можно вручную, можно с помощью тулзы, для примера LordPE или StudPE. более подробно сейчас написать пока не могу, уходить надо. может кто еще другой поможет
Значит так. Необходимо написать и скомпилить нужный код. Там должно высчитываться дельта-смещение и должна присутствовать корректировка адресов. Завершаться этот код должен инструкцией jmp 0 Зачем? Надо. Потом объясню. Далее. Читаешь доку по PE-файлам. Харда Виздома должно хватить. Находишь в файле, который будешь модифицировать точку входа, а точнее ее адрес. Также необходимо обнаружить секцию кода и пустое место в ней. Пустого места должно быть достаточно, чтобы засунуть туда код. В принципе, можно этот самый код туда засовывать. Ну а теперь начинается самая интересная часть марлезонского балета: корректировка адресов. Необходимо узнать, по какому адресу лежит вставленый код и записать это значение в поле EntryPoint заголовка. Для этого берешь значение EntryPoint и прибавляешь к нему смещение вставленного кода (смещение относительно начала секции кода). Теперь при запуске проги будет выполняться вставленный код. Но ведь и старый код должен выполняться! Для этого в хвосте вставленного кода ищешь тот самый jmp 0. Вот вместо этого нуля (надеюсь, это дворд, а не байт ) надо вписать адрес начала кода. Но надо понимать, что прыжки в коде относительные, а значит число после инструкции jmp последует прыжок на указаное число байт вперед (или назад, если число отрицательное). Вот это число и надо рассчитать. И тут надо подумать, т.к. я уже не помню.. Щас подумаю, а ты пока вникай.
Так. Подумал. Берешь старый Entry Point (надеюсь, ты его записал ), вычитаешь из него размер вставленного кода в байтах и вычитаешь новый EntryPoint. Должно получиться отрицательное число. Вот оно-то и будет значением для jmp. Вроде так. Должно работать. Таким манером работают вирусы-инфекторы, но аверы на твой код ругаться не будут, потому что он не несет разрушения (ведь не несет?), а такая техника вроде как частенько используется в защитах.
Вникаю здорово )))) Разрушений не несет... Дето так и хотелось! ЗЫ Я щас пытаюсь конструкторы для вирусов под енто дело приспособить, шОбЫ поменьше вникать...
Не уверен, что конструкторы помогут, но попробуй. Но существует вероятность, что конструктор еще добавит всякой хрени и авер может косо на нее смотреть.