|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Сен 11, 2004 16:15:45 Пролейте свет! Нужно записать байт("КЛЮЧ") из одной программы и в последствии считать из другой. Операцию <читать "КЛЮЧ"> и <if!=.. выход>, надо вставить в *.EXE(исходников нет). Я новичек в "дизассемблировании", да и в "ассемблере" тоже. Поэтому хочетсья сделать проще(вставить в *.exe типа <mov dl,..><cmp dl,11111111b><jl ..><exit>). Хочу воспользоваться для хранения ключа какимнить резервным регистром(или CMOS, или портом или ..?) которые доступны для чтения, и записи, и не используются(если такие есть)! Подскажите куда можно записать "КЛЮЧ" не пользуясь HD! Простите если вопрос дурацкий! |
|
|
Дата: Сен 11, 2004 16:18:39 апохмелись и воспользуйся реестром |
|
|
Дата: Сен 11, 2004 16:40:45 Спасибо за оперативность!) А как выполнить чтение/запись в реестр на asmЕ! И всетаки существуют ли свободные байты в CMOS(например). Хочется хорошо прятать! Уточню, что "буфер" нужен только на время запуска второй программы после чего обнулится(заполняться "буфер" будет первой прогой, в случае если серийник HD верный)! |
|
|
Дата: Сен 11, 2004 18:39:31 Ну можно еще MMF создать.. Насколько я знаю, это будет общая область памяти.. Или нет? Не помню точно.. Ну идея такая, что надо зарезервировать некоторую область памяти как общую. Т.е. любой процесс может до нее достучаться. А CMOS, если я правильно понимаю суть названия, тебе никто трогать из винды не даст. |
|
|
Дата: Сен 11, 2004 18:56:52 1. Буфер обмена 2. Сообщения окон 3. WinSock 4. Общая секция данных (если это один и тот же дважды запущенный exe) 5. Изменить параметр WNDCLASSEX.cbWndExtra и записывать в структуру окна с помощью SetWindowLong (нужно иметь hook-dll в процессе с окном) 6. WriteProcessMemory 7. Использовать пайп |
|
|
Дата: Сен 11, 2004 19:29:07 2n0p Порты только из под NT недоступны, просто так! А запись и чтение в CMOS проводится через них. Дело в том что незнаю куда там писать можно(адреса?) и чтобы по умолчанию там были нули например(и это было железно). За идею с MMF спасибо щас буду рыть. 2Loger EXEшники разные, я писал! Первый проводит чтение серийника с HD и устанавливает "ФЛАГ", второй(поломанная прога, которую нужно привязать к железу) читает "ФЛАГ", и в случае неудачи прыгает на "EXIT". Делаю так потому, что не получается первую прогу в EXEшник засунуть(а вот добавить пару строчек надеюсь получится:)! Опыта нехватает, вот и думаю как бы проще!? |
|
|
Дата: Сен 11, 2004 19:35:06 А порядок запуска прог критичен? Можно из второй проги вызывать первую и проверять ExitCode |
|
|
Дата: Сен 11, 2004 19:45:26 2Loger Наверно можно!? Тока как? Не умею! Знаю что это както делается прерываниями DOS, но матерьяла, где подглянуть, нет! |
|
|
Дата: Сен 11, 2004 19:48:35 Кстати, да. Так будет достаточно просто сделать и не надо мучаться и ограничивать себя 9х или еще как. Это, конечно, немного не относится к теме, но имхо как защиту такой метод несовсем хорош. Он обходится на раз. |
|
|
Дата: Сен 11, 2004 20:04:45 2n0p Может подскажиш как реализуется вызов проги! Что касаемо второго пункта, то защита расчитана на пользователя ане на праграммера! |
|
|
Дата: Сен 11, 2004 21:16:43 Хмм.. Ну навскидку примерно так: Необходимо узнать, умеет ли модифицируемая прога вызывать GetProcAddress. Если нет, то придется сильно извращаться для добавления ее в секцию импорта.. Ну или делать поиск кернела (описаний полно). Для запуска приложений целесообразно использовать CreateProcess. Я вот не могу придумать как получить код выхода.. :( Возможно, потому что я слегка пьян.. :) Поиск адреса CreateProcess делаешь через GetProcAddress. Для этого надо описать в коде имя искомой функции, а чтобы не случилось страшного, код должен оббежать строку прыжком. Кстати, код этот удобно писать отдельно, чтобы не было гемора с тестами. Только необходимо учесть, что все смещения в коде относительные и при инжектировании кода в тело проги они станут неверны. Это обходится путем высчитывания дельта-смещения и прибавления к адресам в проге. Нахождение дельты:
call get_delta
get_delta:
sub dword [esp],get_delta ; delta offset in the top of stack
Использование:
mov eax,dword [esp] ; load delta offset in eax
add eax,label_addr
jmp eax
Перед выполнением кода (но после нахождения дельты) надо сохранить ВСЕ регистры, а потом их востановить, чтобы не сломать судьбу главной проге. Кстати, стек тоже должен быть равным первоначальному. Если полученый код не влезает в секцию данных, ее придется расширять. А также стоит очень хорошо подумать, как передавать управление этому коду.. Ну в общих чертах где-то так.. |
|
|
Дата: Сен 12, 2004 10:26:42 CreateProcess WaitForInputIdle GetExitCodeProcess |
|
|
Дата: Сен 12, 2004 10:38:40 спасибо!!!!!!!!! будем дерзать. И всетки интересно, как сохранить денить байтик?! |
|
|
Дата: Сен 12, 2004 12:02:40 Ну с известной долей удачи можно сохранить байтик в стеке. Запускаешь прогу, она пушает в стек что-нить, а затем выходит. Если сразу после этого вытащить с вершины стека значение - это оно и будет. Только вот на практике я этот метод не проверял. Также можно вместо стека регистр использовать - вероятность срабатывания даже выше. :) |
|
|
Дата: Сен 12, 2004 18:42:50 Про стек - это я пошутил. Как всегда, удачно. :) |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.100 |