Vlákno názorů k článku
Avast otevřel svůj dekompilátor pro analýzu malware od . - Vždycky, když jsem RetDec zkusil, tak jsem byl...

  • Článek je starý, nové názory již nelze přidávat.
  • 14. 12. 2017 12:03

    . (neregistrovaný)

    Vždycky, když jsem RetDec zkusil, tak jsem byl zklamaný výstupem celkem k ničemu a nemožností přispět a vylepšit ho. Pořád je k ničemu, ale už nemám chuť přispívat. Držím palce, ať se toho někdo ujme.

  • 14. 12. 2017 12:55

    mhi (neregistrovaný)

    Reverse engineering v praci pouzivam, tak mne projekt velmi zaujal.

    Je videt snaha prevest kod do citelneho C/Python- zdrojaku, bohuzel ale vysledek neodpovida vstupu, casto je C-kod nesmyslny. Nemusi byt pouzity ani zadne obfuskacni techniky na to, aby vysledek byl jeste mene citelny nez assembler (a hlavne nefunkcni).

    Nesmyslne mi prijde se snazit analyzovat vyznam dlouheho kodu (z nekolika C funkci mi vznikl jeden velky reversnuty C blob ktery byl naprosto necitelny). Naopak, kdyz se funkce omylem rozdeli do vice, neni to na skodu.

    Dale je podle meho nazoru blbost zakryvat puvodni kod, lepsi by mi prislo kdyby to jen oznacilo promenne na stacku + registry a s temi normalne pracovalo ve stylu for (eax=0;eax<10 && intvar55/*esp+55*/ !=0 ; eax++) { ... } a k tomu to klidne michalo inline assembler kdyz neco nejde snadno prelozit.

  • 14. 12. 2017 23:32

    nemo22 (neregistrovaný)

    Tak ono hlavne je dolezite co ma byt vlastne cielom takehoto programu/analyzeru. Vygenerovanie nejakeho funkcneho a skompilovatelneho C kodu je blbost. Z toho vznikne zasa len nieco necitatelne a vo vecsine pripadov prave jeden velky blob.
    Daleko prinosnejsie pre analyzu by bolo keby to generovalo kod s urcitou pravdepodobnostou co by to mohlo byt. Ono aj tak 80-90% veci co sa valaju vo windowse je generovanych bud MS kompilerom, Mingw/GCC a Delphi/Borland. Este kde tu nieco od intelu a osatne kompilery len minimalne. No a da sa docela slusne odhadnut ze co vlastne ten ms kompiler a linker vyplul, minimalne co sa tyka standardnych kniznic a casto pouzivaneho kodu. Otazne je ako moc narocne by bolo vytvorit taky system a aka by musela byt velka znalostna db. Toto by mohla byt mozno uloha pre nejaku AI. Ostatne pozeram ze ten retdec ma nejake patterny pre delphi a celkom velke.
    Docela by ma zaujimalo kde sa v ramci prace pouziva reverse engineering :-) [teda v zmysle viac nez len ze sa pozriem ako vyzera program konkurencie :) ]

  • 15. 12. 2017 0:08

    mhi (neregistrovaný)

    U reverse engineeringu se musim mit moznost spolehnout na to, ze to co vidim dekompilovane odpovida tomu co bezi v pocitaci. Staci jednoduchy fiktivni kod

    dwordvar = 0x55aabbcc;
    dwordvar |= 0xff;

    se treba prelozi jako xor edx,edx; {tuna kodu}; dec edx; {tuna kodu} ; mov dword ptr [esp+n], 0x55aabbcc; or byte ptr [esp+n], dl

    tak a ted' kdyz decompiler zapomene, ze jednou to je dword a jednou byte (dolni byte dwordu) nebo zapomene co je edx (dl), tak je to dost nanic.

    ad reveng: treba kdysi davno jsem zkoumal komunikacni protokol nejakeho mobilu (byly to 90. leta), v protokolu byl zahadny checksum, ktery branil pouziti telefonu jako GSM brany.

  • 15. 12. 2017 11:04

    j (neregistrovaný)

    "Vygenerovanie nejakeho funkcneho a skompilovatelneho C kodu je blbost."
    Fakt? A jak pak teda chces zjisti, co to dela, kdyz ti to vraci kod, kterej neodpovida binarce = neda se spustit.

    Ten kod pochopitelne nebude odpovidat puvodnimu kodu, ale prekompilovatelnej a spustitelnej musi byt zcela vzdy a musi delat presne to, co dela ta binarka. Jinak je to naprosto knicemu.

  • 15. 12. 2017 11:06

    Miroslav Šilhavý

    To nemáte pravdu. Ideální samozřejmě je, když je zpětně zkompilovatelný, ale pro analýzu dostačuje i nedokonalá dekompilace. Analýza kódu - heuristika - stejně není nikdy přesná, vyhodnocení výsledku musí vždy počítat s určitou mírou nejistoty.

  • 15. 12. 2017 15:24

    mhi (neregistrovaný)

    Pokud myslite, ze staci nedokonala dekompilace ve smyslu ze nevadi kdyz se to obcas splete a staci "ze kod vypada na to co zhruba dela", tak se dle meho nazoru hrube mylite.

    Je jedno, ze kod neni kompilovatelny, to ano. A pokud je, tak je asi jedno, pokud nevznikne 100% stejny binarni kod. Ale clovek musi byt schopen po precteni kodu zcela pochopit co program dela i v meznich situacich (tzn. vsechny flow vetve musi byt dekompilovany spravne). Pokud se takova dekompilace nepodari, dekompilator musi takovy stav detekovat a napr. vydumpovat assembler nebo hlasku typu "sorry jako".

    Prekladace bezne generuji ruzne uchylne konstrukce a clovek se pak divi. Hlavne u PowerPC vznikaji prekvapeni typu "je ... to jsem nevedel, ze tuto instrukci lze pouzit i k tomuto ucelu" :).