я, человек, знакомый с программированием, но мало понимаю в дизассемблировании, крекинге и тд. (надеюсь с помощью этого форума научусь, ну да ладно, проблема следующая) выложу часть статьи и пример, которые нашел в инете: "модуль представляет собой обычный двоичный файл с размером, кратным 200h байт, всегда загружающийся по адресу xxxx:0000h. Часть оборудования (оперативная память, клавиатура, видеокарта) к моменту его вызова уже инициализирована, а часть (жесткие диски, например) еще нет. Прерывания INT 10h (видео) и INT 16h (клава) можно использовать не боясь, а вот с INT 13h (диски) ничего не получится (то есть, получится, конечно, но не сразу и не просто так)." prg segment assume cs:prg,ds:prg,es:prg,ss:prg org 100h start: DB 55h, АAh ; загрузочная сигнатура DB 01h ; размер блока в 200h байтовых секторах jmp x_code ; передача управления нашему коду x_code: ; подготовка регистров ; -------------------- MOV DX, 101Dh ; куда выводить (DH - Y, DL - X) MOV SI, text ; что выводить XOR BX,BX ; начальный цвет символов - 1 MOV CX,1 ; выводим по одному символу ; вывод строки в цвете ; -------------------- print_string: MOV AH, 02h ; функция управления курсором INT 10h ; позиционируем курсор INC DL ; перемещаемся на следующую позицию LODSB ; загружаем очередной символ TEST AL,AL ; конец строки? JZ input ; если конец, то выходим MOV AH, 09h ; функция печати символа INC BL ; перебираем все цвета INT 10h ; печатаем символ JMP print_string ;мотаем цикл input: ; ожидание ввода пароля ; --------------------- XOR DX,DX ; контрольная сумма enters: XOR AX,AX ; функция чтения символа с клавы INT 16h ; читаем символ CMP AL,0Dh ; это ENTER? JZ input ; если ENTER, начинаем ввод сначала XOR AH,AH ; очистить скан-код ADD DX,AX ; считаем CRC CMP DX, 'm' + 's' + 'o' + ']' + '[' JNZ enters ; если это не "мыщъх", продолжаем ввод retf text db "Matrix has you!",0 prg ends end start Пропустив исходный файл через транслятор , мы получим на выходе ххххх.BIN. Загружаем его в HIEW и дополняем нулями до размера кратного 200h байт, затем рассчитываем контрольную сумму. Контрольная сумма рассчитывается стандартным образом: мы просто складываем все байты друг с другом и находим остаток от деления на 100h. Т.е. sum = (sum + next_byte) & 0xFF. Контрольная сумма всего блока должна равняться нулю, следовательно, последний байт блока равен (100h - sum) & 0xFF. в строчке "DB 55h, АAh ; загрузочная сигнатура" на самом деле было написано 55h, 0Ah, но с 0Ah файл не компилится, да и на самом деле верная сигнатура для расширения ROM BIOS 55h, АAh. приведенный выше пример у меня работает, но выводится не строка "Matrix has you!", а какой -то знак, ввод пароля тоже работает. но самое главное что модуль грузится мне же надо написать то же самое, но используя С/С++, т.е. что бы в коде присутствовала ф-ция main. я попробовал сделать так: (для начала будем вводить просто пароль и при успешном вводе грузиться дальше) void main() { asm { input: //; ожидание ввода пароля XOR DX,DX //; контрольная сумма enters: XOR AX,AX //; функция чтения символа с клавы INT 0x16 //; читаем символ CMP AL,0x0D //; это ENTER? JZ input //; если ENTER, начинаем ввод сначала XOR AH,AH //; очистить скан-код ADD DX,AX //; считаем CRC CMP DX, 'm' + 's' + 'o' JNZ enters //; если это не "мыщ", продолжаем ввод ret } } (вот тут в конце не знаю надо ret или retf). получаю экзешник, с помощью exe2bin делаю из него com. чтобы модуль грузился, первые 2 байта должны быть 55h, АAh, и еще байт размера следом. но первые 3 байта получаются это байты функции майн (загрузка в стек вроде). я пробовал делать след. образом: писал 3байта которые мне нужны, т.е. 55h, АAh, 01h, а остальной код смещал на 16 байт. затем открывал полученный файл в дебагере, в позиции 4-го байта писал jmp 110h (т.е. джам на мэйн), запоминал код джампа (ЕВ0В) затем открывал файл через двоичный редактор и ручками вписывал код начиная с 4-го байта. затем как описано выше забивал снизу нулями, считал контрольную сумму. но данный вариант не работает. (у меня не работает) подскажите что нужно сделать.
exst видимо нужно добавить в прошивку биоса свой код.. помоему подобную статью я видел в журнале "Ламер" гдет 3 летней давности...
Exp10der Я думаю это он в устройство со свои ROM BIOS будет вшивать. dps86 Изучай возможности линкера и компилятора. Тебе нужно корректно собрать бинартный файл всего-то.
хм... кстати на васме тоже подобная статья лежала тока для микрухи биоса на сетевухе. А кстати если нет опыта писания прог без дебаггера - лучше для начала на MBR лоадерах потренироваться там тоже можно прописать облом при загрузке если пароль неверный введён, а биос на матери шить (если нет программатора) своим неотлаженным кодом - короче большая вероятность что придётся выкинуть мать в случае ошибки...
может я плохо прочитал, но так и не нашел конкретного объяснения. повторю вопрос: можно ли быстро и просто в начало exe файла воткнуть свои 3 байта, да так, чтобы потом все корректно работало??
dps86 BIOS лоадер PE-формат не воспринемает ни каким местом (это же не win32 тебе) туда надо писать чистый 16 битный код (комп всегда стартует в реальном режиме!) безо всяких левых структур и Pavia тебе уже ответил З. Ы. Почитай книжки какие нибудь по железу... статьи из журнала "Ламер" не самое лучшее начало для изучения работы с оборудованием - книжки, даташиты, мануалы - от этого больше толку.
извниняюсь за свою надоедливость, но возможно я получил неверный ответ, потому что задал неправильный вопрос. повторю вопрос: можно ли быстро и просто в начало com файла, полученного из exe файла воткнуть свои 3 байта, да так, чтобы потом все корректно работало?? "dps86 BIOS лоадер PE-формат не воспринемает ни каким местом (это же не win32 тебе) туда надо писать чистый 16 битный код (комп всегда стартует в реальном режиме!) безо всяких левых структур и Pavia тебе уже ответил" помоему в ком файлах нет РЕ-формата. еще раз спасибо за ответ
тебе нужен бинарный файл без MZ/PE/ELF и ещё каких бы то ни было структур. Короче http://www.wasm.ru/article.php?article=1013001 читайте просвещайтесь - там вроде про формат ром модулей написано... а я уже не в состоянии вести дискуссию.. поговорим позже.
опять я с этой темой!! очень нужна ваша помощь!! Exp10der 2009-01-16 22:52:02 тебе нужен бинарный файл без MZ/PE/ELF и ещё каких бы то ни было структур. Короче http://www.wasm.ru/article.php?article=1013001 читайте просвещайтесь - там вроде про формат ром модулей написано... а я уже не в состоянии вести дискуссию.. поговорим позже. мой начальник говорит что можно сделать след образом. (ему позарез надо чтобы прога была на си и он человек толковый, не первый день в программинге, собственно поэтому я тут и пишу, что он говорит одно, а на форуме другое). в начале я ставлю сигнатуру 55АА, ну соответсвенно потом размер а далее переход на прогу на СИ. только он говорит что в проге на СИ надо как то переделать стек и может еще чего. и все должно работать. так ли это? и как скорректировать стек