728x90
반응형
레지스트리 분석으로 사용했던 프로그램을?
윈도우 레지스트리 정보에는 사용했던 프로그램 정보들을 가지고 있는 항목이 있습니다. 윈도우 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)];
우선 복호화 시켰을 무슨 어떤 문자랑 일치하는지 확인하기 위해 소문자와 대문자를 컴프리헨션을 통해 리스트로 만들어줍니다.
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!
코드를 실행해본 결과 제가 어떤 프로그램을 사용했는지 잘 확인 됩니다.
더보기
# userasist 레지스트리
# 암호화 된 레지스트리 키 값 복호화 시키기
lowerLETTERS = [chr(x) for x in range(97, 123)];
upperLETTERS = [chr(x) for x in range(65, 91)];
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)
def encrypt(char, letters):
retString = '';
originalIndex = letters.index(char)
newIndex = originalIndex + 13
retString += letters[newIndex % len(letters)]
return retString
def hexToDecimal(param1):
byteToHexString = param1.hex()
total = int()
for x in range(0, len(byteToHexString)):
if x %2 == 0:
testA = byteToHexString[x:x+2]+''
total += int(testA,16)
return total
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:
ExecuteNumber = hexToDecimal(b[4:8])
print(ExecuteFile,ExecuteNumber)
except Exception as e:
print(e)
728x90
반응형
'Language > Python' 카테고리의 다른 글
구글 스프레드시트 이용 시 gspread 설정하기 (0) | 2022.04.07 |
---|---|
프로세스의 실행 경로 가져오기 (0) | 2022.04.05 |
0은 False이다 !! (0) | 2022.04.03 |
pyinstaller의 EXE파일, 소스 코드 열어보기 (0) | 2021.09.19 |
pyJWT : encode /decode / registerd claim names (0) | 2021.08.13 |