Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: обработка токен дискеты (использование защиты с использованием флопика)  (Прочитано 5339 раз)
0 Пользователей и 1 Гость смотрят эту тему.
BSWAR
Новенький

ru
Offline Offline

« : 31-03-2011 16:57 » 

Данный текст предназначен для тех кому нужно сдать курсовую на данную тему
программа полностью готова к использованию как сама по-себе так и доп. модуль

модуль для проверки хеша дискеты (А:/)
т.е. запускаем прогу если в приводе присутствует дискета с правильным хешом то выводится окно, с сообщением код верный
если неверный или дискеты нет то выводится окно, с сообщением код не верный

Код:
.386
.model flat,stdcall

MIN_KERNEL_SEARCH_BASE equ 070000000h
MAX_API_STRING_LENGTH equ 150
INCLUDE WIN32.inc
.code
start:
pushad
Call Delta
Delta:
pop ebp
sub ebp, offset Delta
push dword ptr [esp + 20h]
call GetKernelBase

mov [ebp + dwKernelBase], eax

lea eax, [ebp + offset szCF]
push eax
push [ebp + dwKernelBase]
call GetProcAddr
mov [ebp + _CF],eax

lea eax, [ebp + offset szEP]
push eax
push [ebp + dwKernelBase]
call GetProcAddr
mov [ebp + _EP],eax

lea eax, [ebp + offset szRF]
push eax
push [ebp + dwKernelBase]
call GetProcAddr
mov [ebp + _RF],eax

        lea eax, [ebp + offset szLoadLibrary]
push eax
push [ebp + dwKernelBase]
call GetProcAddr
mov [ebp + _LoadLibrary],eax

        lea eax, [ebp + offset szGetProcAddress]
push eax
push [ebp + dwKernelBase]
call GetProcAddr
mov [ebp + _GetProcAddress],eax

        lea eax, [ebp + offset szUser32]
push eax
call [ebp + _LoadLibrary]
mov [ebp + dwUserBase],eax

        lea eax, [ebp + offset szMB]
push eax
push [ebp + dwUserBase]
call GetProcAddr
mov [ebp + _MB],eax


push 0
push FILE_ATTRIBUTE_NORMAL
push OPEN_ALWAYS
push 0
push FILE_SHARE_READ or FILE_SHARE_WRITE
push GENERIC_READ
lea eax, [ebp + offset Filen]
push eax
call [ebp + _CF]
mov [ebp + dFile], eax

push 0
lea eax, [ebp + offset num]
push eax
lea eax, [ebp + 512]
push eax
lea eax, [ebp + offset buf]


push eax
push [ebp + dFile]
call [ebp + _RF]
mov edx, dword ptr [ebp + buf+27h]

cmp edx,[sn]
jne m1
push MB_OK
lea eax, [ebp + offset _ttl]
push eax
lea eax, [ebp + offset _msg]
push eax
push NULL
call [ebp + _MB]
jmp m2
m1: push MB_OKCANCEL
lea eax, [ebp + offset _ttl2]
push eax
lea eax, [ebp + offset _msg2]
push eax
push NULL
call [ebp + _MB]
m2: push NULL
mov eax, [ebp + _EP]
call eax
GetKernelBase PROC USES edi esi, dwTopStack : dword
mov edi, dwTopStack
and edi, 0FFFF0000h
k2: mov ax, word ptr [edi]
cmp word ptr [edi], 'ZM'
jne ExceptCount
mov esi, edi
add esi, [esi + 03ch]
cmp dword ptr [esi], 'EP'
jne ExceptCount
jmp k1


ExceptCount:
sub edi, 010000h
cmp edi, MIN_KERNEL_SEARCH_BASE
ja k2
mov edi, 0BFF70000h
k1: xchg eax, edi
ret
GetKernelBase ENDP
GetProcAddr PROC USES Esi Edi ecx ebx edx, dwDllBase : dword, szApi : dword
mov esi, dwDllBase
cmp word ptr [esi], 'ZM'
jnz @@BadExit
add esi, [esi + 03ch]
cmp dword ptr [esi], 'EP'
jnz @@BadExit
mov edi, szApi
mov ecx, MAX_API_STRING_LENGTH
xor al, al
repnz SCASB
mov ecx, edi
sub ecx, szApi
mov edx, [esi + 078h]
add edx, dwDllBase


mov ebx, [edx+20h]
add ebx, dwDllBase
xor eax, eax
m3: mov edi, [ebx]
add edi, dwDllBase
mov esi, szApi
push ecx
repz CMPSB

jne n1
jmp n2




n1: pop ecx
add ebx,4
inc eax
cmp eax,[edx+18h]
jne m3
n2: mov esi,[edx+24h]
add esi,dwDllBase
push edx
mov ebx,2
xor edx,edx
mul ebx
add eax,esi
xor ecx,ecx
mov cx,word ptr [eax]
pop edx
mov edi,[edx+1Ch]
xor edx,edx
mov ebx,4
mov eax,ecx
mul ebx
add eax,dwDllBase
add eax,edi
mov eax,dword ptr [eax]
add eax,dwDllBase
jmp @@ExitProc

@@BadExit:
xor eax,eax

@@ExitProc:
ret

GetProcAddr ENDP

Constants:

dFile dd 0
num dd 0
Filen db '\\.\A:',0
sn dd 0FCE9DE9Eh

_ttl db "vernii",0
_msg db "dlya prodolgeniya najmite ''OK''",0
_ttl2 db "nevernii",0
_msg2 db "dlya zaversheniya najmite ''OK''",0

dwKernelBase dd 0
dwUserBase dd 0
szLoadLibrary db "LoadLibraryA",0
szGetProcAddress db "GetProcAddress",0
szUser32 db "user32",0
_LoadLibrary dd 0
_GetProcAddress dd 0

szMB db "MessageBoxA",0
szCF db "CreateFileA",0
szRF db "ReadFile",0
szEP db "ExitProcess",0
_MB dd 0
_CF dd 0
_RF dd 0
_EP dd 0
buf db 1024 dup (0)
end start



в данном коде хеш дискеты   0FCE9DE9E


з.ы. если оформил не так как надо, подкорректируйте
автор данного кода не я, но правильность гарантирую
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 31-03-2011 17:08 » 

Ещё бы флоппик найти под такое дело...
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
BSWAR
Новенький

ru
Offline Offline

« Ответ #2 : 31-03-2011 18:28 » new

попробуй через флешку

только про файловую систему смени
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines