본문으로 바로가기
728x90
반응형
이전 블로그로부터 백업된 글입니다.
작성일: 2019-10-16 20:14
원제목: Python을 이용한 UserAssist 레지스트리 분석하
 

 

 
 

레지스트리 분석으로 사용했던 프로그램을?

윈도우 레지스트리 정보에는 사용했던 프로그램 정보들을 가지고 있는 항목이 있습니다. 윈도우 10에서 확인해 본 결과 경로는 다음과 같습니다. 

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist\{CEBFF5CD-ACE2-4F4F-9178-9926F41749EA}\Count


레지스트리 정보는 "Windows" 를 누르신 후, reg 까지 입력하면 자동으로 레지스트리 편집기를 찾아줍니다. 

 
 

암호화 되어있는 레지스트리 정보

아래의 사진은 제가 쓰고 있는 실제 컴퓨터에서 사용했던 프로그램 목록이 들어있는 레지스트리 정보입니다. 보시는 바와 같이 알 수 없는 문자열로 되어있습니다.

이유는 ROT13을 이용해 암호화 되어있기 떄문입니다. ROT13 암호화 방식이 궁금하신 분은 따로 찾아보시길 바라고 이번 포스팅은 이 암호화된 정보를 디코딩한 코드만 올려놓겠습니다.

 

Description

우선 복호화 시켰을 무슨 어떤 문자랑 일치하는지 확인하기 위해 소문자와 대문자를 컴프리헨션을 통해 리스트로 만들어줍니다.
lowerLETTERS = [chr(x) for x in range(97, 123)];
upperLETTERS = [chr(x) for x in range(65, 91)];
encrypt 함수는 rot13() 이라는 함수에서 사용될 함수입니다.
def encrypt(char, letters):
    retString = '';
    originalIndex = letters.index(char)
    newIndex = originalIndex + 13
    retString += letters[newIndex % len(letters)]
    return retString
encrypt 함수는 rot13() 이라는 함수에서 사용될 함수입니다.
def rot13(String):
    resultString = "";
    for str_ in String:
        if str_.isupper():
            resultString += encrypt(str_, upperLETTERS);
        elif str_.islower():
            resultString += encrypt(str_, lowerLETTERS);
        else:
            resultString += str_;
    return (resultString)

rot13() 이라는 함수는 매개변수로 받은 문자열 값을 복호화 시킬 때 사용합니다. for문을 통해 문자열을 대문자와 소문자랑 일치하는지 확인한 뒤 있으면 resultString에 추가해주는 방식이고 반복문이 끝나면 복호화 시킨 문자열을 리턴합니다.

from winreg import *

varSubKey = "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer" \
            "\\UserAssist\\{CEBFF5CD-ACE2-4F4F-9178-9926F41749EA}\\Count"
Key = CreateKey(HKEY_CURRENT_USER,varSubKey)

for x in range(0,100):
    try:
        a, b, c = EnumValue(Key, x)
        ExecuteFile = rot13(a)
        if ".exe" in ExecuteFile:
            print(ExecuteFile)
    except Exception as e:
        print(e)

 

Result!

코드를 실행해본 결과 제가 어떤 프로그램을 사용했는지 잘 확인 됩니다.

728x90
반응형