2016년 3월 29일 화요일

[M사 솔루션 취약점을 활용한 악성코드] 암호화 데이터 복호화 루틴 / Encode String Decode Routine

* 서론

관리 솔루션으로 유명한 M사의 솔루션을 이용한 악성코드를 분석했다.

딱히 내용은 없고 서버가 살아있지 않아서 중단.

대신 추후 비슷한 공격이 있을 수 있으니 암호화 데이터 복호화 루틴 구현.

* 코드


#!/usr/bin/python
# -*- coding: utf-8 -*-
__author__ = 'NOFACELAB'

import sys

def main():
 key = "\x78\x56\x34\x12"
 key_size = len(key)
 encode_data = "\xEF\xD3\xDF\xF2\xEB\xC1\x6B\xE1\x06\xB7\x83\xD6\x1F\x63\x14\x63"
 encode_data += "\x8A\x03\x45\xE6\xD1\xF2\xA9\x5E\x6B\x44\x1F\x69\xBA\x9E\x84\x3A"
 encode_data += "\x5C\x8F\x41\x8E\xCB\x79\x89\x62\x71\x0B\x1C\x96\x55\xC2\x62\x84"
 encode_data += "\x79\x51\x3F\xDE\x4D\xFC\xB8\xD3\xF4\xB4\xF2\x3F\x66\x7C\x95\x2B"
 encode_data_size = len(encode_data)
 decode_data = ""
 
 xorKeySize = 256
 xorKeyData = [x for x in range(xorKeySize)]
 xorKeyDataKey = [key[x % 4] for x in range(xorKeySize)]
 
 idx = 0
 for i in range(0, xorKeySize):
  c = xorKeyData[i]
  idx = divmod(c + ord(xorKeyDataKey[i]) + idx, xorKeySize)[1]
  xorKeyData[i] = xorKeyData[idx]
  xorKeyData[idx] = c
  
 idx = 0
 cnt = 0
 for i in range(0, encode_data_size):
  idx = (idx + 1) % xorKeySize
  c = xorKeyData[idx]
  cnt = divmod(c + cnt, xorKeySize)[1]
  xorKeyData[idx] = xorKeyData[cnt]
  xorKeyData[cnt] = c
  decode_data += '%c' % (ord(encode_data[i]) ^ xorKeyData[divmod(c + int(xorKeyData[idx]), xorKeySize)[1]])
  
 print decode_data
 
 return

if __name__ == '__main__':
 main()

댓글 없음

댓글 쓰기

© NoFaceLab
Maira Gall