如果自动生成一个可执行程序

CrazyBW 2013-02-04 11:38:21
MFC界面里有一个按钮,我点着个按钮,可以自动生成一个可执行程序,请问如何实现?
(远程控制软件生成木马时均为自动配置,随时生成不同的木马,这个是怎么实现的?)
...全文
514 50 打赏 收藏 转发到动态 举报
写回复
用AI写文章
50 条回复
切换为时间正序
请发表友善的回复…
发表回复
BeanJoy 2013-02-20
  • 打赏
  • 举报
回复
引用 46 楼 CrazyBW 的回复:
引用 44 楼 BeanJoy 的回复:引用 42 楼 CrazyBW 的回复:引用 41 楼 BeanJoy 的回复:引用 40 楼 CrazyBW 的回复:引用 39 楼 BeanJoy 的回复:引用 38 楼 CrazyBW 的回复:引用 32 楼 zcnvnv 的回复:第一种,把服务端添加到资源里,生成的时候释放出来,然后把一个配置信息结构体写到服务端文件尾部。 ……
你用十六进制工具打一个文件,你看看哪里有EOF?EOF是个虚拟的东西,在文件中并不存在。若一个文件有1000个字节,现在文件指针指向第999个字节(最后一个字节),你再调用相应的函数,会返回EOF,表示到了文件末尾,但文件中并不存在EOF这个东西。 根本不用试,看你描述,就是你理解有问题。如果还理解不了,私信把QQ发给我。
BeanJoy 2013-02-20
  • 打赏
  • 举报
回复
引用 45 楼 CrazyBW 的回复:
引用 43 楼 BeanJoy 的回复:引用 42 楼 CrazyBW 的回复:引用 41 楼 BeanJoy 的回复:引用 40 楼 CrazyBW 的回复:引用 39 楼 BeanJoy 的回复:引用 38 楼 CrazyBW 的回复:引用 32 楼 zcnvnv 的回复:第一种,把服务端添加到资源里,生成的时候释放出来,然后把一个配置信息结构体写到服务端文件尾部。 ……
什么叫定位不到文件最后? SetFilePointer(hFile, -78, NULL, FILE_END);这个函数不就是定位到离文件尾78个字节的地方吗?第二个参数设置为0,不就是定位到文件最后?
CrazyBW 2013-02-20
  • 打赏
  • 举报
回复
引用 44 楼 BeanJoy 的回复:
引用 42 楼 CrazyBW 的回复:引用 41 楼 BeanJoy 的回复:引用 40 楼 CrazyBW 的回复:引用 39 楼 BeanJoy 的回复:引用 38 楼 CrazyBW 的回复:引用 32 楼 zcnvnv 的回复:第一种,把服务端添加到资源里,生成的时候释放出来,然后把一个配置信息结构体写到服务端文件尾部。 服务端程序运行后读取自身文件尾部的这个……
我是这样想的,最开始的文件有个文件结束符(比方说是EOF),我在这个文件之后再添加字符串,那他会添加到这个结束符(EOF)之后,当我用函数查找文件结束符(EOF)的时候,他找到第一个EOF就反回了~ 而不会定位到新添加字符串后面的那个结束符。
CrazyBW 2013-02-20
  • 打赏
  • 举报
回复
引用 43 楼 BeanJoy 的回复:
引用 42 楼 CrazyBW 的回复:引用 41 楼 BeanJoy 的回复:引用 40 楼 CrazyBW 的回复:引用 39 楼 BeanJoy 的回复:引用 38 楼 CrazyBW 的回复:引用 32 楼 zcnvnv 的回复:第一种,把服务端添加到资源里,生成的时候释放出来,然后把一个配置信息结构体写到服务端文件尾部。 服务端程序运行后读取自身文件尾部的这个……
有问题~!! 你根本定位不到文件的最后~~ 朋友你有Q么 , 我把我的测试程序给您传过去,您运行下就知道了
  • 打赏
  • 举报
