|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Авг 31, 2004 18:32:38 Ребят пишу на асме относительно недавно! Сейчас пользуюсь масм и в качестве ide RadAsm..приспичило меня написать простенькую програмулину так сказать для поддержания своего интереса и стимулирования дальнейщего занятия програмированием на асм. Программа уже умеет скрывать трей проверять сооденение с интернетом ну и остальную смешную для людей серьёзно занимающихся программированием лабуду..вот :)теперь собственно вопрос я пользуюсь диалоговыми окнами спасибо создателю рад асма просто ограменное снимает большой груз проблем и хотелось бы мне реализовать в программе проверку пароля... т.е я создаю поле ввода говорю ему тип пароль! вобщем как мне реализовать всё это дело если можно то как после корректного ввода пароля чтоб програмулина подгружала длл с дополнительными функциями?? Зараннее благодарен! |
|
|
Дата: Авг 31, 2004 21:37:35 Ну так проверяешь пароль на корректность , если ок , то грузишь длл и пользуешься дополнительными ф-циями , в чём конкретно проблемы ? :) |
|
|
Дата: Авг 31, 2004 21:44:07 ага, такая проверка обходится патчем в один байт :) если предполагается только один пароль, то неплохим ( и достаточно простым) решением может быть получение из введенного пароля ключа симметричного шифра и дальнейшее расшифрование твоей дллки, подгрузка её в память. Правда, перед подгрузкой неплохо бы проверять корректность, но, ИМХО, LoadLibrary с этим неплохо справится ) Если паролей может быть несколько, до для реализации такого же механизма потребуется приворачивать PKI, что не есть хорошо :( еще (теоретически) можно реализовать в дллке функцию, и не экспортировать её.. а адрес шзашифровать ключом пользователея и хранить в надежном месте :) Тогда проще решить вопрос с несколькими пользователями.. |
|
|
Дата: Авг 31, 2004 21:49:10 Честно говоря, не совсем понял, что ты хочешь сделать... Отвечаю как понял: 1) Определяешь момент, когда пользователь ввел пароль (например, нажал на кнопку); 2) Получаешь текст EditControl'a и сравниваешь с правильным паролем; 3) Если пароль правильный, вызываешь LoadLibrary и при необходимости GetProcAddress |
|
|
Дата: Сен 1, 2004 02:12:19 flankerx:А куда ДЛЛ разшифровывать? |
|
|
Дата: Сен 1, 2004 06:12:03 гм, во временный файл... |
|
|
Дата: Сен 1, 2004 12:22:12 TerroSufix Начинающему написать серьезный крипто алгоритм, который не будет ломаться элементарным патчем или даже руками, весьма сложно, на мой взгляд, поэтому советую автору будущей программы задуматься над этим и сделать свои выводы. Я лично ничего против такой программы не имею, пусть пишет, научиться немножко с паролями работать... |
|
|
Дата: Сен 1, 2004 17:38:34 его никто и не уговаривает писать криптоалгоритм.. ИМХО, их уже достаточно достойных набралось :) Просто нужно грамотно использовать. |
|
|
Дата: Сен 1, 2004 17:51:27 Xen0 Я наверно не совсем ясно изъясняюсь :( Проблема в том что я СОВСЕМ начинающий :) Я пытался делать каким образом... создавал поле для пароля создавал чтоо то вроде pass db "pass",0 воот.. а когда в самой функции делал чтоо то вроде .if eax==IDC_BATON invoke getdlgitemtext,тыры пыры,addr iPass точно не помню как там называется фун .elseif pass==iPass тогда подгружаем библиотеки!??? а он выдаёт ошибку мол немогу сравнивать такие штуки или что тот в этом роде...а до алгоритмов криптования мне я думаю ОЧЕНЬ далеко :) |
|
|
Дата: Сен 1, 2004 19:27:39 видно что начинающий :) по трем одинаковым постам :))) тексты нельзя в асьме сравнивать так, как ты написал :) на то он и asm, надо либо писать свою ф-ции для сравнения, либо воспользоваться готовой, например lstrcmp: invoke lstrcmp, addr pass, addr iPass .if eax == 0 ; здесь если строки одинаковые .else ; здесь соответственно, если не одинаковые. .endif описания lstrcmp и др. ф-ций можно найти в MSDN или Win32.hlp а вообще, все это будет работать, если ты пытаешься защититься от ламеров, т.е. если ты здесь дальше будет грузить библиотеку, защита обойдется одним байтом. да и пароль можно будет посмотреть в открытом виде. другое дело, хотя бы сделать сравнение хешей от паролей, тогда можно будет поломать, изменив условие, но пароль никто не узнает. ну а совсем хорошо, как уже предлагали, пошифровать дллку, и расшифровывать только правильным ключем. тут уж, придется выпытывать из тебя пароль :) |
|
|
Дата: Сен 1, 2004 19:50:58 хотя бы сделать сравнение хешей от паролей, тогда можно будет поломать, изменив условие, но пароль никто не узнает Ты оговаривай КАКИХ хешей. Не для всяких хешей такое условие выполняется :) |
|
|
Дата: Сен 1, 2004 20:36:03 · Поправил: Funbit volodya Ты оговаривай КАКИХ хешей. Не для всяких хешей такое условие выполняется :) ну в смысле, в проге хранить хеш от правильного пароля, считать хеш от введенного пароля и сравнивать эти 2 хеша. это вряд ли для тебя пояснение :) для автора топика |
|
|
Дата: Сен 1, 2004 23:13:41 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 байта , то можно сделать примерно так : 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) ? Или сам будешь ассемблер изучать ? |
|
|
Дата: Сен 2, 2004 11:40:21 Funbit Да у miniBB бывает глючок она залипает(вроде бы сообщение отправляет)ну я по дури три раза и жмакнул а он(miniBB) по дури 3 раза запостил :) Спасибо я помоему это и искал bogrus :) Спасибо! Очень даже расширил мой взгляд на асм! |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.144 |