[35C3 CTF 2018] Corebot

2018-12-31

35C3 CTF에 나온 리버싱 문제 corebot에 관하여 작성합니다.

개요

35C3 CTF에서 가장 낮은 리버싱 문제입니다. 오랜만에 보는 PE 파일을 사용하는 문제, 1~2시간 끄적이다가 풀지 못했다.

외국 애들이 쓴 Write-up이 올라오자 마자 직접 확인해보며, 공부 했습니다.

개인적인 생각으로는 파일을 암,복호화 하는 랜섬웨어의 기초를 알려주는 문제인듯 합니다.

도구

  • wrestool = PE파일의 리소스를 추출해주는 도구

분석

하나의 파일을 얻습니다.(corebot-640d3c582340e647d72e1dd9418a3fd6)

따로 접근법이 생각나지 않아, IDA를 사용하였습니다. 전체적인 흐름은 위의 사진처럼 매우 단순합니다.

IDA HEX-RAY를 통해 코드를 확인합니다.

주요 함수 흐름은 CryptAcquireContextA -> GetVolumeInformationA -> “AES KEY GENERATE” -> CryptImportKey -> CryptSetKeyParam -> sub()(load resource) -> CryptDecrypt -> check! 형식으로 진행됩니다.

간단히 말하자면, load resource를 통해 암호화 된 resource, cipher text를 얻어오고, CryptDecrypt 함수를 통해 Cipher text를 plain text를 만들고 난 후, 제대로 복호화가 됬는지 check하는 흐름입니다. 나머지 함수들은 CryptDecrypt를 하기 위해 인자 및 핸들들을 세팅하는데 도움을 주는 함수입니다.

각 사용된 CryptApi들에 대한 인자 및 리턴 값에 대해서는 모두 인터넷에 공개되었기 때문에, 그것을 통해 각 함수의 역할 및 파라미터의 역할들을 알아 낼 수 있습니다.

추출

코드를 짤 때 위에서 분석된 내용을 토대로, 복호화 코드를 짜면 끝나는 일이지만, Cipher text를 알아야지 모든 것을 시작할 수 있습니다. 이 Cipher text(resourece)를 추출해야 합니다.

–help를 통해 간단히 무슨 역할을 하는 도구인지 확인 합니다.

추출(xxd를 통해 hex로 보기)!

코드

결론

wrestool에 대해서 알게 되었고, 개인적으로 처음 보는 유형이었다.