logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak zdekompilować plik .exe do czytelnego kodu C/C++? Narzędzia i skuteczność

madziulek 06 Lut 2006 17:20 46133 30
REKLAMA
  • #1 2267939
    madziulek
    Poziom 16  
    Posty: 234
    Pomógł: 1
    Ocena: 13
    Witam!
    Wydaje mi sie ze mam dosyc fajny temat!
    Otoz chodzi o dekompilacje plikow wykonywalnych exe na C lub C++???
    Wiem ze to dosc szeroki temat, ale prosze o jakies spostrzerzenia odnosnie jakichs fajnych programow i czy wogole mozna przekompilowac w jakis znosny sposob taki plik zeby mozna bylo cos z niego zrozumiec i pobawic sie w kodzie zrodlowym:)?
    Czekam na wszelkie spostrzerzenia i podpowedzi!!!
    POZDRAWIAM WSZYSTKIM DOLACZAJACYCH SIE DO TEMATU!
  • REKLAMA
  • #2 2267955
    arnoldk_20
    Poziom 35  
    Posty: 2172
    Pomógł: 290
    Ocena: 114
    madziulek napisał:
    Witam!
    Wydaje mi sie ze mam dosyc fajny temat!
    Otoz chodzi o dekompilacje plikow wykonywalnych exe na C lub C++???
    Wiem ze to dosc szeroki temat, ale prosze o jakies spostrzerzenia odnosnie jakichs fajnych programow i czy wogole mozna przekompilowac w jakis znosny sposob taki plik zeby mozna bylo cos z niego zrozumiec i pobawic sie w kodzie zrodlowym:)?
    Czekam na wszelkie spostrzerzenia i podpowedzi!!!
    POZDRAWIAM WSZYSTKIM DOLACZAJACYCH SIE DO TEMATU!

    Do C i C++ nie da się ale można do kodów asemblera różnymi disasseblerami
  • #3 2268038
    madziulek
    Poziom 16  
    Posty: 234
    Pomógł: 1
    Ocena: 13
    A czym mozna do assemblera?
    A z assemblera nie mozna na C?
    Znalazlem programy do zmiany duperelstw w tych plikach, ale mi chodzi zeby mozna bylo pogrzebac w kodzie zrodlowym???

    Dodano po 3 [godziny] 3 [minuty]:

    Czy juz nikt sie nie wypowie na ten temat!!!!
  • REKLAMA
  • #4 2268886
    Platon
    Poziom 42  
    Posty: 9185
    Pomógł: 744
    Ocena: 169
    Nie ma takiego programu, zeby na podstawie zdjecia ciasta zrobil przepis :)
  • REKLAMA
  • #5 2268956
    LtLog
    Poziom 30  
    Posty: 992
    Pomógł: 165
    Ocena: 39
    Anakrino
    Salamander

    Nie są to dokładnie dekompilatory c++ działają w sposób opisany po części przez kolegę arnoldk_20, najpierw disassembling następnie na podstawie otrzymanych danych same układają kod. Należy jedynie pamiętać że kod jest zbiliżony w funkcjonalności lecz z całą pewnością rózni się od wyjściowego.

    Pozdrawiam Lt.
  • #6 2268957
    madziulek
    Poziom 16  
    Posty: 234
    Pomógł: 1
    Ocena: 13
    No ale nie rozumiem dlaczego!!!
    Skoro kompilator to kompiluje na exe to dlaczego dekompilator nie moze tego odwrocic spowrotem???
  • #7 2269003
    LtLog
    Poziom 30  
    Posty: 992
    Pomógł: 165
    Ocena: 39
    Ponieważ kompilacja kodu C++ polega na zamianie języka na kod maszynowy.

    Pozdrawiam Lt.
  • REKLAMA
  • #8 2269093
    madziulek
    Poziom 16  
    Posty: 234
    Pomógł: 1
    Ocena: 13
    No dobrze ale kod maszynowy to zbior '0''1' wiec jesli mozna cos zamienic na 01 to czemu pozniej nie mozna tego zamienic spowrotem na literki:)?

    Dodano po 7 [minuty]:

    A jak jest z disassemblerami???
    Czy zna ktos jakis lepszy?
  • #9 2269443
    LtLog
    Poziom 30  
    Posty: 992
    Pomógł: 165
    Ocena: 39
    madziulek napisał:
    No dobrze ale kod maszynowy to zbior '0''1' wiec jesli mozna cos zamienic na 01 to czemu pozniej nie mozna tego zamienic spowrotem na literki:)?


    Bo ten sam problem można przedstawić w różnoraki sposób; korzystając z tego samego języka i otrzymując te same wyniki.

    Pozdrawiam Lt.
  • #10 2270730
    madziulek
    Poziom 16  
    Posty: 234
    Pomógł: 1
    Ocena: 13
    Nie bardzo rozumiem:(???
  • #11 2270945
    LtLog
    Poziom 30  
    Posty: 992
    Pomógł: 165
    Ocena: 39
    Ten sam problem, ten am wynik, a kod różni się od siebie:

    
    class InitializerDemo 
    {
    int[] field = {0, 1, 2, 3, 4, 5, 6};
    char[,] chars = {
    {'A', 'B', 'C'},
    {'D', 'E', 'F'},
    };
    InitializerDemo()
    {
    int[] field = new int[]{0, 1, 2, 3, 4, 5, 6};
    string[,] strArray = {{"John", "Doe"}, {"1", "2"}};		
    field[1] = 1 + field[1];		
    strArray[0,2] = "OK";
    }
    }
    


    
    using System;
    using System.Runtime.CompilerServices;
    class InitializerDemo
    {
    private int[] field = new int[]{0, 1, 2, 3, 4, 5, 6};
    private char[,] chars = new char[,]{
    {'A', 'B', 'C'}, 
    {'D', 'E', 'F'}, 
    };
    private InitializerDemo()
    {
    int[] nums = new int[]{0, 1, 2, 3, 4, 5, 6};
    string[,] strs2 = new string[2, 2];
    strs2.Set(0, 0, "John");
    strs2.Set(0, 1, "Doe");
    strs2.Set(1, 0, "1");
    strs2.Set(1, 1, "2");
    string[,] strs1 = strs2;
    nums[1]++;
    strs1.Set(0, 2, "OK");
    }
    }
    


    A dekompilatro nie może sprawdzić dokładnie jak wyglądał kod w języku ponieważ musiał by sprawdzać każdą możliwą nazę funkcji, klas itp tak aby przy tym samym wyniku i tym samym problemie uzyskać identyczny kod maszynowy. Dekompilacja prostego kilkudzisięcio liniowego programu trwała by wtedy wieki. Dlatego też dekompilatroy nie istnieją, istnieją tylko automaty które na podstawie kodu maszynowego przeprowadzaja disassemblig, a następnie składają kod wg własnego uznania w taki sposób aby wynik końcowy był identyczny choć to nie zawsze się sprawdza.

    Pozdrawiam Lt.
  • #12 2273177
    madziulek
    Poziom 16  
    Posty: 234
    Pomógł: 1
    Ocena: 13
    w sumie to i racja, niestety:(
    A znasz moze jakis dobry disassembler z ktorym by mozna sie pobawic i oczywiscie zkompilowac to pozniej do exe?
    Pozdrawiam
  • #13 2273234
    tzok
    VIP Zasłużony dla elektroda
    Posty: 38711
    Pomógł: 3166
    Ocena: 6471
    Częściowo skutecznie można dekompilować programy napisane w VisualStudio (zwłaszcza .NET ale nie tylko), ponieważ one nie są kompilowane do kodu maszynowego a do kodu pośredniego, wykonywanego w środowisku uruchomieniowym.
  • #14 2273250
    madziulek
    Poziom 16  
    Posty: 234
    Pomógł: 1
    Ocena: 13
    tzok napisał:
    Częściowo skutecznie można dekompilować programy napisane w VisualStudio (zwłaszcza .NET ale nie tylko), ponieważ one nie są kompilowane do kodu maszynowego a do kodu pośredniego, wykonywanego w środowisku uruchomieniowym.



    VisualStudio? nie bardzo wiem o jakie programy chodzi, jakie one maja rozszerzenie?
  • #15 2273606
    LtLog
    Poziom 30  
    Posty: 992
    Pomógł: 165
    Ocena: 39
    Koledze tzok chodzi ogólnie o technologię .NET. Aplikację wymagające dodatkowego wsparcia programowego w postaci Framework i jemu podobnych. Kod wtedy przetwarzany jest do tzw bytecode dlatego ich interpretacja jest łatwiejsza z punku widzenia dekompilatora. Do tych języków zaliczyć będzie mozna C#, Jave, Perla, Smalltalk.

    Pozdrawiam Lt.
  • #16 2273820
    tzok
    VIP Zasłużony dla elektroda
    Posty: 38711
    Pomógł: 3166
    Ocena: 6471
    ...i VisualBasic, niekoniecznie .NET (w starszych wersjach też był P-Code).
  • #17 2274329
    jankolo
    Spoczywaj w Pokoju
    Posty: 32197
    Pomógł: 1792
    Ocena: 584
    madziulek napisał:
    ale mi chodzi zeby mozna bylo pogrzebac w kodzie zrodlowym

    Z całego toku dyskusji wynika, że kolega nie ma bladego pojęcia o podstawach programowania komputerów, o programowaniu w C++ i Assemblerze już nie wspominając. Niech kolega da sobie spokój z "grzebaniem" w kodzie źródłowym (niezależnie od tego co to dla kolegi oznacza).
  • #18 2276322
    madziulek
    Poziom 16  
    Posty: 234
    Pomógł: 1
    Ocena: 13
    Jesli chodzi o assembler to przyznam sie ze go nie znam, ale za to znam C i C++ i to bardzo dobrze:/
    a jesli chodzi o "grzebanie" w kodzie zrodlowym to mysle ze wszyscy wiedza o co chodzi, a w tym temacie chce przede wszystkim sie dowiedziec czy jest taka mozliwosc w pliku wykonalnym???
  • #19 2276504
    tzok
    VIP Zasłużony dla elektroda
    Posty: 38711
    Pomógł: 3166
    Ocena: 6471
    Otrzymałeś więc odpowiedź, że w dużej mierze zależy to od tego w jakim środowisku został skompilowany program/biblioteka.
    Jeśli kod był skompilowany do języka maszynowego to taka operacja jest nieodwracalna, bowiem program w postaci maszynowej jest liniowy, nie ma klas, obiektów a nawet procedur ani zmiennych, są tylko adresy, dane i kody operacji. Nie ma więc możliwości odtworzenia struktury programu, bo nie da się odtworzyć nawet nazw zmiennych.
    Taki np. Delphi różnie traktuje funkcje (można mieć na to wpływ) - albo umieszcza kod funkcji w miejscu wywołania albo tworzy procedurę (podprogram) do której "skacze".
    Wywołania API WIndowsa pozostaną czytelne ale pozostała część kodu - nie.

    Natomiast programy napisane w VisualBasicu, nie są "do końca" kompilowane, podobnie jak programy pisane w VisualStudio (Visual C++, Visual C# i t.d.) i one dają się zdekompilować do w miarę czytelnej postaci.
  • #20 2276518
    madziulek
    Poziom 16  
    Posty: 234
    Pomógł: 1
    Ocena: 13
    a jesli chodzi o taki program jak haker resurce, mozna w nim cos pozmieniac poza wygladem?
    DZIEKI
  • #21 2276555
    tzok
    VIP Zasłużony dla elektroda
    Posty: 38711
    Pomógł: 3166
    Ocena: 6471
    Jak już to Resource Hacker (jest też Restorator), nie - on służy tylko do ingerencji w zasoby interfejsu (korzystające Windows).
  • #22 2276562
    arnoldk_20
    Poziom 35  
    Posty: 2172
    Pomógł: 290
    Ocena: 114
    madziulek napisał:
    a jesli chodzi o taki program jak haker resurce, mozna w nim cos pozmieniac poza wygladem?
    DZIEKI

    Jeszcze teksty komikatów można zmienić.
    Ale ten program przerabia nieskompresowane pliki exe (windosowe) i exepodobnych (*.dll *.ocx itp)
    W niektórych przerobionych plikach mogą pojawić się problemy.
    Ale dodatkowych funkcji programowni nie dodasz.
  • #23 2276611
    madziulek
    Poziom 16  
    Posty: 234
    Pomógł: 1
    Ocena: 13
    A mozna co nieco pozmieniac odnosnie dzialania programu?
    Sa tam operatory typy "true" i "false"???
  • #24 2276920
    LtLog
    Poziom 30  
    Posty: 992
    Pomógł: 165
    Ocena: 39
    Czasami są, a czasami nie ma, jak znam życie są do znaczniki dostępności funkcji menu ale na chybił trafił to łatwiej już będzie w totka wygrać niż powiedzieć Ci do czego w tym przypadku służą i co możesz osiągnąć przez ich zmianę; nikt z tu zebranych nie powie Ci jakie zmiany jesteś wstanie wprowadzić w niewiadomej aplikacji, kompilowanej i kompresowanej w niezany nikomu tu sposób. Sprawdź to się przekonasz co jesteś w stanie zrobić.

    Pozdrawiam Lt.
  • #25 2276964
    madziulek
    Poziom 16  
    Posty: 234
    Pomógł: 1
    Ocena: 13
    no wlasnie chodzi o to ze jesli chodzi o tekst to mozna pozmieniac ale jesli zmienilem cos innego to albo wywalalo blad albo nic sie nie zmienialo:(

    Dodano po 16 [minuty]:

    a jak jest z disassemblerami???
  • #26 2277417
    LtLog
    Poziom 30  
    Posty: 992
    Pomógł: 165
    Ocena: 39
    Piszesz że znasz sie na programowaniu, więc widzać zarówno kod jak i rozkład aplikacji powinieneś umieć ocenić które parametry wolno Ci zmienić i jakie poniesie to za sobą konsekwencje.

    Pytasz ciagle o dissasembling więc wkońcu odpowiem, jak pisałeś nie znasz wogólne asemblera więc po co Ci kod w tym języku jeżeli nie będziesz w stanie dokonać rzadnej zaplanowanej zmiany w jego wnętrzu?

    Pozdrawiam Lt.
  • #27 2277645
    madziulek
    Poziom 16  
    Posty: 234
    Pomógł: 1
    Ocena: 13
    chcialbym sie go nauczyc ale najpierw chce miec pewnosc ze jest po co:)?
    Tak wiec???
  • #28 2277675
    tzok
    VIP Zasłużony dla elektroda
    Posty: 38711
    Pomógł: 3166
    Ocena: 6471
    W zasadzie nie ma po co, chyba, że chcesz się zajmować pisaniem c r a c k ó w i keygenów, wtedy bez dobrej znajomości assemblera ani rusz.
  • #29 2277764
    madziulek
    Poziom 16  
    Posty: 234
    Pomógł: 1
    Ocena: 13
    a kto by nie chcial:)))
  • #30 4600995
    już nie 3
    Poziom 1  
    Posty: 1
    Lepiej powiedzcie jak się zabrać do tworzenia nowych , prostych systemów operacyjnych , tak by pominąć "pana microsofta" .:|Jest wtedy szansa na grzebanie w kodzie żródłowym .

