tweets - img.sauf.ca · pdf filefffff return out 00000000: 3af6 b4e2 ... e9 ee 3c e5 0f b2 b4...

2
(gdb) hexdump 0x923770 0x65 88 09 0c da 46 fd 2c de 1d e8 e4 45 89 18 ae 46 |....F.,....E...F| 69 64 3d 31 44 39 30 37 36 45 36 46 44 38 35 33 |id=1D9076E6FD853| 41 42 36 26 61 63 74 3d 67 65 74 6b 65 79 26 61 |AB6&act=getkey&a| 66 66 69 64 3d 33 26 6c 61 6e 67 3d 66 72 26 63 |ffid=3&lang=fr&c| 6f 72 70 3d 30 26 73 65 72 76 3d 30 26 6f 73 3d |orp=0&serv=0&os=| 57 69 6e 64 6f 77 73 2b 58 50 26 73 70 3d 32 26 |Windows+XP&sp=2&| 78 36 34 3d 30 |x64=0 def encode(buff): buff = md5(buff).digest() + buff out = "" key = 0xcd43ef19 for index in range(len(buff)): ebx = ord(buff[index]) ecx = (ror(key, 5) - rol(index, 0x0d)) ^ ebx out += chr(ecx & 0xff) edx = (rol(ebx, index & 0x1f) + ror(key, 1)) & 0xffffffff ecx = (ror(index, 0x17) + 0x53702f68) & 0xffffffff key = edx ^ ecx return out def decode(buff): out = "" key = 0xaff49754 for index in range(len(buff)): eax = (ord(buff[index]) - index - rol(key, 3)) & 0xff out += chr(eax) key += ((ror(eax, 0xb) ^ rol(key, 5) ^ index) + 0xb834f2d1) & 0xfff fffff return out 00000000: 3af6 b4e2 83b1 6405 0758 854f b971 a80a :.....d..X.O.q.. 00000010: 0602 0000 00a4 0000 5253 4131 0008 0000 ........RSA1.... 00000020: 0100 0100 2160 3262 90cb 7be6 9b94 d54a ....!`2b..{....J 00000030: 45e0 b6c3 f624 1ec5 3f28 7d06 c868 ca45 E....$..?(}..h.E 00000040: c374 250f 9ed9 91d3 3bd2 b20f b843 f9a3 .t%.....;....C.. 00000050: 1150 5af5 4478 4e90 0af9 1e89 66d2 9860 .PZ.DxN.....f..` 00000060: 4b60 a289 1a16 c258 3754 5be6 7ae3 a75a K`.....X7T[.z..Z 00000070: 0be4 0783 9f18 46e4 80f7 8195 be65 078e ......F......e.. 00000080: de62 3793 2fa6 cead d661 e7e4 2b40 c92b .b7./....a..+@.+ 00000090: 23c9 4ab3 c3aa b560 2258 849c b9fc b1a7 #.J....`"X...... 000000a0: b03f d9b1 e5ee 278c bf75 040b 5f48 9501 .?....'..u.._H.. 000000b0: 80f6 0cbf 2bb4 04eb a4b5 7e8d 30ad f4d4 ....+.....~.0... 000000c0: 70ba f8fb ddae 7270 9103 d385 359a 5a91 p.....rp....5.Z. 000000d0: 4995 9996 3620 3a12 168e f113 1753 d18b I...6 :......S.. 000000e0: fdac 1eed 25a1 fa5c 0d54 6d9c dcbd 9cb7 ....%..\.Tm..... 000000f0: 4b8e 1228 8b70 be13 2bfd face f91a 8481 K..(.p..+....... 00000100: dc33 185e b181 8b0f ccbd f89d 67d3 afa8 .3.^........g... 00000110: c680 17d8 0100 6438 4eba a7b7 04b1 d00f ......d8N....... 00000120: c4fc 94ba .... #define RSA2048BIT_KEY 0x8000000 CryptAcquireContext(&hCryptProv, "LEXSI", NULL, PROV_RSA_FULL, 0); CryptGenKey(hCryptProv, AT_KEYEXCHANGE, RSA2048BIT_KEY|CRYPT_EXPORTABLE , &hKey); // Clé publique CryptExportKey(hKey, NULL, PUBLICKEYBLOB, 0, NULL, &dwPublicKeyLen); pbPublicKey = (BYTE *)malloc(dwPublicKeyLen); CryptExportKey(hKey, NULL, PUBLICKEYBLOB, 0, pbPublicKey, &dwPublicKeyL en); hPublicKeyFile = CreateFile("public.key", GENERIC_WRITE, 0, NULL, CREAT E_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); WriteFile(hPublicKeyFile, (LPCVOID)pbPublicKey, dwPublicKeyLen, &lpNumb erOfBytesWritten, NULL); // Clé privée CryptExportKey(hKey, NULL, PRIVATEKEYBLOB, 0, NULL, &dwPrivateKeyLen); pbPrivateKey = (BYTE *)malloc(dwPrivateKeyLen); CryptExportKey(hKey, NULL, PRIVATEKEYBLOB, 0, pbPrivateKey, &dwPrivateK eyLen); hPrivateKeyFile = CreateFile("private.key", GENERIC_WRITE, 0, NULL, CRE ATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); WriteFile(hPrivateKeyFile, (LPCVOID)pbPrivateKey, dwPrivateKeyLen, &lpN umberOfBytesWritten, NULL); (gdb) hexdump 0x009ef8a0 16 9d 86 d3 42 48 3a 45 04 1a cb 95 1c 77 90 8f 7c (gdb) hexdump 0x009ef784 0x1c 08 02 00 00 0e 66 00 00 10 00 00 00 9d 86 d3 42 48 3a 45 04 1a cb 95 1c 77 90 8f 7c (gdb) x/w $esp+4 0x9ef830: 0x00000004 (gdb) x/w *(int*)($esp+4+4) 0x9ef858: 0x00000002 (gdb) hexdump 0x9ef8a0 256 64 ab 20 75 75 56 ae f4 af 20 7f 38 81 d7 d6 56 |d. uuV... .8...V| 22 89 92 6e 30 e0 61 d2 24 f0 a1 d6 2a 20 7f 6c |"..n0.a.$...* .l| e0 10 cc ab 26 62 33 66 71 8d 93 4c 04 61 8a 9a |....&b3fq..L.a..| 86 e7 f4 75 58 ae 8a 68 96 1f a8 69 15 aa 2f e7 |...uX..h...i../.| 8b cd ca 2e b0 7b e1 89 5f 3e 65 61 4c 0b 43 5e |.....{.._>eaL.C^| 60 3b 17 48 0e d2 08 80 bd 4d e2 38 5b 51 c9 82 |`;.H.....M.8[Q..| 26 bf 94 8a 45 40 82 62 1e 88 42 aa 35 2a 3e 58 |&[email protected]*>X| d2 7d 03 4d cd d4 e6 3b 7d 44 e9 5f dc 4d 1c 4b |.}.M...;}D._.M.K| 27 a9 39 0c 74 ed 46 97 60 af 3a 97 3f 89 33 28 |'.9.t.F.`.:.?.3(| bf 27 67 57 f8 c5 4e 03 72 45 60 88 03 e5 11 98 |.'gW..N.rE`.....| 6f 49 af 92 72 69 db ec b7 c7 51 9a 05 f2 34 e0 |oI..ri....Q...4.| 17 e4 1b 7e c5 97 ff 3d 42 5d ff a5 69 a4 58 f8 |...~...=B]..i.X.| 3b bd 9f 84 6e a5 c7 81 4e 0e aa 5d 40 ff 06 01 |;...n...N..]@...| e9 ee 3c e5 0f b2 b4 80 af 56 c5 b8 25 af 11 2e |..<......V..%...| 22 82 c1 f1 93 50 b2 a4 76 98 46 2e db 6c 76 bb |"....P..v.F..lv.| b5 1e 70 44 41 e2 15 31 f9 02 7d 92 7a e5 73 17 |..pDA..1..}.z.s.| (gdb) hexdump 0x00926598 0x800 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 |................| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 |................| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 03 |................| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 |................| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 05 |................| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 06 |................| [...] 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 7a |...............z| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 7b |...............{| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 7c |...............|| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 7d |...............}| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 7e |...............~| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 7f |................| 0x00926598: fc d3 bb 90 ac 1e 1e 6e 76 88 09 52 66 76 71 fc 0x009265a8: d5 e2 07 fd a5 0c 02 50 d0 83 4e 9b 95 1c 0b 60 0x009265b8: 3f c5 49 e5 df b2 05 56 bd ce eb f6 0d 70 9f 62 0x009265c8: 98 f1 e8 b7 e2 8e d8 97 7f a1 83 14 2b db 82 98 0x009265d8: 5b 4a 94 f7 fb 60 81 cd bb c7 a2 33 60 b1 c0 c7 0x009265e8: 1c c5 c7 40 af 7c ea 4b e2 74 b0 32 c2 37 5e fa 0x009265f8: cf 40 69 9b 81 92 b8 f1 77 79 83 97 32 19 75 a6 [...] 0x009267c8: 96 9a 1d bd 9b 03 33 2f d5 e7 a7 fc ac fc 09 c9 0x009267d8: f6 bd c5 73 ce 9e ce bc fd e4 ef 6f 06 dd 7d 15 0x009267e8: 7d 95 e6 18 78 87 46 ba 75 5e 58 2e f8 ba 5c 14 0x009267f8: 3d a9 f3 d3 af ef 0b 39 00 ae 0c 32 2b fd 37 eb 0x00926808: 3f 3a 68 11 b8 d1 ae e7 28 40 0a 20 33 31 8f 7e 0x00926818: c3 8f 55 2a 5f b5 31 26 02 41 d7 e3 84 c5 79 9b [...] (gdb) p/x $edx // flux de clé $3 = 0x90bbd3fc (gdb) hexdump $edi 64 //avant XOR 2a a1 1b d4 6d 00 6f 00 6e 00 66 00 69 00 63 00 |*...m.o.n.f.i.c.| 68 00 69 00 65 00 72 00 2e 00 74 00 78 00 74 00 |h.i.e.r...t.x.t.| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| (gdb) hexdump $edi 64 //après XOR 1 d6 72 a0 44 6d 00 6f 00 6e 00 66 00 69 00 63 00 |.r.Dm.o.n.f.i.c.| 68 00 69 00 65 00 72 00 2e 00 74 00 78 00 74 00 |h.i.e.r...t.x.t.| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| (gdb) p/x $eax // flux de clé $4 = 0x6e1e1eac (gdb) hexdump $edi 64 //après XOR 2 d6 72 a0 44 c1 1e 71 6e 6e 00 66 00 69 00 63 00 |.r.D..qnn.f.i.c.| 68 00 69 00 65 00 72 00 2e 00 74 00 78 00 74 00 |h.i.e.r...t.x.t.| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| (gdb) p/x $edx $5 = 0xbd1d9a96 // flux de clé à l'offset 0x230 (0x009267c8) (gdb) hexdump $edi 64 //avant XOR 63 65 63 69 20 65 73 74 20 75 6e 20 73 65 63 72 |ceci est un secr| 65 74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |et..............| (gdb) hexdump $edi 64 //après XOR 1 f5 ff 7e d4 20 65 73 74 20 75 6e 20 73 65 63 72 |..~. est un secr| 65 74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |et..............| (gdb) hexdump *(int*)($esp+4+4+4+4) 128 0x009255e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 0x009255f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 81 0x00925600: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 82 [...] (gdb) hexdump *(int*)($esp+4+4+4+4) 128 0x009255e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 0x009255f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 01 0x00925600: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 02 [...] // Import de la clé privée RSA hPrivateKeyFile = CreateFile("private.key", GENERIC_READ, FILE_SHARE_RE AD, NULL, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL); dwPrivateKeyLen = GetFileSize(hPrivateKeyFile, NULL); pbPrivateKey = (BYTE *)malloc(dwPrivateKeyLen); ReadFile(hPrivateKeyFile, pbPrivateKey, dwPrivateKeyLen, &dwPrivateKeyL en, NULL); CryptImportKey(hCryptProv, pbPrivateKey, dwPrivateKeyLen, 0, 0, &hKey); // Lecture du buffer RSA hEncryptedFile = CreateFile("encrypted.rsa", GENERIC_READ, FILE_SHARE_R EAD, NULL, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL); dwEncryptedDataLen = GetFileSize(hEncryptedFile, NULL); pbEncryptedFile = (BYTE *)malloc(dwEncryptedDataLen); ReadFile(hEncryptedFile, pbEncryptedFile, dwEncryptedDataLen, &dwEncryp tedDataLen, NULL); // Déchiffrement de la clé AES CryptDecrypt(hKey, NULL, TRUE, 0, pbEncryptedFile, &dwEncryptedDataLen) ; hClearFile = CreateFile("aeskey.raw", GENERIC_WRITE, 0, NULL, CREATE_AL WAYS, FILE_ATTRIBUTE_NORMAL, NULL); WriteFile(hClearFile, (LPCVOID)pbEncryptedFile, dwEncryptedDataLen, &lp NumberOfBytesWritten, NULL); $ xxd aeskey.raw 9d86 d342 483a 4504 1acb 951c 7790 8f7c #! /usr/bin/env python from Crypto.Cipher import AES print "UnLocky - Locky decryption tool, CERT-LEXSI 2016 key = "9d86d342483a45041acb951c77908f7c".decode("hex") # NB : ici petits fichiers seulement counter = "" for i in range(0x80): counter += "\x00"*15 + chr(i) keystream = AES.new(key, AES.MODE_ECB).encrypt(counter) data = open("1D9076E6FD853AB6C931AFE2B33C3AF9.locky").read() enc_size = len(data) - 0x230 - 0x100 - 0x14 enc_filename = data[-0x230:] enc_content = data[:enc_size] clear_filename = "" for i in range(0x230): clear_filename += chr(ord(enc_filename[i]) ^ ord(keystream[i])) print "[+] Nom du fichier :" print clear_filename clear_content = "" for i in range(enc_size): clear_content += chr(ord(enc_content[i]) ^ ord(keystream[0x230+i])) print "[+] Contenu :" print clear_content $ ./unlocky.py UnLocky - Locky decryption tool, CERT-LEXSI 2016 [+] Nom du fichier : monfichier.txt [+] Contenu : ceci est un secret Tweets by @lexsi 22 Mar 22 Mar Lexsi Retweeted Un excellent billet par @lexsi sur comment créer un vaccin contre Locky : lexsi.com/securityhub/co… #malware #locky #sécurité #locky Abusing bugs in the Locky ransomware to create a vaccine lexsi.com/securityhub/ab… #locky Comment créer un vaccin contre le ransomware Locky? Léo Depriester @cryptobioz Comment créer un v accin … En 2009, nous avions appli… lexsi.com Lexsi @lexsi Abusing bugs in the Locky… Back in 2009, we applied t… lexsi.com Lexsi @lexsi Prénom Nom Email Société Commentaires

Upload: lamnga

Post on 01-Feb-2018

220 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Tweets - img.sauf.ca · PDF filefffff return out 00000000: 3af6 b4e2 ... e9 ee 3c e5 0f b2 b4 80 af 56 c5 b8 25 af 11 2e ... ($esp+4+4+4+4) 128 0x009255e0: 00 00 00 00 00 00 00 00

∙ ∙

(gdb)hexdump0x9237700x6588090cda46fd2cde1de8e4458918ae46|....F.,....E...F|69643d31443930373645364644383533|id=1D9076E6FD853|414236266163743d6765746b65792661|AB6&act=getkey&a|666669643d33266c616e673d66722663|ffid=3&lang=fr&c|6f72703d3026736572763d30266f733d|orp=0&serv=0&os=|57696e646f77732b58502673703d3226|Windows+XP&sp=2&|7836343d30|x64=0

defencode(buff):buff=md5(buff).digest()+buffout=""key=0xcd43ef19

forindexinrange(len(buff)):ebx=ord(buff[index])ecx=(ror(key,5)-rol(index,0x0d))^ebxout+=chr(ecx&0xff)

edx=(rol(ebx,index&0x1f)+ror(key,1))&0xffffffffecx=(ror(index,0x17)+0x53702f68)&0xffffffffkey=edx^ecx

returnout

defdecode(buff):out=""key=0xaff49754

forindexinrange(len(buff)):eax=(ord(buff[index])-index-rol(key,3))&0xffout+=chr(eax)key+=((ror(eax,0xb)^rol(key,5)^index)+0xb834f2d1)&0xffffffff

returnout

00000000:3af6b4e283b164050758854fb971a80a:.....d..X.O.q..00000010:0602000000a400005253413100080000........RSA1....00000020:010001002160326290cb7be69b94d54a....!`2b..{....J00000030:45e0b6c3f6241ec53f287d06c868ca45E....$..?(}..h.E00000040:c374250f9ed991d33bd2b20fb843f9a3.t%.....;....C..00000050:11505af544784e900af91e8966d29860.PZ.DxN.....f..`00000060:4b60a2891a16c25837545be67ae3a75aK`.....X7T[.z..Z00000070:0be407839f1846e480f78195be65078e......F......e..00000080:de6237932fa6ceadd661e7e42b40c92b.b7./....a..+@.+00000090:23c94ab3c3aab5602258849cb9fcb1a7#.J....`"X......000000a0:b03fd9b1e5ee278cbf75040b5f489501.?....'..u.._H..000000b0:80f60cbf2bb404eba4b57e8d30adf4d4....+.....~.0...000000c0:70baf8fbddae72709103d385359a5a91p.....rp....5.Z.000000d0:4995999636203a12168ef1131753d18bI...6:......S..000000e0:fdac1eed25a1fa5c0d546d9cdcbd9cb7....%..\.Tm.....000000f0:4b8e12288b70be132bfdfacef91a8481K..(.p..+.......00000100:dc33185eb1818b0fccbdf89d67d3afa8.3.^........g...00000110:c68017d8010064384ebaa7b704b1d00f......d8N.......00000120:c4fc94ba....

#defineRSA2048BIT_KEY0x8000000

CryptAcquireContext(&hCryptProv,"LEXSI",NULL,PROV_RSA_FULL,0);CryptGenKey(hCryptProv,AT_KEYEXCHANGE,RSA2048BIT_KEY|CRYPT_EXPORTABLE,&hKey);

//ClépubliqueCryptExportKey(hKey,NULL,PUBLICKEYBLOB,0,NULL,&dwPublicKeyLen);pbPublicKey=(BYTE*)malloc(dwPublicKeyLen);CryptExportKey(hKey,NULL,PUBLICKEYBLOB,0,pbPublicKey,&dwPublicKeyLen);hPublicKeyFile=CreateFile("public.key",GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);WriteFile(hPublicKeyFile,(LPCVOID)pbPublicKey,dwPublicKeyLen,&lpNumberOfBytesWritten,NULL);

//CléprivéeCryptExportKey(hKey,NULL,PRIVATEKEYBLOB,0,NULL,&dwPrivateKeyLen);pbPrivateKey=(BYTE*)malloc(dwPrivateKeyLen);CryptExportKey(hKey,NULL,PRIVATEKEYBLOB,0,pbPrivateKey,&dwPrivateKeyLen);hPrivateKeyFile=CreateFile("private.key",GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);WriteFile(hPrivateKeyFile,(LPCVOID)pbPrivateKey,dwPrivateKeyLen,&lpNumberOfBytesWritten,NULL);

(gdb)hexdump0x009ef8a0169d86d342483a45041acb951c77908f7c

(gdb)hexdump0x009ef7840x1c080200000e660000100000009d86d342483a45041acb951c77908f7c

(gdb)x/w$esp+40x9ef830:0x00000004

(gdb)x/w*(int*)($esp+4+4)0x9ef858:0x00000002

(gdb)hexdump0x9ef8a025664ab20757556aef4af207f3881d7d656|d.uuV....8...V|2289926e30e061d224f0a1d62a207f6c|"..n0.a.$...*.l|e010ccab26623366718d934c04618a9a|....&b3fq..L.a..|86e7f47558ae8a68961fa86915aa2fe7|...uX..h...i../.|8bcdca2eb07be1895f3e65614c0b435e|.....{.._>eaL.C^|603b17480ed20880bd4de2385b51c982|`;.H.....M.8[Q..|26bf948a454082621e8842aa352a3e58|&[email protected]*>X|d27d034dcdd4e63b7d44e95fdc4d1c4b|.}.M...;}D._.M.K|27a9390c74ed469760af3a973f893328|'.9.t.F.`.:.?.3(|bf276757f8c54e037245608803e51198|.'gW..N.rE`.....|6f49af927269dbecb7c7519a05f234e0|oI..ri....Q...4.|17e41b7ec597ff3d425dffa569a458f8|...~...=B]..i.X.|3bbd9f846ea5c7814e0eaa5d40ff0601|;...n...N..]@...|e9ee3ce50fb2b480af56c5b825af112e|..<......V..%...|2282c1f19350b2a47698462edb6c76bb|"....P..v.F..lv.|b51e704441e21531f9027d927ae57317|..pDA..1..}.z.s.|

(gdb)hexdump0x009265980x80000000000000000000000000000000000|................|00000000000000000000000000000001|................|00000000000000000000000000000002|................|00000000000000000000000000000003|................|00000000000000000000000000000004|................|00000000000000000000000000000005|................|00000000000000000000000000000006|................|[...]0000000000000000000000000000007a|...............z|0000000000000000000000000000007b|...............{|0000000000000000000000000000007c|...............||0000000000000000000000000000007d|...............}|0000000000000000000000000000007e|...............~|0000000000000000000000000000007f|................|

0x00926598:fcd3bb90ac1e1e6e76880952667671fc0x009265a8:d5e207fda50c0250d0834e9b951c0b600x009265b8:3fc549e5dfb20556bdceebf60d709f620x009265c8:98f1e8b7e28ed8977fa183142bdb82980x009265d8:5b4a94f7fb6081cdbbc7a23360b1c0c70x009265e8:1cc5c740af7cea4be274b032c2375efa0x009265f8:cf40699b8192b8f177798397321975a6[...]0x009267c8:969a1dbd9b03332fd5e7a7fcacfc09c90x009267d8:f6bdc573ce9ecebcfde4ef6f06dd7d150x009267e8:7d95e618788746ba755e582ef8ba5c140x009267f8:3da9f3d3afef0b3900ae0c322bfd37eb0x00926808:3f3a6811b8d1aee728400a2033318f7e0x00926818:c38f552a5fb531260241d7e384c5799b[...]

(gdb)p/x$edx//fluxdeclé$3=0x90bbd3fc

(gdb)hexdump$edi64//avantXOR2aa11bd46d006f006e00660069006300|*...m.o.n.f.i.c.|68006900650072002e00740078007400|h.i.e.r...t.x.t.|00000000000000000000000000000000|................|00000000000000000000000000000000|................|

(gdb)hexdump$edi64//aprèsXOR1d672a0446d006f006e00660069006300|.r.Dm.o.n.f.i.c.|68006900650072002e00740078007400|h.i.e.r...t.x.t.|00000000000000000000000000000000|................|00000000000000000000000000000000|................|

(gdb)p/x$eax//fluxdeclé$4=0x6e1e1eac

(gdb)hexdump$edi64//aprèsXOR2d672a044c11e716e6e00660069006300|.r.D..qnn.f.i.c.|68006900650072002e00740078007400|h.i.e.r...t.x.t.|00000000000000000000000000000000|................|00000000000000000000000000000000|................|

(gdb)p/x$edx$5=0xbd1d9a96//fluxdecléàl'offset0x230(0x009267c8)

(gdb)hexdump$edi64//avantXOR636563692065737420756e2073656372|ceciestunsecr|65740000000000000000000000000000|et..............|

(gdb)hexdump$edi64//aprèsXOR1f5ff7ed42065737420756e2073656372|..~.estunsecr|65740000000000000000000000000000|et..............|

(gdb)hexdump*(int*)($esp+4+4+4+4)1280x009255e0:000000000000000000000000000000800x009255f0:000000000000000000000000000000810x00925600:00000000000000000000000000000082[...]

(gdb)hexdump*(int*)($esp+4+4+4+4)1280x009255e0:000000000000000000000000000001000x009255f0:000000000000000000000000000001010x00925600:00000000000000000000000000000102[...]

//ImportdelacléprivéeRSAhPrivateKeyFile=CreateFile("private.key",GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_FLAG_SEQUENTIAL_SCAN,NULL);dwPrivateKeyLen=GetFileSize(hPrivateKeyFile,NULL);pbPrivateKey=(BYTE*)malloc(dwPrivateKeyLen);ReadFile(hPrivateKeyFile,pbPrivateKey,dwPrivateKeyLen,&dwPrivateKeyLen,NULL);CryptImportKey(hCryptProv,pbPrivateKey,dwPrivateKeyLen,0,0,&hKey);

//LecturedubufferRSAhEncryptedFile=CreateFile("encrypted.rsa",GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_FLAG_SEQUENTIAL_SCAN,NULL);dwEncryptedDataLen=GetFileSize(hEncryptedFile,NULL);pbEncryptedFile=(BYTE*)malloc(dwEncryptedDataLen);ReadFile(hEncryptedFile,pbEncryptedFile,dwEncryptedDataLen,&dwEncryptedDataLen,NULL);

//DéchiffrementdelacléAESCryptDecrypt(hKey,NULL,TRUE,0,pbEncryptedFile,&dwEncryptedDataLen);hClearFile=CreateFile("aeskey.raw",GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);WriteFile(hClearFile,(LPCVOID)pbEncryptedFile,dwEncryptedDataLen,&lpNumberOfBytesWritten,NULL);

$xxdaeskey.raw9d86d342483a45041acb951c77908f7c

#!/usr/bin/envpython

fromCrypto.CipherimportAES

print"UnLocky-Lockydecryptiontool,CERT-LEXSI2016

key="9d86d342483a45041acb951c77908f7c".decode("hex")

#NB:icipetitsfichiersseulementcounter=""foriinrange(0x80):counter+="\x00"*15+chr(i)

keystream=AES.new(key,AES.MODE_ECB).encrypt(counter)

data=open("1D9076E6FD853AB6C931AFE2B33C3AF9.locky").read()enc_size=len(data)-0x230-0x100-0x14

enc_filename=data[-0x230:]enc_content=data[:enc_size]

clear_filename=""foriinrange(0x230):clear_filename+=chr(ord(enc_filename[i])^ord(keystream[i]))

print"[+]Nomdufichier:"printclear_filename

clear_content=""foriinrange(enc_size):clear_content+=chr(ord(enc_content[i])^ord(keystream[0x230+i]))

print"[+]Contenu:"printclear_content

$./unlocky.pyUnLocky-Lockydecryptiontool,CERT-LEXSI2016

[+]Nomdufichier:monfichier.txt

[+]Contenu:ceciestunsecret

Tweetsby@lexsi

22Mar

22Mar

LexsiRetweeted

Unexcellentbilletpar@lexsisurcommentcréerunvaccincontreLocky:lexsi.com/securityhub/co…#malware#locky#sécurité

#lockyAbusingbugsintheLockyransomwaretocreateavaccinelexsi.com/securityhub/ab…

#lockyCommentcréerunvaccincontreleransomwareLocky?

LéoDepriester@cryptobioz

Commentcréerunvaccin…En2009,nousavionsappli…lexsi.com

Lexsi@lexsi

AbusingbugsintheLocky…Backin2009,weappliedt…lexsi.com

Lexsi@lexsi

Prénom Nom

Email Société

Commentaires

Page 2: Tweets - img.sauf.ca · PDF filefffff return out 00000000: 3af6 b4e2 ... e9 ee 3c e5 0f b2 b4 80 af 56 c5 b8 25 af 11 2e ... ($esp+4+4+4+4) 128 0x009255e0: 00 00 00 00 00 00 00 00