Вот так я вычисляю расстояние до старой точки входа: РВА точки входа (старой) - РВА конца кода - 5 (размер инструкции jmp) потом этот jmp (0xe9 и 4 байта расстояния) добавляеться в конец. Можно попробовать комбинацию push VA-OEP ret, тоже должно работать. Данные сначала надо располагать Я в масме распалагаю данные где хочу. Может у нас масмы разные, у меня масм (ml.exe вер. 6.15) вообще стандартный масм свободно доступен в инете. Все остальное изврать,например должно быть "младшие байты спереди" в fasme соотв. старщие бaйты - это изврат.
zzzyab 1] Я не понимаю что ты вычисляешь у меня в примере все ведь работает и на старую выполнение переходит и с новой начинает выполняться прога. Зачем ети точки вычислять все там в примере вычисляется. 2] Да Масм у мя старый вроде 5.12 или енто линкер точно уже непомню, потом скачал масм ml.exe-6.15, но там что-то линкер ваще старый и как я понял для DOS короче ваще неработает тока '.obj' делается. 3] Если есть ссылочка скачать масм какой там лучше, то кинь я закачаю потому что у меня неполучилось по твоему секции определять. 4] Если не в лом добавь в пример, тот что я кидал свои махинации, там всего то в секции данных где старая точка сохраняется надо добавить, потому что все остальное работает.Только у меня там просто переход-прыжок на старую точку, а ты добавь например пару инструкций какых нить! Я тада все пойму как ты предлогаешь! ;---------------------------- Странно почему больше никто ничего не подсказывает? Мне б еще узнать как упаковщики работають чтоб тожа вставить упаковку простейшую и потом распаковку и запуск. Потому что Касперский орет что новый тип вирус Type_Win32 как же тогда упаковщик сделать если он будет так орать.
У тебя непрямой переход, а у меня прямой - вот и вся разница. ml.exe ( +ml.err) это и есть масм. Чтоб сoздать win32 exe нужно испльзовать 32-битный линкер, любой, но его нет в стандартном комплекте масма. (Я использую link.exe от DDK98.) Твой пример у меня не компилится облом возится с ним, переделай его так чтоб там не было invoke и прочих подобных наворотов.
Блин чета пример при правке не меняется! вот две пкрвые забыл помеять теперь все! _1656956737__New!.Asm
Там ошибки вот исправленый участок: Код (Text): ;---------|_Align_|--------------------------- Algn: mov edx,[esi+010h] mov ecx,edx add edx,AddInSecSize mov eax,[edi+03Ch] dec eax add edx,eax not eax and edx,eax mov [esi+010h],edx mov [esi+08h],edx mov eax,edi add eax,50h sub edx,ecx add eax,[edi+03Ch] add [eax],edx _WriteFile: xor esi,esi Ты реалный вируc хочеш сделать ? Идея сделать компютерных тараканов к-рые жрут окна. Отрываеш папку windows к-рую давно не открывал а там куча тариков и все загажено - истерика.
zzzyab Да может и ошибка, я там не проверял особо, как в примере было тока чуть своего вставил и все птом просто смотрел в отладчике как все происходит. Потом все равно все буду проверять! Я сначала хотел просто прынцип понять как вообще это делается,теперь понял примерно, тока ты еще по своему если сделаешь посмотрю как у тя, а теперь хочется мож упаковщик простейший. Тока касперский пока орет во всю что новый тип вирус Type_Win32. Может это излечится после упаковки! )
переделка jmp: взять entry point RVA (cтарого); отнять от него RVA конца всего image (нового); отнять от полученого 5; ввести полученое значение (4 байта ) в код инструкции jmp (0xe9).
zzzyab Ты просил пример изменить я изменил, а теперь ты мне тоже самое повторяешь что и раньше говорил! Это мне все и так понятно у меня не получается записывать енти 4 байта или вообще просто данные в секцию кода!!! Я тя и спрашивал мож прям пример переделать всегото вместо моего прыжка добавь просто так еще код на асме например: mov eax,ebx sub eax,eax ; и т.д. db 0E9h ;и тут уже прыжок и енти свои 4 байта для jmp (0E9h)! Яж сказал у мя неполучается на масме он ерет незя записывать в секцию кода, а кодовая секция нужна чтоб кодить поиск и использование через kernel32.dll АПИ функций! А потом уже прыжок! А в секции данных можно писать, но масм орет что незя располагать код, ругается на метки!!!