Где записать байт что бы считать его из другой проги! Не используя HD!

Тема в разделе "WASM.BEGINNERS", создана пользователем DimaS, 11 сен 2004.

  1. DimaS

    DimaS New Member

    Публикаций:
    0
    Регистрация:
    11 сен 2004
    Сообщения:
    17
    Пролейте свет!

    Нужно записать байт("КЛЮЧ") из одной программы и в последствии считать из другой.

    Операцию <читать "КЛЮЧ] и <if!=.. выход>, надо вставить в *.EXE(исходников нет).

    Я новичек в "дизассемблировании", да и в "ассемблере" тоже. Поэтому хочетсья сделать проще(вставить в *.exe типа <mov dl,..><cmp dl,11111111b><jl ..><exit>).



    Хочу воспользоваться для хранения ключа какимнить резервным регистром(или CMOS, или портом или ..?) которые доступны для чтения, и записи, и не используются(если такие есть)!



    Подскажите куда можно записать "КЛЮЧ" не пользуясь HD!

    Простите если вопрос дурацкий!
     
  2. Dr.Golova

    Dr.Golova New Member

    Публикаций:
    0
    Регистрация:
    7 сен 2002
    Сообщения:
    348
    апохмелись и воспользуйся реестром
     
  3. DimaS

    DimaS New Member

    Публикаций:
    0
    Регистрация:
    11 сен 2004
    Сообщения:
    17
    Спасибо за оперативность!)

    А как выполнить чтение/запись в реестр на asmЕ!



    И всетаки существуют ли свободные байты в CMOS(например). Хочется хорошо прятать!

    Уточню, что "буфер" нужен только на время запуска второй программы после чего обнулится(заполняться "буфер" будет первой прогой, в случае если серийник HD верный)!
     
  4. n0p

    n0p 10010000b

    Публикаций:
    0
    Регистрация:
    7 май 2003
    Сообщения:
    256
    Адрес:
    Новосиbeerск
    Ну можно еще MMF создать.. Насколько я знаю, это будет общая область памяти.. Или нет? Не помню точно.. Ну идея такая, что надо зарезервировать некоторую область памяти как общую. Т.е. любой процесс может до нее достучаться.



    А CMOS, если я правильно понимаю суть названия, тебе никто трогать из винды не даст.
     
  5. Loger

    Loger New Member

    Публикаций:
    0
    Регистрация:
    28 авг 2003
    Сообщения:
    71
    Адрес:
    Minsk
    1. Буфер обмена

    2. Сообщения окон

    3. WinSock

    4. Общая секция данных (если это один и тот же дважды запущенный exe)

    5. Изменить параметр WNDCLASSEX.cbWndExtra и записывать в структуру окна с помощью SetWindowLong (нужно иметь hook-dll в процессе с окном)

    6. WriteProcessMemory

    7. Использовать пайп
     
  6. DimaS

    DimaS New Member

    Публикаций:
    0
    Регистрация:
    11 сен 2004
    Сообщения:
    17
    2n0p

    Порты только из под NT недоступны, просто так! А запись и чтение в CMOS проводится через них. Дело в том что незнаю куда там писать можно(адреса?) и чтобы по умолчанию там были нули например(и это было железно). За идею с MMF спасибо щас буду рыть.



    2Loger

    EXEшники разные, я писал! Первый проводит чтение серийника с HD и устанавливает "ФЛАГ", второй(поломанная прога, которую нужно привязать к железу) читает "ФЛАГ", и в случае неудачи прыгает на "EXIT".

    Делаю так потому, что не получается первую прогу в EXEшник засунуть(а вот добавить пару строчек надеюсь получится:)! Опыта нехватает, вот и думаю как бы проще!?
     
  7. Loger

    Loger New Member

    Публикаций:
    0
    Регистрация:
    28 авг 2003
    Сообщения:
    71
    Адрес:
    Minsk
    А порядок запуска прог критичен? Можно из второй проги вызывать первую и проверять ExitCode
     
  8. DimaS

    DimaS New Member

    Публикаций:
    0
    Регистрация:
    11 сен 2004
    Сообщения:
    17
    2Loger

    Наверно можно!? Тока как? Не умею! Знаю что это както делается прерываниями DOS, но матерьяла, где подглянуть, нет!
     
  9. n0p

    n0p 10010000b

    Публикаций:
    0
    Регистрация:
    7 май 2003
    Сообщения:
    256
    Адрес:
    Новосиbeerск
    Кстати, да. Так будет достаточно просто сделать и не надо мучаться и ограничивать себя 9х или еще как.



    Это, конечно, немного не относится к теме, но имхо как защиту такой метод несовсем хорош. Он обходится на раз.
     
  10. DimaS

    DimaS New Member

    Публикаций:
    0
    Регистрация:
    11 сен 2004
    Сообщения:
    17
    2n0p

    Может подскажиш как реализуется вызов проги!



    Что касаемо второго пункта, то защита расчитана на пользователя ане на праграммера!
     
  11. n0p

    n0p 10010000b

    Публикаций:
    0
    Регистрация:
    7 май 2003
    Сообщения:
    256
    Адрес:
    Новосиbeerск
    Хмм.. Ну навскидку примерно так:



    Необходимо узнать, умеет ли модифицируемая прога вызывать GetProcAddress. Если нет, то придется сильно извращаться для добавления ее в секцию импорта.. Ну или делать поиск кернела (описаний полно).



    Для запуска приложений целесообразно использовать CreateProcess. Я вот не могу придумать как получить код выхода.. :dntknw: Возможно, потому что я слегка пьян.. :)



    Поиск адреса CreateProcess делаешь через GetProcAddress. Для этого надо описать в коде имя искомой функции, а чтобы не случилось страшного, код должен оббежать строку прыжком.



    Кстати, код этот удобно писать отдельно, чтобы не было гемора с тестами. Только необходимо учесть, что все смещения в коде относительные и при инжектировании кода в тело проги они станут неверны. Это обходится путем высчитывания дельта-смещения и прибавления к адресам в проге.



    Нахождение дельты:
    Код (Text):
    1.  
    2.     call    get_delta
    3. get_delta:
    4.     sub     dword [esp],get_delta ; delta offset in the top of stack
    5.  




    Использование:
    Код (Text):
    1.  
    2.     mov    eax,dword [esp] ; load delta offset in eax
    3.     add    eax,label_addr
    4.     jmp    eax
    5.  




    Перед выполнением кода (но после нахождения дельты) надо сохранить ВСЕ регистры, а потом их востановить, чтобы не сломать судьбу главной проге. Кстати, стек тоже должен быть равным первоначальному.



    Если полученый код не влезает в секцию данных, ее придется расширять. А также стоит очень хорошо подумать, как передавать управление этому коду..



    Ну в общих чертах где-то так..
     
  12. Loger

    Loger New Member

    Публикаций:
    0
    Регистрация:
    28 авг 2003
    Сообщения:
    71
    Адрес:
    Minsk
    CreateProcess

    WaitForInputIdle

    GetExitCodeProcess
     
  13. DimaS

    DimaS New Member

    Публикаций:
    0
    Регистрация:
    11 сен 2004
    Сообщения:
    17
    спасибо!!!!!!!!!

    будем дерзать.



    И всетки интересно, как сохранить денить байтик?!
     
  14. n0p

    n0p 10010000b

    Публикаций:
    0
    Регистрация:
    7 май 2003
    Сообщения:
    256
    Адрес:
    Новосиbeerск
    Ну с известной долей удачи можно сохранить байтик в стеке. Запускаешь прогу, она пушает в стек что-нить, а затем выходит. Если сразу после этого вытащить с вершины стека значение - это оно и будет. Только вот на практике я этот метод не проверял. Также можно вместо стека регистр использовать - вероятность срабатывания даже выше. :)
     
  15. n0p

    n0p 10010000b

    Публикаций:
    0
    Регистрация:
    7 май 2003
    Сообщения:
    256
    Адрес:
    Новосиbeerск
    Про стек - это я пошутил. Как всегда, удачно. :)
     
  16. DimaS

    DimaS New Member

    Публикаций:
    0
    Регистрация:
    11 сен 2004
    Сообщения:
    17
    "с известной долей удачи можно сохранить байтик в стеке"

    Было смешно :))))))
     
  17. n0p

    n0p 10010000b

    Публикаций:
    0
    Регистрация:
    7 май 2003
    Сообщения:
    256
    Адрес:
    Новосиbeerск
    Ну я был сонный, и при том "слегка после вчерашнего".. :)
     
  18. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Я тоже не в трезвом уме, но "до кучи" могу предложить еще один экзотический вариант: регистры FPU\MMX или XMM. Думаю, вероятность сохранения данных в этих регистрах достаточно высокая, если конечно параллельно не рулит какой-нибудь winamp и т.п.
     
  19. PavPS

    PavPS New Member

    Публикаций:
    0
    Регистрация:
    24 фев 2004
    Сообщения:
    109
    Адрес:
    Russia
    Попутно: А что применить, чтобы инфа хранилась, даже при отрубе процесса передатчика, до включения процесса-приёмника. С вероятностью ~=1 ??? Так же не использую HD (и FD :) )
     
  20. Oleg_SK

    Oleg_SK Guest

    Публикаций:
    0
    PavPS

    Как уже говорил Dr.Golova, для этого можно использовать реестр. Еще процесс-передатчик может создать дочерний процесс и использовать его как связного для передачи инфы процессу-приемнику. Также, если не ошибаюсь, для этой цели можно использовать драйвер, который устанавливает процесс-передатчик.