现在的位置: 主页 > 公司荣誉 > 文章列表

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

作者:北京夜明珠节能科技有限公司 来源:www.ymzjn.com 发布时间:2017-09-04 13:29:10
C实现修改可执行文件中的字符串,生成新的可执行文件 这种技术常用在远程控制软件中,我们已有远程控制软件的服务器端。我们利用远程控制软件的客户端配置生成我们自己的服务端软件,实现服务器端的端口及IP地址更新的功能。

下边看源代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

#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';

企业建站2800元起,携手武汉肥猫科技,做一个有见地的颜值派!更多优惠请戳:神农架SEO http://shennongjia.raoyu.net

上一篇:浅谈 PHP 变量可用字符 下一篇:最后一页