사인코드의 핵심 기능에 대한 코맨트와 무력화에 대한 힌트를 적어놓겠으니 재량껏 읽기 바란다.
댓글도 관리자 승인 후에만 달 수 있는 언론통제형 기술허세 블로그와 쓰이지도 않고 있는 특허를 내세운 마케팅에 낚여 최근 많은 게임들이 사인코드로 갈아타는 추세다.
구조부터 시작해보겠다.
우선 사인코드는 인터페이스 모듈 x3.xem에서 각종 모듈들을 파일에서 가져오든, 웹에서 받아오든 한 후에 메모리에 매뉴얼 매핑해 올린다. 그 모듈들은 헤더만 붙이면 순수한 바이너리 파일로 뽑아 분석이 가능하다. 가장 많이 봐야할 서브모듈은 xbase, xclio, xobserver등이 있겠지만 역시 감지에 관련된 xez와 xkaga 이겠다.
드라이버에 관해 언급하자면, 예제코드 보고 짠 수준의 설계다. 암호화도 없고 스니핑도 쉽다. Api후킹이 되어있을 경우를 대비해 커널모드에 winapi비슷하게 구현해서 호출하면 프로세스 핸들 등을 돌려준다.
구조상 무결성검사에 매우 취약하다. 게임 코드 체크섬을 뜨는 시도도 안 보이고 그것을 서버로 보내는 정황은 전혀 없다. 스스로에 대한 체크도 서버사이드 기능은 없다. 하트비트 구현이 매우 쉽다는 의미이며, 논 클라봇 제작에 있어서는 사인코드는 있으나 마나 한 수준이라는 의미가 된다.
칭찬을 좀 해주자면, dll injection에 관련된 감지는 조금 짜증난다. 수상한 스레드도 감지하는 듯하다. 허나, 아마추어스럽게 각종 시스템 dll들도 의심스럽다며 로그를 쌓는다.
가장 개념찬 기능은 켜지도 않은 프로그램들의 실행 기록-정확히말하자면 prefetch와 바로가기등을 스캔해 로그도 쌓고 감지도 한다는 것이다. 저작권과 개인정보의식의 지옥이라는 한국에 걸맞는 기능이다. 당 기능은 해외 던파 커뮤니티에서 언급되며 유저들이 게임을 지우고 항의하는 등 논란이 컸었다.
( https://m.reddit.com/r/DFO/comments/30tcb6/xigncode_looks_at_all_files_youve_accessed_in_the/ )
또, 체크섬 기반의 탐지가 멍청함을 깨달았는지, 프로그램 내 리소스-이미지와 아이콘을 스캔하는 독창적인 기능도 있다. 짝짝.
개인적인 의견으로는 개발자들에게 정신분열증이 있거나 협업도구를 쓸 줄 모르는 것 같다는 것이다. 각 모듈은 api후킹 방지나 스트링 처리가 제각각이다. 어떤 모듈은 자기가 쓰려는 api를 바이트어레이를 사용해 검색해내며, 어떤 모듈은 getprocaddress를, 어떤 모듈은 getprocaddress의 직접구현한 버전을 사용한다. 자랑이신 매뉴얼매핑 기술로 ntdll.dll을 매뉴얼 매핑한 후에 그 내부 api를 호출하기도 한다.
모듈간 함수 호출 시 불편한 문제를 없애기 위해 많은 매서드들이 virtual method로 작성돼있다. 이는 양날의 검이다. 특히 초보 리버서들에게는 켜보기 전까진 무슨 매서드를 호출하는지 몰라 막막하지만, 다 분석이 되면 객체지향적 그림은 훨씬 잘 그려진다.
스코어링을 사용한 매크로 탐지 기능도 보인다..
Getasynckeystate나 message박스 류 함수 호출하면 감지당한다. ㅋㅋㅋㅋ
개발자가 개발엔 재능이 영 없는지 초보적인 버그들이 많이 보인다. 자료구조를 어설프게 직접 구현하려다 생긴 문제나 매뉴얼매핑에 대한 지식 부족에서 나오는 실수 같은 것들.
총평.
중상.
어설픈 핵쟁이들 막기엔 잘 해놨다.
다만 false positive가 높은 기법들을 잔뜩 써놔서 나같은 일반사용자들에게 피해를 많이 준다. 겜하는데 변조 프로그램이니 뭐니 개소리 안 했으면 이런 글도 없었을거다.
리버싱을 제대로 하는 사람에게 이정도는 무력화하는 데에 1주일 정도의 여흥거리정도라고 보면 된다.
핵쉴드와 비교하면 약 반도 못 미치는 완성도라고 볼 수 있겠다. 개발자들이 리버싱을 할 줄 안다고 자부하는 것 같은데, 초보적인 수준이며, 개발을 더 잘한다. 몇명은 개발도 못 한다.
게임사님들, 핵쉴드 씁시다. 논클라봇 막으셔야지요 ^^