Ребят пишу на асме относительно недавно! Сейчас пользуюсь масм и в качестве ide RadAsm..приспичило меня написать простенькую програмулину так сказать для поддержания своего интереса и стимулирования дальнейщего занятия програмированием на асм. Программа уже умеет скрывать трей проверять сооденение с интернетом ну и остальную смешную для людей серьёзно занимающихся программированием лабуду..вот теперь собственно вопрос я пользуюсь диалоговыми окнами спасибо создателю рад асма просто ограменное снимает большой груз проблем и хотелось бы мне реализовать в программе проверку пароля... т.е я создаю поле ввода говорю ему тип пароль! вобщем как мне реализовать всё это дело если можно то как после корректного ввода пароля чтоб програмулина подгружала длл с дополнительными функциями?? Зараннее благодарен!
Ну так проверяешь пароль на корректность , если ок , то грузишь длл и пользуешься дополнительными ф-циями , в чём конкретно проблемы ?
ага, такая проверка обходится патчем в один байт если предполагается только один пароль, то неплохим ( и достаточно простым) решением может быть получение из введенного пароля ключа симметричного шифра и дальнейшее расшифрование твоей дллки, подгрузка её в память. Правда, перед подгрузкой неплохо бы проверять корректность, но, ИМХО, LoadLibrary с этим неплохо справится ) Если паролей может быть несколько, до для реализации такого же механизма потребуется приворачивать PKI, что не есть хорошо еще (теоретически) можно реализовать в дллке функцию, и не экспортировать её.. а адрес шзашифровать ключом пользователея и хранить в надежном месте Тогда проще решить вопрос с несколькими пользователями..
Честно говоря, не совсем понял, что ты хочешь сделать... Отвечаю как понял: 1) Определяешь момент, когда пользователь ввел пароль (например, нажал на кнопку); 2) Получаешь текст EditControl'a и сравниваешь с правильным паролем; 3) Если пароль правильный, вызываешь LoadLibrary и при необходимости GetProcAddress
TerroSufix Начинающему написать серьезный крипто алгоритм, который не будет ломаться элементарным патчем или даже руками, весьма сложно, на мой взгляд, поэтому советую автору будущей программы задуматься над этим и сделать свои выводы. Я лично ничего против такой программы не имею, пусть пишет, научиться немножко с паролями работать...
его никто и не уговаривает писать криптоалгоритм.. ИМХО, их уже достаточно достойных набралось Просто нужно грамотно использовать.
Xen0 Я наверно не совсем ясно изъясняюсь Проблема в том что я СОВСЕМ начинающий Я пытался делать каким образом... создавал поле для пароля создавал чтоо то вроде pass db "pass",0 воот.. а когда в самой функции делал чтоо то вроде .if eax==IDC_BATON invoke getdlgitemtext,тыры пыры,addr iPass точно не помню как там называется фун .elseif pass==iPass тогда подгружаем библиотеки!??? а он выдаёт ошибку мол немогу сравнивать такие штуки или что тот в этом роде...а до алгоритмов криптования мне я думаю ОЧЕНЬ далеко
видно что начинающий по трем одинаковым постам )) тексты нельзя в асьме сравнивать так, как ты написал на то он и asm, надо либо писать свою ф-ции для сравнения, либо воспользоваться готовой, например lstrcmp: invoke lstrcmp, addr pass, addr iPass .if eax == 0 ; здесь если строки одинаковые .else ; здесь соответственно, если не одинаковые. .endif описания lstrcmp и др. ф-ций можно найти в MSDN или Win32.hlp а вообще, все это будет работать, если ты пытаешься защититься от ламеров, т.е. если ты здесь дальше будет грузить библиотеку, защита обойдется одним байтом. да и пароль можно будет посмотреть в открытом виде. другое дело, хотя бы сделать сравнение хешей от паролей, тогда можно будет поломать, изменив условие, но пароль никто не узнает. ну а совсем хорошо, как уже предлагали, пошифровать дллку, и расшифровывать только правильным ключем. тут уж, придется выпытывать из тебя пароль
хотя бы сделать сравнение хешей от паролей, тогда можно будет поломать, изменив условие, но пароль никто не узнает Ты оговаривай КАКИХ хешей. Не для всяких хешей такое условие выполняется
volodya Ты оговаривай КАКИХ хешей. Не для всяких хешей такое условие выполняется ну в смысле, в проге хранить хеш от правильного пароля, считать хеш от введенного пароля и сравнивать эти 2 хеша. это вряд ли для тебя пояснение для автора топика
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): mov eax,iPass ; регистр eax может хранить dword cmp eax,pass ; cmp (sub) может сравнивать (вычитать) регистр,память jz совпали ; если получился ноль (ZF=1) Фуф , вроде не наврал особо , ну что рассказывать теперь как можно сравнивать пароли больше чем 4 байта (команды mov,movs*,cmps*,loop,add,inc,dec,j**,lods*,rep** и другие пригодяться) , и потом как хранить пароль не в открытом виде , а в немного завуалированном (пригодиться например xor) ? Или сам будешь ассемблер изучать ?
Funbit Да у miniBB бывает глючок она залипает(вроде бы сообщение отправляет)ну я по дури три раза и жмакнул а он(miniBB) по дури 3 раза запостил Спасибо я помоему это и искал bogrus Спасибо! Очень даже расширил мой взгляд на асм!