Professional Documents
Culture Documents
Diễn đàn chính Thảo luận virus, trojan, spyware, worm... TUT: Chỉ xài DOS COMMANDS diệt virus
Coi như máy tính của ta đơ đơ và ta làm trong DOS (Boot in DOS)
(Thanks to kamikazeq for ur question in virusvn)
G:\TaiLieu\
G:\TaiLieu\TaiLieu.exe
G:\TaiLieu\Excel\
G:\TaiLieu\Excel\Excel.exe
pause
Trước tiên các bạn cần nắm FOR COMMAND. Khi search bằng for theo giá trị (.) tức là chỉ tìm items định dạng thư
mục (folder). Nếu thay (.) thành (*.*) là chỉ tìm file, nếu thay bằng ( * ) là tìm tất cả file và folder
cd %%~pi
để di chuyển đến thư mục chứa thư mục đang scan, dùng xử loại virus 1
cd %%i
để di chuyển vào trong thư mục đang scan, dùng xử loại 2
Sau khi di chuyển ta thực hiện scan trong thư mục đó các file exe có tên trùng với thư mục đang scan (giá trị %
%~ni.exe) và có size bằng virus size
Code:
for %%j in (%%~ni.exe) do if %%~zj == 18458 echo %%~zj %%~fj
lệnh này chỉ scan trong thư mục hiện thời chứ k scan thư mục con
Ta lọc các file/folder có %%~ni.exe sau đó kiểm tra size có bằng 18458 (bytes) hay k?
Nếu có thì echo %%~zj %%~fj
Thay cho echo như trên bạn muốn làm gì thì tùy, del chẳng hạn %%~zj là size của nó, %%~fj là full_path của
nó
Đây chỉ là với các virus cũ, một số con mới hơn ngoài tạo hàng giả còn tạo chính nó trong thư mục ấy, khi đó
không có tên thư mục giống nó và
Code:
for %%j in (%%~ni.exe) do if %%~zj == 18458 echo %%~zj %%~fj
Xử lý:
Code:
for %%j in (*.exe) do if %%~zj == 18458 echo %%~zj %%~fj
ta quét toàn bộ các file exe sau đó so sánh dung lượng. Công việc này sẽ lâu hơn vì nhiều file trả về hơn.
Nếu virus k chỉ tạo chính nó (exe file) mà còn tạo những file định dạng khác, tên khác? vd virus.com, virus.pif...
Xử:
Code:
for %%j in (*.*) do if %%~zj == 18458 echo %%~zj %%~fj
là để tách một nhóm lệnh ra từng dòng (cái này ai học lập trình rồi sẽ biết ngay) vì nếu để trên một dòng thì error
ngay
Cuối cùng nên có lệnh PAUSE để xem nó đã làm gì, tùy bạn muốn tạo/xem log thế nào cũng đc
Recommend: Upper All chars
Tui nêu một vài vấn đề anh em bàn thêm, cũng đơn giản nếu linh động một chút:
Trường hợp
\folder1\folder11\
\folder1\folder12.exe
trong khi không tồn tại
\folder1\folder12
vậy khi scan, câu lệnh if exist... sẽ bỏ qua folder12 luôn, vậy có sót k? giải quyết?
Nếu là
\folder11\
\folder12.exe
trong khi không tồn tại
\folder12
thì sao?
Anh em cho ý kiến luôn nếu chỉ dùng một câu sau thay cho tất cả:
Code:
for /r I:\ %%j in (*.*) do if %%~zj == 18458 echo %%~zj %%~fj
việc echo hay del là tùy bạn (như đã nói trên), cái cần phân tích là ưu điểm và nhược điểm của cách này
Bạn nên để ý đến tốc độ chạy, khả năng bắt nhầm hay không, có sót không,...
Quên nói thêm, ta chỉ làm công việc tìm và xoá file virus (loại worm) chứ chưa can thiệp tới sửa chữa registry,
system
Multiple Bootable DVD - Win7 - XP SP2 - XP Live CD - Hiren 9.9 ...:
[url]http://www.hvaonline.net/hvaonline/posts/list/30744.hva[/url]
Bạn có thể thêm một số trường hợp ví dụ khác được không (mình vẫn chưa rõ cái cấu trúc lệnh tổng quát của
nó): chẳng hạn tìm các file theo điều kiện thuộc tính tập tin, theo ngày giờ chinh sửa hoặc mô phỏng theo các
đặc điểm của một tập tin nào đó, giới hạn kí tự tên tập tin ...
Đánh cho đời mãi mãi một màu xanh ...
J:\>for /?
Runs a specified command for each file in a set of files.
would parse each line in myfile.txt, ignoring lines that begin with
a semicolon, passing the 2nd and 3rd token from each line to the for
body, with tokens delimited by commas and/or spaces. Notice the for
body statements reference %i to get the 2nd token, %j to get the
3rd token, and %k to get all remaining tokens after the 3rd. For
file names that contain spaces, you need to quote the filenames with
double quotes. In order to use double quotes in this manner, you also
need to use the usebackq option, otherwise the double quotes will be
interpreted as defining a literal string to parse.
You can also use the FOR /F parsing logic on an immediate string, by
making the filenameset between the parenthesis a quoted string,
using single quote characters. It will be treated as a single line
of input from a file and parsed.
Finally, you can use the FOR /F command to parse the output of a
command. You do this by making the filenameset between the
parenthesis a back quoted string. It will be treated as a command
line, which is passed to a child CMD.EXE and the output is captured
into memory and parsed as if it was a file. So the following
example:
w4s.info wrote:
FOR /?
là biết ngay mà
Cám ơn bác, do đang ở Linux nên không có DOS, uhm, để mình cài DOSBOX vào rồi test thử vậy.
Đánh cho đời mãi mãi một màu xanh ...
Code:
for /r I:\ %%i in (.) do if exist %%~fi.exe (
cd %%~pi
for %%j in (%%~ni.exe) do if %%~zj == 18458 del %%~zj %%~fj )
vậy khi scan, câu lệnh if exist... sẽ bỏ qua folder12 luôn, vậy có sót k? giải quyết?
thực tế là batch file của bạn đã giải quyết hoàn hảo yêu cầu của kamikazeq rồi
bởi lệnh for search tên thư mục và đường dẫn rồi thêm đuôi .exe vào giá trị tập hợp của nó do đó nếu không tồn
tại thư mục folder12 thì trong tập hợp cũng không có đường dẫn folder12.exe luôn thì làm sao xóa tự động được.
Giải quyết theo cách bên dưới của bạn vậy là ổn rồi : hiếm có trường hợp hai file khác nhau trùng size lắm
Rảnh tay viết một batch theo cách của bạn nhưng nhập tên ổ đĩa và size properties từ bàn phím và chạy trên cả
windows
Code:
@echo off
if "1+%1"=="1+/?" goto help
if .==.%1 goto windows
for %%D in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do if %1==%%D goto
size
for %%L in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do if %1==%%L goto
size
goto warning
:windows
echo Enter disk name:
SET /P drive=
if .==.%drive% goto warning
for %%D in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do if %drive%==%%D
goto size
for %%L in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do if %drive%==%%L
goto size
goto warning
:size
if .==.%1 echo You entered %drive%
if .==.%1 echo.
if not .==.%2 goto input
echo Enter file size:
SET /P size=
if .==.%size% goto warning
echo You entered %size%
if not .==.%1 set drive=%1
goto search
:input
set drive=%1
set size=%2
:search
for %%k in (.) do set fullpath=%%~fk
%drive%:
cd \
for /r %drive%:\ %%i in (.) do if exist %%~fi.exe (
cd %%~pi
for %%j in (%%~ni.exe) do if %%~zj == %size% del /f %%~zj %%~fj )
if not errorlevel 1 echo successful
cd /d %fullpath%
set fullpath=
set drive=
set size=
goto end
:warning
echo error
:help
echo Usage: %0 [Drive] [size]
:end
echo on
%%~zj là size của file còn %%~fj là full_path, nên sửa lại lệnh del cho phù hợp, del luôn cả file định dạng
Readonly
Code:
Del /?
Chuyển đến:
2 Khách