IniDevice; //获得设备列表
RejectUSB; //卸载设备
DisMountCmdOk:=false;
mydate:=now; //获取当前日期时间
sj:=FormatDateTime('yyyy"年"mm"月"dd"日"hh"时"mm"分"',MyDate);
sj:=sj+' 移动设备序列号:'+inttostr(UsbId);
Append(UsbFile); //保存非法U盘使用时间到日志文件中
WriteLn(UsbFile,sj);
end;
上文中的密码登录和U盘授权代码请读者详见本文附带源代码。U盘授权界面如下:
3.3 防止进程强制结束
防止进程被强制结束网上有很多类似的代码探讨,笔者认为常用的有两个方法:一是真正隐藏进程,即进程不在任务管理器中显示。此方法实现难度比较大,并且具有主动防御的杀毒软件会拦截。二是用远程线程插入技术创建守护线程,此方法原理比较简单,实现起来也相对容易。本文将采用第二种方法。
第二种方法的原理是:把守护线程写在DLL里面,用远程线程API函数让目标进程加载DLL,这样守护线程就在别的进程中执行。本文把守护线程插入到了Explorer进程。具体实现代码:
//远程线程插入自定义函数(HostFile为目标进程,GuestFile为要插入DLL)
function AttachToProcess(const HostFile, GuestFile: string; const PID: DWORD = 0): DWORD;
var
hRemoteProcess: THandle; //目标进程句柄
dwRemoteProcessId: DWORD; //目标进程ID
cb: DWORD;
pszLibFileRemote: Pointer;
iReturnCode: Boolean;
TempVar: DWORD;
pfnStartAddr: TFNThreadStartRoutine; pszLibAFi
|