X

Dekompilacja pliku *.exe na C lub C++

06 Feb 2006 17:20 MAmadziulek
  • #1 06 Feb 2006 17:20
    madziulek
    Level 16  
    Helpful post? (0)
    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!
  • #2 06 Feb 2006 17:23
    arnoldk_20
    Level 35  
    Helpful post? (-1)
    madziulek wrote:
    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 06 Feb 2006 20:45
    madziulek
    Level 16  
    Topic author Helpful post? (0)
    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!!!!
  • #4 06 Feb 2006 20:45
    Platon
    Spec od komputerów
    Helpful post? (+2)
    Nie ma takiego programu, zeby na podstawie zdjecia ciasta zrobil przepis :)
  • #5 06 Feb 2006 20:59
    LtLog
    Level 29  
    Helpful post? (0)
    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 06 Feb 2006 20:59
    madziulek
    Level 16  
    Topic author Helpful post? (0)
    No ale nie rozumiem dlaczego!!!
    Skoro kompilator to kompiluje na exe to dlaczego dekompilator nie moze tego odwrocic spowrotem???
  • #7 06 Feb 2006 21:09
    LtLog
    Level 29  
    Helpful post? (0)
    Ponieważ kompilacja kodu C++ polega na zamianie języka na kod maszynowy.

    Pozdrawiam Lt.
  • #8 06 Feb 2006 21:34
    madziulek
    Level 16  
    Topic author Helpful post? (0)
    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 06 Feb 2006 22:28
    LtLog
    Level 29  
    Helpful post? (0)
    madziulek wrote:
    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 07 Feb 2006 11:03
    madziulek
    Level 16  
    Topic author Helpful post? (0)
    Nie bardzo rozumiem:(???
  • #11 07 Feb 2006 12:02
    LtLog
    Level 29  
    Helpful post? (0)
    Ten sam problem, ten am wynik, a kod różni się od siebie:

    Code:
    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";
    }
    }
    


    Code:
    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 07 Feb 2006 20:48
    madziulek
    Level 16  
    Topic author Helpful post? (0)
    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 07 Feb 2006 20:57
    tzok
    Moderator Samochody
    Helpful post? (0)
    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 07 Feb 2006 21:00
    madziulek
    Level 16  
    Topic author Helpful post? (0)
    tzok wrote:
    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 07 Feb 2006 21:59
    LtLog
    Level 29  
    Helpful post? (0)
    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 07 Feb 2006 22:31
    tzok
    Moderator Samochody
    Helpful post? (0)
    ...i VisualBasic, niekoniecznie .NET (w starszych wersjach też był P-Code).
  • #17 08 Feb 2006 00:24
    jankolo
    VIP Zasłużony dla elektroda
    Helpful post? (0)
    madziulek wrote:
    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 08 Feb 2006 15:45
    madziulek
    Level 16  
    Topic author Helpful post? (0)
    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 08 Feb 2006 16:25
    tzok
    Moderator Samochody
    Helpful post? (0)
    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 08 Feb 2006 16:28
    madziulek
    Level 16  
    Topic author Helpful post? (+1)
    a jesli chodzi o taki program jak haker resurce, mozna w nim cos pozmieniac poza wygladem?
    DZIEKI
  • #21 08 Feb 2006 16:36
    tzok
    Moderator Samochody
    Helpful post? (0)
    Jak już to Resource Hacker (jest też Restorator), nie - on służy tylko do ingerencji w zasoby interfejsu (korzystające Windows).
  • #22 08 Feb 2006 16:37
    arnoldk_20
    Level 35  
    Helpful post? (+1)
    madziulek wrote:
    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 08 Feb 2006 16:50
    madziulek
    Level 16  
    Topic author Helpful post? (0)
    A mozna co nieco pozmieniac odnosnie dzialania programu?
    Sa tam operatory typy "true" i "false"???
  • #24 08 Feb 2006 17:59
    LtLog
    Level 29  
    Helpful post? (0)
    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 08 Feb 2006 18:25
    madziulek
    Level 16  
    Topic author Helpful post? (0)
    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 08 Feb 2006 19:37
    LtLog
    Level 29  
    Helpful post? (0)
    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 08 Feb 2006 20:17
    madziulek
    Level 16  
    Topic author Helpful post? (0)
    chcialbym sie go nauczyc ale najpierw chce miec pewnosc ze jest po co:)?
    Tak wiec???
  • #28 08 Feb 2006 20:24
    tzok
    Moderator Samochody
    Helpful post? (0)
    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 08 Feb 2006 20:40
    madziulek
    Level 16  
    Topic author Helpful post? (0)
    a kto by nie chcial:)))
  • #30 18 Dec 2007 17:41
    już nie 3
    Level 1  
    Helpful post? (0)
    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 .
Mouser  Search 4 million + Products
Browse Products