2015년 11월 19일 목요일

사인코드 무력화에 대한 팁 #1

"어떤 게임엔 어떤 보호가 들어가고 어떤 게임엔 안 들어가는걸 봐서 게임마다 구현이 다른 것 같다" 이런 댓글이 달려서 하나 더 써본다.
사인코드는 개발사에게 사인코드 사용을 위한 SDK를 제공하고 있다.
그리고, 해당 SDK에서는 사인코드의 기능을 부분적으로 끄고 켤 수 있다.
물론 이런 함수들을 조작하면 사인코드의 특정 기능을 원하는대로  껐다 켤 수 있다.
네가 게임에 로그인한 아이디를 사인코드에 알려주는 알짜배기 기능도 있다. 네 개인정보를 뒤지다가 수상한게 발견되면 네 아이디랑 함께 서버로 쏘기 위한 기능이지.
그래서 결론을 말해주자면, 각 게임에 들어가 있는 사인코드는 전혀 안 다르다. 게임별로 SDK 에서 어떤 기능을 사용할지를 사인코드에 알려주면, 그에 따라 로드되는 모듈 종류만 다르다.
물론 모든 모듈은 매뉴얼매핑되기 때문에 그냥 메모리만 봐서는 감이 안 올거고, 매뉴얼매핑하는 함수를 찾아서 브레이크포인트를 걸고 언제 어떤 걸 로드하는지를 잘 봐.
무력화를 시도하려면 구조를 잘 알아야겠지? 이 함수가 그 초석이 될 거야.
실력이 좋다면 여기서 pure pe file을 뽑아낼 수도 있을 거야. 멍청하게 runnable한 바이너리를 추출할 수 있도록 해 놨거든.

덤프된 감지 모듈
추출해낸 주요 감지 모듈 중 하나
힘내.
나도 빨리 이런 프로그램이 내 컴퓨터에서 관리자권한 쳐먹고 돌 일이 없는 날이 왔으면 좋겠다.

2015년 11월 10일 화요일

사인코드 분석4

xhunter1.sys
게임 프로세스로의 접근을 막는 기능이 주된 기능.
또, 커널 모드에서 직접 API를 대신 호출해주어 API후킹을 무력화하는 기능, 크게 두 가지로 나뉨. 시스템폴더에 잠깐 만들어서 로드 후 삭제. 지우기 전에 복사한 다음 그냥 열면 모든게 다 나옴. 누누이 말하지만, 거의 대부분이 예제코드보고 따라 만든것 같은 퀄리티라 이런걸 내 커널에 올리고싶지가 않다.

프로세스 보호 부분
API후킹 무력화 부분


팁을 주자면, 이 드라이버를 다루는 데에 사인코드가 어떤 API를 쓰는지를 잘 생각해봐라. 아니면, 커널모드로 한 2바이트정도만 패치하는 것도 먹힌다. 한 번 해 놓으면 다음부턴 신경 안 써도 된다. 초기 개발자 한 명이 다 개발하고 그 이후론 유지보수만 간간이 하는 것 같다.
이건 뭐 더 쓰고싶어도 진짜 더이상 내용이 없다. 드라이버는 이게 끝이다.

사인코드 분석3

*2016 3.25추가*
하도 선동들을 많이 당해서, 직접 정정한다.
이 포스트 대부분의 내용은 위트를 위해 상당 부분 과장돼있다. 너네들, 기술적인건 읽지도 못해서 재미 없잖아, 맞지?
SSD수명, '네 생각만큼 미친듯이' 줄어드는 건 아니다. 그냥 일반 소프트웨어 사용보다 조금 더 많이 깎을 뿐이다. 요즘 SSD들은 평생 써도 write count 다 못 까먹는다는건 검색해보면 바로 나온다.
개인정보. 전체 디스크 스캔이란말은 한 적이 없다. 서버에 전송하는 파일? 있을수야 있겠지만, 난 언급한 바 없다.
정확한 정보 가지고들 이야기 해라.
**

이전글2가  하도 뭔소린지 모르겠다는 말들이 많아서 그냥 다시 흥미위주로 작성함. 원래는 뚫고 싶은 애들한테 팁주려는 거였는데, 그런애들은 댓글을 달던가 날 찾아서 알려달라고 하던가 해.
 아무튼 난 내 온라인게임생활을 방해하는 사인코드가 무척 싫기 때문에, 단점 위주로 잔뜩 알려줄거야.
 SSD 써? 그럼 게임 오래 켜놓으면 SSD의 수명이 비약적으로 줄어드는 효과를 누릴 수 있어. 왜냐면 주기적으로 디스크에서 감지할 프로그램을 싹 스캔하거든. 랜덤하게 한 30초에서 1~2분 사이에 한 번씩 스캔이라고 보면 돼.
 그 내용을 알려줄까?
 뭐 아무리 개인정보가 더이상 개인정보가 아닌 시대가 왔다지만 그래도..


네가 한 번이라도 켰던 모든 프로그램이나
네 컴퓨터에 존재하는 모든 바로가기들
네 컴퓨터에 연결 됐던 모든 하드웨어들
네 다운로드폴더, 내 사진, 내 연락처, 내 검색, 내 음악, 내 '동영상'..??


같은 정보를 주기적으로, 혹은 켤 때마다 읽고있는 걸 알면 좀 충격일텐데..?

관리자 권한 얘기를 해 볼까? 사인코드가 달린 게임을 켜면 관리자권한을 당연하다는 듯이 요구하잖아? 요즘 게임들은 내부컨텐츠로 인터넷을 띄우거나, 플래시, 동영상 등의 멀티미디어 파일을 많이 사용하지? 근데 그런 문서나 컨텐츠엔 악의적인 코드가 들어있는 경우가 많아... 그 코드가 관리자 권한으로 실행되는 순간 네 컴퓨터는 좀비행이야...

