Salut..
Je vois qu'il y a quand même pas mal de monde qui passe dans cette partie du forum, alors je décide de contribuer, si ça peut aider à comprendre l'asm.
Un programme que j'ai écrit lorsque je débutais. C'est un exemple simple de chiffrement-déchiffrement avec une clef de 128 bits. Ca a été écrit pour Fasm et WIn32 mais c'est facilement adaptable pour d'autres compilateurs et Linux.
Par contre, ce n'est qu'un exemple, ça doit donc être considéré en tant que tel et non utilisé pour chiffrer des documents. Pour cela, il y a de vrais solutions fiables, comme l'AES par exemple.
Le code d'origine a un strlen, mais je l'ai viré volontairement, comme ça vous pourrez vous amuser à en rajouter un.
Modifier des codes, les améliorer, c'est excellent pour apprendre rapidement.
Le même code en raw, donc sans les macros:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
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 format PE console include 'include/windows/win32a.inc' entry start section '.text' code readable executable start: stdcall demo,buf1,32,buf2 ;chiffrement des bytes du buf1 vers le buf2 stdcall demo,buf2,32,buf3 ;déchiffrement des bytes du buf2 vers le buf3 cinvoke printf,forms,buf3 ;affichage des bytes déchiffrés du buf3 ret proc demo inbuf,len,outbuf mov esi,dword [inbuf] mov edi,dword [outbuf] mov ecx,dword [len] @@: mov ebx,table @re: mov al,byte [ebx] or al,al jz @b inc ebx shl ax,8 lodsb cmp al,ah jz @f xor al,ah @@: stosb dec ecx jnz @re ret endp section '.data' data readable writeable buf1 db 'la petite maison dans la prairie',0 buf2 rb 256 buf3 rb 256 table db 0x7d,0x72,0x6f,0xd7,0x84,0x09,0xb2,0x18,\ 0x12,0xd7,0x43,0xf3,0x33,0x1b,0xa4,0x6f forms db '%s',13,10,0 section '.idata' import data readable writeable library msvcrt, 'msvcrt.dll' import msvcrt,\ printf, 'printf'
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
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 format PE console entry start section '.text' code readable executable start: push buf2 push 32 push buf1 call demo push buf3 push 32 push buf2 call demo push buf3 push forms call [printf] add esp,8 ret demo: push ebp mov ebp,esp mov esi,dword [ebp+8] mov ecx,dword [ebp+12] mov edi,dword [ebp+16] @@: mov ebx,table @re: mov al,byte [ebx] or al,al jz @b inc ebx shl ax,8 lodsb cmp al,ah jz @f xor al,ah @@: stosb dec ecx jnz @re mov esp,ebp pop ebp ret 12 section '.data' data readable writeable buf1 db 'la petite maison dans la prairie',0 buf2 rb 256 buf3 rb 256 table db 0x7d,0x72,0x6f,0xd7,0x84,0x09,0xb2,0x18,\ 0x12,0xd7,0x43,0xf3,0x33,0x1b,0xa4,0x6f forms db '%s',13,10,0 section '.idata' import data readable writeable dd 0,0,0,rva msvcrt_name,rva msvcrt_table dd 0,0,0,0,0 msvcrt_table: printf dd rva _printf dd 0 _printf db 0,0,'printf',0 msvcrt_name db 'msvcrt.dll',0
Partager