自己动手做QQ木马--文件绑定篇
在本篇中我将详细分析一下CBindFile类的实现细节。
先看看CBindFile类的声明吧!
class CBindFile : public CObject
{
public:
CBindFile();
virtual ~CBindFile();
static const char *const szFlag; //文件被绑定过的标志
static const unsigned int lenOrigin; //未绑定动态连接库时的文件大小
static const unsigned int lenOriginAddDll; //绑定了动态连接库后的//文件大小
private:
TCHAR my_name[MAX_PATH]; //自身文件名字
TCHAR szMyFilePath[MAX_PATH]; //自身文件路径
HANDLE hFileMyself; //自身文件句柄
BYTE *buf; //读取文件数据缓冲
CString strToBindFilePath; //保存要绑定的文件名
CString strFinalFilePath; //保存最终合成文件名
char m_Ext[4]; //保存被绑定文件的扩展名
CString strUnbindFilePath_Dll; //分解出的DLL文件名
CString strUnbindFilePath_Sec; //分解出的Sec文件名
PROCESS_INFORMATION piRunProc; //分解出的第二个文件运行//的进程信息
public:
bool Initiate(); //判断文件是绑定还是分解
bool CloneMySelf_and_Run(); //克隆一个原文件并运行它
//取得分解出文件运行的进程信息
voidGetRunFileProcessInfo(PROCESS_INFORMATION&pi) const;
CString GetSecFilePath() const;
private:
bool Unbind_and_Run(); //分解已合并的文件,同时运行它们
bool Bind_File(); //将自己和另一个文件绑定在一起
//创建分解文件时的进程
bool Create_Process(const char* temp_Run, BOOL bDirectRun);
//判断是否是指定的文件名
bool IsSpecFileName(const TCHAR * const szSpecFileName) const;
void Modify_MyIcon(BYTE* &buf); //修改自身文件中的所有的图标
//在被绑定的PE文件中找到与自身文件中相匹配的图标
BYTE* Find_Match_Icon(HMODULE hExeToBind, const RESDIR *pResDir);
//枚举图标的回调函数
static BOOL CALLBACK EnumIconProc( HMODULE hExe,
LPCTSTR lpszType,
LPTSTR lpszName,
LPARAM lParam );
};
后面三个与图标相关的函数暂时不介绍,留在后面的攫取图标篇中详细说明。下面讲解几个重要的成员函数
1.Initiate()
在第一篇中我已经讲过Initiate()成员函数是重点,它是整个类的枢纽。通过判断本程序文件的大小来分别执行相关的操作,且看下图:
本文地址:http://com.8s8s.com/it/it1889.htm