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';
}
来自:http://blog.csdn.net/u012554768/article/details/39396117
昵    称:
验证码:

相关文档:

  • 纯C语言INI文件解析
    在一个跨平台( Android 、Windows、Linux )项目中配置文件用 INI 格式,自己写了个解析库,纯C语言的,简单好用。 可以解析 INI 格式...
  • C/C++代码静态分析插件:VisualStudio_Scan
    VisualStudio_Scan 是一款开源免费,集成在 Visual Studio 中的 c/c++ 代码静态分析插件,集成了cppcheck,coverity,pclint 等业界优秀的静态分析工具...
  • 跨平台的C++公共库:Dlib
    DLIB是一个通用的跨平台的C+ +库使用契约编程和现代C + +技术设计。...
  • C语言的伪随机数发生器 gjrand
    gjrand 是一个C语言的伪随机数生成器。伪随机数的意思是在这个随机数并不保证是真正的随机,只适合一些对随机要求不是很高的场合,...
  • C++ 时间函数用法
    C++对时间的操作也有许多值得大家注意的地方。最近,在技术群中有很多网友也多次问到过C++语言中对时间的操作、获取和显示等等的问...
  • Socket 编程 详解
    对TCP/IP、UDP、Socket编程这些词你不会很陌生吧?随着网络技术的发展,这些词充斥着我们的耳朵。TCP/IP(Transmission Control Protocol/Internet Pro...
  • C程序运行时内存结构分析
    静态变量存储在静态存储区,局部变量存储在动态存储区(栈),代码存放在代码区 寄存器,EBP指向栈底,ESP指向栈顶,EIP指向正在执...
  • 常用C语言函数库 libasn
    libasn 提供了一些编程里非常有用的功能和函数库(C语言),例如列表、哈希表、拓扑排序、内存管理、垃圾收集、应用层调试、正则表...
  • C++ 输入类型不匹配检测方法
    C++中检测输入类型不匹配的检测方法。 输入类型不匹配是指输入的数据类型与所期望的类型不匹配,如 int n; cin >> n; 但输入的数...
  • 开源GUI框架库:Nana C++ Library
    Nana C++ Library,一个纯粹的C++库,让你能完全发挥你的C++知识/技巧/手法来编写GUI,这是用C++开发GUI的一个重大的进步。类似标准库和boost...
  • C++获取时间的方法
    C++获取时间的方法...
  • C++ 库:Libexecstream
    Libexecstream 是 C++ 库,允许你运行一个子进程并且获取进程的输入,输出和错误,类似标准 C++ 流。...
  • Pelles C - 免费的C语言开发工具
    Pelles C是一款windows下的C IDE,支持调试,且为免费。...
  • 轻量级的C++插件框架 - X3 C++ PluginFramework
    X3 C++ PluginFramework 代号为X3的C++轻量级通用插件框架平台是一套通用的C++轻量级插件体系,没有使用MFC、ATL、COM。可在Windows和Linux下编译...
  • 替换printf的C++库:tinyformat.h
    这是一个最小的类型安全替换printf的C++库。...
  • java嵌入c,c++程序指南
    本文为在 32 位 Windows 平台上实现 Java 本地方法提供了实用的 示例、步骤和准则。本文中的示例使用 Sun Microsystems 公司创建的 Java Developmen...
  • C++常用工具类库 Rudiments
    Rudiments 是一个 C++ 类库,提供一些用来编写守护进程、客户端和服务器端的基础类,与标准C函数的封装类:还包括正则表达式、 semaphores...
  • C语言日志、事务API libjio
    libjio是一个C库做日志,交易为导向的I/O它提供了一个类UNIX的文件操作功能(如打开,读取和写入) ,这是装在一个交易框架,以使文件...
  • 纯Java 实现的 C 语言预处理器 - JCPP
    JCPP 是一个完整、兼容、独立的纯Java 实现的 C 语言预处理器,其目的是为了使用编写在 Java 中可使用的 C 风格编译器...
  • C++指针的概念解读 超详细
    指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。要搞清一个指针需要搞清指针的四方面的内容:指针的类型,...