| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Asm: Общие вопросы > FASM: убрать Stub |
| Автор: p0s0l 14.2.2004, 21:11 |
| Мне надо получить PE-Exe минимального размера, делаю всё в одной секции, но еще бы хотелось убрать stub... Пишу в FASM'е. Может есть какая-нибудь директива для убирания заглушки ? Пусть e_lfanew в Dos-хэдере ссылалась бы на байт, сразу идущий за этим самым дос-хэдером... |
| Автор: oleg1973 14.2.2004, 22:05 |
| там можно свой стуб.ехе втыкат если его 0 длинны сделать или лучше сделать вот так mzshit: dw 'MZ' times 30 db 0 times 01ch db 0 lp: dd peshit ; times 100 db 0 peshit: dd 'PE' ; signature byte dw 014ch ; cpu type dw 1 ; num of object dd 0ffffffffh ; time/data dd 0 ; pointer to COFF table dd 0 ; COFF table size dw assend-ass ; NT header size dw 0818eh ; Flags ass: dw 010bh ; Magic db 0 ; link major db 0 ; link minor dd 0 ; size of code dd 0 ; size of init data dd 0 ; size of Uninit data dd 1000h+352;+100 ; entry point RVA dd 0 ; Base of code dd 0 ; Base of data dd 0400000h ; Image base dd 1000h ; object align dd 200h ; file align dw 1 ; OS major dw 0 ; OS minor dw 0 ; user major dw 0 ; user minor dw 3 ; subsys major dw 0ah ; subsys minor dd 0 ; reserved dd 2000h ; image size dd codes-mzshit ; header size dd 0 ; file chksum dw 2 ; subsystem dw 0 ; dll flags dd 1000h ; stack res size dd 1000h ; stack commit size dd 10000h ; heap reserve size dd 0 ; heap comit size dd 0 ; loader flags dd 10h ; num of RVA and size times 22 dd 0 dd 0,0 dd 0 dd 0 dd 0,0 dd 0,0 dd 0,0 assend: objentry: db '.section' ;obj name max 8 char dd 1 ; virtual size dd 1000h ; section RVA dd 82 ; physical size dd 82 ; physical offset dd 0 ; pointer to reloc dd 0 ; pointer to linenum dw 0 ; num of reloc dw 0 ; num of linenum dd 0e0000060h ; characteristic codes: ret endfile: |
| Автор: p0s0l 15.2.2004, 13:50 |
| Так не очень удобно... Разобрался - то же самое можно сделать, но легче: В директиве format PE надо добавить on "имя файла заглушки". У меня так: format PE GUI 4.0 on 'stub0.exe' И если файл-заглушка нулевой длины, то всё ок, в результате в скомпонаванном файле "PE" будет начинаться не с 80h, а с 40h. Интересно то, что если создавать свой файл-заглушку размером 64 байта (только дос-хэдер) и все поля выставлять в нем правильно (можно даже отрезать первые 64 байта от PE-файла, полученного способом с файлом нулевой длины), то FASM глючит при ассемблировании... |
| Автор: oleg1973 15.2.2004, 16:22 | ||
p0s0l
ну я это и имел ввиду а нафига тебе все это? лепиш самый маленький ехе? |
| Автор: p0s0l 16.2.2004, 12:09 | ||||
Не сразу доперло, что ты про это и говорил... А зачем тогда тот, второй способ ? Геморрой лишний...
Да, всё что можно укорачиваю. |
| Автор: oleg1973 16.2.2004, 13:23 |
| p0s0l если делать заголовок файла руками то можно еще место сэкономить к примеру тут times 22 dd 0 dd 0,0 dd 0 dd 0 dd 0,0 dd 0,0 dd 0,0 тут описания секций по умолчанию втыкается а тебе то и надо тока описание 1 секции |
| Автор: p0s0l 16.2.2004, 13:45 | ||
Дак и так, у меня только 1 секция и описывается... Я не очень понял про что ты... Или ты имеешь в виду, что вместо dd 10h ; num of RVA and size можно поставить dd 02h Т.е. будут только директории экспорта и импорта ? |
| Автор: oleg1973 16.2.2004, 22:12 |
| p0s0l именно про это оставь тока секцию кода да и все можно еще с выравниванием побалватся |
| Автор: p0s0l 17.2.2004, 15:57 |
| Ладно, но что-то так не получается... У тебя есть работающий пример ? А то как я делаю, пишет "error executing program"... И еще: как описать импорт ? Ранее работавшие макросы library и import не работают... И что с выравниванием ? В MSDN сказано, что оно не может быть меньше 512 (что и используется при ассемблировании в FASM)... |
| Автор: oleg1973 17.2.2004, 20:52 |
| p0s0l обманули в мсдн вот 2 файла 1) 450 байт месаджбокс выводит , должно везде работать там поиск LoadLibary в кернеле и так далее 2) 173 ну и исходники весьма изврашенные кстати первый файл можна ужать байт на 10-20 ,там процедура у меня поиска адреса функ левенькая проверял на ХР на 9х может и неработать, там дествительно выравнивание важно |
| Автор: p0s0l 17.2.2004, 21:50 |
| thnx, закачал, буду пробовать! |
| Автор: oleg1973 18.2.2004, 14:56 |
| p0s0l ну че работает? |
| Автор: p0s0l 18.2.2004, 19:30 |
| Ага, все работает. Прикольно ты наворотил перекрывающиеся заголовки вперемешку с данными! Thanx за пример! |
| Автор: p0s0l 19.2.2004, 18:30 | ||
Ужал Hello All до 267 байт |
| Автор: oleg1973 19.2.2004, 21:11 |
| p0s0l крута на хацкер.ру подобная дисскуссия но они от нас далеко отстали я им там линк сюда оставил шас прибегут |
| Автор: p0s0l 21.2.2004, 00:19 |
| Для кучи уж пихаю последний вариант - заюзаны почти все ненужные поля хэдеров... жаль только, что вся эта интересная фишка не работает под Win9x... |
| Автор: Chemiker 22.2.2004, 13:29 |
| Люди !!! У меня файл формата PE выыодит окно с МессагеБоксом, потом звершается. В досе запускается нормально - ДОС пишет: Program too big to fit in memory. Между MZ и PE всего два байта, есть таблица импорта, а размер этого чуда всего 188 байтов !!! Пока. ------------------------------------- PE-188-Bytes |
| Автор: oleg1973 22.2.2004, 15:49 |
| Chemiker файл то где? |
| Автор: Chemiker 22.2.2004, 18:21 |
| Файлик дома, и ничего я не пёр, просто проверил одну гипотезу и она оказалась верна, с ещё одним предположением можно сделать меньше чем 166 байт (есть пока эксперементальная версия). А пока релиз 188. |
| Автор: Sardar 22.2.2004, 21:18 | ||
Не качается файл... |
| Автор: Serzh 22.2.2004, 22:59 | ||
а у меня не выполняеться... |
| Автор: Sardar 23.2.2004, 01:32 |
| Весело под Win98SE окошки появляются и тут же убиваются... прога остановилась от нехватки памяти. |
| Автор: p0s0l 23.2.2004, 16:48 | ||
Просто задан адрес MessageBox'а ?... |
| Автор: p0s0l 23.2.2004, 16:54 |
| Serzh,Sardar - вот в этом и беда, Win9x более строгие к формату файла... |
| Автор: p0s0l 23.2.2004, 19:25 | ||||
Торможу на счет этого:
Не обратил внимания на
У меня пока наспех получается 195.. Покажи исходник ? |
| Автор: p0s0l 23.2.2004, 20:27 |
| А хотя... не доглядел немного - вот тоже 188 байт... |
| Автор: Serzh 23.2.2004, 20:38 | ||
дык в том то и дело, что у меня w2k |
| Автор: Chemiker 24.2.2004, 11:07 |
| Уже есть рабочая версия в 166 байт, будем ещё уменьшать. |
| Автор: p0s0l 25.2.2004, 07:10 |
| Chemiker, зарегистрируйся, и при ответе в форум жми "ОТВЕТИТЬ", тогда вроде сможешь прикреплять файлы... Ты хоть скажи хотя бы идею, куда копать, как до 166 байт уменьшил ? |
| Автор: Chemiker 26.2.2004, 18:52 |
| Потом всё увидите, буду работать по умньшению, результат наверно в конце недели. |
| Автор: p0s0l 26.2.2004, 19:19 |
| Дак так не интересно... Хочется самому попробовать... |
| Автор: Chemiker 27.2.2004, 11:56 |
| Достигнут результат, наверно уже предельный, ну дальше не куда просто, размер файла 153 байта, выводит мессагебокс, есть импорт. 3 марта я помещю его сюда для всеобщего ознакомления. Пока проверялось только на XP. 153 байта !!! |
| Автор: p0s0l 1.3.2004, 11:48 |
| Я понял как это сделать В FileHeader'е есть поле размера OptionalHeader-а, если его уменьшить, то можно засунуть SectionHeader в OptionalHeader... |
| Автор: Sardar 1.3.2004, 14:11 |
| Извините за офтоп, но по моему это полный изврат!!! |
| Автор: Chemiker 1.3.2004, 20:40 |
| Согласен с вами, но это уже спортивный интерес - на рекорд, чисто академическое развлечение. p0s0l, ты прав, у меня он именно там, я такой извращенец !!! Но это было не легко, кстати кроме этого ещё полно всяких ухищрений и тонкостей. Скоро на хакер.ру выйдет статья про этот файлик. http://www.xakep.ru |
| Автор: oleg1973 1.3.2004, 20:53 |
| Chemiker копирайты не забуть |
| Автор: Chemiker 2.3.2004, 10:00 |
| Моя статья и файлик там (как server2000): http://www1.xakep.ru/post/21399/default.asp |
| Автор: p0s0l 2.3.2004, 15:09 |
| Эх, не успел немного, хотелось до тебя выложить свой вариант... У меня немного по-другому устроено, и вместо "MZ..PE" выводится "Hello!", но весит 152... Хотя есть большое подозрение, что можно на 8 байт уменьшить, правда уже влом всё пересматривать... |
| Автор: Chemiker 2.3.2004, 17:32 |
| Я в шоке почти, всего на один байт !!! Зато у меня MZ и PE очень близко, но придётся ещё покопать и уменьшить, мне кажется что теоретически можно скинуть ещё примерно пару байтов, но будет уже энтропия. И так близко уже. |
| Автор: p0s0l 2.3.2004, 22:27 |
| Chemiker, я вообще-то имел в виду то, что пришли примерно к одному и тому же результату. Но если подумать, то тут вариантов не так уж и много, т.к. SectionHeader больше некуда впихнуть (пихал почти во все места, нигде не подходит), вот только с ImportDescriptor'ом я не сильно пробовал, а у него в конце файла выставляется хвост из 8 байт, которые вполне вероятно можно обрубить, если засунуть этот дескриптор в другое место, т.е. размер был бы 144... |
| Автор: 4udo 21.4.2006, 21:03 |
| Очень рульный пост!!!!! Только по-мимо "Hello World" можно же на Ассемблере ваять крохи и с фантастическими фичами Пример цепляю.Кстати обратите внимание на функции , господа знатоки - я искал и не нашел(нет ни импорта ни экспорта).Наверно очень плохо искал?????????............ Здесь и GUI , и midi и icon.Жутко интересно - как это все стряпается в 50кб??? |