我写完了一个搜索本地目录的函数,其中想调用一个函数实现:在搜索到某个文件时比对该文件在十六进制下00023551h偏移处 特征码为是否为43 6F 64 65 20 53 69 67 6E 69 6E 67 20 50 43,
怎么vc实现?希望写出具体代码、小弟菜鸟感激不尽。

解决方案 »

  1.   

    大概过程是这样了#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 )
    {
    }
      

  2.   


    #define中为什么用\x, 难介绍下作用么?
      

  3.   


    这个码没有考虑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)
    {
        // 相等
    }
      

  4.   

    \x是为了便于这样书写.
    #define car "\x43\x6F\x64\x65\x20\x53\x69\x67\x6E\x69\x6E\x67\x20\x50\x43"
    否则char str[] = {43, 0x6F, 64, .....}; 麻烦多了.
      

  5.   

    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");
    }
      

  6.   

    补充:
    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};
      

  7.   

    先取得文件的长度,判断一下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");
    }
      

  8.   

    fp=fopen("d:\\a.dat","rb");
    d:\a.dat是文件所在地
    如果你的文件在其他地方,要改一下
    C:\要用C:\\表示
    C:\AA\b.txt要用C:\\AA\\b.txt 表示