- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
format pe console
include 'win32a.inc'
sub esp,256
mov edi,esp
xor ebx,ebx
cinvoke puts,.title
.nxt:cinvoke gets,edi
cinvoke strlen,eax
test eax,eax
jz .ext
mov ecx,eax
mov eax,edi
call hash
test ebx,ebx
jz .add
mov ecx,ebx
mov edi,esp
repne scasd
jnz .add
cinvoke puts,.yes
cinvoke sleep,1000
jmp .nxt
.add: push eax
inc ebx
mov ecx,eax
mov eax,edi
call get_hex
mov eax,edi
cinvoke puts,edi
jmp .nxt
.ext:cinvoke exit,0
.title db 'get hash of string',0
.yes db '!!!hash found!!!',0
hash: push ebx esi
mov esi,eax
mov eax,ecx
xor edx,edx
mov ecx,4
div ecx
mov ecx,eax
xor eax,eax
mov ebx,$03020100
.start: test ecx,ecx
jz .finish
add eax,[esi]
add esi,4
xor eax,ebx
add ebx,$04040404
loop .start
.finish:test edx,edx
jz .exit
cmp edx,1
je .exit1
add ax,[esi]
xor ax,bx
cmp edx,2
je .exit
add esi,2
shr ebx,16
bswap eax
add ah,[esi]
xor ah,bl
bswap eax
jmp .exit
.exit1: add al,[esi]
xor al,bl
.exit: pop esi ebx
ret
get_hex:push ebx edi
mov edi,eax
mov ebx,.hex
mov edx,ecx
mov ecx,4
bswap edx
cld
.next: mov al,dl
shr al,4
xlatb
stosb
mov al,dl
and al,$0F
xlatb
stosb
shr edx,8
loop .next
xor al,al
stosb
mov eax,8
pop edi ebx
ret
.hex db '0123456789ABCDEF'
data import
library msvcrt,'msvcrt.dll'
import msvcrt,exit,'exit',puts,'puts',sleep,'_sleep',gets,'gets',strlen,'strlen'
end data
Приветствуем любителей накласть.
Понадобился алгоритм для нахождения хэша строки, наклали.
Пихает хэши в стэк и проверяет новые на совпадение со старыми.
У кого есть предложения по его улучшению милости просим!