回复
BeanJoy说的方法是没有问题的。
  • 打赏
  • 举报
回复
不会是手动在程序后面加的字符吧。
CrazyBW 2013-02-19
  • 打赏
  • 举报
回复
引用 32 楼 zcnvnv 的回复:
第一种,把服务端添加到资源里,生成的时候释放出来,然后把一个配置信息结构体写到服务端文件尾部。 服务端程序运行后读取自身文件尾部的这个结构体 比如 struct SERVER_CONFIG{ DWORD dwIP, DWORD dwPort }; 第二种,把服务端的配置的常量值写成类似 char szIP[256]="[-ServerIP-]"; 这……
释放资源这个我都懂,原理我也懂 现在的问题是我怎么读文件末尾的东西? 使用SeekToEnd只能定位到文件末尾,但是读末尾之后的东西读不了。 求解!
CrazyBW 2013-02-19
  • 打赏
  • 举报
回复
引用 36 楼 BeanJoy 的回复:
一个春节了,楼主解决了没有? 再没解决,我直接帮你写个DEMO算了。 如此简单的问题,也无需动用其他API函数了,直接把需要的信息加到EXE末尾就成了。
哥们 , 不好意思啊 , 总麻烦你 现在的问题是我怎么读文件末尾的东西? 使用SeekToEnd只能定位到文件末尾,但是读末尾之后的东西读不了。 求解!
BeanJoy 2013-02-19
  • 打赏
  • 举报
回复
引用 42 楼 CrazyBW 的回复:
引用 41 楼 BeanJoy 的回复:引用 40 楼 CrazyBW 的回复:引用 39 楼 BeanJoy 的回复:引用 38 楼 CrazyBW 的回复:引用 32 楼 zcnvnv 的回复:第一种,把服务端添加到资源里,生成的时候释放出来,然后把一个配置信息结构体写到服务端文件尾部。 服务端程序运行后读取自身文件尾部的这个结构体 比如 struct SERV……
还有,你确定SetFilePointer(hFile, -78, NULL, FILE_END);中第二个参数为正数是正确的? 以文件末尾为基准,第二个参数再为正,就是继续往前定位,都超出文件大小了,能定位正确?应该是以文件末尾为基准,第二个参数为负,往后定位(文件开始方向)。 另外,查看EXE等文件,不要用文本工具来查看,应该使用十六进制工具查看,查看十六进制数据都是什么,很多数据都是不可打印的,文本工具根本不会显示,而且文件工具也不能知道文件第几个字节是什么数据。
BeanJoy 2013-02-19
  • 打赏
  • 举报
回复
引用 42 楼 CrazyBW 的回复:
引用 41 楼 BeanJoy 的回复:引用 40 楼 CrazyBW 的回复:引用 39 楼 BeanJoy 的回复:引用 38 楼 CrazyBW 的回复:引用 32 楼 zcnvnv 的回复:第一种,把服务端添加到资源里,生成的时候释放出来,然后把一个配置信息结构体写到服务端文件尾部。 服务端程序运行后读取自身文件尾部的这个结构体 比如 struct SERV……
我看了头天,没怎么明白你的意思。 随便一个EXE,你先用其他工具,无论什么工具都好,只要能在末尾添加东西就行,或者你自己这个程序往这个EXE末尾添加东西。 比如,有一个EXE,名字叫1.exe,长度为1000,我用其他工具在末尾添加两个字符(“Hello”和“World”),为了通用性,这两个字符串我都定为占用256个长度,那么就需要在1.exe末尾添加512个字节的长度,也就是1.exe的长度为1512了,从0-999为1.exe原来的内容,1000-1255这256个字节为“Hello”(其中1000-1004分别为“H”、“e”、“l”、“l”、“o”,1005-1255全为0),从1256-1511这256个字节为“World”(其中1256-1260分别为“W”、“o”、“r”、“l”、“d”,1261-1511全为0)。 如上,你再写程序来读取1.exe,先定位到离末尾512的位置,读取256个字节出来,作为第一个字符串,那么读取出来内容如下(比如保存在pBuf数组中):

