比对文exe件16进制代码问题!高手帮忙啊 我写完了一个搜索本地目录的函数,其中想调用一个函数实现:在搜索到某个文件时比对该文件在十六进制下00023551h偏移处 特征码为是否为43 6F 64 65 20 53 69 67 6E 69 6E 67 20 50 43,怎么vc实现?希望写出具体代码、小弟菜鸟感激不尽。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 大概过程是这样了#define car "\x43\x6F\x64\x65\x20\x53\x69\x67\x6E\x69\x6E\x67\x20\x50\x43" char buf[32] = {0}; FILE* fp = fopen("d:\\1.exe", "rb"); fseek(fp, 0x23551, SEEK_SET); fread(buf, sizeof(car), 1, fp); if (strcmp(buf, car) ==0 ) { } #define中为什么用\x, 难介绍下作用么? 这个码没有考虑0串截断.opcode中有很多0串#define car "\x0\x6F\x64\x65\x20\x53\x69\x67\x6E\x69\x6E\x67\x20\x50\x43"const char str[] = car;if(RtlCompareMemory(......, sizeof(str) - 1) == sizeof(str) - 1){ // 相等} \x是为了便于这样书写.#define car "\x43\x6F\x64\x65\x20\x53\x69\x67\x6E\x69\x6E\x67\x20\x50\x43"否则char str[] = {43, 0x6F, 64, .....}; 麻烦多了. void main(){ char *scr="Code Signing PC"; //指定特征码 char obj[15]; //文件特征码 FILE *fp; //定义文件指针 fp=fopen("d:\\a.dat","rb"); //打开文件 if(NULL==fp) { printf("文件不存在或打开异常"); return; } fseek(fp,0x00023551,0); //指针移动到23551H处 fread(obj,15,1,fp); //读取文件特征码 if(memcmp(scr,obj,15)) //和指定的特征码进行比较 printf("这个文件不符合要求!\n"); else printf("这个文件就是你想要的啊!\n");} 补充:43 6F 64 65 20 53 69 67 6E 69 6E 67 20 50 43就是Code Signing PC你可以写为:注意空格,三个词条之间共有两空格char *scr="Code Signing PC";也可以写为:char scr[15]={0x43,0x6F,0x64,0x65,0x20,0x53,0x69,0x67,0x6E,0x69,0x6E,0x67,0x20,0x50,0x43}; 先取得文件的长度,判断一下void main(){ char *scr="Code Signing PC"; //指定特征码 char obj[15]; //文件特征码 lont len; //文件长度 FILE *fp; //定义文件指针 fp=fopen("d:\\a.dat","rb"); //打开文件 if(NULL==fp) { printf("文件不存在或打开异常"); return; } fseek(fp,0,2); //注意这句一定要 len=ftell(fp); //取得文件长度 if(len<0x23551+15) //文件太小 { printf("这个文件不符合要求!\n"); return; } fseek(fp,0x00023551,0); //指针移动到23551H处 fread(obj,15,1,fp); //读取文件特征码 if(memcmp(scr,obj,15)) //和指定的特征码进行比较 printf("这个文件不符合要求!\n"); else printf("这个文件就是你想要的啊!\n");} fp=fopen("d:\\a.dat","rb");d:\a.dat是文件所在地如果你的文件在其他地方,要改一下C:\要用C:\\表示C:\AA\b.txt要用C:\\AA\\b.txt 表示 QQ可用的最低版本是哪个,哪里下载? cannot access protected member declared in class 'CClientInfoListView' 有知道杭州世导的吗?里面工作情况如何,不甚感激 问一个很头疼的问题??? 装完VC后,无法正常编译, 怎样获取当前鼠标的位置? 关于用RAW SOCKET发送TCP报文段的问题:用Send 还是Sendto? 一个菜鸟问题 怎么调出本地连接属性对话框? 如何在非模态对话框中弹出另一个子非模态对话框?如何做 网络广播的问题 如何得到hid设备的report id
char buf[32] = {0}; FILE* fp = fopen("d:\\1.exe", "rb");
fseek(fp, 0x23551, SEEK_SET);
fread(buf, sizeof(car), 1, fp);
if (strcmp(buf, car) ==0 )
{
}
#define中为什么用\x, 难介绍下作用么?
这个码没有考虑0串截断.
opcode中有很多0串#define car "\x0\x6F\x64\x65\x20\x53\x69\x67\x6E\x69\x6E\x67\x20\x50\x43"const char str[] = car;
if(RtlCompareMemory(......, sizeof(str) - 1) == sizeof(str) - 1)
{
// 相等
}
#define car "\x43\x6F\x64\x65\x20\x53\x69\x67\x6E\x69\x6E\x67\x20\x50\x43"
否则char str[] = {43, 0x6F, 64, .....}; 麻烦多了.
{
char *scr="Code Signing PC"; //指定特征码
char obj[15]; //文件特征码
FILE *fp; //定义文件指针
fp=fopen("d:\\a.dat","rb"); //打开文件
if(NULL==fp)
{
printf("文件不存在或打开异常");
return;
}
fseek(fp,0x00023551,0); //指针移动到23551H处
fread(obj,15,1,fp); //读取文件特征码
if(memcmp(scr,obj,15)) //和指定的特征码进行比较
printf("这个文件不符合要求!\n");
else
printf("这个文件就是你想要的啊!\n");
}
43 6F 64 65 20 53 69 67 6E 69 6E 67 20 50 43
就是
Code Signing PC你可以写为:注意空格,三个词条之间共有两空格
char *scr="Code Signing PC";
也可以写为:
char scr[15]={0x43,0x6F,0x64,0x65,0x20,0x53,0x69,0x67,0x6E,0x69,0x6E,0x67,0x20,0x50,0x43};
{
char *scr="Code Signing PC"; //指定特征码
char obj[15]; //文件特征码
lont len; //文件长度
FILE *fp; //定义文件指针
fp=fopen("d:\\a.dat","rb"); //打开文件
if(NULL==fp)
{
printf("文件不存在或打开异常");
return;
}
fseek(fp,0,2); //注意这句一定要
len=ftell(fp); //取得文件长度
if(len<0x23551+15) //文件太小
{
printf("这个文件不符合要求!\n");
return;
}
fseek(fp,0x00023551,0); //指针移动到23551H处
fread(obj,15,1,fp); //读取文件特征码
if(memcmp(scr,obj,15)) //和指定的特征码进行比较
printf("这个文件不符合要求!\n");
else
printf("这个文件就是你想要的啊!\n");
}
d:\a.dat是文件所在地
如果你的文件在其他地方,要改一下
C:\要用C:\\表示
C:\AA\b.txt要用C:\\AA\\b.txt 表示