AutoIt腳本的反編譯和代碼格式化問(wèn)題分析
最近集中冒出一波AutoIt的惡意腳本來(lái),也就多看了幾個(gè)這類的樣本。AutoIt腳本是以“.au3”為擴(kuò)展名的明文腳本,但病毒作者自然不會(huì)把明文的腳本放出來(lái)。所以自然用到了AutoIt自帶的這個(gè)Au2Exe的工具:
可以看到AutoIt允許用戶將au3的明文腳本編譯成exe文件或者a3x文件。exe文件自不必贅述,就是我們平時(shí)熟悉的PE文件,但如果編譯成exe文件,則失去了AutoIt腳本在惡意程序領(lǐng)域的優(yōu)勢(shì)(懂的自然懂,不細(xì)說(shuō)),所以目前捕獲的大多數(shù)惡意樣本都是將腳本編譯成a3x文件。
網(wǎng)上比較多的是Exe2Au3的反編譯工具(據(jù)說(shuō)早期版本的AutoIt是自帶這個(gè)工具的,后來(lái)不帶了),但下了幾個(gè),都很耿直——真的都只能反編譯Exe文件,而對(duì)a3x文件表示無(wú)力。最后才找到了一個(gè)叫做Autoit3 Decompiler GUI的工具(http://www.dbjr.com.cn/softs/390596.html):
用這個(gè)工具,就能很簡(jiǎn)單的將a3x文件反編譯成au3的明文腳本了。BUT——為什么萬(wàn)事總有個(gè)BUT——反編譯出來(lái)的腳本看著有些憂?!?/p>
就這代碼格式……幾十行還可以忍,一兩百行已經(jīng)是上限了……惡意代碼動(dòng)不動(dòng)幾千行,看著腦袋都大啊……本著磨刀不誤砍柴工的思想,果斷寫了一個(gè)自動(dòng)格式化腳本(by Python),貼出來(lái)和大家分享下。
說(shuō)明:對(duì)AutoIt了解不多,僅針對(duì)我目前見(jiàn)過(guò)的腳本,做一個(gè)比較粗陋而暴力的格式化工作而已
#!/usr/bin/env python2.7 #-*- coding: utf-8 -*- _AU3 = ';./sample.au3'; _AU3_OUT = ';./format.au3'; _INDENT = '; '; * 4 def au3formater(line, indent): line = line.strip().lower() next_indent = indent if (line.startswith(';end';) or line.startswith(';until';) or line in (';next';, ';wend';)): indent -= 1 next_indent -= 1 elif line.startswith(';if';) and line.endswith(';then';): next_indent += 1 elif (line.startswith(';func';) or line.startswith(';for';) or line.startswith(';select';) or line.startswith(';switch';) or line.startswith(';while';) or line == ';do';): next_indent += 1 elif line.startswith(';else';) or line.startswith(';case';): indent -= 1 new_line = _INDENT * indent + line return new_line, next_indent def main(): with open(_AU3, ';r';) as fp: with open(_AU3_OUT, ';w';) as fpw: indent = 0 line = fp.readline() while line: new_line, indent = au3formater(line, indent) fpw.write(';%s\n'; % new_line) line = fp.readline() if __name__ == ';__main__';: main()
格式化完成后,看著就舒服多了(不確定是否是我個(gè)人的強(qiáng)迫癥而已……):
當(dāng)然,即便是看著舒服些了,即便是明文腳本,幾千行的代碼看著也是很憂桑的
相關(guān)文章
使用AutoIT實(shí)現(xiàn)自動(dòng)登錄/退出客戶端軟件,刪除日志
最近在測(cè)試新版客戶端時(shí)發(fā)現(xiàn),會(huì)不定時(shí)的出現(xiàn)登錄失敗,提示信息是“連接登錄服務(wù)器失敗...”。經(jīng)過(guò)一番嘗試,發(fā)現(xiàn)在安裝客戶端后登錄,錯(cuò)誤出現(xiàn)的幾率較高。2009-03-03用autoit編寫第一個(gè)腳本(Hello World)
此頁(yè)將介紹創(chuàng)建并運(yùn)行AutoIt腳本的一些基本方法。我們假定您已經(jīng)使用我們提供的安裝程序安裝好了AutoIt v3。2008-06-06