邪恶八进制信息安全团队技术讨论组's Archiver

syspro 2008-3-12 00:14

[原创]利用批处理快速编译测试VC网络程序

信息来源:邪恶八进制信息安全团队([url=www.eviloctal.com]www.eviloctal.com[/url])
文章作者:syspro

        在用VC编写一个网络程序时需要反复测试客户端和服务段。尤其是服务端的程序需要释放Dll。编译测试的时候需要进行以下操作:
        1、编译Dll模块。
         2、将Dll模块加壳压缩。
        3、将Dll模块用BINTOC转换成文本数组。
        4、将转换的文本数组粘贴到服务段主程序的代码中。
        5、编译主服务端主程序。
        6、配置服务端主程序。
        7、测试运行。
        如果手动进行以上操作,每次测试都浪费不少时间。测试频繁的时候还容易的强迫症。于是改写了bintoc,再写了个命令行下的服务段配置程序,最后写了个批处理来完成编译测试过程,内容如下。
[color=#99330]@echo off[/color]
[color=#99330]@echo compile server[/color]

[color=#99330]rem  server_dll和server_install工程文件夹和编译输出文件夹分别为[/color]
[color=#99330]rem  server_dll、server_install和compile。[/color]
[color=#99330]rem  在编译之前要分别在server_dll和server_install的工程中点击“Project”-〉“Export MakeFIle”[/color]
[color=#99330]rem  生成server_dll.mak和mouse_install.mak文件。[/color]

[color=#99330]rem  1、编译Dll模块。[/color]
[color=#99330]@echo compile server_dll project[/color]
[color=#99330]cd server_dll[/color]
[color=#99330]del /Q Release[/color]
[color=#99330]nmake /f server_dll.mak[/color]

[color=#99330]rem  2、将Dll模块加壳压缩,本例中用UPX ,只要支持命令行的都可以。[/color]
[color=#99330]@echo compress server_dll use upx[/color]
[color=#99330]cd..[/color]
[color=#99330]cd compile[/color]
[color=#99330]upx -9 server_dll.dll[/color]

[color=#99330]rem 3、将Dll模块用BINTOC转换成数组头文件。[/color]
[color=#99330]@echo convert server_dll to GenFile.h[/color]
[color=#99330]bintoc.exe server_dll.dll  GenFile.h[/color]

[color=#99330]rem 4、将数组头文件覆盖服务段主程序的头文件。[/color]
[color=#99330]@echo copy GenFile.h to server_install project[/color]
[color=#99330]cd..[/color]
[color=#99330]copy /Y %cd%\compile\GenFile.h %cd%\server_install\GenFile.h[/color]

[color=#99330]rem 5、编译主服务端主程序。[/color]
[color=#99330]@echo compile server_install[/color]
[color=#99330]cd server_install[/color]
[color=#99330]del /Q Release[/color]
[color=#99330]nmake /f server_install.mak[/color]

[color=#99330]rem 6、配置服务端主程序。[/color]
[color=#99330]@echo config server_install[/color]
[color=#99330]cd..[/color]
[color=#99330]cd compile[/color]
[color=#99330]serverconfig.exe server_install.exe config.txt[/color]

[color=#99330]rem 7、测试运行。[/color]
[color=#99330] @echo run server_install[/color]
[color=#99330]server_install.exe[/color]
[color=#99330]cd ..[/color]

     
      [color=#99330]  [color=#000]下面是改写的bintoc源码[/color][/color]
[color=#99330]#include <stdio.h>[/color]
[color=#99330]FILE *in;[/color]
[color=#99330]FILE *out;[/color]
[color=#99330]int main(int argc, char *argv[])[/color]
[color=#99330]{[/color]
[color=#99330]    unsigned char ch;[/color]
[color=#99330]    int    cnt = 0;[/color]
[color=#99330]    if (argc < 3)[/color]
[color=#99330]    {[/color]
[color=#99330]        printf("usage: bin2c infile.bin outfile.h \n");[/color]
[color=#99330]        return -1;[/color]
[color=#99330]    }[/color]


[color=#99330]    if ((out = fopen(argv[2], "wb")) == NULL)[/color]
[color=#99330]    {[/color]
[color=#99330]        printf("Couldn't open output file.\n");[/color]
[color=#99330]        return -1;[/color]
[color=#99330]    }[/color]

[color=#99330]    if ((in = fopen("start.h", "rb")) != NULL)[/color]
[color=#99330]    {[/color]
[color=#99330]        printf("open start.h file.\n");[/color]
[color=#99330]        ch = fgetc(in);[/color]
[color=#99330]        while (!feof(in))[/color]
[color=#99330]        {[/color]
[color=#99330]            fprintf(out, "%c", ch);[/color]
[color=#99330]            ch = fgetc(in);[/color]
[color=#99330]        }[/color]
[color=#99330]        fclose(in);[/color]
[color=#99330]    }[/color]



[color=#99330]    if ((in = fopen(argv[1], "rb")) == NULL)[/color]
[color=#99330]    {[/color]
[color=#99330]        printf("Couldn't open data file.\n");[/color]
[color=#99330]        return -1;[/color]
[color=#99330]    }[/color]


[color=#99330]    fseek(in,0,SEEK_END);  [/color]
[color=#99330]    long   lFileSize   =   ftell(in);[/color]
[color=#99330]    fprintf(out, "int  [/color][color=#99330]Dll[/color][color=#99330]Len[/color][color=#99330] = %ld;\n", lFileSize);[/color]
[color=#99330]    fprintf(out, "unsigned char [/color][color=#99330]DllData[/color][color=#99330][%ld] = {", lFileSize);[/color]
[color=#99330]    fseek(in,0,SEEK_SET);[/color]
[color=#99330]    ch = fgetc(in);[/color]
[color=#99330]    while (!feof(in))[/color]
[color=#99330]    {[/color]
[color=#99330]        if (cnt != 0)[/color]
[color=#99330]            fprintf(out, ", ");[/color]
[color=#99330]        if (!(cnt % 10))[/color]
[color=#99330]            fprintf(out, "\n\t");[/color]
[color=#99330]        fprintf(out, "0x%02x", (int)ch);[/color]
[color=#99330]        cnt++;[/color]
[color=#99330]        ch = fgetc(in);[/color]
[color=#99330]    }[/color]
[color=#99330]    fprintf(out, "\n};\n");[/color]
[color=#99330]    fclose(in);[/color]

[color=#99330]    if ((in = fopen("end.h", "rb")) != NULL)[/color]
[color=#99330]    {[/color]
[color=#99330]        printf("open end.h file.\n");[/color]
[color=#99330]        ch = fgetc(in);[/color]
[color=#99330]        while (!feof(in))[/color]
[color=#99330]        {[/color]
[color=#99330]            fprintf(out, "%c", ch);[/color]
[color=#99330]            ch = fgetc(in);[/color]
[color=#99330]        }    [/color]
[color=#99330]        fclose(in);[/color]
[color=#99330]    }[/color]


[color=#99330]    fclose(out);[/color]
[color=#99330]    return 0;[/color]
[color=#99330]}[/color]

        下面是改写的bintoc需要的文件[color=#99330]start.h
[/color][color=#99330]#include "stdafx.h"[/color]

[color=#99330]#include <stdio.h>[/color]


[color=#99330]BOOL [/color][color=#99330]CreateDllFile[/color][color=#99330]( LPSTR szPathFile );

       [/color]下面是改写的bintoc需要的文件[color=#99330]end.h
[/color][color=#99330]BOOL CreateDllFile( LPSTR szPathFile )[/color]
[color=#99330]{[/color]
[color=#99330]    FILE *fp;[/color]
[color=#99330]    fp=fopen(szPathFile, "wb");[/color]
[color=#99330]    if (fp!=NULL)[/color]
[color=#99330]    {[/color]
[color=#99330]        fwrite(DllData, 1, [/color][color=#99330]Dll[/color][color=#99330]Len, fp);[/color]
[color=#99330]        fclose(fp);[/color]
[color=#99330]    }  [/color]
[color=#99330]     return TRUE;[/color]
[color=#99330]}[/color]

页: [1]
© 1999-2008 EvilOctal Security Team