簡單分析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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 編譯程式(compiler)的簡單分析編譯Compile
- 反編譯之JD-GUI程式碼邏輯分析編譯GUI
- Java程式碼的編譯與反編譯那些事兒Java編譯
- 簡單看看原碼、補碼和反碼
- Unity單例模式,但是是取自Ultrakill反編譯程式碼Unity單例模式編譯
- Windows和Linux上均可編譯的簡單HTTP伺服器程式碼WindowsLinux編譯HTTP伺服器
- Cython加密python程式碼防止反編譯加密Python編譯
- 使用Reflector和Filedisassembler逆向編譯反編譯.cs.dll檔案程式碼編譯
- 程式碼混淆防止APP被反編譯指南APP編譯
- Gradle 編譯警告亂碼問題Gradle編譯
- Android開發:APK的反編譯(獲取程式碼和資原始檔)AndroidAPK編譯
- 利用 Powershell 編寫簡單的瀏覽器指令碼瀏覽器指令碼
- 編寫簡單的Java程式碼:HelloWoridJava
- linuxshell程式設計實戰-編寫簡單的指令碼實用工具Linux程式設計指令碼
- [譯] Swift 程式碼格式化Swift
- JS 預編譯程式碼例項分析JS編譯
- [20210107]編寫bash shell指令碼遇到的問題.txt指令碼
- 反編譯獲取任何微信小程式原始碼編譯微信小程式原始碼
- android 反編譯APK取原始碼。Android編譯APK原始碼
- python反編譯之位元組碼Python編譯
- 可以直接反編譯Mips架構的IDA版本(無需安裝指令碼)編譯架構指令碼
- Vue3原始碼分析——編譯模組和編譯器Vue原始碼編譯
- 題解1249:簡單編碼 (Java描述)Java
- 一個“指令碼執行夯死”問題的分析指令碼
- 手把手教你編寫最簡單的效能指令碼指令碼
- Java的指令碼機制、編譯器APIJava指令碼編譯API
- MySQL密碼加密認證的簡單指令碼MySql密碼加密指令碼
- 少編碼多思考:程式碼越多 問題越多
- apkTool---一個簡單好用的apk反編譯工具APK編譯
- 從編譯後的程式碼,分析 Angular @Injectable 的工作原理編譯Angular
- shell指令碼編碼格式問題,bin/sh^M: bad interpreter: No such file or directory指令碼
- Verilog 編譯指令簡介編譯
- 這誰頂得住?java反編譯的彙編程式碼private volatile static Singleton instanceJava編譯
- JavaScript簡單計算器程式碼分析JavaScript
- [譯]WebAssembly: 帶有程式碼示例的簡單介紹Web
- 簡單的 Shell 指令碼入門教程指令碼
- redis中lua指令碼的簡單使用Redis指令碼
- 微信小程式“反編譯”實戰(二):原始碼還原微信小程式編譯原始碼