C 获取程序背后的代码
我想制作一个程序,分析C 获取程序背后的代码,c,readfile,C,Readfile,我想制作一个程序,分析.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"); in
.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 _-+=.,<>?!@#$%^&*()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;
}
#包括
#包括
int apare(char a,char s[])//此函数用于搜索字符串中的字符。
{
printf(“合并”);
int nr=斯特伦(s),i;
对于(i=0;i
我把它的扩展名从.exe改为.txt
这并不是真正的文本。编译后的可执行文件是二进制文件。它们可能同时包含一些英语字母表ASCII范围内的可读字符,具体取决于您读取它们时使用的编码。但这只是巧合
您不能仅通过重命名文件将应用程序反编译为其原始代码。如果这是Linux/Unix系统,则很可能会有一个手册页解释可执行文件的布局。例如:
man elf
您的系统还可能有一些工具来对可执行文件进行基本分析,您可能会发现这些工具很有帮助:
man objdump
man readelf
也可能有一个C include文件,可能是#include
,它可能有助于编写程序。但请注意,您已经开始了一项艰巨的任务。如果可执行文件的符号已被删除,则更是如此
下面是一个使用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 401230 <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
...
#objdump-d moai.2014.10.07
moai.2014.10.07:文件格式elf64-x86-64
分解.init节:
0000000000 400E48:
400e48:48 83 ec 08子$0x8,%rsp
400e4c:e8 4b 03 00 00呼叫4011C
400e51:e8 da 03 00 00 callq 401230
400e56:e8 55 51 00 00 callq 405fb0
400e5b:48 83 c4 08添加$0x8,%rsp
400e5f:c3 retq
...
<代码> > ItApARE(char a,char s[])…<代码> >你可以格式化你的代码,这样人类就可以阅读它。也许你可以考虑使用<代码> ISPrint()/<代码>来检查可打印的字符……为什么你要把文件重命名为<代码> TXT < /Cord>?@亚历克斯?“我正试图编出一个程序来找出AXE是什么”。听起来你真正想知道的是:反编译。这不是一件小事,通常甚至不完全可能,也不是按照你的想法实现的。阅读更多信息我问了如何反编译,但我的问题被删除了,我自己尝试了…@Alex:“反编译”这正是您在研究此问题时应该在Google上查找的词。尝试从头开始编写自己的反编译程序是……雄心勃勃。@Alex:反编译是雄心勃勃的。您可能希望搜索反编译。虽然编写反编译程序仍然是一项艰巨的任务,但它没有编写反编译工具那么困难ion。如果你还想尝试反编译,Cifuntes Desmation()是一个很好的起点。@thurizas:谢谢你,伙计!这就是我要找的。一个反汇编程序!我所需要的就是获取代码(如果可能的话,在汇编中)@Alex:很高兴能帮上忙。与其从头开始写,不如看看外面的一些框架。Capstone()或BARF()。周围还有其他人,但我对这些框架都有自己的经验。此外,还有商业反汇编程序,IDA Pro是行业标准。在逆向工程SO网站()上,你可能会遇到更多问题。干杯,T。