+ Reply to Thread
Results 1 to 10 of 10

Thread: Tổng quan về ngôn ngữ AutoIT - Ngôn ngữ dùng để viết virus YM và các tool Auto games

  1. #1
    Administrator halv87's Avatar
    Join Date
    Jan 2007
    Location
    Hương Khê - Hà Tĩnh
    Posts
    2,108
    Points
    95,194.89

    Smile Tổng quan về ngôn ngữ AutoIT - Ngôn ngữ dùng để viết virus YM và các tool Auto games

    Mở đầu cho chiến dịch spam bài viết có chất lượng, tớ xin post loạt bài viết về ngôn ngữ autoit, một ngôn ngữ mà khi tớ đọc đến tớ đã rất thích và cũng đã có thời gian tìm hiểu, tuy nhiền nó có vẻ là ngôn ngữ quá cao nên không phù hợp lắm. Ai quan tâm thì có thể đọc và làm theo, có rất nhiều cái hay được khai thác ở ngôn ngữ này. Đặc biệt là khi tìm hiểu đến phần tương tác với IE ấy....Các virus YM đều được code bằng autoit, thỉng thoảng bạn lại thấy YM gửi tin nhắn đi tự động là do thằng này can thiệp đấy. Đọc thử đi, tui nghĩ đây là một ngôn ngữ rất hay. Nhưng cẩn thận thằng BKAV nó diệt hết tất cả các file autoit của tớ, mặc dù nó chỉ là tools tự động cài đặt software thôi. Thằng BKAV thật là đoảng quá
    Bài của identical - updatesofts

    1. Giới thiệu về AutoIt. Lịch sử phát triển

    AutoIt là gì? Nó có được coi là một ngôn ngữ lập trình ko? Đó là câu hỏi thường được nhắc đi nhắc lại

    AutoIt là một ngôn ngữ dễ học, dễ sử dụng, giúp người dùng có thể thực thi những công việc mình thường phải làm trên máy tính một cách tự động. Bằng cách giả lập các phím bấm, các nút click chuột, cùng với khả năng tương tác với các cửa sổ, các chương trình, các file trong máy tính... AutoIt có thể làm được rất nhiều việc. Nhỏ, nhẹ, thậm chí có thể ko cần cài đặt, khả năng tương thích cao (từ Win 95 đến Win 2k3) và khả năng xuất ra file exe đã khiến AutoIt trở nên thông dụng và ngày càng được nhiều người biết đến

    Riêng ở VN, AutoIt được biết đến thông qua hàng loạt những "virus" phát tán qua YM Có thể nói đây là một "hướng đi" khác của các chương trình viết bằng AutoIt, góp phần ko nhỏ khiến cho ngày càng nhiều các công cụ anti-virus nhận diện chương trình viết bằng AutoIt là virus, bất luận mục đích thực sự của những chương trình này là tốt hay xấu

    Ban đầu, các file mã nguồn AutoIt mang đuôi .ini (AutoIt 1), sau chuyển sang .aut (AutoIt 2) và giờ là .au3 (AutoIt 3). Mã nguồn chương trình AutoIt từ chỗ khá rắc rối (phiên bản 2) đã trở nên cực kỳ đơn giản và dễ hiểu (phiên bản 3), do khá gần gũi với ngôn ngữ BASIC. Cũng nên nói thêm một chút, trong quá trình đi từ AutoIt 2 lên AutoIt 3, một lập trình viên trong nhóm phát triển AutoIt đã quyết định tách ra thực hiện một dự án mới, mang lại nhiều tính năng mạnh mẽ thậm chí còn hơn AutoIt - tuy vậy cú pháp ngôn ngữ này cực kỳ phức tạp và khó hiểu , ko trong sáng như AutoIt 3.

    AutoIt có thể được tải về từ trang chủ www.autoitscript.com

  2. #2
    Administrator halv87's Avatar
    Join Date
    Jan 2007
    Location
    Hương Khê - Hà Tĩnh
    Posts
    2,108
    Points
    95,194.89
    2. Những công cụ cần dùng để viết các chương trình bằng AutoIt

    Hiển nhiên, trước tiên bạn cần có AutoIt.

    AutoIt được phân phối ở 2 dạng: Installer và ZIP. Phiên bản mới nhất là 3.2.0.1.

    Ở dạng Installer, bạn sẽ down về một file exe: http://www.autoitscript.com/cgi-bin/....0.1-setup.exe - bộ cài của AutoIt. Down bộ cài đồng nghĩa với việc bạn sẽ có thêm nhiều tiện ích khi sử dụng AutoIt. Ví dụ, khi bạn kích chuột phải vào 1 file .au3, sẽ có tùy chọn cho phép bạn chạy script / sửa script bằng editor...

    Còn dạng ZIP: http://www.autoitscript.com/cgi-bin/...t-v3.2.0.1.zip - dạng này cho phép bạn sử dụng AutoIt ở bất cứ đâu mà ko cần phải cài đặt (tạo rác trong registry ). Đây chính là bản portable mà bạn có thể đặt trong USB stick của mình

    Để soạn thảo file .au3, bạn có thể dùng bất cứ trình soạn thảo nào, thậm chí là Notepad của Windows Nếu muốn pzo hơn, có tính năng highlight code, chạy thử code bằng cách bấm F5... bạn có thể sử dụng SciTE. Đây là bản SciTE đã được sửa đổi để giúp bạn trong quá trình sử dụng AutoIt: http://www.autoitscript.com/autoit3/scite/downloads.php

    Hoặc, bạn có thể dùng Textpad, Crimson Editor hay PSPad để viết các chương trình AutoIt. Các file syntax dành cho 3 trình soạn thảo này được kèm trong thư mục Extras\Editors của AutoIt.

    Sau khi tiến hành cài đặt / giải nén AutoIt, bạn sẽ thấy một số file quan trọng nằm trong thư mục này và các thư mục con:
    • AutoIt3.exe - Công cụ dùng để chạy các mã nguồn viết bằng AutoIt
    • Aut2Exe.exe - Công cụ biên dịch file .au3 thành .exe để phân phối
    • Exe2Aut.exe - Công cụ dịch ngược file .exe (viết bằng AutoIt - hiển nhiên) về .au3
    • Au3Info.exe - Công cụ cho biết thông tin về các cửa sổ trên màn hình
    Còn khá nhiều file khác, tuy nhiên trên đây là những công cụ cần thiết nhất.

  3. #3
    Administrator halv87's Avatar
    Join Date
    Jan 2007
    Location
    Hương Khê - Hà Tĩnh
    Posts
    2,108
    Points
    95,194.89
    3. Ngôn ngữ AutoIt qua cái nhìn khái quát

    Làm thế nào để biết cách sử dụng và làm chủ sức mạnh của AutoIt?

    Câu trả lời hết sức đơn giản: Tham khảo file Help + Forum của AutoIt.

    Tất cả những j` cần thiết đều đã được trình bày một cách kỹ càng và đầy đủ trong file Help của AutoIt. Ở đây, tớ chỉ dẫn ra những điểm quan trọng nhất về ngôn ngữ AutoIt.

    3.1. Cấu trúc file .au3

    Một file script viết bằng AutoIt có định dạng .au3

    File au3 này bao gồm các dòng lệnh, ví dụ như sau:

    Code:
    ; This is my second script (with functions)
    MsgBox(0, "My second script!", "Hello from the main script!")
    TestFunc()

    Func TestFunc()
    MsgBox(0, "My Second Script!", "Hello from the functions!")
    EndFunc
    Như bạn có thể thấy, dòng đầu tiên là một chú thích, được đặt sau dấu ;. Nếu chú thích dài nhiều dòng, bạn có thể đặt trong khối #cs - #ce:

    Code:
    #cs
    Comment goes here
    Line 1
    Line 2
    #ce
    3.2. Biến trong AutoIt

    Trong AutoIt, các biến bắt đầu bằng dấu $, giống như ngôn ngữ PHP. Biến có thể được khai báo bằng các từ khóa Dim, Local hay Global:

    Code:
    Dim $var1, $myvariable
    Hoặc, bạn có thể dùng trực tiếp biến mà ko cần khai báo:

    Code:
    $var1 = "create and assign"
    AutoIt hiển nhiên cũng hỗ trợ mảng nhiều chiều. Bạn chỉ việc sử dụng chúng cùng với chỉ số đặt trong dấu ngoặc vuông. Ví dụ:

    Code:
    $Array[1]="A"
    $Array[1][1]="Upper-Left"

  4. #4
    Administrator halv87's Avatar
    Join Date
    Jan 2007
    Location
    Hương Khê - Hà Tĩnh
    Posts
    2,108
    Points
    95,194.89
    3.3. Các kiểu dữ liệu

    AutoIt gồm các kiểu dữ liệu: Số; Xâu (hay chuỗi); Logic; Xâu nhị phân.

    Dữ liệu kiểu số có thể là số nguyên (10, -6) hay số thực (3.334, 1.4e5) hay thậm chí ở dạng Hex (0x4FFFF, 0x409 - bắt đầu bằng 0x)

    Dữ liệu kiểu xâu (chuỗi) được đặt trong dấu nháy đơn / nháy kép:

    Code:
    'This "sentence" contains "lots" of "double-quotes" does it not?'
    Dữ liệu kiểu logic có 1 trong 2 giá trị: true hoặc false:

    Code:
    $Boolean1 = true
    $Boolean2 = false
    Cuối cùng, kiểu xâu nhị phân là xâu bao gồm ký tự chr(0):

    Code:
    $bin = "abc" & chr(0) & "def"
    $bin = BinaryString("abc")
    3.4. Các toán tử

    Cũng như các ngôn ngữ lập trình khác, AutoIt có các toán tử quen thuộc: +, -, *, /, ^...

    Hoàn toàn có thể sử dụng các toán tử như +=, -=, *=, /=

    Với kiểu logic, AND, OR và NOT là các toán tử hợp lệ.

    3.5. Cấu trúc điều khiển

    Có 3 loại cấu trúc điều khiển trong AutoIt:
    1. If...ElseIf...Else...EndIf
    2. Select...Case...EndSelect
    3. Switch...Case...EndSwitch
    Cấu trúc If...ElseIf...Else...EndIf kiểm tra điều kiện, sau đó thực thi các lệnh:

    Code:
    If $var > 0 Then
    MsgBox(4096,"", "Value is positive.")
    ElseIf $var < 0 Then
    MsgBox(4096,"", "Value is negative.")
    Else
    If StringIsXDigit ($var) Then
    MsgBox(4096,"", "Value might be hexadecimal!")
    Else
    MsgBox(4096,"", "Value is either a string or is zero.")
    EndIf
    EndIf
    Cấu trúc Select...Case sử dụng trong trường hợp cấu trúc If trở nên rườm rà:

    Code:
    Select
    Case $var = 1
    MsgBox(0, "", "First Case expression was true")
    Case $var2 = "test"
    MsgBox(0, "", "Second Case expression was true")
    Case Else
    MsgBox(0, "", "No preceding case was true!")
    EndSelect
    Cấu trúc Switch...Case...EndSwitch hoàn toàn tương tự, tuy nhiên nó tiến bộ ở chỗ cho phép bạn chỉ rõ khoảng giá trị cần kiểm tra:

    Code:
    Switch @HOUR
    Case 6 To 11
    $msg = "Good Morning"
    Case 12 To 17
    $msg = "Good Afternoon"
    Case 18 To 21
    $msg = "Good Evening"
    Case Else
    $msg = "What are you still doing up?"
    EndSwitch

  5. #5
    Administrator halv87's Avatar
    Join Date
    Jan 2007
    Location
    Hương Khê - Hà Tĩnh
    Posts
    2,108
    Points
    95,194.89
    3.6. Các vòng lặp

    Các loại vòng lặp trong AutoIt gồm có:
    1. For...Next
    2. While...WEnd
    3. Do...Until
    4. With...Endwith
    5. For...In...Next
    For...Next được sử dụng để lặp từ giá trị ban đầu đến giá trị kết thúc, theo bước nhảy định sẵn:

    Code:
    For $i = 5 to 1 Step -1
    MsgBox(0, "Count down!", $i)
    Next
    MsgBox(0,"", "Blast Off!")
    While...WEnd và Do...Until tương tự như While Do và Repeat Until của Pascal:

    Code:
    $i = 0
    While $i <= 10
    MsgBox(0, "Value of $i is:", $i)
    $i = $i + 1
    WEnd
    Code:
    $i = 0
    Do
    MsgBox(0, "Value of $i is:", $i)
    $i = $i + 1
    Until $i = 10
    With...EndWith dùng với các đối tượng, giúp tiết kiệm công sức khi gõ:

    Code:
    $oExcel = ObjCreate("Excel.Application")
    $oExcel.visible =1
    $oExcel.workbooks.add

    With $oExcel.activesheet
    .cells(2,2).value = 1
    .range("A1:B2").clear
    Endwith

    $oExcel.quit
    Tương tự, bằng cách sử dụng For...In...Next, ta có thể duyệt qua tất cả mảng / tập các đối tượng:

    Code:
    FOR $element IN $aArray
    $string = $string & $element & @CRLF
    NEXT

  6. #6
    Administrator halv87's Avatar
    Join Date
    Jan 2007
    Location
    Hương Khê - Hà Tĩnh
    Posts
    2,108
    Points
    95,194.89
    3.7. Hàm

    Hàm trong AutoIt được định nghĩa bằng cách dùng khối Func...EndFunc:

    Code:
    Func MyDouble($value)
    $value = $value * 2
    Return $value
    EndFunc
    Sử dụng hàm cũng rất đơn giản:

    Code:
    $val = 10
    For $i = 1 To 10
    $doubled = MyDouble($val)
    MsgBox(0, "", $val & " doubled is " & $doubled)
    $val = $doubled
    Next
    Số lượng hàm tự định nghĩa rất nhiều và có thể được lấy về từ autoitscript.com

  7. #7
    Administrator halv87's Avatar
    Join Date
    Jan 2007
    Location
    Hương Khê - Hà Tĩnh
    Posts
    2,108
    Points
    95,194.89
    6. GUI

    6.1. Thiết kế GUI

    Nếu như các script viết bằng AutoIt có thể hoạt động một cách hoàn toàn âm thầm, nghĩa là click và chạy mà người dùng ko biết j` (mở ngoặc: giống "virus" YM nhờ ), thì đôi khi bạn lại muốn tạo một GUI cho script cho giống một soft hoàn chỉnh

    Khả năng tạo GUI trong AutoIt góp phần làm cho nó trở nên phổ biến và tiện dụng hơn

    Trong GUI, bạn có thể tạo label, button, checkbox, radiobox, list, progress bar, context menu... nói chung là tất tần tật những j` mà một GUI có thể có.

    Để tạo một ứng dụng có GUI, bạn có thể tạo bằng cách tự viết code lấy - Cái này chả khác j` với việc làm đồ họa bằng Pascal. Phải căn ke từng mili trên màn hình, sửa đổi vị trí cho hợp nhãn,... túm lại là rất phiền

    Thử ví dụ một GUI cho dễ hình dung nhé:

    Code:
    ; GUI
    GuiCreate("Sample GUI", 400, 400)
    GuiSetIcon(@SystemDir & "\mspaint.exe", 0)


    ; MENU
    GuiCtrlCreateMenu("Menu&One")
    GuiCtrlCreateMenu("Menu&Two")
    GuiCtrlCreateMenu("MenuTh&ree")
    GuiCtrlCreateMenu("Menu&Four")

    ; CONTEXT MENU
    $contextMenu = GuiCtrlCreateContextMenu()
    GuiCtrlCreateMenuItem("Context Menu", $contextMenu)
    GuiCtrlCreateMenuItem("", $contextMenu) ;separator
    GuiCtrlCreateMenuItem("&Properties", $contextMenu)

    ; PIC
    GuiCtrlCreatePic("logo4.gif",0,0, 169,68)
    GuiCtrlCreateLabel("Sample pic", 75, 1, 53, 15)
    GuiCtrlSetColor(-1,0xffffff)


    ; AVI
    GuiCtrlCreateAvi("sampleAVI.avi",0, 180, 10, 32, 32, $ACS_AUTOPLAY)
    GuiCtrlCreateLabel("Sample avi", 170, 50)

    ; GUI MESSAGE LOOP
    GuiSetState()
    Một cách khác, thuận tiện hơn, đó là sử dụng một soft dạng GUI Builder. Có nhiều GUI Builder dành cho AutoIt, nhưng theo quan điểm cá nhân, có lẽ Koda là khá nhất. Công cụ này có thể tại về từ trang web: http://www.autoitscript.com/fileman/...ormdesign.html

    Phiên bản mới nhất là 1.6, cập nhật ngày 19/9.

    Koda cho phép bạn dễ dàng tạo GUI chỉ bằng cách drag-and-drop vào form, sau đó sẽ tự động sinh code AutoIt để bạn đưa vào script của mình. Rất rất tiện lợi nếu so sánh với việc code từ đầu bằng tay.

    6.2. Gắn GUI với code

    Có GUI rồi, là đến lúc bạn muốn gắn nó với các mã AutoIt thực thi các lệnh đã viết từ trước.

    AutoIt hỗ trợ 2 chế độ tương tác với GUI: OnEvent và MessageLoop. Có thể đảo qua lại 2 chế độ bằng cách dùng lệnh:

    Code:
    Opt("GUIOnEventMode", 1)
    Ở chế độ OnEvent, ta sẽ gắn từng "sự kiện" với một hàm tương ứng. Ví dụ, ta gắn "sự kiện" người dùng click nút Close với hàm Close():

    Code:
    GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSE")
    Func CLOSE()
    MsgBox(0, "GUI Event", "You clicked CLOSE! Exiting...")
    Exit
    EndFunc
    Ở chế độ MessageLoop, ta có một cách tiếp cận hoàn toàn khác. AutoIt sẽ tạo một vòng lặp vô hạn, liên tục kiểm tra xem có sự kiện nào xảy ra với GUI ko - thông qua một hàm mang tên GUIGetMsg.

    Toàn bộ việc gắn code với GUI được thực hiện qua một vòng lặp While:

    Code:
    While 1
    $msg = GUIGetMsg()

    Select
    Case $msg = $GUI_EVENT_CLOSE
    MsgBox(0, "GUI Event", "You clicked CLOSE! Exiting...")
    ExitLoop
    EndSelect
    WEnd

  8. #8
    Administrator halv87's Avatar
    Join Date
    Jan 2007
    Location
    Hương Khê - Hà Tĩnh
    Posts
    2,108
    Points
    95,194.89
    7. Chạy thử, biên dịch, đóng gói và phân phối

    Có script hoàn chỉnh. Có GUI hoàn hảo. Đó là lúc bạn nghĩ đến việc tiếp theo. Phân phối tới càng nhiều người càng tốt (nhưng đừng dùng cách phát tán qua YM nhé )

    Để chạy script viết bằng AutoIt, bạn hãy mở file AutoIt3.exe và chọn đến file .au3 tương ứng.

    Để biên dịch thành file exe và đem đi phân phối, bạn cần đến công cụ Aut2Exe. Bạn cần chỉ định file mã nguồn, tên exe sẽ tạo, icon (nếu thích) và bấm Convert.

    Nếu bạn muốn mình có thể dịch ngược từ exe về au3 trong trường hợp đánh mất file .au3 gốc , hãy chọn Allow decompilation và gõ vào password của mình. Pass này sẽ dùng để tránh người khác dịch ngược file script của bạn.

    Nếu để ý kỹ, bạn sẽ thấy khi kích phải chuột vào file exe đã tạo + chọn properties, sẽ có thông tin File Version là phiên bản của AutoIt. Bạn rất có thể sẽ muốn loại bỏ thông tin này + đưa thông tin của riêng mình vào cho personal

    Điều đó hoàn toàn có thể thực hiện được khi bạn dùng Resource Editor.

    Tuy nhiên, nếu cố edit file exe đã biên dịch, bạn sẽ thấy mình phí công vô ích, bởi file exe mới sẽ ko hoạt động

    Hãy edit file AutoItSC.bin cùng thư mục với Aut2Exe.exe với những thông tin mà bạn thích, sau đó mới tiến hành biên dịch. Lần này, kết quả sẽ như mong đợi

    Bạn sẽ có một file .exe của riêng mình, với icon tùy ý, info ở mục properties tùy ý. Khó có thể nhận ra đó là script viết bằng AutoIt

  9. #9
    Administrator halv87's Avatar
    Join Date
    Jan 2007
    Location
    Hương Khê - Hà Tĩnh
    Posts
    2,108
    Points
    95,194.89
    8. Phụ lục 1: AutoIt or not AutoIt?

    Có thể nói ko ngoa, AutoIt là một con dao 2 lưỡi. Nó được tạo ra để giúp người dùng làm các script tự động hóa, giúp mình dễ thở hơn . Tuy vậy, AutoIt cũng có thể được dùng để tạo một con trojan, một con virus, whatever

    Phát tán con "virus" này là quá đơn giản. Hãy nhìn những j` các "virus" YM đã làm.

    Như đã nói ở trên, một file exe có thể được edit để khi mới nhìn vào, bạn khó có thể biết nó có phải là một script AutoIt hay ko.

    Nhưng, điều đó thực ra cũng ko hoàn toàn đúng. Một script viết bằng AutoIt, cho dù có được biên dịch với toàn bộ info trong file .bin bị luộc mất, vẫn có thể bị lộ danh tính, bằng chính một script AutoIt.

    Đây là hàm nhận diện script viết bằng AutoIt, được tớ sưu tầm từ forum của nó:

    Code:
    Func _IsAutoItExe($hFile)
    Local $hNew = StringTrimRight($hFile, 4) & 'verify.exe'
    FileCopy($hFile, $hNew)
    RunWait('"' & @ProgramFilesDir & '\AutoIt3\Aut2Exe\UPX.exe" -d "' & $hNew & '"', '', @SW_HIDE)
    Local $sString = String(BinaryString(FileRead($hNew)))
    FileDelete($hNew)
    Local $sFind = '3C6465736372697074696F6E3E4175746F497420333C2F646 5736372697074696F6E3E'
    If StringInStr($sString, $sFind) Then Return 1
    Return SetError(1, 0, 0)
    EndFunc

  10. #10
    Administrator halv87's Avatar
    Join Date
    Jan 2007
    Location
    Hương Khê - Hà Tĩnh
    Posts
    2,108
    Points
    95,194.89
    9. Phụ lục 2: Công cụ xem thông tin về các cửa sổ - Au3Info.exe

    Tự động hóa các công việc - đó cũng là lý do AutoIt có khả năng tương tác với các chương trình khác. Nhận diện một cửa sổ, xác định tọa độ chuột để giả lập việc click,... đó là những ứng dụng của Au3Info.exe.

    Bạn chỉ việc chạy file này, trỏ đến cửa sổ cần xem thông tin. Mọi điều cần biết - title, class, mouse position, pixel color, control info... sẽ hiện lên. Bạn có thể bấm Ctrl + Alt + F để giữ nguyên trạng thái của cửa sổ thông tin, và copy những thông tin đó vào script mình đang viết để dùng.

    10. Kết

    Trên đây là tut dài nhất, mất công nhất mà tớ từng viết. Hết vụ này xin phép nghỉ viết tut dài hạn

    Hãy coi đây là cái nhìn tổng quan về AutoIt, về ngôn ngữ AutoIt, các công cụ đi kèm, những thứ cần thiết, những điều mà bạn có thể quan tâm...

    Xin hết

+ Reply to Thread

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

     

Similar Threads

  1. Hot3: "Bách Khoa+Ngoại Ngữ" 20/10 <Xem ngay>
    By anhdungitvn in forum Pictures
    Replies: 34
    Last Post: 23-10-2008, 08:14 AM
  2. Tuyên ngôn cánh đàn ông
    By dragon_t5 in forum Chatting
    Replies: 23
    Last Post: 29-11-2007, 07:49 PM
  3. Replies: 1
    Last Post: 13-08-2007, 08:52 AM
  4. Thơ & Danh Ngôn Củ chuối!
    By ManhCuongBKA in forum Chatting
    Replies: 46
    Last Post: 27-03-2007, 11:35 PM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts