Discussione x64dbg reverse prime impressioni

Cruise

Utente Emerald
20 Marzo 2016
665
165
56
419
Sto esercitandomi un po per curiosità, nel reverse lato software.
Nei tutorial spesso parlano di JMP utili nel saltare i blocchi cruciali dove si chiede il seriale del prodotto.
Sono noob a riguardo, ma quando esce fuori l'errore dal programma, in x64dbg dopo la ricerca in tutte le stringhe molto spesso non vi e traccia della stringa in finestra?
Perchè?
 
Sto esercitandomi un po per curiosità, nel reverse lato software.
Nei tutorial spesso parlano di JMP utili nel saltare i blocchi cruciali dove si chiede il seriale del prodotto.
Sono noob a riguardo, ma quando esce fuori l'errore dal programma, in x64dbg dopo la ricerca in tutte le stringhe molto spesso non vi e traccia della stringa in finestra?
Perchè?
Probabilmente perché la stringa non è in chiaro ma è nascosta in qualche modo.
Per farti un esempio, può esserci una funzione che legge in memoria il byte iniziale della stringa (offuscata / cifrata) e lo converte in un carattere prima di stampare la stringa. Così facendo se la cerchi nell'exe non la trovi.
 
Se hai notato la cosa su un crackme condividilo, su un software commerciale la cosa è più delicata...

Comunque non so cosa non ti è chiaro del mio intervento sopra.
Quindi ti faccio una domanda prima di tutto il resto: hai basi di programmazione (C magari, oltre che asm) e conosci un minimo le api del sistema operativo in questione?
 
E ciò che mi chiedevo, sui video e tutorial e tutto facile ma poi..... No se vuoi spiegarmi....
Ma la spiegazione, di cosa? Non ho capito se ti riferisci alle domande che ti ho fatto sopra o meno lol

Un esempio facile; un codice che trovai in un crackme:

Codice:
004013A0 | 55                        | push ebp                                                                  |
004013A1 | 8BEC                      | mov ebp,esp                                                               |
004013A3 | 51                        | push ecx                                                                  |
004013A4 | C745 FC 00000000          | mov dword ptr ss:[ebp-4],0                                                |
004013AB | EB 09                     | jmp crackme.4013B6                                                        |
004013AD | 8B45 FC                   | mov eax,dword ptr ss:[ebp-4]                                              |
004013B0 | 83C0 01                   | add eax,1                                                                 |
004013B3 | 8945 FC                   | mov dword ptr ss:[ebp-4],eax                                              |
004013B6 | 8B4D FC                   | mov ecx,dword ptr ss:[ebp-4]                                              |
004013B9 | 3B4D 0C                   | cmp ecx,dword ptr ss:[ebp+C]                                              | [ebp+C]:&"D:\\DispatchCode\\crackme.exe"
004013BC | 73 26                     | jae crackme.4013E4                                                        |
004013BE | 8B55 08                   | mov edx,dword ptr ss:[ebp+8]                                              |
004013C1 | 0355 FC                   | add edx,dword ptr ss:[ebp-4]                                              |
004013C4 | 0FBE02                    | movsx eax,byte ptr ds:[edx]                                               |
004013C7 | 0FB64D 10                 | movzx ecx,byte ptr ss:[ebp+10]                                            |
004013CB | 33C1                      | xor eax,ecx                                                               |
004013CD | 8B55 08                   | mov edx,dword ptr ss:[ebp+8]                                              |
004013D0 | 0355 FC                   | add edx,dword ptr ss:[ebp-4]                                              |
004013D3 | 8802                      | mov byte ptr ds:[edx],al                                                  |
004013D5 | 0FB645 14                 | movzx eax,byte ptr ss:[ebp+14]                                            |
004013D9 | 0FB64D 10                 | movzx ecx,byte ptr ss:[ebp+10]                                            |
004013DD | 03C8                      | add ecx,eax                                                               |
004013DF | 884D 10                   | mov byte ptr ss:[ebp+10],cl                                               |
004013E2 | EB C9                     | jmp crackme.4013AD                                                        |
004013E4 | 8BE5                      | mov esp,ebp                                                               |
004013E6 | 5D                        | pop ebp                                                                   |
004013E7 | C2 1000                   | ret 10                                                                    |

Questa funzione veniva usata per decifrare la stringa prima di stamparla a schermo.
Ricostruendolo in C (l'avevo fatto a mano, senza Ghidra o IDA Pro), è qualcosa come:

C:
void str_decrypt(char *str, int len, uint32_t arg3, uint32_t arg4)
{
    for(int i=0; i<len; i++)
    {
        int8_t eax  = ((int8_t)str[i]);
        uint8_t ecx = ((uint8_t)arg3);
        eax ^= ecx;
        
        str[i] = eax;
        
        arg3 = ((uint8_t) arg3) + ((uint8_t) arg4);    
    }
}
 
ammazza che str****, dentro il ciclo for che cammuffano, approfondirò la questione, crack.me la trovi una buona palestra per cracare piccoli shareware? Mi accontento non vorrò di certo provarci con il Cad, ahahha, grazie Dis....