pBuf[0]='H';
pBuf[1]='e';
pBuf[2]='l';
pBuf[3]='l';
pBuf[4]='o';
pBuf[5]=0;
...
pBuf[255]=0;
这样,pBuf中保存的就是“Hello”,打印出来的就是“Hello”;然后继续读取256个字节出来,自动就是剩下的“World”。当然,1.exe可以你自己写的,1.exe中可以自己读取自己,自动定位到离末尾512个字节的地方,然后读取两个长度为256的字符串,再打印出来。之,你就可以随便修改1.exe末尾后512个字节的内容了,再运行这个修改过后的1.exe,输出的自然就是你修改后的内容。 这样,有什么问题?
CrazyBW 2013-02-19
  • 打赏
  • 举报
回复
引用 41 楼 BeanJoy 的回复:
引用 40 楼 CrazyBW 的回复:引用 39 楼 BeanJoy 的回复:引用 38 楼 CrazyBW 的回复:引用 32 楼 zcnvnv 的回复:第一种,把服务端添加到资源里,生成的时候释放出来,然后把一个配置信息结构体写到服务端文件尾部。 服务端程序运行后读取自身文件尾部的这个结构体 比如 struct SERVER_CONFIG{ DWORD dw……
SetFilePointer(hFile, -78, NULL, FILE_END); 这个函数我是从+30一直测试到-78的。 一个一个试的 ~ 但是只有-30多到-78有显示 就是我那个图片里面的字符串(-78是显示最全的,+30到-30都是空) 您说的定位到文件尾并没有定位到添加字符串之后的尾巴 您测试一下就知道了。要测试EXE的文件,不能是普通的txt文档之类的(TXT的话用这个方法读一定没问题!)。
BeanJoy 2013-02-19
  • 打赏
  • 举报
回复
引用 40 楼 CrazyBW 的回复:
引用 39 楼 BeanJoy 的回复:引用 38 楼 CrazyBW 的回复:引用 32 楼 zcnvnv 的回复:第一种,把服务端添加到资源里,生成的时候释放出来,然后把一个配置信息结构体写到服务端文件尾部。 服务端程序运行后读取自身文件尾部的这个结构体 比如 struct SERVER_CONFIG{ DWORD dwIP, DWORD dwPort }……
哎,我要怎么说呢? 读取的时候szMessage就把那些个TTTT读取出来的,但是,注意,TTTT前面的字节可能有0,而printf打印时,一遇到0,就判断字符串结束了!!!那么0之后的TTTT就不打印!!!
CrazyBW 2013-02-19
  • 打赏
  • 举报
回复
引用 39 楼 BeanJoy 的回复:
引用 38 楼 CrazyBW 的回复:引用 32 楼 zcnvnv 的回复:第一种,把服务端添加到资源里,生成的时候释放出来,然后把一个配置信息结构体写到服务端文件尾部。
服务端程序运行后读取自身文件尾部的这个结构体
比如
struct SERVER_CONFIG{
DWORD dwIP,
DWORD dwPort
};

第二种,把服务端的配置的常量值……

哥 , 您的代码我真的认真看了啊~~ 我给你截图啊~

#include <stdio.h>
#include <conio.h>
#include <windows.h>

int main()
{
char szExePath[MAX_PATH] = {0};

HANDLE hFile = CreateFile("D:\\1.exe", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING,
FILE_ATTRIBUTE_READONLY, NULL);

SetFilePointer(hFile, -78, NULL, FILE_END);

char szMessage[256] = {0};

DWORD dwByteRead = 0;
ReadFile(hFile, szMessage, 256, &dwByteRead, NULL);
szMessage[255] = 0;

CloseHandle(hFile);

printf("Message : %s\n", szMessage);

getch();

return 0;
}

我只读文件末尾添加的字符串做测试
这个图片是一个exe文件的尾部 , 那7个T是用程序追加在exe尾部的


我再用您的程序读取的时候
就是这样的

正常添加在尾部的字符根本读不到
BeanJoy 2013-02-19
  • 打赏
  • 举报
回复
引用 38 楼 CrazyBW 的回复:
引用 32 楼 zcnvnv 的回复:第一种,把服务端添加到资源里,生成的时候释放出来,然后把一个配置信息结构体写到服务端文件尾部。 服务端程序运行后读取自身文件尾部的这个结构体 比如 struct SERVER_CONFIG{ DWORD dwIP, DWORD dwPort }; 第二种,把服务端的配置的常量值写成类似 char szIP[256]……
我真要叫你哥哥了,23楼我代码都帖出来了,你看了吗?

SetFilePointer(hFile, -(256 + 4), NULL, FILE_END);
 
    char szMessage[256] = {0};
    DWORD32 dw32Para = 0;
     
    DWORD dwByteRead = 0;
    ReadFile(hFile, szMessage, 256, &dwByteRead, NULL);
    szMessage[255] = 0;
    ReadFile(hFile, &dw32Para, 4, &dwByteRead, NULL);
不是用SeekToEnd,是以末尾为基准,向前定位256+4=260个字节的地方,就是说定位到离文件末尾还有260个字节的地方,然后读256个字节出来,这256个字节是字符串信息,再读取4个字节,这4个字节当作一个DWORD值。
BeanJoy 2013-02-16
  • 打赏
  • 举报
回复
一个春节了,楼主解决了没有? 再没解决,我直接帮你写个DEMO算了。 如此简单的问题,也无需动用其他API函数了,直接把需要的信息加到EXE末尾就成了。
码农UP2U 2013-02-15
  • 打赏
  • 举报
回复
通过资源进行释放
moon5284 2013-02-15
  • 打赏
  • 举报
回复
下载者木马 .
vcorange 2013-02-13
  • 打赏
  • 举报
回复
可以通过资源函数 读取 也可以自定义按照pe格式读取
qqwweerraahh 2013-02-09
  • 打赏
  • 举报
回复
第一种,把服务端添加到资源里,生成的时候释放出来,然后把一个配置信息结构体写到服务端文件尾部。 服务端程序运行后读取自身文件尾部的这个结构体 比如 struct SERVER_CONFIG{ DWORD dwIP, DWORD dwPort }; 第二种,把服务端的配置的常量值写成类似 char szIP[256]="[-ServerIP-]"; 这种比较特殊的值,然后二进制查、替换,其中的256是给配置信息留好足够的空间,这种方法也可以,但不推荐,还是第一种比较好。 给你个释放资源文件的函数 比如资源类型是“Binary”,资源ID是BIN_SERVER ReleaseFile(BIN_SERVER,"Binary","C:\\1.exe"); 然后把结构体追加到服务端尾部, 服务端用23楼的方法把结构体读出来 方法大家说的很清楚了,实现靠自己,有问题自己调试,这样才能进步

BOOL ReleaseFile(WORD wResID, char *szResType, char *szFilePathName)
{
	BOOL bRet=FALSE;
	HRSRC hRes;
	DWORD dwSize;
	HGLOBAL hGlobal;
	LPVOID pBuffer;
	HANDLE hFile;
	DWORD dwWriten;
	hRes=FindResource(hModule,MAKEINTRESOURCE(wResID),szResType);
	dwSize=SizeofResource(hModule,hRes);
	hGlobal=LoadResource(hModule,hRes);
	pBuffer=LockResource(hGlobal);
	hFile=CreateFile(szFilePathName,GENERIC_WRITE,FILE_SHARE_READ,
		NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_ARCHIVE,NULL);
	if(hFile)
	{
		if(WriteFile(hFile,pBuffer,dwSize,&dwWriten,NULL))
		{
			bRet=TRUE;
		}
		CloseHandle(hFile);
	}

	return bRet;
}
青松2 2013-02-09
  • 打赏
  • 举报
回复
加载更多回复(29)

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