niemtin007

facebook.com/niemtin007

hãy theo đuổi đam mê - chủ nợ sẽ theo đuổi bạn

Friday, February 3, 2017

Batch script - kỹ năng cơ bản nhất dành cho người lười muốn trở thành hacker



Chào các bạn tớ là 007, tớ muốn làm hacker, tớ ứ dùng Windows, Linux muôn năm. Nghiêm túc chứ? Nếu xét về thị phần OS cho người dùng cá nhân thì Windows luôn đứng đầu. Windows là tốt nhất ư? không... Vậy nó mạnh mẽ nhất ư? cũng không... Đơn giản nó quen và dễ dùng hơn các OS khác thôi. Trong cuộc sống hay dù là gì thì mọi thứ vẫn sẽ tìm con đường đơn giản nhất để đi trước. Tớ tin rằng hệ điều hành bạn tiếp xúc đầu tiên và sử dụng thường xuyên vẫn là Windows, phải không bạn ;)

Đối với bất kỳ hacker nào cơ sở của họ vẫn là những dòng lệnh. Người dùng hiện nay quá quen với những GUI giao diện đồ họa bắt mắt khiến họ ngày càng lười biếng hơn. Nếu muốn làm hacker một cách nghiêm túc, bạn hãy làm quen với giao diện dòng lệnh (CLI - Command Line Interface)






Batch script có khó không?

Không khó đâu bạn, chỉ vài dòng cơ bản bạn đã có thể tạo được một chương trình. Nó có thể làm được gì ư? Virus? Nghiêm túc đấy thời kỳ đầu nó được tạo ra đơn giản bằng cách này thôi. Qua thời gian ngày càng tinh vi hơn thì nó được thể hiện bằng nhiều ngôn ngữ khác nhau. Hầu hết virus được tạo ra với mục đích xấu nhưng cũng không ít virus được tạo ra nhằm giúp giải quyết nhiều công việc phức tạp mà bản thân quyền hạn của một số chương trình chưa làm được.

Batch script có chứa những dòng lệnh đơn giản nhưng mạnh mẽ, nếu kết hợp khéo léo những script với nhau vào một file thực thi có đuôi mở rộng là .cmd hay .bat (batch file) bạn có thể tạo nên một chương trình giúp ta làm được nhiều việc thú vị.


Cách viết một batch file

Bạn vẫn có thể tạo một chương trình bằng cách gõ từng lệnh lên command prompt rồi enter, nhưng chẳng ai rảnh làm như vậy cả, viết vào file thực thi rồi chạy file đó hay hơn. Vậy cần phải chuẩn bị công cụ nào hỗ trợ không? Không nhất thiết nhé, bản thân Windows đã có đủ những công cụ cần cho bạn, việc của bạn là bắt tay vào làm thôi. Bạn có thể viết qua trình Notepad mặc định của Windows, nhưng nếu muốn code dễ nhìn hơn bạn có thể sử dụng Notepad++ (riêng mình thì thích sử dụng Notepad Mod hơn)

1. Một chương trình đơn giản

code:
@echo off
title %~nx0
color 0e
mode con lines=18 cols=70
echo.
echo Hello World!
pause
exit

Ý nghĩa:

Kết quả:



Lưu ý: Nếu bạn không muốn hiện dòng "Press any key to continue . . ." bạn sửa lệnh pause thành pause >nul lúc này chỉ có dấu nhắc thay vì hiện dòng chữ như trên. Lệnh >nul bạn cũng có thể đặt phía sau các lệnh copy, rename, hay delete để ẩn thông báo, giúp giao diện dòng lệnh được gọn gàng hơn.



2. Đặt biến, nhập dữ liệu đầu vào

Trong một chương trình có những đại lượng thay đổi liên tục và được sử dụng trong các câu lệnh tiếp theo, để hạn chế thao tác, giúp ta tự động hóa nhiều quá trình liên tục batch script hỗ trợ đặt biến
set name= x (với x là số hoặc chuỗi)
set /a name= x (với x là số)

@echo off
set /a count= 1
set /a count= %count% + 5
echo the answer is %count%
pause>nul



Để nhập dữ liệu đầu vào: số, chuỗi... ta sử dụng câu lệnh set /p name= "chuỗi gợi ý nhập dữ liệu"

@echo off
set /p input= input your name ^> 
echo Your name is %input%
pause>nul




3. Câu điều kiện

Chắc chắn một điều khi bạn bắt đầu xây dựng những chương trình lớn hơn sẽ có nhiều trường hợp xảy ra mà chương trình phải chạy những đoạn script cho phù hợp. Để giải quyết vấn đề đó batch script hỗ trợ câu điều kiện nếu ... thì hoặc nếu không ... thì

