C實現修改可執行文件中的字符串,生成新的可執行文件
這種技術常用在遠程控制軟件中,我們已有遠程控制軟件的服務器端。我們利用遠程控制軟件的客戶端配置生成我們自己的服務端軟件,實現服務器端的端口及IP地址更新的功能。
下邊看源代碼
#include <stdio.h>include <Windows.h>
int FindStr(char destStr, char srcStr, int destStrLen, int srcStrLen); void ReplaceStr(char destStr, char srcStr, int beginPoint);
int main() { FILE pReadFile; FILE pOutFile; char *pFileBuf;
//打開我們要修改的源程序 if ((pReadFile = fopen("../custom/TestPE.exe", "rb")) == NULL) { printf("It's failure to open the readable file\n"); return -1; }
//我們要生成的源程序 if ((pOutFile = fopen("../custom/TestPE1.exe", "wb")) == NULL) { printf("It's failure to open the writable file\n"); return -1; }
fseek(pReadFile, 0L, SEEK_END); int fileLen = ftell(pReadFile);
pFileBuf = (char *)malloc(fileLen + 1); if (pFileBuf == NULL) { fclose(pReadFile); return -1; }
fseek(pReadFile,0L,SEEK_SET); fread(pFileBuf, fileLen, sizeof(char), pReadFile); pFileBuf[fileLen] = '\0';
//我們要修改成的字符串 char modifyStr = "BBBBBBBBB"; //源程序中的字符串 char findStr = "AAAAAAAAAAAAAAA"; int beginPoint;
//我們在讀取的源程序數組中查找我們要查找的字符串的起始位置 beginPoint = FindStr(pFileBuf, findStr, fileLen, 0); if (beginPoint == -1) { printf("It's failure to find the string\n"); return -1; }
//替換我們的字符串 ReplaceStr(pFileBuf, modifyStr, beginPoint);
//生成我們修改后的源程序 fwrite(pFileBuf, fileLen, sizeof(char), pOutFile);
fclose(pReadFile); fclose(pOutFile); if (pFileBuf != NULL) { free(pFileBuf); pFileBuf = NULL; }
return 0; }
int FindStr(char destStr, char srcStr, int destStrLen, int srcStrLen) { int i,j,findStrLen;
if (srcStrLen == 0) { findStrLen = strlen(srcStr); } else { findStrLen = srcStrLen; }
for (i = 0; i < destStrLen; i++) { for (j = 0; j < findStrLen; j++) { if (destStr[i + j] != srcStr[j]) { break; } }
if (j == findStrLen) { return i; } } return -1; }
void ReplaceStr(char destStr, char srcStr, int beginPoint) { int srcStrLen, i; srcStrLen = strlen(srcStr);
for (i = 0; i < srcStrLen; i++) { destStr[beginPoint + i] = srcStr[i]; }
destStr[beginPoint + srcStrLen] = '\0'; }</pre>來自:http://blog.csdn.net/u012554768/article/details/39396117