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‘;

}

时间: 2024-08-06 18:24:36

C实现修改可执行文件中的字符串,生成新的可执行文件的相关文章

powershell修改文件中某个字符串(-replace操作符)

使用-replace操作符 test.txt文件内容 1234hello worldaaa "hhh" fwdbz test.ps1脚本文件 $(Get-Content E:\demo\test.txt) | Foreach-Object {$_ -replace ("1234","5678")} | Foreach-Object {$_ -replace ("hello world","hello java&quo

nm命令的学习以及可执行文件中的段

今天学习专家c的运行时数据结构,顺便简单地学习了一下nm命令 就目标文件而言,段是二进制文件中的简单区域里面保存了一定信息,section是ELF文件中最小组织单元,一个段包含几个section. nm命令的作用是显示对象文件,可执行文件以及对象文件库的符号信息.这里只对可执行文件的符号信息进行研究. 以hello world 程序为例 #include <stdio.h> int lemon[1000]; int main(){ printf("Hello World!\n&quo

java中的字符串简介,字符串的优化以及如何高效率的使用字符串

简介 String最为java中最重要的数据类型.字符串是软件开发中最重要的对象之一,通常,字符串对象在内存中总是占据着最大的空间块.所以,高效处理字符串,将提高系统的整个性能. 在java语言中,String对象可以认为是char数组的衍生和进一步的封装.它的主要组成部分是:char数组.偏移量和string的长度.char数组表示string的内容,它是string对象所表示字符串的超集.String的真实内容还需要偏移量和长度在这个char数组中进一步定位和截取.(查看java源代码可以看

c++反射之通过字符串生成对应的类实例

什么是反射: 常说的反射机制,在Java,ObjectC上支持的很完善,以Java为例:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. 以上是“官方”定义,用搜索引擎搜反射机制,出来的都是类似的说法. 本文重点: 在c++里通过一个类名字符串来生成对应的对象(下一篇是通过函数名字符串来调用对象对应的方法),这是反射机制很好的应用,且用途

Java中的字符串

作者:禅楼望月(http://www.cnblogs.com/yaoyinglong/) 1.字符串可以被GC回收了 我们之前在表达式的陷阱中就说到"对于Java程序中的字符直接量,JVM会使用一个字符串池来保护他们:当第一次使用某个字符串直接时,JVM会将它们放入字符串池进行缓存."在jdk1.7之前HotSpot将该字符串常量池放在永久代中,所以当初我们还说"在一般情况下,字符串缓冲池中字符串对象不会被垃圾回收",但是jdk1.7以后HotSpot就将字符串常量

Python学习笔记整理(四)Python中的字符串..

字符串是一个有序的字符集合,用于存储和表现基于文本的信息. 常见的字符串常量和表达式 T1=‘’ 空字符串 T2="diege's" 双引号 T3="""...""" 三重引号块 T4=r'\temp\diege' Raw字符串 抑制(取消)转义,完全打印\tmp\diege,而没有制表符 T5=u’diege' Unicode字符串 T1+T2     合并 T1*3    重复 T2[i]    索引 T2[i:j] 分片

#8 bash变量中的字符串处理

一个完整的程序,一般包括4类文件: 二进制文件(可执行文件).头和库文件.帮助文件.配置文件: bash--CLI(命令行接口)的一种 bash同样属于完整的应用程序,也有这四类文件: bash的配置文件: 三类: profile类: 为交互式登录的shell进程实现功能初始化的配置文件: bashrc类: 为非交互式登录的shell进程实现功能启动配置的配置文件: logout类: 为交互式登录的shell进程提供终止及清理类功能的配置文件: shell的类型: 交互式登录的shell: 1.

objective C中的字符串(三)

holydancer原创,如需转载,请在显要位置注明: 转自holydancer的CSDN专栏,原文地址:http://blog.csdn.net/holydancer/article/details/7343561 objective C中的字符串操作 在OC中创建字符串时,一般不使用C的方法,因为C将字符串作为字符数组,所以在操作时会有很多不方便的地方,在Cocoa中NSString集成的一些方法,可以很方便的操作字符串,下面举几个例子: 1.创建: 直接利用等号赋值 NSString *

流编辑器sed使用总结及利用sed从文本中提取字符串的方法

sed 是一个编辑器,但它与其它大多数编辑器不同.除了不面向屏幕之外,它还是非交互式的,我们常用的vim编辑器则是交互式的. 这意味着必须将要对数据执行的命令插入到命令行或要处 理的脚本中.sed 在一个文件(或文件集)中非交互式.并且不加询问地接收一系列的命令并执行它们.因而,它流经文本就如同水流经溪流一样,因而 sed 恰当地代表了流编辑器,可以对文件或者文件集批量的进行删除 替换 插入 追加等操作. 流编辑器非常适合于执行重复的编辑,这种重复编辑如果由人工完成将花费大量的时间. 其参数可能