zj3t

email: euntaejang@gmail.com

Latest Posts

Reversing.kr-ransomware

By 오후 10:03 ,

미국에서 발견된 스파이웨어 등의 신종 악성 프로그램. 컴퓨터 사용자의 문서를 볼모로 잡고 돈을 요구한다고 해서‘랜섬(ransom)’이란 수식어가 붙었다. 인터넷 사용자의 컴퓨터에 잠입해 내부 문서나 스프레이시트, 그림 파일 등을 제멋대로 암호화해 열지 못하도록 만들거나 첨부된 이메일 주소로 접촉해 돈을 보내 주면 해독용 열쇠 프로그램을 전송해 준다며 금품을 요구하기도 한다.

[네이버 지식백과] 랜섬웨어 [ransomware] (IT용어사전, 한국정보통신기술협회)

이문제 푸는데 하루이상 걸렸습니다. 처음 풀어보는 문제라 어떻게 접근하고 어떤원리인지 깨닫는데만 하루걸린거 같아요


문자열 검색으로 key를 찾고 밑을 보면 이러한 루프가있습니다. (몇개는 생략 직접 해보세요 찾기 쉽습니다.) 윗부분을 요약하자면 fopen(mode는 r+b 읽기/쓰기용) 으로 암호화된 file을 열고 fseek, ftell등의 명령을 수행한후 rewind로 파일의 시작점으로 포인터를 이동시킨뒤 fgetc()로 파일의 내용을 byte로 가져옵니다.(복호화 루프)
저기 cmp 부분에서 총 16진수로 2400번 10진수로 9000번정도 반복합니다. 

이곳을 요약하자면 fgetc()의 반환값 ^ key[i]값^0xFF입니다.

힌트를 주었는데 file은 exe로 실행된다는 것입니다. 실행파일(.exe)의 끝은 의도적으로 바꾸지 않는다면 0으로 모두 초기화 되어있습니다. (HxD로 확인) 그렇다면 fgetc()의 반환값은 언젠가 0이 되어 key[i] xor 0xFF만 수행되는 것을 알 수 있습니다. 

fgetc()의 반환값이 0이 되면서 file의 끝을 보면 13byte씩 반복되는 것을 확인 할 수가있습니다. 여기서 햇갈렸던 것은 나는 0123456를 입력해도 복호화과정이 진행되는데 key의 byte를 검사하는 명령도 없었고  저 루프에서는 9000번에 다다르는 반복문동안 key값은 내가 입력한 key값으로만 연산된다는 것이였다.(실제로 9000번을 돌려봤습니다. 궁금해서)  이것은 더찾아보고 업데이트 해보겠습니다. 따라서 저기서 key는 13byte라는 것을 알았고 저 반복되는 것을 프로그래밍으로 작성해서 key값을 알아봤습니다.
작성하여 key값을 알아내고 ransomware의 폴더에있던 file을 exe로 바꾸어 실행하면 됩니다.(프로그래밍은 굉장히 쉽습니다. 위에를 읽어보면 어떤 연산을 해야하는지 감이 오실꺼에요 모르시면 답글 부탁드려요)


이 값을 Reversing.kr의 인증에 넣어주면 됩니다.








You Might Also Like

0 개의 댓글