F95스레드 : https://www.anime-sharing.com/threads/psa-malware-detected-from-members-upload.1847789/page-9
참고글 : https://kone.gg/s/somisoft/cvcwtgs27JN4fZA5Hs850b?p=2
위 게시글에서 등장한 바이러스로 의심받는다던 engine.bin이 궁금해서 추가로 분석해봤습니다.
결론 : 바이러스는 아니고, 암호화 DRM 시스템의 일부분으로 보입니다.
아래 분석 과정 내용은 신빙성을 위해 정리해두었으나 모두를 위한 내용은 아닙니다 ㅎㅅㅎ 관심있으신 분들만 읽어보셔요
파일의 시작 부분을 매직 바이트(매직 넘버)라고 합니다. 이는 무슨 파일인지 알 수 있는 중요한 단서가 됩니다.
D2 03 DE C0 인데, 이를 little endian이라는 방식으로 읽으면 0xC0DE03D2가 됩니다.
C0DE가 심히 프로그래머의 웅취가 납니다.
RPGM 게임이 js를 사용하므로, js 엔진인 V8 관련 코드를 검색하여 매직 바이트가 C0DE인 것을 찾아보니
빙고! V8 엔진의 바이트코드 캐시 데이터(직렬화)에 쓰이는 매직넘버였습니다.
바이트코드라는 가정을 기반으로 나머지 내용을 분석해봅니다.
파일의 초반부를 헤더라고 합니다. 전체적인 파일 구성이 어떤지 알려주는 개괄이라고 볼 수 있습니다.
검색해본 V8 cached data의 헤더 구조에 따라 정보를 추출하면 다음과 같은데 그냥 버전과 길이가 담겨있을 뿐, 행위 분석에는 의미가 없는 메타데이터이기 때문에 넘어가겠습니다.
이제 이후 내용을 분석해야 하는데, V8 cached data 구조에 대해 잘 검색이 되지 않습니다.ㅠㅜ
어차피 완전한 분석을 해야하는 건 아니니, 대충 읽을 수 있는 데이터(아스키 코드)만 추출해보도록 합니다.
굉장히 흥미로운 단서들이 나온 상황입니다.
일단 첫번째로, 디버거/리버싱 관련된 이름들이 나왔습니다. (올리디버거, IDA, 치트엔진, VM 탐지 등등... )
내 코드를 못뜯게 하기 위해서 저런 프로그램이 켜져있으면 실행 못하게끔 하겠다! 라는 의지를 보여줍니다.
두번째로는, JS API 흔적들이 보이네요. (require, process, console.error 등등..)
처음에 V8 cache 데이터라고 분석한 내용에 신빙성을 실어주는 문자열입니다. JS 코드가 컴파일 되었다는거니까요!
세번째로는, 시스템 명령이 보입니다.
tasklist /NH /FO /CSV (윈도우 프로세스 목록 가져오기, 첫번째 내용과 같이 프로세스 목록을 분석하는데 사용하는 코드인가 봅니다.)
네번째로는, 우리에게 친숙한 base64 인코딩 데이터가 보입니다.
NDE6HR8Udjw0NA==
NDE6HxQdCy5qdjw0NA==
각각 복호화하면 b'41:\x1d\x1f\x14v<44', b'41:\x1f\x14\x1d\x0b.jv<44' 인데, 이를 XOR로 브루트포스해봅시다.
짜스! 우리에게 익숙한 DLL이름들이 나왔습니다.
마지막으로는 64길이의 HEX가 평문으로 있네요.
E7FFFFC20C008B75E48B4510FF30E8760B000059C38BFF558BEC83EC1CA11030
3000008D44240C0F859800000031C0C704240030000089F18944240489442408
해시라고 하기엔 글자 분포가 이상합니다.
클로드에게 도움을 요청해봅시다.
아하! 머신코드라네요. 도대체 머신코드가 DRM에 왜 있는걸까요?
앞선 문자열들과 조합해서 상상을 해보자면, 머신코드가 있을만한 데이터는 DLL이 유력하겠네요.
DLL들의 무결성을 검사하기 위해 일부분을 저장해둔게 아닐까? 라는 합리적 의심을 할 수 있겠습니다.
DLL에서 저 HEX가 있을까요?
빙고! 있었습니다.
내용을 정리하자면,
가. engine.bin은 V8 캐시 바이트코드를 저장하고 있으며,
나. 게임을 뜯어보거나 수정할 수 있는 환경을 막기 위해 프로세스를 조사하여 디버거, 디스어셈블러, 메모리 변조 등을 탐지하려고 하고,
다. DLL의 변조 또한 막기 위해 일부 데이터를 저장해두어 비교가 가능하게끔 데이터를 담고 있다. 라고 볼 수 있겠습니다.
디버거 막고 디스어셈블러 막는건 바이러스의 동작 아니야? 라고 생각 하실수도 있지만
검사하는 프로세스명 중 게임 리소스 추출도구 및 키젠, 치트 엔진 등 악성 코드 입장에서 1차적으로 막을 이유가 없는 프로세스들을 검사함과 동시에
DLL의 위변조를 검사하는 프로세스가 있기 때문에 악성 행위로 보기에는 부적합한 측면이 있다고 보여집니다.
(DLL이 정상이라는 가정하에.. VT 결과로는 별 이상 없어보입니다.)
그렇기 때문에 저는 engine.bin 또한 다른 스크립트를 암호화한 DRM의 일부라고 결론짓겠습니다. (아마 암호화툴에서 심어둔거겠지용)
하지만 왜 멀쩡한 게임을 암호화를 해서 재배포를 하는지는 .. 정말 악한 취미네요 허허