@echo off
set /p input= input your name ^> 
if %input% == niemtin007 echo He is my boss
if not %input% == niemtin007 echo I don't know him
pause>nul

Cách thể hiện khác
@echo off
set /p input= input your name ^> 
if %input% == niemtin007 (echo He is my boss
) else (echo I don't know him)
pause>nul





4. Định nghĩa bước nhảy cho từng cụm script

Một chương trình chính là tập hợp của nhiều đoạn script có chức năng khác nhau mà nên. Nhưng cách thức hoạt động của một batch file là chạy từng dòng lệnh từ trên xuống. Vậy nếu tôi muốn thực hiện cụm script chức năng thứ hai hay thứ n trước thì phải làm sao? Đơn giản thôi nhé, batch script hỗ trợ đặt nhãn (:name) và lệnh nhảy cóc (goto :name)

:loop
echo Hello World!
goto :loop

Chúc mừng, bạn đã biết cách tạo một vòng lặp rồi đấy. Chức năng của đoạn script trên sẽ giúp in trên màn hình chuỗi Hello World! vô hạn, chỉ có thể dừng lại khi bạn tắt cửa sổ command prompt

Nếu ta kết hợp câu điều kiện với nhãn và lệnh nhảy cóc ta có thể tạo ra một menu cho chương trình

@echo off
echo --------------------------------
echo [ 1 ] Option 1    [ 2 ] Option 2
echo --------------------------------
set /p option= Input your option [ ? ] ^> 
if %option% == 1 goto :option1
if %option% == 2 goto :option2
echo Invalid Input & color 4f & pause>nul & exist

:option1
echo your option is %option%
pause>nul

:option2
echo your option is %option%
pause>nul





5. Tạo một file text có đuôi mở rộng bất kỳ

Trong khi lập trình, đôi lúc bạn cần phải xuất một vài giá trị ra một file cụ thể nào đó, file này có thể là một file trung gian để là đầu vào dữ liệu cho đoạn script khác khi biến dữ liệu thay đổi liên tục. Đôi lúc file này là một file cấu hình bạn muốn tạo ra để cung cấp cho một chương trình khác sử dụng. Đôi lúc nó chỉ là một file nhật ký thông thường ghi chú lại những dấu vết mà chương trình vừa hoạt động.

Batch script hỗ trợ tạo file với cú pháp như thế này:
>"đường dẫn file muốn tạo"  (
echo nội dung
)

File author.txt có nội dung là niemtin007 sẽ được tạo ra cùng thư mục với batch file có nội dung dưới
>"%~dp0\author.txt" (
echo niemtin007
)

File author.txt có nội dung là niemtin007 sẽ được tạo ra tại ổ C:\ với batch file có nội dung dưới
>"C:\author.txt" (
echo niemtin007
)



6. Đọc và lấy dữ liệu từ một file text

Câu lệnh dưới đây sẽ giúp đọc file theo từng dòng và xuất ra giá trị của dòng cuối cùng mà nó đọc được

@echo off
for /f "tokens=*" %%b in (C:\author.txt) do set name=%%b
echo the author is %name%
pause>nul



Lệnh for ... in ... do rất hữu ích và nó cũng có rất nhiều biến thể, dưới đây là một đoạn script giúp tớ xác định disk number từ giá trị disk letter khi cắm USB hay ổ cứng di động vào, phục vụ cho một chương trình nhỏ giúp cài đặt công cụ multiboot toolkit lên USB/HDD

for /f "tokens=2 delims= " %%b in (
'WMIC Path Win32_LogicalDiskToPartition Get Antecedent^, Dependent ^| find "E:"'
) do set disk=%%b
set /a disk=%disk:~1,1%

Ta cùng phân tích nhé:
Trước tiên tớ dùng WMIC (Windows Management Instrumentation Command-line) tức là công cụ quản lý Windows dưới giao diện dòng lệnh

WMIC Path Win32_LogicalDiskToPartition Get Antecedent, Dependent


Có gì đó sai sai... Tại sao trên batch file trước dấu , hay | hay > lại có ký tự
Đơn giản chúng nó là các ký tự đặc biệt, khi viết thành batch file để khi chạy thông qua command promt mà nó hiểu được thì cần thêm ký tự ^ Còn khi chạy trực tiếp trên command promt ta không cần thêm ký tự đó

WMIC Path Win32_LogicalDiskToPartition Get Antecedent, Dependent | find "E:"


Nếu xem giá trị được in ra trên màn hình là một bảng thì giá trị tokens=2 của đoạn script chính là cột thứ 2. Nhưng tôi đâu thấy có cái cột nào đâu? Hãy để ý nhé, giá trị delims= " trước dấu hai phẩy có một khoảng trắng đúng không nào ^^ vậy đấy, khoảng trắng chính là cái phân cách một chuỗi dài thành nhiều cột. Ở trên đây ta thấy có tất thảy 4 cột đúng không nào, giá trị cột thứ 2 tớ cần chính là #0, các câu lệnh phía dưới chỉ là hỗ trợ để trừ chuỗi và lấy ra giá trị cần tìm của tớ là số 0 Vậy ổ E:\ mà tớ cần tìm nằm ở disk 0. Nếu ta thử thay khoảng trắng bằng dấu , trong giá trị delims=," thì sao? Lúc này ta chỉ có 2 cột:
cột 1 là\\NIEMTIN007\root\cimv2:Win32_DiskPartition.DeviceID="Disk #0
cột 2 là:  Partition #6"  \\NIEMTIN007\root\cimv2:Win32_LogicalDisk.DeviceID="E:"

Bằng cách trừ chuỗi ta cũng có thể tìm ra giá trị cần để gán vào một biến cụ thể phải không nào ^^ Thế đấy, ngôn ngữ cũng chỉ là công cụ, cái chính là hãy để cho trí tưởng tượng của bạn bay cao bay xa, và nhớ rằng trí tưởng tượng không có giới hạn hãy để nó tự do bay nhảy, tớ tin rằng bạn sẽ tạo nên nhiều chương trình thú vị và hãy chia sẻ nó cho cộng đồng ^^



7. Tận dụng chế độ dòng lệnh của những tool có sẵn để xây dựng một thứ gì đó lớn hơn

Để phát triển nhân loại luôn sử dụng những thành tựu đã có trong quá khứ và tiếp tục phát huy. Chẳng ai lại đi phát minh lại chiếc bánh xe cả, trong lập trình cũng thế. Không phải tự nhiên lại tồn tại một cộng đồng mang tên là "cộng đồng mã nguồn mở" mà cũng chẳng phải tự nhiên mà nhiều công cụ lại có hỗ trợ chế độ dòng lệnh.

Ở dưới đây là một đoạn code giúp tự động repartion cho USB để làm sạch bảng phân vùng của USB trước khi tạo boot cho nó mà mình ứng dụng thông qua công cụ bootice

%~dp0bootice.exe /DEVICE=%disk% /partitions /repartition /usb-hdd /fstype=fat32 /quiet

Bạn có thắc mắc là vì sao tớ biết được dòng lệnh này không? Ở phần help đó bạn, ở một số tool không có GUI giao diện bạn chỉ cần mở Command Prompt từ folder chứa file .exe của tool đó và gõ tên file cùng với lệnh --help. Bạn sẽ nhận được sự giúp đỡ




8. Trang web hữu ích để tìm hiểu các lệnh của batch script

Nếu thắc mắc, hãy hỏi anh google qua nhiều từ khóa khác nhau nhưng vì ổng rất khó tính nên bạn hãy đưa ra yêu cầu cụ thể bằng cách gõ đúng từ khóa nhé, ổng ấy sẽ ưu tiên các từ khóa bằng Tiếng Anh hơn ^^ 
Nếu bạn biết cách hỏi sẽ có được câu trả lời, luôn có sự giúp đỡ dành cho những ai xứng đáng

Nếu không biết dùng các lệnh của batch script như thế nào các bạn có thể ghé qua trang
Còn nếu cần một ví dụ về một chương trình được viết bằng batch file thì bạn có thể tải bộ công cụ Multiboot Toolkit của mình và soi code trong đó, nếu bạn hiểu được ý nghĩa của các script thì mình tin rằng lúc đó bạn đã khá vững về batch script rồi đấy ^^



Thế đọc xong bài này tớ đã biết hết về batch script chưa? Chắc làm hacker được rồi nhỉ

Uhm, thành thật mà nói thì chưa đâu, đây chỉ là một kỹ năng, một kỹ năng hết sức cơ bản. Phía trên tớ chỉ giới thiệu cho bạn những cái cơ bản nhất mà bạn có thể xây dựng một chương trình nhằm giúp bạn tự động hóa một số công việc.  

Đừng vội buồn. Tớ và các bạn có thể được gọi với một cái tên khác Advanced User - cũng đáng tự hào lắm chứ bộ :D

Ngôn ngữ cũng chỉ là một công cụ, bạn có thể không cần phải biết hết mọi thứ về batch script, chỉ cần hiểu cách thức hoạt động của CLI là bạn cũng đã thành công rồi. Nếu có hứng thú với Python, hãy cho tớ biết, có thể một ngày buồn buồn nào đó tớ lại ngồi tự kỷ viết bài chơi. Hẹn gặp lại các bạn vào những bài viết sau ;) Chúc các bạn thành công ^^





Blog được tạo ra chỉ với mục đích chia sẻ kinh nghiệm. Không thu phí bạn đọc dưới bất kỳ hình thức nào. Chúc các bạn thành công!
Join Our Newsletter