Salut!

J'ai un bug dans libcrypto, voici l'assembleur générer :

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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
 
0x43ba20	push   rbp
0x43ba21	mov    rbp,rsp
0x43ba24	sub    rsp,0x50
0x43ba28	mov    QWORD PTR [rbp-0x8],rdi
0x43ba2c	mov    rdi,QWORD PTR [rbp-0x8]
0x43ba30	mov    QWORD PTR [rbp-0x38],rdi
0x43ba34	call   0x4807e0 <odfaeg::core::Application::load()>
0x43ba39	mov    rdi,QWORD PTR [rbp-0x38]
0x43ba3d	call   0x480800 <odfaeg::core::Application::init()>
0x43ba42	mov    rdi,QWORD PTR [rbp-0x38]
0x43ba46	mov    BYTE PTR [rdi+0x48],0x1
0x43ba4a	mov    rax,QWORD PTR [rbp-0x38]
0x43ba4e	test   BYTE PTR [rax+0x48],0x1
0x43ba52	je     0x43bbe0 <odfaeg::core::Application::exec()+448>
0x43ba58	movabs rsi,0x0
0x43ba62	mov    rax,QWORD PTR [rbp-0x38]
0x43ba66	add    rax,0x8
0x43ba6c	mov    rdi,rax
0x43ba6f	call   0x4806d0 <std::operator!=<odfaeg::graphic::RenderWindow, std::default_delete<odfaeg::graphic::RenderWindow> >(std::unique_ptr<odfaeg::graphic::RenderWindow, std::default_delete<odfaeg::graphic::RenderWindow> > const&, decltype(nullptr))>
0x43ba74	test   al,0x1
0x43ba76	jne    0x43ba81 <odfaeg::core::Application::exec()+97>
0x43ba7c	jmp    0x43baba <odfaeg::core::Application::exec()+154>
0x43ba81	mov    rax,QWORD PTR [rbp-0x38]
0x43ba85	add    rax,0x8
0x43ba8b	mov    rdi,rax
0x43ba8e	call   0x480700 <std::unique_ptr<odfaeg::graphic::RenderWindow, std::default_delete<odfaeg::graphic::RenderWindow> >::operator->() const>
0x43ba93	mov    rdi,rax
0x43ba96	call   0x409960 <sf::Window::isOpen() const@plt>
0x43ba9b	test   al,0x1
0x43ba9d	jne    0x43baa8 <odfaeg::core::Application::exec()+136>
0x43baa3	jmp    0x43baba <odfaeg::core::Application::exec()+154>
0x43baa8	mov    rdi,QWORD PTR [rbp-0x38]
0x43baac	call   0x480820 <odfaeg::core::Application::render()>
0x43bab1	mov    rdi,QWORD PTR [rbp-0x38]
0x43bab5	call   0x4809a0 <odfaeg::core::Application::update()>
0x43baba	call   0x480ce0 <odfaeg::network::Network::getCliInstance()>
0x43babf	mov    rdi,rax
0x43bac2	call   0x486670 <odfaeg::network::SrkClient::isRunning()>
0x43bac7	test   al,0x1
0x43bac9	jne    0x43bad4 <odfaeg::core::Application::exec()+180>
0x43bacf	jmp    0x43baf6 <odfaeg::core::Application::exec()+214>
0x43bad4	call   0x480ce0 <odfaeg::network::Network::getCliInstance()>
0x43bad9	mov    rdi,rax
0x43badc	call   0x484c10 <odfaeg::network::SrkClient::isUsingThread()>
0x43bae1	test   al,0x1
0x43bae3	jne    0x43baf6 <odfaeg::core::Application::exec()+214>
0x43bae9	call   0x480ce0 <odfaeg::network::Network::getCliInstance()>
0x43baee	mov    rdi,rax
0x43baf1	call   0x486680 <odfaeg::network::SrkClient::checkMessages()>
0x43baf6	call   0x480de0 <odfaeg::network::Network::getSrvInstance()>
0x43bafb	mov    rdi,rax
0x43bafe	call   0x4890e0 <odfaeg::network::SrkServer::isRunning()>
0x43bb03	test   al,0x1
0x43bb05	jne    0x43bb10 <odfaeg::core::Application::exec()+240>
0x43bb0b	jmp    0x43bb32 <odfaeg::core::Application::exec()+274>
0x43bb10	call   0x480de0 <odfaeg::network::Network::getSrvInstance()>
0x43bb15	mov    rdi,rax
0x43bb18	call   0x487540 <odfaeg::network::SrkServer::isUsingThread()>
0x43bb1d	test   al,0x1
0x43bb1f	jne    0x43bb32 <odfaeg::core::Application::exec()+274>
0x43bb25	call   0x480de0 <odfaeg::network::Network::getSrvInstance()>
0x43bb2a	mov    rdi,rax
0x43bb2d	call   0x4890f0 <odfaeg::network::SrkServer::checkMessages()>
0x43bb32	mov    rax,QWORD PTR [rbp-0x38]
0x43bb36	mov    rcx,QWORD PTR [rax]
0x43bb39	mov    rcx,QWORD PTR [rcx+0x28]
0x43bb3d	mov    rdi,rax
0x43bb40	call   rcx
0x43bb42	lea    rax,[rbp-0x18]
0x43bb46	mov    rdi,rax
0x43bb49	mov    QWORD PTR [rbp-0x40],rax
0x43bb4d	call   0x409940 <std::allocator<char>::allocator()@plt>
0x43bb52	mov    edx,0x4e790e
0x43bb57	mov    esi,edx
0x43bb59	lea    rdi,[rbp-0x10]
0x43bb5d	mov    rdx,QWORD PTR [rbp-0x40]
0x43bb61	call   0x409cc0 <std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&)@plt>
0x43bb66	jmp    0x43bb6b <odfaeg::core::Application::exec()+331>
0x43bb6b	lea    rsi,[rbp-0x10]
0x43bb6f	mov    rdi,QWORD PTR [rbp-0x38]
0x43bb73	call   0x419bc0 <odfaeg::core::Application::getClock(std::string)>
0x43bb78	mov    QWORD PTR [rbp-0x48],rax
0x43bb7c	jmp    0x43bb81 <odfaeg::core::Application::exec()+353>
0x43bb81	mov    rdi,QWORD PTR [rbp-0x48]
0x43bb85	call   0x4091e0 <sf::Clock::restart()@plt>
0x43bb8a	mov    QWORD PTR [rbp-0x50],rax
0x43bb8e	jmp    0x43bb93 <odfaeg::core::Application::exec()+371>
0x43bb93	lea    rdi,[rbp-0x10]
0x43bb97	mov    rax,QWORD PTR [rbp-0x50]
0x43bb9b	mov    QWORD PTR [rbp-0x30],rax
0x43bb9f	call   0x409c80 <std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()@plt>
0x43bba4	lea    rdi,[rbp-0x18]
0x43bba8	call   0x409d90 <std::allocator<char>::~allocator()@plt>
0x43bbad	jmp    0x43ba4a <odfaeg::core::Application::exec()+42>
0x43bbb2	mov    ecx,edx
0x43bbb4	mov    QWORD PTR [rbp-0x20],rax
0x43bbb8	mov    DWORD PTR [rbp-0x24],ecx
0x43bbbb	jmp    0x43bbd2 <odfaeg::core::Application::exec()+434>
0x43bbc0	lea    rdi,[rbp-0x10]
0x43bbc4	mov    ecx,edx
0x43bbc6	mov    QWORD PTR [rbp-0x20],rax
0x43bbca	mov    DWORD PTR [rbp-0x24],ecx
0x43bbcd	call   0x409c80 <std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()@plt>
0x43bbd2	lea    rdi,[rbp-0x18]
0x43bbd6	call   0x409d90 <std::allocator<char>::~allocator()@plt>
0x43bbdb	jmp    0x43bbeb <odfaeg::core::Application::exec()+459>
0x43bbe0	mov    eax,0x0
0x43bbe5	add    rsp,0x50
0x43bbe9	pop    rbp
0x43bbea	ret
0x43bbeb	mov    rdi,QWORD PTR [rbp-0x20]
0x43bbef	call   0x409320 <_Unwind_Resume@plt>
La pile d'appel :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
#0 0x7ffff6673a41	??() (/lib/x86_64-linux-gnu/libcrypto.so.1.0.0:??)
#1 0x48febc	odfaeg::network::Rsa::decryptWithPrKey(unsigned char const*, int, int*) () (??:??)
#2 0x4900e9	odfaeg::network::EncryptedPacket::onReceive(void const*, unsigned long) () (??:??)
#3 0x7ffff79bb42d	sf::TcpSocket::receive(sf::Packet&) () (/usr/local/lib/libsfml-network.so.2.3:??)
#4 0x489b37	odfaeg::network::SrkServer::checkMessages() () (??:??)
#5 0x43bb32	odfaeg::core::Application::exec(this=0x7fffffebb138) (../../../../../usr/local/include/odfaeg/Core/application.h:84)
#6 0x436b33	main(argv=1, argc=0x7fffffffe488) (/home/laurent/Développement/Projets-c++/ODFAEG-SERVER/main.cpp:20)
Et enfin, le code source ou se produit le bug, il faut noter également que je change le certificat à plusieurs reprise, la première fois pour chiffrer les messages avec la clé publique du client, et la seconde fois pour envoyer la clé publique du serveur au client.

Code cpp : 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
 
 void Rsa::setCertificate(const unsigned char* in, int length) {
            x = d2i_X509(NULL,&in,length);
            evp_pkey = X509_get_pubkey(x);
            keypair = EVP_PKEY_get1_RSA(evp_pkey);           
        }
unsigned char* Rsa::decryptWithPrKey (const unsigned char *encData, int dataSize, int* newSize) {
            unsigned char *data = new unsigned char[dataSize];
            *newSize = RSA_private_decrypt(RSA_size(keypair), encData, data, keypair, RSA_PKCS1_OAEP_PADDING);
            if (*newSize == -1) {
                char* err = (char*) malloc(130);
                ERR_load_crypto_strings();
                ERR_error_string(ERR_get_error(), err);
                fprintf(stderr, "Error encrypting message: %s\n", err);
                free(err);
                return nullptr;
            }
            return data;
        }

Je pense qu'il doit vraiment y avoir un problème dans lib crypto. :/