Podsumowanie tematu

✨ Dyskusja dotyczy możliwości dekompilacji plików wykonywalnych (.exe) do czytelnego kodu C/C++. Uczestnicy wyjaśniają, że bezpośrednia dekompilacja do C/C++ jest praktycznie niemożliwa, ponieważ kompilacja zamienia kod źródłowy na kod maszynowy, który jest liniowy i pozbawiony struktury, nazw zmiennych czy funkcji. Możliwe jest natomiast disassembling, czyli zamiana pliku na kod asemblera za pomocą disassemblerów, jednak kod ten jest trudny do interpretacji i modyfikacji bez znajomości asemblera. Wskazano programy takie jak Anakrino i Salamander, które częściowo automatyzują proces, ale generowany kod różni się od oryginalnego.

Dyskutowano także o specyfice programów kompilowanych w środowisku .NET (np. Visual Studio), które zamiast kodu maszynowego generują kod pośredni (bytecode), co umożliwia skuteczniejszą dekompilację do czytelnego kodu źródłowego (np. C#, Visual Basic). Wspomniano, że narzędzia takie jak Resource Hacker służą jedynie do modyfikacji zasobów interfejsu (np. tekstów, ikon) i nie pozwalają na zmianę logiki programu.

Podkreślono, że nauka asemblera ma sens głównie dla osób zainteresowanych inżynierią wsteczną, tworzeniem cracków lub keygenów. Na koniec pojawiła się sugestia, że alternatywą do "grzebania" w istniejących programach jest tworzenie własnych systemów operacyjnych, co daje pełną kontrolę nad kodem źródłowym.
Wygenerowane przez model językowy.
REKLAMA