Supporter - Nibble Euler Neto Posted October 3, 2018 at 02:40 AM Supporter - Nibble Share Posted October 3, 2018 at 02:40 AM Link: https://www.malwaretech.com/ransomware1 Alguém conseguiu resolver o desafio? Estou me batendo no assembly e não estou conseguindo decriptar a flag. A flag encriptada é essa: 00000000 28 bb da 49 3e 0d 11 c7 bb b3 ea 3e c5 e7 23 0b |(..I>......>..#.| 00000010 73 ba f0 55 c0 85 17 c1 e0 9d d9 69 e0 5e 6d 4e |s..U.......i.^mN| 00000020 20 b3 b6 48 17 10 0f c0 d3 b0 e8 2c ad f5 40 01 | ..H.......,..@.| 00000030 71 ac f4 52 be f8 1e c1 fa 8a f0 |q..R.......| 0000003b Pelo meu ponto de vista, os dois primeiros loops da função que criptografa ficaram assim: mov [ebp+var_111C], 0 ... mov eax, [ebp+var_111C] ; eax = 0 xor edx, edx ; edx = 0 mov ecx, 20h ; ecx = 20h div ecx ; eax = eax/ecx = 0/20h = 0, edx = eax%ecx = 0%20h = 0 mov eax, [ebp+arg_4] ; eax = 0 movzx ecx, byte ptr [eax+edx] ; ecx = eax+edx = 0+0 = 0 mov edx, [ebp+var_111C] ; edx = 0 movzx eax, [ebp+edx+Buffer] ; eax = Buffer[edx] = Buffer[0] = 28h xor eax, ecx ; eax = 28h xor 0 = 28h mov ecx, [ebp+var_111C] ; ecx = 0 mov [ebp+ecx+Buffer], al ; Buffer[ecx] = Buffer[0] = 28 (8 primeiros bits) ... mov ecx, [ebp+var_111C] add ecx, 1 mov [ebp+var_111C], ecx ; [ebp+var_111C]++ mov [ebp+var_111C], 1 ... mov eax, [ebp+var_111C] ; eax = 1 xor edx, edx ; edx = 0 mov ecx, 20h ; ecx = 20h div ecx ; eax = eax/ecx = 1/20h = 0, edx = eax%ecx = 1%20h = 1 mov eax, [ebp+arg_4] ; eax = 0 movzx ecx, byte ptr [eax+edx] ; ecx = eax+edx = 0+1 = 0 mov edx, [ebp+var_111C] ; edx = 1 movzx eax, [ebp+edx+Buffer] ; eax = Buffer[edx] = Buffer[1] = BBh xor eax, ecx ; eax = BBh xor 1 = BAh mov ecx, [ebp+var_111C] ; ecx = 1 mov [ebp+ecx+Buffer], al ; Buffer[ecx] = Buffer[1] = BAh (8 primeiros bits) ... mov ecx, [ebp+var_111C] add ecx, 1 mov [ebp+var_111C], ecx ; [ebp+var_111C]++ Link to comment Share on other sites More sharing options...
Prog Posted October 3, 2018 at 04:06 PM Share Posted October 3, 2018 at 04:06 PM void DecryptTR( BYTE * baData, BYTE * baListKey, DWORD dwSize ) { DWORD dwLoop= 0; while ( dwLoop < dwSize ) { baData[dwLoop] ^= baListKey[dwLoop % 32]; dwLoop++; } } baixei o arquivo e refiz a função em c.. nessa parte: mov eax, [ebp+arg_4] ; eax = 0 eax deve receber um array ( BYTE * baListKey ) ao qual não está recebendo ( push 0 = null ), igualmente para o nome do arquivo que tbm não é recebido... nesse array deve conter 32 bytes ( MOV ECX, 0x20, DIV ECX... ) então abri o txt U HAVE BEEN HACKED... e encontrei esse email: xxxEdgeLord1337xxx@420blazeit.bit tem 33 caracteres nele... eu tentaria isso ? #Edit 03/10/2018 - 13:55: Decidi ir de uma ideologia diferente, peguei as imagens de exemplo, e lembrei de algo: mencionaram que o user usava o Windows 7... pensei nas imagens padrão do win7, que ficam na pasta imagens.... Chrysanthemum.jpg_encrypted, e pesquisei na internet a imagem, então encontrei a mesma imagem sem criptografia, peguei os 32 bytes iniciais de ambas ( encriptada e desencriptada ), e fiz o XOR para pegar a key list. e voilà! consegui encontrar os bytes, desencriptei o arquivo flag.txt.... Aqui o código em cpp + flag (SENHA: mentebinaria): https://ghostbin.com/paste/taag5z4o (obs: faltou um delete dos bytes, mas enfim haahshassahahshsa ) Aqui os arquivos de imagens decriptados(2): https://puu.sh/BF7mz/2ae0e3362f.rar mensagem do desafio: https://puu.sh/BF7v9/bdd9a7bab2.png Link to comment Share on other sites More sharing options...
Supporter - Nibble Euler Neto Posted October 5, 2018 at 12:15 AM Author Supporter - Nibble Share Posted October 5, 2018 at 12:15 AM Boa! Realmente não tinha dado atenção às imagens, foquei só na flag encriptada. Foi bem como descreveram o desafio: "é simples mas tem que pensar fora da caixa". Valeu mesmo pelas informações! Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.