드라이버 이야기를 해보자.
xhunter1.sys
사인코드는 켤 때 xhunter1.sys 라는 드라이버를 네 컴퓨터에 모올래 설치하고 있어. 드라이버를 설치한다는 건, 그 사용자의 컴퓨터를 바닥부터 제어하겠다는 의미야. 맘만 먹으면 네 컴퓨터에 OS를 다시 깔아도 지워지지 않는 루트킷을 깐다던가,  다시는 켜지지 않게 만든다던가 하는 작업도 가능해. 일반 어플리케이션은 오류가 나면 그냥 꺼지지만 드라이버는 오류가 나면 블루스크린이 뜬다? 어? 하는 사람 있을거야. 이상하게 던파만 켜면 블루스크린이 뜬다던가, 하는사람들 몇 있던데. 얘는 메모리와 기타 자원을 계속해서 먹는 핵심 역할을 담당하고있기에, 재부팅하기 전 까지는 절대로 메모리에서 지울 수 없어. 이런거 설치해도 된다고 허용한 기억 있어?


다음편엔 뭘 써볼까..

2015년 11월 9일 월요일

사인코드 분석2


이전글에 이어 마저 써 보마.

 

핵심 기능

매뉴얼매핑


매뉴얼 매핑이 핵심 보안기능이라고 하면, 사실 개발자는 좀 부끄러워해야 한다. 부끄러우라고 쓴 거다. 매뉴얼 매핑이 뭔지 모르는 중생들에게 스피드왜건이 설명해주자면, 운영체제한테 보고하지 않고 몰래 dll을 로드하는걸 말한다.
즉 기능은 완전히 똑같이 작동하는데,








모듈 리스트
dll 리스트. x3.xem 한 개 밖에 안 보인다.

위 처럼 모듈 리스트에서는 숨겨지는 게 다다. 짝짝.
매뉴얼매핑이 뭔지도 모르는 핵쟁이들에겐 이걸 보면 "와 ㅅㅂ 코드가 분신술을 써 미쳤나봐!!"라고 감탄하게 만드는 부가 효과가 있다.




멋진 로딩 스플래시

 
스플래시 이미지
이런 멋진 스플래시 로딩 이미지를 띄워준다.


별 거 아닌거같지만 역할이 크다.
솔루션 이름 홍보와 게임사로 하여금 아 내 게임이 안전하게 보호받고 있구나 라는 인상을 받게 하는 마케팅적 효과, 툴키디 일부와 나같은 대다수의 선량한 일반사용자들을 부들부들 떨게 만드는 효과가 있다.
부가 기능으로 "아 왜 게임이 이렇게 안켜져"라고 짜증내는 유저들에게 "우리 보안솔루션이 한창 로딩 중이라 그래요. 좀 느리니 참아주세요."라고 알려주는 UI/UX적 효과, 게임사에게는 게임이 뚫려도 "우리 큰 돈 주고 싸인코드 썼는데요? 유저들한테 물어보세요"라는 면피성 보안 효과도 강하다.
잘 살펴보면 2~3픽셀 정도 프로그레스 바가 깨알같이 차오르는데, 그 때 매뉴얼매핑을 사용해 각종 감지 등에 관련된 잡다한 모듈을 로드하고 있는거다.


 

리버싱 방지(Anti reversing) 기능




void 어_어_ 왜_이런짓을()




void 참신하긴_하다()

나름 보안솔루션이기에, 리버싱당할 것을 염두에 두고 개발했는지 리버싱을 방지하는 차원의 함정코드가 꽤나 많이 보인다. 내 기억에 남아있는 것들은 한 가지도 빠짐 없이 구글에 Antireversing techniques 뭐 이런식으로 치면 나오는 예제코드 수준이다. 무력화하고 싶다면 너도 검색해서 좀 찾아봐라. 또, 좀만 수틀리면 이상한짓을 해서 프로세스를 죽이려는 참신한 코드들이 여기저기서 실행되는데, 그 중 가장 바보같은 것 들 몇가지를 첨부했다. 이해하는 사람만 크게 웃을 수 있다.
개 ㅄ같은데 왜 이딴걸 핵심기능이라고 적었냐고 물을 사람이 있을거다. 하지만 명백히 핵심기능이다. 리버서들로 하여금 깨알 웃음과 사인코드의 개발자들이 리버싱에는 재능이 전혀없다는 확신, 함께 무력화가 쉬울 것이라는 자신감을 주는 효과가 있다.



3편은 나중에. 귀찮다..
그리고 내가 쓰고싶어서 근질근질한 것들 많은데 썼다가 다 고칠까봐 그런건 공개표시로 쓰질 못하겠다. 궁금하면 개인적으로 물어봐.

2015년 11월 5일 목요일

Xigncode 분석

사인코드의 핵심 기능에 대한 코맨트와 무력화에 대한 힌트를 적어놓겠으니 재량껏 읽기 바란다.
댓글도 관리자 승인 후에만 달 수 있는 언론통제형 기술허세 블로그와 쓰이지도 않고 있는 특허를 내세운 마케팅에 낚여 최근 많은 게임들이 사인코드로 갈아타는 추세다.
구조부터 시작해보겠다.
 우선 사인코드는 인터페이스 모듈 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주일 정도의 여흥거리정도라고 보면 된다.
핵쉴드와 비교하면 약 반도 못 미치는 완성도라고 볼 수 있겠다. 개발자들이 리버싱을 할 줄 안다고 자부하는 것 같은데, 초보적인 수준이며, 개발을 더 잘한다. 몇명은 개발도 못 한다.
게임사님들, 핵쉴드 씁시다. 논클라봇 막으셔야지요 ^^