2016-01-06 66 views
-4

我想製作一個程序來分析.exe文件的命令,並對內容做出一些決定。問題在這裏:我從我的程序文件夾(它也使用C)中的C項目複製了.exe。我改變了它的擴展名從.exe.txt並提出這樣的代碼:在程序後面獲取代碼

#include <stdio.h> 
#include <stdlib.h> 

int apare(char a, char s[]) //this function search a character in a string. 
{ 
    printf("merge"); 
    int nr=strlen(s),i; 
    for(i=0; i<nr; i++) 
    { 
     if(a==s[i]) 
      return 1; 
    } 
    return 0; 
} 

int main() 
{ 
    FILE * f=fopen("program in C.txt","r"); 
    char c,s[10000]="abcedfghijklmnopqrstuvwxyzABCEFGHIJKLMNOPQRSTUVWXYZ _-+=.,<>[email protected]#$%^&*()1234567890{}[];:'";//The characters I want to be printed 
    int a=1,k=0;//k is only used to printf "\n" when 1100 characters have been displayed on a line 
    while(a) 
    { 
     c=fgetc(f);//A char is read 
     if(c!=EOF)//If no error occurs than display the character if it is present in the string. 
     { 
      if(apare(c,s)) 
      { 
       printf("%c",c); 
       k++; 
      } 
     } 
     else if(ferror) //If an error occurs than read the next char 
      c=fgetc(f); 
     else //If EOF than stop reading 
      a=0; 
     if(k==100) 
     { 
      k=0; 
      printf("\n"); 
     } 
    } 
    return 0; 
} 

我的問題是,這個程序顯示「怪」字了。這個程序的作用是隻獲取可讀部分。爲什麼會發生?

+0

@iharob :)看到'INT apare(CHAR一,個char [])...' –

+0

你可以格式化你這樣的代碼,人類可以也讀它。 –

+1

也許你可以考慮使用'isprint()'來檢查可打印的字符... –

回答

1

我從.EXE改變了它的擴展名爲.txt

這並不能使它實際文本。編譯的可執行文件是二進制文件。它的可能他們巧合地包含一些可讀字符在英文字母的ASCII範圍內,這取決於您用來閱讀它們的編碼。但這只是一個巧合。

只是通過重命名文件,您無法將應用程序反編譯爲其原始代碼。

+0

嗯,我問了如何反編譯,但是我的問題被刪除了,並且我自己嘗試了...... – Alex

+2

@Alex:「反編譯」正是您在研究這個時應該在Google上查找的單詞。試圖從頭編寫自己的反編譯器是......雄心勃勃。 – David

+1

@Alex:反編譯是雄心壯志。您可能想要搜索反彙編。雖然編寫反彙編程序仍然是一項艱鉅的任務,但它並不像編寫反編譯工具那麼困難。如果您仍想嘗試反編譯,Cifuentes論文(http://zyloid.com/recomposer/files/decompilation_thesis.pdf)是一個很好的起點。 – thurizas

0

如果這是一個Linux/Unix系統,很可能有一個說明可執行文件佈局的手冊頁。例如:

man elf 

您的系統也可能有一對夫婦的工具做一個可執行文件,你會發現有啓發性的基本分析:

man objdump 
man readelf 

也有可能是C頭文件,也許#include <elf.h>這可能有助於編寫你的程序。但請注意,你已經開始了一項艱鉅的任務。並且如果可執行文件已被刪除了它的符號,更是如此。

下面是使用objdump的拆卸的例子:

# objdump -d moai.2014.10.07 
moai.2014.10.07:  file format elf64-x86-64 


Disassembly of section .init: 

0000000000400e48 <_init>: 
    400e48:  48 83 ec 08    sub $0x8,%rsp 
    400e4c:  e8 4b 03 00 00   callq 40119c <call_gmon_start> 
    400e51:  e8 da 03 00 00   callq 4<frame_dummy> 
    400e56:  e8 55 51 00 00   callq 405fb0 <__do_global_ctors_aux> 
    400e5b:  48 83 c4 08    add $0x8,%rsp 
    400e5f:  c3      retq 
    ... 
相關問題