| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Asm: Общие вопросы > все дело в перце |
| Автор: 4udo 13.4.2006, 21:36 |
| Помогите .Очень нравится программировать и изучать машинный код. Прочитав топики и поэкспереминтировав ,столкнулся с такой проблемой. После ручной правки exe-ка он не запускается,проверял поля ,на валидность,но так и не понял в чем беда.Поля оригинала и подопытного одинаковы - а это же не верно,ведь я изменяю структуру файла... Научите на что обращать внимание,а то во всех описаниях PE-формата как говорят профи очень мудрены и туманны.Объясните если не трудно начинающему.Надеюсь на вашу отзывчивость... |
| Автор: 4udo 17.4.2006, 07:42 |
| PoSoL ,помоги или другие.Очень нужна помощь. А то живу в глуши и не у кого спросить. Занимаюсь ликбезом самостоятельно.... Пожалуйста!!!! |
| Автор: SergeCpp 17.4.2006, 09:29 |
| Во-первых, вооружитесь http://www.magma.ca/~wjr/PEview.zip структуры таких файлов... |
| Автор: 4udo 17.4.2006, 09:59 |
| Спасибо за совет, но программы с работой exe-ов есть полный комплект. Знаю что такое Stub, PE или COFF заголовок,секции,читал что есть импорт и экспорт. Есть доки по описанию формата, искал подобное освещение на Wasm.ru и Cracklab.ru,но там все лишь ограничиваются тем ,что нажми то получишь это....Моя же цель понять ,что и где поправить в заголовке (когда я вручную в Hex-редакторе в exe-ке убираю ненужные нули например) так чтоб потом exe-к работал... Прошу помощи!!!!!!!!!!!!!!!! |
| Автор: SergeCpp 17.4.2006, 12:17 |
| Конкретно где меняете и что (по возможности, давайте файл) |
| Автор: 4udo 21.4.2006, 18:52 |
| Вот мой бинарник. Безобиднее чем "hello world!" и не придумаешь. А как спецы пишут в нем все равно очень много воды - ненужных нулей,так вот как вручную их выкроить ,так чтоб до минимума и файл работал???? |
| Автор: SergeCpp 21.4.2006, 20:01 |
| File Alignment поставьте 0x10 вместо 0x200 (вроде, оно такое по умолчанию)... Ключ такой есть у линкера Правда, тогда в Win9x не запустится... |
| Автор: 4udo 21.4.2006, 20:34 |
| Спасибо за совет!!!!!!!!! А как по поводу нулей???????????? И ручной липосакции файла??????....... |
| Автор: 4udo 21.4.2006, 22:44 |
| Модернизированный бинарник - выставил File Alignment в 0x10. На XP стартует ,ну и размер меньше,но до мастерства далеко. Жир,жир,жир.... |
| Автор: SergeCpp 22.4.2006, 15:50 |
| Нету жира... Нули — в DOS-заголовке, в IMAGE_NT_HEADERS и в SECTION_HEADER .text |
| Автор: 4udo 22.4.2006, 16:33 |
| SergeCpp , спасибо за внимание. Один только ты мной заинтересовался. Подскажи, как от этих нулей избавится — в DOS-заголовке, в IMAGE_NT_HEADERS и в SECTION_HEADER .text или это не реально?????????? |
| Автор: SergeCpp 22.4.2006, 20:24 |
| Эти заголовки имеют фиксированный размер и все нули в них имеют смысл... То есть, от них не избавиться... Объединяя секции (.text, .data, .rdata, etc.) можно добиться уменьшения размера... Но это достигается за счет уменьшения чего-нибудь другого... (закон сохраниния...) Например, .text не доступна для записи... чтобы объединить её с .data, нужно разрешить запись в полученную общую секцию... что не есть хорошо... и так далее... |
| Автор: 4udo 23.4.2006, 12:51 |
| SergeCpp ,объясни тогда вот это. |
| Автор: SergeCpp 23.4.2006, 16:01 |
| 1. IMAGE_DOS_HEADER — не используется как таковой — на его месте (с адреса 4) находится IMAGE_NT_HEADERS (смысл в такой экономии весьма призрачен...) 2. IMAGE_FILE_HEADER неверны поля Time Dite Stamp, Pointer to Symbol Table, Number of Symbols (на их месте находится имя импортируемой функции) 3. IMAGE_OPTIONAL_HEADER — аналогичного типа "трюки" В целом, не вижу смысла в такого рода "оптимизации"... |
| Автор: Heremum 23.4.2006, 18:56 |
| 4udo Если тебя интересует написание самой короткой проги Hello World, то она весит 22 байта, 13 из которых - (это его улыбка Главное, в *.exe файлах - адрес смещения для начала работы с программой. Далее тебе надо просто смотреть, чтобы команды процесора были корректно отредактированны. Вот гляди, друг сердешный: была у тебя команда, которая ссылалась на адрес строки, а ты подправил пару байта другой команды, которая стояла перед той строкой, на которую ссылалась первая команда, следовательно - адрес строки изменился, ты про это не подумал, а первая команда так и ломиться к строке по адресу, который уже изменился, следовательно всё начинает галить, писюкать и мышкать. Тут надо много концентрации. Вообще, я наконец-то нашёл человека, которого тоже интересует машинный код. Сколько я не искал никого "нормального" не отыскал. Скажи, друг мой: каким образом ты изучаешь машинные коды? Добыл коды преобразований для процессоров? Как они генерируются, всмысле. Или разбираешь сам по кускам, компилируя маленькие программы? Я вторым способом изучалнекоторое время. Про первый так почти ничего и не нашёл. Только в книге друконов по разработке компиляторов есть об этом упоминание и немного находил в 5-ом издании о принципах ЭВМ. Не больше. |
| Автор: 4udo 24.4.2006, 06:53 |
| Heremum,здраствуй. Такие фокусы беспорно хороши - мне тоже известен такой, пишешь в блокноте "3C" ,сохраняешь файл с расширением .exe и получаем как у Кэрола "Алиса в стране чудес" - улыбку чеширского кота без кота; или программу в 1 байт. Я так понимаю под кодами преобразований для процессора ты наверно имеешь ввиду,как в простонародье опкоды; то да есть таблица перевода, но я нашел ещё и такую таблицу ,но с ней по хуже не знаю как работать.Может тебе известно??? Ксожалению прицепить не удалось - размер великоват, даю адрес: http://www.jegerlehner.ch/intel/IntelCodeTable.pdf |
| Автор: Heremum 24.4.2006, 07:04 | ||
Таблицы в студию! |
| Автор: SergeCpp 24.4.2006, 08:23 |
| Intel® Pentium® 4 Processor Family http://www.intel.com/design/pentium4/documentation.htm Manuals
|
| Автор: 4udo 25.4.2006, 09:24 |
| Intel vorever!!! Но не забываем постить по моей теме - модификация exe вручную. |
| Автор: 4udo 29.4.2006, 12:33 |
| Натолкнулся на кладезь туториалов от почтенного aka МыщЪх на : www.kpnc.opennet.ru Есть статьи и по теме,так что зацените ресурс?.............. |
| Автор: XSInet 12.6.2006, 09:33 |
| Во всех доках которые я процитал, пишут что физическое выравнивание не может быть меньше 512 байт.... Выравнивание секции в памяти обычно 4096 байт, так как это размер одной страницы (округление до страницы). Поэксперементируй, мне помогает PE Explorer и WinHex, ну и IDA Pro. Чтобы патчить файлы, лучше используй файлы проецируемые в память (CreateFileMapping, MapViewOfFile) - очень удобно работать. |
| Автор: 4udo 13.6.2006, 07:44 | ||
Одно скажу наверняка не верь докам,а верь в то что сможешь,ведь есть не описанные ,тоесть недокументированные возможности................ |
| Автор: setty 13.6.2006, 13:17 |
| в своё время мне удавалось значительно понизить размер проги за счёт того что вней небыло таблиц импорта/экспорта, для этого мне пришлось писать не малый код для определения базы кернеля и вычисления адресов необходимых мне функций однако в целом это было меньше чем если с таблицей импорта, помимо того я переносил данные в секцю кода что позволяло обойтись без записи о секции данных и сэкономить еще пару байт (совсемь не много) P.S HelloW.exe 0,13 Kb - > я поражон, круто) и почемуто на него NOD32 ругается определяя как "вероятно неизвестный Win32 вирус" |
| Автор: 4udo 17.6.2006, 06:32 | ||
Да нет предела - очень впечатляет..............NOD32 же ругается так этот модуль - ручная так сказать "сборка от Версачи" - ни чего лишнего и изысканно.А AVP вообще молчит............. |
| Автор: oleg1973 17.6.2006, 10:40 | ||
плохо что нет универсального способа под все винды (имхо после опытов) |
| Автор: 4udo 18.6.2006, 18:59 |
| Да что есть,то есть , но с нами сила разума.......................... |
| Автор: setty 20.6.2006, 19:30 |
| да есть способ, помоему, я делал так, (если вспомню) суть в том что прога вызывается гдето из глубин кернеля... адрес возврата тудаже я могу взять из стэка. этот адрес будит лежать гдето в адресном пространстве кернеля потом я листаю страницы памяти и проверяю их на валидность пе формату, так я выходил на адрес по которому спроэцирован кернел в процесс... хотя я могу чето путать давно дело было но делалость приблизительно так.... если я неошибаюсь то функция которая непосредственно вызывает запускаемое приложение во всех версиях лежит в кернеле... p.s. я могу конечно вомногом ошибатся ))) |
| Автор: NixoL 21.6.2006, 18:16 |
| to setty : так работает 100 % в ХРюше - сам делал, в 98 не пробовал. А ещё размер мона сэкономить если в проге писать не имена нужных апишек, а их хэш, который занимает всего 4 байта. Подробнее на Wasm.ru. И вапще вирмейкерские журналы пачитать! |
| Автор: 4udo 24.6.2006, 07:02 | ||
Дай конкретно адрес. |
| Автор: NixoL 26.6.2006, 10:12 |
| wasm.ru помоему я там брал. В любом случае там есть что почитать. И про вирусы, и конкретно про PE. WBR |
| Автор: 10110111 28.8.2006, 15:58 |
| Можно переместить PE заголовок на адрес 0Сh - тогда по 3Ch можно безопасно писать 0Сh: для PE-заголовка это поле не проверяется Виндой. Идея из http://www.farb-rausch.de - программа "fr-019: poem to a horse". |
| Автор: oleg1973 29.8.2006, 02:31 |
| это идея из упаковщика FSG или MEW |
| Автор: 4udo 8.9.2006, 14:25 |
| Да демки всегда меня восхищают - маленькие-удаленькие!!!!!!!!!!!!! Где можно sourse побачить????????? |
| Автор: 4udo 8.2.2007, 12:51 |
| Да тема бессмертна - вновь воскресла и с новыми идеями, соответствующие адреса для интересующихся : измышления наших кодеров - http://www.wasm.ru/forum/viewtopic.php?id=16537&p=1 измышления не наших кодеров - http://www.phreedom.org/solar/code/tinype/ |