簡單分析AutoIt指令碼的反編譯和程式碼格式化問題
導讀 | 這篇文章主要介紹了AutoIt 的反編譯和程式碼格式化問題分析,需要的朋友可以參考下 |
最近集中冒出一波AutoIt的惡意 來,也就多看了幾個這類的樣本。AutoIt指令碼是以“.au3”為副檔名的明文指令碼,但病毒作者自然不會把明文的指令碼放出來。所以自然用到了AutoIt自帶的這個Au2Exe的工具:
可以看到AutoIt允許使用者將au3的明文指令碼編譯成exe檔案或者a3x檔案。exe檔案自不必贅述,就是我們平時熟悉的PE檔案,但如果編譯成exe檔案,則失去了AutoIt指令碼在惡意程式領域的優勢(懂的自然懂,不細說),所以目前捕獲的大多數惡意樣本都是將指令碼編譯成a3x檔案。
網上比較多的是Exe2Au3的反編譯工具(據說早期版本的AutoIt是自帶這個工具的,後來不帶了),但下了幾個,都很耿直——真的都只能反編譯Exe檔案,而對a3x檔案表示無力。最後才找到了一個叫做Autoit3 Decompiler GUI的工具():
用這個工具,就能很簡單的將a3x檔案反編譯成au3的明文指令碼了。BUT——為什麼萬事總有個BUT——反編譯出來的指令碼看著有些憂桑……
就這程式碼格式……幾十行還可以忍,一兩百行已經是上限了……惡意程式碼動不動幾千行,看著腦袋都大啊……本著磨刀不誤砍柴工的思想,果斷寫了一個自動格式化指令碼(by Python),貼出來和大家分享下。
說明:對AutoIt瞭解不多,僅針對我目前見過的指令碼,做一個比較粗陋而暴力的格式化工作而已
#!/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()
格式化完成後,看著就舒服多了(不確定是否是我個人的強迫症而已……):
當然,即便是看著舒服些了,即便是明文指令碼,幾千行的程式碼看著也是很憂桑的
原文來自:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2900377/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料庫全量SQL分析與審計系統效能優化之旅
- 教你Python使用shutil操作檔案、subprocess執行子程式的方法
- 全球 77.5% 的網站都在用 PHP;百度一程式設計師刪庫被判 9 個月;OpenCV 4.6 釋出 | 思否週刊
- 資料庫圈周盤點:百度一程式設計師因刪庫被判刑;PG中文社群在東北地區成立分會
- RubyMine 2022 for Mac(Ruby程式碼編輯器)
- 區塊鏈技術開發主鏈區塊鏈的應用分析
- 教育機構如何通過微信直播上課?微信上網課小程式怎麼做?
- 阿里雲K8S元件Cloud Controller Manager升級問題排查
- 王者併發課-鉑金3:一勞永逸-如何理解鎖的多次可重入問題
- 劉勇智:一碼通缺陷分析與架構設計方案丨聲網開發者創業講堂 Vol.02
- 如何在 Vue 專案中,通過點選 DOM 自動定位VSCode中的程式碼行?
- Swoole 程式設計須知
- 如何在Vue專案中,通過點選DOM自動定位VScode中的程式碼行?
- 演算法的複雜度分析
- 乘聯會:2022年5月份全國乘用車市場深度分析報告