目标插入U盘,自动运行指定程序或打开指定文件。实现1.安装AutoFlash,下载地址为:https://download.csdn.net/download/HHT0506/15110427(免积分)2.U盘根目录下创建autorun.inf文件,内容为[AutoRun]OPEN=C:\Program Files\Everything\Everything.exe3.拔除U盘,再次插入,便会直接打开C:\Program Files\Everything路径下的Everything.exe程
安装后可以自动隐藏,可以开机自动启动,按住Shift+Ctrl+Alt+Y组合键出现窗体界面,当U盘插入电脑时,会自动将U盘中的数据复制到电脑的指定文件夹中,同时预先可以设置复制文件的类型,文件的尺寸限制等,如只复制小于10M的数据。
需要.net 4.0环境。如果你已经安装.Net 4.0 Framework,直接运行免安装程序就可以了。
U盘病毒又称Autorun病毒,是通过AutoRun.inf文件使对方所有的硬盘完全共享或中木马的病毒,中毒后的U盘在点击右键的时候出现auto字样,双击中毒U盘会自动运行autorun.inf所指定的病毒程序。
U盘专杀助手是一个免费的Autorun.inf病毒专杀及免疫工具,是一个全自动的优盘杀毒软件。使用本杀毒软件可以有效避免U盘病毒侵害电脑。
U盘专杀助手主要功能:
1、插入U盘自动杀毒:当U盘插入后,U盘专杀助手立即启动扫描程序,将U盘中所有可执行文件列出,对于已知的病毒自动清除,对于未知潜在病毒可以手工选择删除或者灭活处理。
2、Autorun.inf免疫:U盘专杀助手可以自动对U盘进行Autorun.inf免疫,免疫后的U盘将不会生成Autorun.inf文件,可以放心双击。
3、U盘写保护:设置U盘写保护后,U盘不能写入和删除文件,可以杜绝病毒感染U盘,保护U盘文件不丢失。
4、我的密盘:我的密盘功能可以生成一个属于自己的隐秘磁盘分区,只有正确输入密码才能查看。对于不需要经常移动的个人文件,可以暂时存在我的密盘中,避免频繁插拔U盘而造成的经常U盘修复。
U盘自动运行脚本的用处
U盘自动运行脚本,也属于是系统预留的一个接口吧。当系统忘记密码、没有debug调试线、网络进不去等等时,U盘就发挥作用了!系统预留了这个自动运行脚本,那可以解决好多问题。在这里简单罗列几点:
修改系统密码
自动升级
自动导入/导出配置文件
U盘自动运行脚本配置方法
Linux系统下是使用udev或者轻量级的类udev工具来自动自动挂载设备,这里以udev为例,来说下.
欢迎技术交流和帮助,提供IT相关服务,索要源码请联系博主QQ: 21497936,若该文为原创文章,未经允许不得转载
原博主博客地址:https://blog.csdn.net/qq21497936
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/88733374
autorun.inf
Au...
我笔记本不知怎么的插入U盘后在资源管理器中看不到盘符,只能通过设备管理器打开,很是麻烦,所以就自己开发了小工具,U盘插入后,会自动打开U盘所在的文件夹,代码很简单,在这里分享一下。
工具是基于C#语言的WinForm程序,无界面,开机自启动。
可以使用Java提供的JNA库来实现U盘插入监控,同时使用Java的IO流来记录上传下载行为记录。具体实现可以参考以下代码:
import com.sun.jna.platform.win32.*;
import com.sun.jna.platform.win32.WinNT.HANDLE;
import com.sun.jna.platform.win32.WinNT.HANDLEByReference;
import com.sun.jna.platform.win32.WinNT.PVOID;
import com.sun.jna.platform.win32.WinNT.ULONG_PTR;
import com.sun.jna.platform.win32.WinUser.*;
public class USBMonitor {
private static final int WM_DEVICECHANGE = 0x0219;
private static final int DBT_DEVICEARRIVAL = 0x8000;
private static final int DBT_DEVICEREMOVECOMPLETE = 0x8004;
private static final int DBT_DEVTYP_VOLUME = 0x00000002;
private static final int DBT_DEVNODES_CHANGED = 0x0007;
private static final int FILE_SHARE_READ = 0x00000001;
private static final int FILE_SHARE_WRITE = 0x00000002;
private static final int FILE_SHARE_DELETE = 0x00000004;
private static final int OPEN_EXISTING = 3;
private static final int GENERIC_READ = 0x80000000;
private static final int GENERIC_WRITE = 0x40000000;
private static final int FILE_ATTRIBUTE_NORMAL = 0x80;
private static final int FILE_FLAG_BACKUP_SEMANTICS = 0x02000000;
private static final String DRIVE_LETTER_PREFIX = "\\\\?\\";
private static final String VOLUME_GUID_PREFIX = "\\\\?\\Volume{";
private static final String VOLUME_GUID_SUFFIX = "}\\";
private static final String LOG_FILE_PATH = "C:\\usb_log.txt";
private static HANDLE hLogFile = null;
public static void main(String[] args) {
hLogFile = Kernel32.INSTANCE.CreateFile(LOG_FILE_PATH, GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, null, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, null);
if (hLogFile == WinBase.INVALID_HANDLE_VALUE) {
System.err.println("Failed to open log file: " + LOG_FILE_PATH);
return;
WndProc usbWndProc = new WndProc() {
@Override
public LRESULT callback(HWND hWnd, int uMsg, WPARAM wParam, LPARAM lParam) {
if (uMsg == WM_DEVICECHANGE) {
switch (wParam.intValue()) {
case DBT_DEVICEARRIVAL:
DEV_BROADCAST_VOLUME vol = new DEV_BROADCAST_VOLUME(lParam);
if (vol.dbcv_devicetype == DBT_DEVTYP_VOLUME) {
String driveLetter = getDriveLetter(vol.dbcv_unitmask);
String volumeGuid = getVolumeGuid(driveLetter);
log("U盘插入: " + volumeGuid);
break;
case DBT_DEVICEREMOVECOMPLETE:
DEV_BROADCAST_VOLUME vol2 = new DEV_BROADCAST_VOLUME(lParam);
if (vol2.dbcv_devicetype == DBT_DEVTYP_VOLUME) {
String driveLetter = getDriveLetter(vol2.dbcv_unitmask);
String volumeGuid = getVolumeGuid(driveLetter);
log("U盘拔出: " + volumeGuid);
break;
case DBT_DEVNODES_CHANGED:
log("设备节点变化");
break;
return User32.INSTANCE.DefWindowProc(hWnd, uMsg, wParam, lParam);
String className = "USBMonitor";
WNDCLASS wc = new WNDCLASS();
wc.lpfnWndProc = usbWndProc;
wc.hInstance = Kernel32.INSTANCE.GetModuleHandle("");
wc.lpszClassName = className;
User32.INSTANCE.RegisterClass(wc);
HWND hWnd = User32.INSTANCE.CreateWindowEx(0, className, className, 0, 0, 0, 0, 0, null, null, null, null);
if (hWnd == null) {
System.err.println("Failed to create window");
return;
DEV_BROADCAST_DEVICEINTERFACE notificationFilter = new DEV_BROADCAST_DEVICEINTERFACE();
notificationFilter.dbcc_size = notificationFilter.size();
notificationFilter.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;
GUID guid = new GUID();
guid.guidData1 = 0xA5DCBF10;
guid.guidData2 = 0x6530;
guid.guidData3 = 0x11D2;
guid.guidData4 = new byte[]{(byte) 0x90, 0x1F, 0x00, (byte) 0xC0, 0x4F, (byte) 0xB9, 0x51, (byte) 0xED};
notificationFilter.dbcc_classguid = guid;
HDEVNOTIFY hDevNotify = User32.INSTANCE.RegisterDeviceNotification(hWnd, notificationFilter, DEVICE_NOTIFY_WINDOW_HANDLE);
if (hDevNotify == null) {
System.err.println("Failed to register device notification");
return;
MSG msg = new MSG();
while (User32.INSTANCE.GetMessage(msg, hWnd, 0, 0) > 0) {
User32.INSTANCE.TranslateMessage(msg);
User32.INSTANCE.DispatchMessage(msg);
User32.INSTANCE.UnregisterDeviceNotification(hDevNotify);
User32.INSTANCE.DestroyWindow(hWnd);
Kernel32.INSTANCE.CloseHandle(hLogFile);
private static String getDriveLetter(int unitmask) {
for (char c = 'A'; c <= 'Z'; c++) {
if ((unitmask & 0x01) != 0) {
return DRIVE_LETTER_PREFIX + c + ":";
unitmask >>>= 1;
return null;
private static String getVolumeGuid(String driveLetter) {
char[] volumeGuid = new char[1024];
int length = Kernel32.INSTANCE.QueryDosDevice(driveLetter, volumeGuid, volumeGuid.length);
if (length == 0) {
return null;
String volumeGuidStr = new String(volumeGuid, 0, length);
if (!volumeGuidStr.startsWith(VOLUME_GUID_PREFIX) || !volumeGuidStr.endsWith(VOLUME_GUID_SUFFIX)) {
return null;
return volumeGuidStr.substring(VOLUME_GUID_PREFIX.length(), volumeGuidStr.length() - VOLUME_GUID_SUFFIX.length());
private static void log(String message) {
String logMessage = String.format("[%s] %s\n", new Date(), message);
byte[] logBytes = logMessage.getBytes(StandardCharsets.UTF_8);
ULONG_PTR bytesWritten = new ULONG_PTR();
Kernel32.INSTANCE.WriteFile(hLogFile, logBytes, logBytes.length, bytesWritten, null);
注意:这段代码只能在Windows操作系统上运行。