View Full Version : come?
scusate ragazzi ma se io ho un eseguibile come faccio con il comando gcc a farlo tornare in .c ?
DanieleC88
23-04-2005, 14:21
non puoi
Lo credevo anche io, ma...
http://forum.hwupgrade.it/showthread.php?p=8096302
Lo credevo anche io, ma...
http://forum.hwupgrade.it/showthread.php?p=8096302
l'ho scaricato ...come do il comando? ./boomerang file file.c?
o come?
premetto che non lo so, ma ti faccio presente che aldilà di tutto non riuscirai mai a riottenere il codice C originale... quello è un decompilatore, vale a dire un disassemblatore unito ad una mezza IA che riconosce nel codice assembly determinati patterns e cerca di capire quale può essere stato il codice C che li ha generati; ad esempio se vede un CALL preceduto da alcuni PUSH è chiaro che quella era una chiamata di funzione; se vede un jump condizionato è probabile che fosse un IF o un ciclo, e così via...
inoltre se vede un PUSH all'inizio di una funzione e non è seguito da un CALL potrebbe trattarsi della dichiarazione di una variabile locale, ma il decompilatore non sarà mai in grado di sapere il nome originale della variabile, quindi penso che gli dia dei nomi suoi, e lo stesso dicasi per i nomi di funzioni; se ti va bene che ti venga restituito del codice in questa maniera, allora ok...
DanieleC88
24-04-2005, 08:19
l'ho scaricato ...come do il comando? ./boomerang file file.c?
o come?
Non lo so, ancora non lo provo.
@71104: anche io credo proprio che sia come tu dici, ma ancora devo provare questo Boomerang, forse riuscirà a farmi cambiare idea...
DanieleC88
25-04-2005, 09:56
@71104: anche io credo proprio che sia come tu dici, ma ancora devo provare questo Boomerang, forse riuscirà a farmi cambiare idea...
Ho provato, e confermo tutto quello che hai detto. Inoltre, con programmi semplici semplici se la cava benino, ma con qualcosa anche di poco più complesso... guardate voi stessi:
Codice originale
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
/* code */
int main(int argc, char * argv[])
{
unsigned long long tot_size = 0;
struct dirent ** namelist;
struct stat infos;
char * path;
int x;
argc--;
argv++;
if (argc == 0)
{
fprintf(stderr, "Usage: stat path_to_stat\n");
return EXIT_FAILURE;
}
if ((x = scandir(argv[0], &namelist, 0, alphasort)) < 0)
{
fprintf(stderr, "Cannot scan directory \"%s\".\n", argv[0]);
return EXIT_FAILURE;
}
while (x--)
{
strcpy(path, "");
strcat(path, argv[0]);
if (strcmp((argv[0]+strlen(argv[0])-1),"/"))
{
strcat(path, "/");
}
strcat(path, namelist[x]->d_name);
if (!stat(path, &infos))
{
tot_size += infos.st_size;
}
else
{
fprintf(stderr, "Cannot stat \"%s\".\n", path);
return EXIT_FAILURE;
}
free(namelist[x]);
}
free(namelist);
printf("Total size: %lldb, %lldkb, %lldmb, %lldgb.\n", tot_size, tot_size/1024, tot_size/1024/1024, tot_size/1024/1024/1024);
return EXIT_SUCCESS;
}
Codice convertito
int main(int argc, char** argv, char** envp)
{
int local12; // m[r28{0} - 128]
int local13; // m[r28{0} - 80]
int local19; // r30{259}
int local20; // local4{0}
int local21; // r24
int local22; // r30
int local23; // r31
int local4; // m[r28{0} - 140]
int local5; // m[r28{0} - 136]
local4 = 0;
local5 = 0;
if (argc != 1) {
%pc = %pc - 431;
proc7();
if (*(int*)(argv + 4) < 0) {
L2:
proc1();
L1:
local21 = 1;
} else {
if (*(int*)(argv + 4) - 1 == -1) {
L6:
proc3();
proc2();
local21 = 0;
} else {
local22 = *(int*)(argv + 4) - 1;
do {
local19 = local22;
*(char*)(local23) = 0;
proc5();
%pc = %pc - 953;
proc6();
if (*(char*)(*(int*)(argv + 4) + argv + 4 - 1) != 47) {
L13:
%pc = %pc - 1446;
proc5();
} else {
if (*(char*)(*(int*)(argv + 4) + argv + 4) != 0) {
goto L13;
}
}
proc5();
proc4();
if (*(int*)(local12 + local19 * 4) + 11 != 0) {
goto L2;
}
local4 += local13;
local5 += (local13 < 0 ? -1 : 0) + ((unsigned)local20 < (unsigned)local13);
local22 = local19 - 1;
%pc = %pc - 1659;
proc3();
} while (local19 - 1 != -1);
goto L6;
}
}
} else {
proc8();
goto L1;
}
return local21;
}
Ho provato, e confermo tutto quello che hai detto. Inoltre, con programmi semplici semplici se la cava benino, ma con qualcosa anche di poco più complesso... guardate voi stessi:
Codice originale
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
/* code */
int main(int argc, char * argv[])
{
unsigned long long tot_size = 0;
struct dirent ** namelist;
struct stat infos;
char * path;
int x;
argc--;
argv++;
if (argc == 0)
{
fprintf(stderr, "Usage: stat path_to_stat\n");
return EXIT_FAILURE;
}
if ((x = scandir(argv[0], &namelist, 0, alphasort)) < 0)
{
fprintf(stderr, "Cannot scan directory \"%s\".\n", argv[0]);
return EXIT_FAILURE;
}
while (x--)
{
strcpy(path, "");
strcat(path, argv[0]);
if (strcmp((argv[0]+strlen(argv[0])-1),"/"))
{
strcat(path, "/");
}
strcat(path, namelist[x]->d_name);
if (!stat(path, &infos))
{
tot_size += infos.st_size;
}
else
{
fprintf(stderr, "Cannot stat \"%s\".\n", path);
return EXIT_FAILURE;
}
free(namelist[x]);
}
free(namelist);
printf("Total size: %lldb, %lldkb, %lldmb, %lldgb.\n", tot_size, tot_size/1024, tot_size/1024/1024, tot_size/1024/1024/1024);
return EXIT_SUCCESS;
}
Codice convertito
int main(int argc, char** argv, char** envp)
{
int local12; // m[r28{0} - 128]
int local13; // m[r28{0} - 80]
int local19; // r30{259}
int local20; // local4{0}
int local21; // r24
int local22; // r30
int local23; // r31
int local4; // m[r28{0} - 140]
int local5; // m[r28{0} - 136]
local4 = 0;
local5 = 0;
if (argc != 1) {
%pc = %pc - 431;
proc7();
if (*(int*)(argv + 4) < 0) {
L2:
proc1();
L1:
local21 = 1;
} else {
if (*(int*)(argv + 4) - 1 == -1) {
L6:
proc3();
proc2();
local21 = 0;
} else {
local22 = *(int*)(argv + 4) - 1;
do {
local19 = local22;
*(char*)(local23) = 0;
proc5();
%pc = %pc - 953;
proc6();
if (*(char*)(*(int*)(argv + 4) + argv + 4 - 1) != 47) {
L13:
%pc = %pc - 1446;
proc5();
} else {
if (*(char*)(*(int*)(argv + 4) + argv + 4) != 0) {
goto L13;
}
}
proc5();
proc4();
if (*(int*)(local12 + local19 * 4) + 11 != 0) {
goto L2;
}
local4 += local13;
local5 += (local13 < 0 ? -1 : 0) + ((unsigned)local20 < (unsigned)local13);
local22 = local19 - 1;
%pc = %pc - 1659;
proc3();
} while (local19 - 1 != -1);
goto L6;
}
}
} else {
proc8();
goto L1;
}
return local21;
}
e che comando hai usato? dico la sintassi?
DanieleC88
25-04-2005, 15:43
boomerang -v -o /directory/dell/output /percorso/del/file/eseguibile.exe
boomerang -v -o /directory/dell/output /percorso/del/file/eseguibile.exe
eseguibile .exe?
parlo di un file .c x linux....
mica ha il .exe :confused:
DanieleC88
25-04-2005, 18:17
eseguibile .exe?
parlo di un file .c x linux....
mica ha il .exe :confused:
Era solo per far capire che si tratta di un eseguibile... come sei pignolo! :)
Era solo per far capire che si tratta di un eseguibile... come sei pignolo! :)
:D bene ora provo :D
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.