invoke ReadFile, hFile, pMem, hSize, addr hRead, 0
mov esi, pMem
mov ecx, hSize
mov al, 123
xorit:
xor [esi], al
inc esi
loop xorit
2)
invoke GetTickCount ; pseudo-random number
mov edx,eax ; edx= key
lea esi,start
mov esi,edi
mov ecx,size
kripter:
lodsd
xor eax,edx ; isto i za sifovanje i dekripciju
stosd
loop kripter
3)
mov edx, 010011100000111111110000000000000b
kripter:
ror edx, 1
lodsd
xor eax, edx
stosd
loop kripter
4)
; ###########################################################################
XorData proc lpSource:DWORD,ln:DWORD,lpKey:DWORD,lnKey:DWORD
LOCAL lref :DWORD ; brojac reference za key char poziciju
LOCAL pcnt :DWORD
LOCAL bvar :BYTE
push ebx
push esi
push edi
mov eax, lpKey
mov pcnt, eax
add eax, lnKey
mov lref, eax
mov esi, lpKey
mov al,[esi]
mov bvar, al ; stavlja prvi bajt u bvar
mov ecx, ln
mov esi, lpSource
mov edi, lpSource
xsSt:
mov al,[esi] ; kopira prvi bajt source u al
inc esi
xor al, bvar ; xor al sa sledecim bajtom u bvar
; ====== Ovaj kod "resava" sudbinu prvog bajta u key string ======
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
push eax
push esi
inc pcnt ; "increment" bajt adresu
mov esi, pcnt ; prebacuje u esi
mov al,[esi]
inc esi
mov ebx, lref
cmp pcnt, ebx
jne @F
mov edx, lpKey ; stavlja "key" pocetnu adresu u edx
mov pcnt, edx ; resetuje pcnt
mov esi, pcnt ; stavlja adresu u esi
mov al,[esi]
inc esi
@@:
mov bvar, al
pop esi
pop eax
; ============================================================
mov [edi], al
inc edi
dec ecx
cmp ecx, 0
jne xsSt
pop edi
pop esi
pop ebx
ret
XorData endp
; ###########################################################################
5)
XorHalf PROC Buff:DWORD, Length:DWORD
mov ecx, Length
mov edx, Buff
lsr ecx, 3
je bye
push ebx
;pravi mali skrembler a??
push edx
push ecx
lea ebx, [edx + ecx*4]
lsl ecx, 2
push ecx
invoke XorHalf, edx, ecx
pop ecx
invoke XorHalf, ebx, ecx
pop ecx
pop edx
dec ecx
@@: mov eax, [edx+ecx*4]
xor [ebx+ecx*4], eax
dec ecx
jns @B
pop ebx
bye:
ret
XorHalf ENP
Naravno ide brze bez PROC
6)
pseudo random number generator
Uzmi SEED (same starting point), generisi random key , XOR sifruje podatke, odnosno pri dekripciji koristis isti "seed" radi 'reget' originalnog 'key'
SEED je random_number varijabla
.data
random_number dd 15
.code
get_random_number:
push ebx
push eax
mov eax,[random_number]
mov ebx,31421
mul ebx
add eax,6927
mov [random_number],eax
pop eax
pop ebx
ret
7)
Sifruje:
void code(long* v, long* k) {
unsigned long y=v[0],z=v[1], sum=0, /*pa pocinjemo*/
delta=0x9e3779b9, n=32 ; /* k.s. konstanta */
while (n-->0) { /* pocetak ciklusa*/
sum += delta ;
y += (z<<4)+k[0] ^ z+sum ^ (z>>5)+k[1] ;
z += (y<<4)+k[2] ^ y+sum ^ (y>>5)+k[3] ; /* kraj ciklusa*/
}
v[0]=y ; v[1]=z ; }
Desifruje:
void decode(long* v,long* k) {
unsigned long n=32, sum, y=v[0], z=v[1],
delta=0x9e3779b9 ;
sum=delta<<5 ;
/* pocetak ciklusa*/
while (n-->0) {
z-= (y<<4)+k[2] ^ y+sum ^ (y>>5)+k[3] ;
y-= (z<<4)+k[0] ^ z+sum ^ (z>>5)+k[1] ;
sum-=delta ; }
/* kraj ciklusa*/
v[0]=y ; v[1]=z ; }
[Ovu poruku je menjao secret dana 07-26-2001 u 07:43 PM GMT]
Quaerite et invenietis | Everything in life is Luck -- Donald Trump | http://www.akcenat.info | Momenat – Vaša instant doza vesti | Part Time Freelance Journalist