Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

c++ decompiler


Rekomendowane odpowiedzi

Opublikowano

Witam,widziałem i używałem dekomplikatorów do visualbasic i .net,lecz gdy odpalam przez nie plik .exe pisany w c++ zawiesza się.I pytanie: Istnieje jakiś dekomplikator c++ (w postaci przejrzystego kodu np nwm 

#include <indows.h>

 

int main

{

cout<<"Hello world" <<endl

}

 

"kod" jest przykład,jak chciałbym by kod wyglądał(oczywiście taki kod w c++ miałby 100 problemów xD ale pisane na szybko)

 

 

--

Opublikowano

A ja mówię, że nie. C++ jest kompilowany (nie: komplikowany) do kodu maszynowego. Podczas procesu linkowania tracone są wszystkie nazwy zmiennych, a kompilator dodatkowo optymalizuje kod w taki sposób, że wygląda on zupełnie inaczej niż src.

Pomijam już fakt, że takiego skompilowanego .exeka możesz najwyżej zdisassemblować.

Jeżeli nadal uważasz, że C++ da się zdekompilować, to poproszę o przykład, który nie jest jednolinijkowym "Hello World", gdzie otrzymujesz zdekompilowany kod podobny do src w ~100%.

A co do C4Decompilera, to szkoda gadać, produkuje kod z podobny do src w jakichś 0%.

Skończ proszę się kompromitować. Jesteś nikim.

Opublikowano

Tak jak wyżej nie ma szans chyba że komuś udało się napisać taki program ale na pewno go nie udostępni ponieważ może być dosyć wart a tak ogólnie to po co ci takowy program nie lepiej samemu napisać? wiem że zajmie to 150% więcej czasu ale będziesz wiedział co gdzie a nie ogarniał kod kilka tygodni a nawet miesięcy, podczas pisania własnego programu możesz wiele się nauczyć dlatego warto samemu.

Opublikowano

A ja mówię, że nie. C++ jest kompilowany (nie: komplikowany) do kodu maszynowego. Podczas procesu linkowania tracone są wszystkie nazwy zmiennych, a kompilator dodatkowo optymalizuje kod w taki sposób, że wygląda on zupełnie inaczej niż src.

Pomijam już fakt, że takiego skompilowanego .exeka możesz najwyżej zdisassemblować.

Jeżeli nadal uważasz, że C++ da się zdekompilować, to poproszę o przykład, który nie jest jednolinijkowym "Hello World", gdzie otrzymujesz zdekompilowany kod podobny do src w ~100%.

A co do C4Decompilera, to szkoda gadać, produkuje kod z podobny do src w jakichś 0%.

 

 

Tak jak wyżej nie ma szans chyba że komuś udało się napisać taki program ale na pewno go nie udostępni ponieważ może być dosyć wart a tak ogólnie to po co ci takowy program nie lepiej samemu napisać? wiem że zajmie to 150% więcej czasu ale będziesz wiedział co gdzie a nie ogarniał kod kilka tygodni a nawet miesięcy, podczas pisania własnego programu możesz wiele się nauczyć dlatego warto samemu.

 

 

a o czyms tkaim jak IDA i hex ra$$ slyszeliscie panowie? hex ray$  jest w stanie wygenerowac kod praktycznie identyczny do tego jaki byl w oryginale, oczywiscie bez nazw zmiennych, klas, chyba ze samemu je wyedutyjesz

 

przykladowy kod:

#include <cstdio>

int strlen(const char* buf)
{
    int len = 0;
    while(buf[len]!='\0')
        ++len;
    return len;
}

bool strcmp(const char* left, const char* right)
{
    int il = strlen(left), ir = strlen(right);
    if(il != ir)
        return false;
    for(int i=0;i<il;i++)
        if(left[i]!=right[i])
            return false;
    return true;
}

int main()
{
    bool status = strcmp("elo","lol");
    bool status2 = strcmp("encore","encore");

    printf("%i %i",status,status2);

    return 0;
}
 

hmm, a teraz po dekompilacji, po zmienieniu nazw na bardziej przyjazne

int main()
{
  unsigned __int8 v0; // ST1F_1@
  unsigned __int8 v1; // ST1E_1@

  __main();
  v0 = same("elo", "lol");
  v1 = same("encore", "encore");
  printf("%i %i", v0, v1);
  return 0;
}
signed int __cdecl same(const char *left, const char *right)
{
  signed int result; // eax@
  int il; // [sp+Ch] [bp-8h]@
  int i; // [sp+10h] [bp-4h]@

  il = strlen(left);
  if ( il == strlen(right) )
  {
    for ( i = 0; i < il; ++i )
    {
      if ( left[i] != right[i] )
        return 0;
    }
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}
int __cdecl strlen(const char *buf)
{
  int len; // [sp+Ch] [bp-4h]@

  for ( len = 0; buf[len]; ++len );
  return len;
} 

wniosek? bullshit, kod jest w 90% jesli nie wiecej zgodny z oryginalem, jesli nie jest zgodny, to przez optymalizacje, ale i tak bedzie robic to samo, tylko w skroconej wersji

 

jfprJi6.png

­

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...