· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Где записать байт что бы считать его из другой проги! Не используя HD!

. 1 . 2 . 3 . >>

Посл.отвђт Сообщен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

Про стек - это я пошутил. Как всегда, удачно. :)

. 1 . 2 . 3 . >>


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.100