Сравнение паролей

Тема в разделе "WASM.WIN32", создана пользователем TerroSufix, 31 авг 2004.

  1. TerroSufix

    TerroSufix New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2004
    Сообщения:
    3
    Ребят пишу на асме относительно недавно! Сейчас пользуюсь масм и в качестве ide RadAsm..приспичило меня написать простенькую програмулину так сказать для поддержания своего интереса и стимулирования дальнейщего занятия програмированием на асм. Программа уже умеет скрывать трей проверять сооденение с интернетом ну и остальную смешную для людей серьёзно занимающихся программированием лабуду..вот :)теперь собственно вопрос я пользуюсь диалоговыми окнами спасибо создателю рад асма просто ограменное снимает большой груз проблем и хотелось бы мне реализовать в программе проверку пароля... т.е я создаю поле ввода говорю ему тип пароль! вобщем как мне реализовать всё это дело если можно то как после корректного ввода пароля чтоб програмулина подгружала длл с дополнительными функциями?? Зараннее благодарен!
     
  2. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Ну так проверяешь пароль на корректность , если ок , то грузишь длл и пользуешься дополнительными ф-циями , в чём конкретно проблемы ? :)
     
  3. flankerx

    flankerx New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2004
    Сообщения:
    423
    Адрес:
    Moscow, Russia
    ага, такая проверка обходится патчем в один байт :)



    если предполагается только один пароль, то неплохим ( и достаточно простым) решением может быть получение из введенного пароля ключа симметричного шифра и дальнейшее расшифрование твоей дллки, подгрузка её в память. Правда, перед подгрузкой неплохо бы проверять корректность, но, ИМХО, LoadLibrary с этим неплохо справится )



    Если паролей может быть несколько, до для реализации такого же механизма потребуется приворачивать PKI, что не есть хорошо :dntknw:



    еще (теоретически) можно реализовать в дллке функцию, и не экспортировать её.. а адрес шзашифровать ключом пользователея и хранить в надежном месте :) Тогда проще решить вопрос с несколькими пользователями..
     
  4. Xen0

    Xen0 New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2002
    Сообщения:
    9
    Честно говоря, не совсем понял, что ты хочешь сделать...

    Отвечаю как понял:

    1) Определяешь момент, когда пользователь ввел пароль (например, нажал на кнопку);

    2) Получаешь текст EditControl'a и сравниваешь с правильным паролем;

    3) Если пароль правильный, вызываешь LoadLibrary и при необходимости GetProcAddress
     
  5. Foamplast

    Foamplast New Member

    Публикаций:
    0
    Регистрация:
    6 ноя 2003
    Сообщения:
    80
    Адрес:
    Russia
    flankerx:А куда ДЛЛ разшифровывать?
     
  6. flankerx

    flankerx New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2004
    Сообщения:
    423
    Адрес:
    Moscow, Russia
    гм, во временный файл...
     
  7. NoName

    NoName New Member

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

    Начинающему написать серьезный крипто алгоритм, который не будет ломаться элементарным патчем или даже руками, весьма сложно, на мой взгляд, поэтому советую автору будущей программы задуматься над этим и сделать свои выводы. Я лично ничего против такой программы не имею, пусть пишет, научиться немножко с паролями работать...
     
  8. flankerx

    flankerx New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2004
    Сообщения:
    423
    Адрес:
    Moscow, Russia
    его никто и не уговаривает писать криптоалгоритм.. ИМХО, их уже достаточно достойных набралось :) Просто нужно грамотно использовать.
     
  9. TerroSufix

    TerroSufix New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2004
    Сообщения:
    3
    Xen0 Я наверно не совсем ясно изъясняюсь :dntknw: Проблема в том что я СОВСЕМ начинающий :) Я пытался делать каким образом... создавал поле для пароля создавал чтоо то вроде pass db "pass",0

    воот.. а когда в самой функции делал чтоо то вроде

    .if eax==IDC_BATON

    invoke getdlgitemtext,тыры пыры,addr iPass точно не помню как там называется фун

    .elseif pass==iPass

    тогда подгружаем библиотеки!???

    а он выдаёт ошибку мол немогу сравнивать такие штуки или что тот в этом роде...а до алгоритмов криптования мне я думаю ОЧЕНЬ далеко :)
     
  10. Funbit

    Funbit Member

    Публикаций:
    0
    Регистрация:
    13 апр 2003
    Сообщения:
    92
    Адрес:
    Russia
    видно что начинающий :) по трем одинаковым постам :)))



    тексты нельзя в асьме сравнивать так, как ты написал :)

    на то он и asm, надо либо писать свою ф-ции для сравнения,

    либо воспользоваться готовой, например lstrcmp:



    invoke lstrcmp, addr pass, addr iPass

    .if eax == 0

    ; здесь если строки одинаковые

    .else

    ; здесь соответственно, если не одинаковые.

    .endif



    описания lstrcmp и др. ф-ций можно найти в MSDN или Win32.hlp



    а вообще, все это будет работать, если ты пытаешься защититься от ламеров, т.е. если ты здесь дальше будет грузить библиотеку, защита обойдется одним байтом. да и пароль можно будет посмотреть в открытом виде. другое дело, хотя бы сделать сравнение хешей от паролей, тогда можно будет поломать, изменив условие, но пароль никто не узнает. ну а совсем хорошо, как уже предлагали, пошифровать дллку, и расшифровывать только правильным ключем. тут уж, придется выпытывать из тебя пароль :)
     
  11. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    хотя бы сделать сравнение хешей от паролей, тогда можно будет поломать, изменив условие, но пароль никто не узнает



    Ты оговаривай КАКИХ хешей. Не для всяких хешей такое условие выполняется :)
     
  12. Funbit

    Funbit Member

    Публикаций:
    0
    Регистрация:
    13 апр 2003
    Сообщения:
    92
    Адрес:
    Russia
    volodya

    Ты оговаривай КАКИХ хешей. Не для всяких хешей такое условие выполняется :)



    ну в смысле, в проге хранить хеш от правильного пароля,

    считать хеш от введенного пароля

    и сравнивать эти 2 хеша.



    это вряд ли для тебя пояснение :) для автора топика
     
  13. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    TerroSufix В ассемблере обязательно надо следить за размерами .

    32-битный процессор оперирует максимум 4 байтами (dword,dd) , т.е. 4 байта (byte,db) * 8 бит в каждом байте = 32 бита (b) .

    Причем такой х-ни как ".elseif pass==iPass" он не понимает и компилятор это , так сказать , преобразует в комаду cmp .

    А она , в свою очередь , понимает только 2 операнда , причём это не может быть память,память . Т.е. сравнить может либо регистр с регистром (cmp eax,ecx) , либо регистр с памятью (cmp eax,pass) , или память с непосредственным операндом размером в байт (cmp pass,'A') .

    А компилятор и выдаёт ошибку т.к. ты пытаешься сравнивать операндами недопустимых размеров (cmp pass,iPass). Короче таким способом можно сравнить пароль размером в один байт (ascii символ) , и то если указать компилятору , что ты хочешь зарезервировать за словом iPass любой один байт (iPass equ 'A') .

    Но , а что значит сравнить (cmp) , это значит вычесть (sub) один операнд от другого и установить флаги (биты в 0 или 1) в регистре флагов (не доступном непосредственно для программиста регистре eflags) . Тут интересен только один флаг (ZF-Zerro Flag) , т.е. если при вычитании получился ноль (типа значит операнды равны) , то установить этот флаг в 1 .

    И опять же , т.к. процу этот .elseif до лампочки то компилер сгенерирует соответствующий опкод для мнемонической команды условного перехода (jz,jnz и др.) .

    Если это будет "jz метка" , то значит надо "прыгнуть" (тут я уже не буду рассказывать что это значит :) на метку если установлен флаг ZF , т.е. операнды или пароли совпали .

    Гы , кстати можешь так заюзать , не всякий кракер сразу поверит , что у тебя пароль в один символ и так проверяеться %)



    Чтобы сравнить пароли размером в 4 байта , то можно сделать примерно так :
    Код (Text):
    1. mov eax,iPass ; регистр eax может хранить dword
    2. cmp eax,pass  ; cmp (sub) может сравнивать (вычитать) регистр,память
    3. jz  совпали   ; если получился ноль (ZF=1)


    Фуф , вроде не наврал особо , ну что рассказывать теперь как можно сравнивать пароли больше чем 4 байта (команды mov,movs*,cmps*,loop,add,inc,dec,j**,lods*,rep** и другие пригодяться) , и потом как хранить пароль не в открытом виде , а в немного завуалированном (пригодиться например xor) ? Или сам будешь ассемблер изучать ?
     
  14. TerroSufix

    TerroSufix New Member

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

    Да у miniBB бывает глючок она залипает(вроде бы сообщение отправляет)ну я по дури три раза и жмакнул а он(miniBB) по дури 3 раза запостил :)

    Спасибо я помоему это и искал

    bogrus

    :) Спасибо! Очень даже расширил мой взгляд на асм!