簡單分析AutoIt指令碼的反編譯和程式碼格式化問題

大雄45 發表於 2022-06-14
導讀 這篇文章主要介紹了AutoIt 的反編譯和程式碼格式化問題分析,需要的朋友可以參考下

最近集中冒出一波AutoIt的惡意 來,也就多看了幾個這類的樣本。AutoIt指令碼是以“.au3”為副檔名的明文指令碼,但病毒作者自然不會把明文的指令碼放出來。所以自然用到了AutoIt自帶的這個Au2Exe的工具:

簡單分析AutoIt指令碼的反編譯和程式碼格式化問題簡單分析AutoIt指令碼的反編譯和程式碼格式化問題

可以看到AutoIt允許使用者將au3的明文指令碼編譯成exe檔案或者a3x檔案。exe檔案自不必贅述,就是我們平時熟悉的PE檔案,但如果編譯成exe檔案,則失去了AutoIt指令碼在惡意程式領域的優勢(懂的自然懂,不細說),所以目前捕獲的大多數惡意樣本都是將指令碼編譯成a3x檔案。

網上比較多的是Exe2Au3的反編譯工具(據說早期版本的AutoIt是自帶這個工具的,後來不帶了),但下了幾個,都很耿直——真的都只能反編譯Exe檔案,而對a3x檔案表示無力。最後才找到了一個叫做Autoit3 Decompiler GUI的工具():

簡單分析AutoIt指令碼的反編譯和程式碼格式化問題簡單分析AutoIt指令碼的反編譯和程式碼格式化問題

用這個工具,就能很簡單的將a3x檔案反編譯成au3的明文指令碼了。BUT——為什麼萬事總有個BUT——反編譯出來的指令碼看著有些憂桑……

簡單分析AutoIt指令碼的反編譯和程式碼格式化問題簡單分析AutoIt指令碼的反編譯和程式碼格式化問題

就這程式碼格式……幾十行還可以忍,一兩百行已經是上限了……惡意程式碼動不動幾千行,看著腦袋都大啊……本著磨刀不誤砍柴工的思想,果斷寫了一個自動格式化指令碼(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()

格式化完成後,看著就舒服多了(不確定是否是我個人的強迫症而已……):
簡單分析AutoIt指令碼的反編譯和程式碼格式化問題簡單分析AutoIt指令碼的反編譯和程式碼格式化問題

當然,即便是看著舒服些了,即便是明文指令碼,幾千行的程式碼看著也是很憂桑的

原文來自:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2900377/,如需轉載,請註明出處,否則將追究法律責任。