2015년 11월 19일 목요일

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

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

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

댓글 123개:

  1. 헐 너 뚫?
    ㅇ 요 이 유행
    헐 오 저 봐 저 놈 사 뚫
    근? 빨 뚫

    답글삭제
  2. 답변 주셔서 감사합니다. ^^
    더 얘기하고 긴한대 댓글노출이많아..흠ㅋ 제가배우기엔 많은길이 남았네요.

    답글삭제
  3. CreateFileMappingA 이부분을 브포걸고 리섬시켰는데 바로 꺼져요 ㅠㅠ

    답글삭제
    답글
    1. 안티디버깅 루틴부터 손봐라

      삭제
    2. 감사합니다행님! 제가 행님 만두가 되겠습니다~

      삭제
    3. 아아 님은 어디서 공부하셨나요? 저 이제 reversing.kr 이라는사이트의 EasyCrackme 만 겨우 풀줄 아는사람입니다 ㅠ

      삭제
  4. 너 그래서 뚫을 수 있다는소리냐 아니면 아이다가지고 폼 잡는거냐?

    답글삭제
    답글
    1. 넌 무력화 팁을 무력화 못한채로 올리냐?

      삭제
  5. 니가 말하는대로 사인코드 무력화되고 안티 치트 소프트웨어가 지가 뭘하는지, 원본 코드가 어떤지 리버서가 볼 수 있다면 완젼 쓰레기수준인데

    답글삭제
    답글
    1. 다 볼 수 있다. 리버서 역량차이다. 리버싱을 하는 놈이라면 그정도는 알 텐데? 얼마나 까다롭냐만 다를 뿐이란거?

      삭제
  6. 야 이거 DLL Injection 막는거 맞냐?
    이거 제대로 작동안하는거같은데 뭐냐
    오늘 처음으로 손대봤는데 이거 뭐 DLL Injection 안막는데?
    일반적인 CreateRemoteThread는 안되는데 Nt 이용하는건 되네?
    이래놓고 DLL Inejction 방어한다고 말하고있는건지

    답글삭제
    답글
    1. 막는다. 컴퓨터 하드웨어 고유코드 만들어서 코드에따라 실행되는 보안 기능이 다르다. 네 컴퓨터에서 우연히 그쪽 모듈이 실행이 안된거겠지. 인증서가 안걸린 로드된 dll 리스트 뽑아오는 기능, dll에서 GetAsyncKeyState나 MessageBox같은걸 콜하면 해킹툴로 감지하는 기능, 모든 페이지를 훑으며 PE헤더가 있는지 없는지 검사하는 기능도 있다.

      삭제
    2. 안막네.
      CreateRemoteThread는 막는데 그 외의거는 안막네
      잘만된다.
      너 정말로 무력화 한거 맞냐?

      삭제
    3. ㅋㅋㅋㅋㅋㅋㅋ 진짜 세줄요약 안해주면 이해를못하네
      > "야 dll 인젝션 안막는거같은데?"
      < "싸인코드는 컴퓨터마다 막는 기능이 다르다"
      > "야 dll 인젝션 안막는거같은데? 너 정말 무력화한거 맞냐?"

      삭제
    4. 내 덧글이 왜 몇개가 삭제가 됬냐?
      생각을해봐라 컴퓨터마다 막는 기능이 다르면 그게 호구지 뭐냐?
      모든 플랫폼에서 작동이 되도록 설계를 해야지
      무슨 XP 32비트만 막냐?
      윈도우 모든 버전에서 작동못하게 안막으면 그게 쓰레기지 뭐여

      삭제
    5. 그리고 내 컴퓨터에서만 작동이 되는게 아니라 여러 컴퓨터 동원해서 써봐도 전혀 막지도 않고 Injection 된 모듈만 탐지해서 스캔만하고 별 액션을 취하지 않던데 이건 어떻게 설명할거냐
      그냥 호구냐?

      삭제
    6. 실제로 컴퓨터별로 동작하는 모듈이 다른게 맞다. 자기들은 나름대로 "dll을 배포했을 때, 감지가 안되는 컴퓨터가 늘어나니까 dll을 판매하는 해커들을 괴롭힐 수 있다"라고 설명하던데, 개인적으로도 멍청한 기능이라고 본다.

      삭제
    7. 여러 컴퓨터로 해봤다면... 아마 그 게임의 SDK 설정 상 dll쪽 기능이 몇개 꺼져있다고 보는게 타당하겠네.
      위에 말한 감지기능들은 나도 직접 분석해낸 것들이라, 코드상으론 존재하는게 맞긴 한데, 무력화에 너무 허술한 구조라 그런 루틴들이 실행 되는지 아닌지는 직접 확인해본 일조차 없음.

      삭제
    8. dll이 무슨 짓을 하는지 스코어를 먹여서 감지하는 기능도 있었는데 MessageBox, GetAsyncKeyState를 호출하면 스코어를 높이는 코드도 있었으니, 그것도 한번 테스트해보고, 그것마저 없다면 그냥 그 게임 개발사가 SDK에서 보안 수준을 낮음 이런식으로 설정해놓은게 아닐까 싶다.

      삭제
    9. 어디 검색해보니깐 대중적으로 쓰이는 GetAsyncKeyState, MessageBox를 막는다고 들었는데 저것들 서든어택 DLL Injection에서 다 쓰였던 방법이라 그런것같은데

      아마 니가 말하는 스코어는 쟤네들이 말하는 휴리스틱 기능인듯

      뭐 쫌 이상하다 싶으면 점수 한개씩 띵가띵가 올리고 어느정도 넘어서면 핵썼쮸? 하고 들이미는거같은데

      근데 함정은 XIGNCODE 적용되있는 클라이언트 패킹풀거나 생성중에 중지시키고 XIGNCODE x3.xem / xcorona.xem 이거 LoadLibrary쓰던데 이거 그냥 막아버리고 오류 코드 대강 넘겨주고 몇군대 처리해주니깐
      XIGNCODE 자체가 로딩이 안되더라?

      그렇게되면 게임 클라이언트에서 XIGNCODE랑 Heartbeat 주고받는것만 검사하는 부분만 남던데 이건 활성화된 스레드 찾아서 대강 중지시켜버리거나 몇바이트 패치하면 되는듯

      삭제
    10. x3.xem, xcorona.xem 등 몇가지는 더미다로 패킹해놨던데 이거 덤프하려면 그냥 LoadLibrary로 불러서 메모리에 적재시켜놓고 덤프떠버리면 되더라.

      나는 보안 수준 이런게 있는지 모르겠다고 하는 이유가 게임 클라이언트 풀어서 보면 x3.xem / xcorona.xem 로딩하는 부분에서 LoadLibrary로 로딩하고 GetProcAddress 이용해 함수명이 아닌 Ordinal로 가져오던데

      그것빼고는 그냥 메모리 보호 영역 지정하는거빼고는 다른건 아예 못봐서

      삭제
    11. 아니 하트비트가 그런식으로 된다고? 게임서버에 하트비트 구현이 없는게아니고 그냥 저렇게 되는거면 개발자 사표 써야지;;
      더미다 언패커는 하나 만들어놔라 runnable하지 않아도 IAT만 복원하면 읽을만한 코드 나온다. 메모리덤프뜬건 IDA에서 함수 브라우징할때 멎어서 빡치더라고.

      삭제
    12. 근데 니말대로 거기 개발자들이 직접 개발한 탐지루틴같은것들은 죄다 지들도 false positive가 높은걸 알아서 유지보수가 힘드니까 요즘은 그냥 해쉬기반으로 가더라고..
      리버싱을 어느정도 할 줄 아는사람들 앞에선 있으나 마나한 보안솔루션인건 명백하다. 이 블로그에서도 항상 말하고있는거고.

      삭제
    13. 그게 보니깐 하트비트는 딱히 필요가 없어서 분석을 안해봤는데
      하트비트보면 그 뭐냐 보안 솔루션이랑 게임 클라이언트랑 파이프나 격리된 통신 채널을 만들어서 통신을 하더라고

      게임가드도 그렇던데 보니깐 게임가드 분석해보면 1초인가 몇초인지는 기억안나는데 일정 주기로 계속 어떤 값을 일방적으로 보안 솔루션에서 보내더라고
      그러면 클라이언트는 그거 검사하고 별 문제없으면 놔두고 있으면 게임 서버랑 연결이 끊어졌습니다 블라블라.

      게임가드랑 핵쉴드 하트비트 에뮬레이터 그거 구글에 널리고 널렸던데
      사인코드는 별 문제 없으니 사람들이 하트비트 때내려고 시도 자체를 안하는듯

      나는 사실 더미다 언패킹 하는 기술이 없어. 내가 완전 리버싱쪽도 아니고 프로그래밍으로 뚫고 무력화하고 거의다 그냥 프로그래밍 기술로 커버치거든? 뭐 솔직히 말해서 아직 더미다 언패킹하려고 시도해본적도없고.
      문제는 내가 64비트라서 더미다 자동화 스크립트로 하려니깐 타이탄하이드나 스칼리하이드 드라이버가 로딩이 안되서 힘들더라

      그냥 필요한 부분만 때어내서써야지 뭐

      근데 함수 브라우징할때 넌 멎어?? 난 그냥 잘되던데

      Suspend 시킨상태에서 덤프떠버리거든

      가상머신 하나 만들어서 돌려야 되는지 나원참.

      삭제
    14. 하트비트란건 게임서버와 보안솔루션이 통신하면서 정상동작중인지 확인하는 걸 말하는거고 클라이언트와 보안솔루션간의 통신은 IPC라고 부르는게 맞지.
      하트비트는 핵쉴드는 게임서버에서 설정하기 나름인데 5분주기로 한번씩 서버에서 요청이 오는 경우가 많고, 싸인코드는 30분 이 주기인 것 같다.
      너도 느꼈겠지만 싸인코드는 무력화가 너무 쉬워서 하트비트를 쳐다볼 필요도 없는게 정답임. 요전에 싸인코드 측근으로 의심되는애가 와서 "싸인코드 핵쉴드보다 하트비트 어려운데요?" 하고 댓글 달았다가 나한테 영혼까지 털렸던 기록이 블로그 어딘가에 있어.

      삭제
    15. IDA가 멎는다기보단 메모리를 너무 많이 먹고 느리다는게 좀 짜증나서..
      더미다 언패커는 나는 유저모드에서 dll붙여서 하는데 네가 말하는 드라이버는 아마 안티안티디버깅 드라이버같은데 나같은 경우는 그런거 전혀 안 썼다. 그냥 안티디버깅 루틴 다 무력화하고 비주얼스튜디오 붙여서 디버깅했음.

      삭제
    16. 나는 그냥 비주얼스튜디오가아니라 덤프떠서 분석을했고

      딱히 게임서버와 보안솔루션이 그러한 통신하는건 감지 못했는데?

      네트워크 통신쪽 후킹을 안해서 몰라서 그런지 모르겠는데

      IPC주고받는건봤고, 그냥 별 손을안대도 알아서 풀리는 기이한현상

      DLL나는 딱히 안붙히고 그냥 덤프떠서 분석해서 ㅋ.ㅋ

      아니면 드라이버 무력화시켜서 엔진으로 들여다봐도 괜찮던데?

      삭제
    17. 당연히 게임서버랑 보안솔루션이 직접하는게 아니라 게임서버(하트비트요청) -> 게임 클라이언트 -> (IPC)보안솔루션 -> (IPC)게임클라이언트 -> 게임서버 로 전송되는거지..

      삭제
    18. 근데 얼마나 솔루션을 발로만들었으면 하트비트라는걸 구현해야되냐

      삭제
    19. 무슨소리.. 하트비트는 일종의 최종 방어선같은거지... 보안솔루션 떼내는건 한줄수정으로도 되는데, 하트비트를 유지시키면서 보안솔루션을 뗄 수는 없으니 하트비트 부분을 잘 만들어놓으면 난이도의 수준이 달라지지
      물론 사인코드엔 해당없는 이야기지만.

      삭제
    20. 솔직히 하트비트가 최종?방어선이라는말에는 동감을 못하는게
      Denovo같은 DRM 솔루션도 하트비트같은거 구현안하고도 몇달을 버티는데
      사실 하트비트는 서버입장에서도 리소스낭비.
      애초부터 때지지않도록 솔루션을 각종 기법을 써가면서 잘 구현하면 되는데
      구글에 Anti-Debugging Techniques 검색해서 나오는 수준으로 너무 단순하게 구현해버리니깐 쉽게때어지는거고

      하트비트 루틴? 그거 때고나서 분석하면 똑같이 만들수 있는거 알면서 왜 그런소리를 하실까.

      삭제
    21. 고급 리버서들은 하트비트 구현되있으면 그거 똑같이 구현할거 모르는거 아닐건데

      실행 시 파이프 생성 -> 파이프 접속 -> 보안 솔루션이 클라이언트로 하트비트 데이터 전송 -> 클라이언트에서 검증해버리거나 서버로 전송해서 서버에서 검증 -> 맞으면 놔두고 틀리면 연결 끊어버리거나 별의 별 짓을 하던데

      어차피 파이프통해서 하트비트 데이터 클라이언트로 전송하려면 이 부분만 살려두고 다른 부분은 다 죽여버리면 되던데 이게 왜 최종방어선인지 이해가 안되네.

      삭제
    22. Denuvo는 내가 샘플을 직접 못봐서 어떤식인지를 모르겠는데, 업계 유일수준의 특이 케이스인건 인정하고 넘어가야지? 릴리즈 하루만에 걸레짝되는 게임이 대부분이잖아.
      상식적으로 생각을 해봐라.. 하트비트가 없었으면 나나 니가 하트비트만 남기고 다른기능을 무력화 하는짓을 했겠냐? 로드가 아예 안되게 해버렸겠지?
      그리고 내가 이 블로그를 쓰지도 않았을거고 무수한 스크립트키디들이 nop nop nop 해서 사인코드 안켜지게 해놓고 아무 제한없이 핵질을 했겠지?
      논클라봇 제작자들은 보안솔루션의 존재자체를 인지하지 못했겠지?

      삭제
    23. 그래서 이 사인코드조차도 하트비트루틴엔 특별히 신경써서 만들어놨고 "일회용 실행코드 기반 구조" 라는 특허까지내놨지.
      나도, 사인코드도, 핵쉴드도, 게임가드도, 모두가 중요하게 생각하고있는데 너 혼자만 의미없는기능이라고 말하고있다.

      삭제
    24. 작성자가 댓글을 삭제했습니다.

      삭제
    25. 자고로 하트비트없어도 단순하게 몇 바이트의 명령어 만으로도 뚫리게 만든다면 그건 진짜 보안 솔루션이라고 지칭하면 안된다.

      하트비트는 또 다른 수단일뿐 그것이 최후의 방어선이라고, 또 한 그것이 제일 중요하거나 핵심기능이라고 말하면 안된다. 그건 "핑계"일 뿐이다.

      어떻게 하면 제대로 막을지 몰라서 그 기능을 끼워넣어놓고 중요한 기능이라고 말하는 핑계일뿐이다.

      Denuvo? 업계 유일 수준의 특이 케이스라고 할 수 없다.
      보안 솔루션은 정말 진짜 제대로 된 보안 솔루션이라면 그렇게 만들어 져야 한다.

      너도 이 블로그 어딘가에 그러한 말을 해놨지 않았나?
      리버서들이 왜 너희들이 원하는대로 놀아줄꺼라고 생각하지?
      라고
      Denuvo 회사는, 개발자들이 왜 리버서 너희들이 생각하는대로 개발할거라 생각하지? 이렇게 생각해서 만들어진게 Denuvo다.

      업게 유일 수준의 특이 케이스가 아닌, 저게 Real 보안 솔루션이다.

      삭제
    26. 내가 하고 싶은말은 국내에 제대로된 게임 개발자가 몇몇없다.
      보안 개발자도 마찬가지라 본다.

      이건 사실 하나 하나 따지지 않아도 국내에 나오는 게임, 소프트웨어들의 질을보면 알 수 있다.

      허구한날 Active X를 설치시키고, 이러면 해킹안당하겠지? 라는 썩어빠진 생각이 풀풀 풍기기도 하고.


      서버에서 반드시 처리해야 되는 부분을 클라이언트로 맡겨서 처리하는, 알 수 없는 생각을 가진 프로그래머도 있고.

      중요한 모든 부분을 서버에서 처리한다면 스피드핵, Direct와 관련된 부분의 핵 밖에 쓰지 못한다.

      스피드핵마저도 서버에서 알고리즘을 통해 제대로 판별한다면 핵을 써도 세션을 끊어버릴 수 있게 만들어버릴수도 있고, 심지어 Direct와 관련된 부분도 임시적으로 한번 그리고 데이터를 서버로 전송해서 판별하는 기법도 동원하면 생각하는 부분까지 다 막을 수 있다.

      이건 전적으로 프로그래머, 설계자, 디렉터 다 같은 잘못이다.

      나는 그들의 스킬에 대해 욕할 생각이 없다. 단지 그러한 스킬들은 시대에 따라 바꿔야 될 필요성이 반드시 있다.

      너도 알다시피 디지털 시대는 정말빨리 저물고 또 다른 해가 빨리 뜨고 이것이 반복된다.

      보안도 다를거라 생각하나?

      하트비트도 구시대적 유물에 불과하다. 정말로 생각이 있다면, 심혈을 기울여서 만들어야 한다. Denuvo 처럼. 그 소프트웨어는 수 많은 보안 솔루션을 제작, 서비스하는 회사들이 그 정신을 본받아야 된다.

      하트비트가 없으면 우리 회사의 보안 솔루션은 안전하지 않아요!

      이건 핑계일 뿐이다. 정말.

      하트비트는 수 많은 해킹 방지 기법중 큰 비중을 차지하지도, 작은 비중을 차지하지도 않는 하나의 기술일 뿐이다.

      단지 그것하나가 없어서 보안 솔루션이 뚫리고, 게임까지 뚫리게 만든다면 그건 제대로 된 보안 솔루션이라고 할 수 없다. 아니 그런걸 보안 솔루션이라고 지칭하면 안된다. 정말.





      삭제
    27. 네가 이 댓글을 안 지우고 3 년 후에 다시 보면 아마 이불을 찰거다

      삭제
    28. 글쎄? 그럴까?

      난 진실을 말했을뿐인데.

      삭제
    29. 3년이 기다려지네요 . 이제 1년 지났네요

      삭제
    30. 그리고 2년이 넘었네...

      삭제
    31. 7년 지난 지금도 읽는 중 과연 그는 이불을 찼을 것인가..

      삭제
  7. 형님 초보인데 뭐부터 공부해야하죠..사인코드 무력화랑 우회 사이트는 돌아보고있는데 무슨소리인지 하나도모르겠고 프로그램만들어서 모듈로 사인코드무력화시키시는분도봣는데 뭐부터 공부해야하나요..

    답글삭제
    답글
    1. 초보면 무력화는 어렵겠지.. 우회부터 시도해봐

      삭제
  8. 그냥 생 치트엔진으로 하셨나요?? (그리고 프로세스를 열고 메모리뷰를 보면 ?? 로 되있던데 //xigncode3은 // 그렇게 됬다는건 프로세스를 여는 api가 후킹되서 그렇게 보인다는건가요? 지금 엔진 우회라도 해볼려구 치엔6.4 소스도 구해서 이것저것 만지는중인데 어떻게 우회하는지 감도 안잡히네요 ㅠㅠ 원레 제 생각은 치트엔진을 감지하는 모든 함수들을 후킹할 생각이였는데 이 방법은 정말 무식한 방법인가요?


    (질문할께 많네요 ㅈㅅ합니다)

    답글삭제
    답글
    1. API가 후킹되어서 그렇게 보이는게 아니다.
      엔진은 기본적으로 설정에서 OpenProcess, Virtual 등의 함수를 쓰도록 인위적으로 해놓지 않으면 커널 드라이버를 통해서 프로세스 메모리 작업을 돕는다.

      API 후킹이 되서 그런게 아니라 XIGNCODE의 커널 영역 드라이버가 특정 함수를 이용해 못읽도록 막는다.

      API Hooking이 아니라.

      우회? 할 필요도 없어. 그냥 인터넷에서 Cheat Engine 정식 버전 다운로드 받아서 쓰면 되. 물론 드라이버 영역만 로드 안되게 막는다면.

      정식적으로 덤프 뜨는것도 괜찮지 분석하려면.

      XIGNCODE가 실행되기 전에 프로세스 중지시켜서 덤프뜨거나 그전에 손이 빠르면 덤프 뜰 수도 있겠지?

      그걸 Windbg나 IDA로 분석해봐. 어떻게 해야 할지 감이 올거다.

      그리고 무식하게 함수 후킹은 안하려는게 좋아.

      32비트 쓴다면 커널 영역에서 SSDT, IDT, GDT등의 후킹을 시도할 수 있겠지만 XIGNCODE는 몇몇 함수 중 자기가 직접 구현해서 원본의 함수와 똑같은 역할을 하도록 해놓거나 아니면 상위 함수를 호출해서 일반적인 후킹은 피해버려.

      물론 그럴 확률은 적겠지만.

      Nt함수 후킹할때는 아마 조금더 조심해야 할거야.

      민감하게 반응하거든. 분석해보려면 64비트에서는 하지마. 조금 애로 사항이 많다.

      삭제
  9. 그리고 xhunter1.sys 를 ObRegisterCallback 을 이용해 로드한다던거 같은데 일단 xhunter1.sys 를 언로드 해보니 메모리블럭은 안깨지더라구요 ㅠ 그래서 아예 xhunter1.sys를 로드 못하게 할려고 모든 사인코드 파일들을 로드하기전에 포즈 시키고 ObRegisterCallback 이라는 함수로 goto 할려니 없더라고 뜨던데 어떻게 하는게 좋을까요..

    답글삭제
    답글
    1. 알고 있는거에 비해서 분에 넘치게 많은걸 하려고하는데 기초부터 다지는게 좋을거같다. 글에 말이 되는소리가 한마디도 없어서 대답을 바라는게 실례다 이건.

      삭제
    2. ObRegisterCallback는 커널영역 즉 드라이버에서 사용하는 함수야.
      윈도우에서는 사용할 필요도 없지.

      말했듯이 드라이버를 로드하려면 OpenSCManager -> CreateService순으로 로드해.

      xhunter1.sys는 드라이버를 로드 하기 전에 어떠한 방법을 통해서 버전 검사를 하고 서버에서 다운로드 받아오겠지?

      정 하기 힘들다면 XIGNCODE가 적용된 프로세스를 "런처"를 통하지 않고 생성시켜서 SuspendThread함수를 통해 XIGNCODE가 드라이버를 로드 하기 전에 중지시키고 엔진같은걸로 내부를 들여다 보는 방법도 나쁘지 않겠지.

      삭제
    3. 너 내 블로그 알바해도 되겠다

      삭제
  10. 작성자가 댓글을 삭제했습니다.

    답글삭제
  11. 굳이 포즈할 필요가 있나?
    윈도우 드라이버를 어떻게 불러오는지, 그 순서를 생각해봐.
    일단은 Driver View를 가지고 32-bit, 64-bit에 맞게 다운로드 받아서 실행시키고 로드된 상태의 xhunter1.sys를 봐봐. 경로가 어디에 있는지.
    그리고 그 경로에 어떻게 생성이 될까 곰곰히 생각을해봐.
    자연적으로 생성될수는 없잖아?
    참고로 드라이버 생성 순서는 OpenSCManager -> CreateService순으로 로드하고 DeleteService, CloseHandle등으로 생성된 핸들을 나중에 종료할때 처리한다.

    그리고 ObRegisterCallback만으로는 치트엔진 같은 커널 영역에서 접근하는 도구들을 막을 수가 없어.
    아마 기타 몇가지 방법이 있겠지만.

    기본적으로 xhunter1.sys를 "로드"못하게 하려면 어떻게 해야 하는지 생각을해봐.

    답글삭제
    답글
    1. 그냥 언로드하면 안됨?

      삭제
    2. 귀찮게 언로드를 왜해. 로드안시켜버리도록 만들면되지.

      삭제
    3. 님 공부 어떻게 하셨어요??괜찮으시면 공부 루트좀....ㅠㅠ 님처럼 되고싶어요!

      삭제
    4. CreateServiceW 에 엔진으로 브포거니
      jmp xxxxxx 나오는데 여기 nop 해버리면 되나요?
      Xxxxxx 계속따라가보니
      cmp ebx,edi ebx edi는 둘다 0
      je xxxxxx
      나오는데

      삭제
  12. 야 왜 #2 는 안나오냐.

    #1만 있네.

    답글삭제
    답글
    1. #2를 원하는거같으니 포스트는 귀찮고 팁을 두개정도 줄게
      1. 계정권한을 잘 이용하면, xhunter1.sys를 아예 로드하지 않게 할 수 있다. xhunter1.sys가 로드되지 않고도 동작이 가능하도록 개발해놓았음.
      2. 모듈이 수십개 씩 메모리에 로드되는데, 그 각 모듈에서 이벤트가 전달되는 방식을 분석하면 그 수십개 모듈이 무슨짓을 하는지 전혀 신경쓸 필요가 없어진다. SPOF라고 생각해도 좋다.

      삭제
    2. 난 이미 무력화해서 별 필요가없는데 사람들이 기다리잖아 ㅋ.ㅋ
      계정권한 필요없이 그냥 하는법도 있긴있고
      근데 GameGuard, HackShield는 드라이버 로드가되야 작동되는걸로 아는데 얘네들은 xhunter1.sys 로드 안되도 작동되게 해놓고 심지어 최신버전 치트엔진도 감지안하는데

      이거 도대체 뭐하는 프로그램이냐

      진짜 내가보기에는 얘네들이 영업력이 좋아서 게임가드 핵쉴드 제치고 할 수 있었던것 같은데

      그 외에 그냥 모듈들 솔직히 왜 필요한지 노이해

      보안프로그래밍 어느정도 할줄알면 모듈 저렇게 많이 안써도 막을 수 있을건데 저건 보니깐 여러명에서 프로그래밍해서 분열증 생긴듯 낄낄

      삭제
    3. 기술블로그가지고하는 영업, 신종 해킹툴에 적극적으로 대응을 해주는 점 때문에 장사하고있는거고, 개발적으로 뭔가 내밀만한 기술은 크게 보이지 않는다. 보안회사같은 영업회사란 말임.
      각 모듈들도 보면 개발자가 모듈 하나 맡아서 개발했는지 각자 자기가 만든 라이브러리같은거 static link해서 갖다넣어놓고 쓰고 그러더라고. 개발팀 수준을 볼 수 있는 대목이지.

      삭제
    4. 그리고 게임가드도 요즘은 드라이버 로드안돼도 작동한다. 실제로 유저 계정으로 게임 플레이하는 유저도 많기때문에 그걸 대응하느라 구현할 수밖에 없음.

      삭제
    5. 그리고 사인코드서버로 로그인한 계정정보나 프로세스 리스트 등 몰래 보내는 경우가 있으니까 그것만 조심해라

      삭제
    6. 사실 요즘 드는 생각은..
      게임이 죄다 사인코드로 바뀌고있는데, 게임마다 딱히 무력화 로직을 손볼게 전혀없어서 게임할 때 편하다 정도?

      삭제
    7. 너무 오래전에 한거라 어떤 기능이 있었는지 기억도 잘 안난다. 근데 코드는 아직까지 잘 동작하고.

      삭제
    8. 계정정보 및 프로세스 리스트는 그냥 함수 몇개 후킹해서 가짜정보 넘겨주면 안되나?

      안그래도 오류메시지 뜰때 엔진에 갑자기 게정 정보가 잡힌다했는데 그것때문이네

      더미다 적용된 프로세스는 사인코드 불러오기전부터 몇개 잡아내더라고

      프모니터라던지 디버거?등

      삭제
    9. 그렇게 하는게 맞는데 프로세스리스트같은 경우엔 API후킹을 피하려고 각 모듈별로 다른 방법을 써놔서 몇개는 덤프떠다 분석을 해야할거야

      삭제
    10. 개인적인 생각으로는 범용으로 쓰게 커널쪽에서 EPROCESS / KPROCESS 조작하는 루틴만들어놓고 PID를 DeviceIoControl로 전송하면

      System의 PID와 겹치게 해놓는것도 나쁘지 않을듯.

      삭제
  13. 작성자가 댓글을 삭제했습니다.

    답글삭제
  14. 어떻게 공부하셨는지 알려주실수 있으신가요....괜찮다면 공부 루트도 알려주시면 감사하겠습니다.

    답글삭제
  15. a2005226@nate.com / 카카오 ID : 2005226sky 친구좀 해주시면 감사하겠습니다.

    답글삭제
  16. 작성자가 댓글을 삭제했습니다.

    답글삭제
  17. 사인코드 경우
    우회엔진의 팁이 뭡니까 형님.

    치트엔진 소스자체를 ASR로 싹 바꿔넣어야할까요.

    혹시 1대1로 연락해서 리버싱좀 질문하고싶은마음이 가득이네요 흐흐

    답글삭제
    답글
    1. 야 엔진을 우회하지말고 보안 솔루션을 때버릴 생각을 해야지

      멍청하게 엔진을 우회해서 뭐하겠다는거야.

      삭제
    2. 작성자가 댓글을 삭제했습니다.

      삭제
    3. 형은 코흘리게한태 "Messenger" 줄 시간이 없다.

      니가 밑에 단 덧글만해도 니가 뭐하는 놈인지, 속내가 다 보이는데 뭣하러 주겠냐?

      니가 진짜로 "진지하게", "자세하게" 알고 싶다면

      검색을 해라. 세상의 모든 정보는 검색으로 시작해서 검색으로 끝나니깐.

      삭제
    4. 작성자가 댓글을 삭제했습니다.

      삭제
  18. 작성자가 댓글을 삭제했습니다.

    답글삭제
  19. 저번달에 보고 못알아봐서 킵했는데 오랜만에 오니 댓글에 정보가 많네
    댓글봐도 못써먹는게 문제지만.
    DLL Injection은 적어도 내가 하는거에선 잘되는거같은데.
    일반 후킹은 잘 되는데 가상함수후킹이 안되서 윈도우모드가 안되..

    정말 대단하다. 두사람.

    답글삭제
  20. 잘읽어봣습니다
    대단하시네요 감사합니다

    답글삭제
  21. 위에 댓글을 보니 하트비트를 그저 "하나의 기술"로 생각하고 계신분이 있군요...

    사인코드같은 서드파티 보안솔루션 제품에서 하트비트는 없어서는 안될 요소입니다.
    하트비트가 없으면 힘들게 보안솔루션 코드를 패치해서 무력화하는 사람이 없겠죠?

    ...그나저나 하트비트 같은 중요한 루틴은 Themida나 VMProtect에 의해
    가상화되어있는 경우가 많던데 이런 경우 다른분들은 어떻게 분석하시는지 궁금합니다.

    답글삭제
    답글
    1. 대개 논클라봇 만드는거 아니니 건드릴 생각도 안하고,
      아니면 모듈 로드하고 가상화된 함수를 직접 호출하는 식.

      삭제
    2. 하트비트가 없이 다른 부분이 그렇게 쉽게 뚫린다는것 자체가 문제다.

      어디가 문제인지도 모르고 하트비트를 대단한것마냥 써놨는데

      기술이 기술이지 무슨 뭐 더 대단할게 있다고.

      하트비트가 없어도 보안솔루션이 쉽게 무력화되도록 만든 것 자체가 문제다.

      삭제
    3. 닉네임도 떡하니 Developer이라 해놓고

      어디서 온 부류인지 냄새가 떡 하니 나는데 모르는척 질문하는건지 몰라서 질문하는건지 나참.

      삭제
  22. 허허.. 닉네임은 그냥 이래놨는데 저는 그냥 학생입니다ㅡㅡㅋㅋ

    모듈 로드하고 가상화된 하트비트 함수를 호출하는 방식은 당연히 생각을 해봤죠.
    근데 하트비트 생성 함수안에 순수 하트비트 생성 루틴만 있다면 얼마나 좋을까요
    조금만 생각이 있는 개발자라면 보안솔루션이 제대로 작동하고 있는지 검증하는 루틴을
    하트비트 생성 루틴과 함께 묶어서 가상화한다는 사실을 글쓴 분도 모르실것 같진 않은데요...

    그리고 저는 하트비트가 대단한 기술마냥 써놓은적 없습니다.

    서드파티 보안솔루션 특성상 무력화되기 쉬운건 당연한거고
    개발자들도 머리가 나빠서 이 사실을 모르는게 아닙니다.

    게임 클라이언트와 안떼어질려고 수많은 기법을 적용할 수도 있지만
    해당 기법이 모든 PC에서 크래쉬되지않고 정상 작동이 보장되어야 하는 문제도 있구요.
    설령 알려진 모든 기법을 동원하더라도 어느 정도의 수준 있는 리버서들에게
    솔루션 자체를 떼어내는건 아무 문제가 안될 것 같은데요?

    그나마 나은 방법이 반드시 실행되어야하는 게임 함수와 보안솔루션 초기화 함수를 같이 묶어서 코드 가상화를 하는건데 Paladin님이 칭찬하신(?) 보안솔루션도 이와 비슷한게 아닐까 싶습니다.

    답글삭제
    답글
    1. 알려진 모든 기법들을 동원하더라도 어떻게 끼워맞추느냐가 중요하지.
      두뇌싸움이라고 할까?

      하트비트, 후킹, 가상화등 전부다 하나의 기술일 뿐이야.
      그 기술가지고 어떻게 조합을해서 모든 운영체제에서 잘 돌아가게 만들고 어떻게 해야 솔루션을 궁극적으로 지킬 수 있을까 뭐 그런거지.

      사실 Denuvo 제작사들도 모든 보안 솔루션은 뚫릴 수 밖에 없다. 라고 명시를 해놨고, 단지 그 난이도만 다를뿐이라 했지. 퍼즐처럼 500피스냐 1000피스냐 이런것처럼.

      사실 완벽한 공격은 있어도 완벽한 보안은 없다. 이건 진리다 정말.

      XIGNCODE, GameGuard, HackShield가 조금더 완벽해지려면 가상화나 난독화등등 여러기법을 조금더 적용시켜야된다. 블로그 주인장말처럼 false positive 기술들을 너무 접목시켜놨어. 한마디로 섬세하지가 못해 솔루션이.

      삭제
    2. 논-클라이언트 봇 막는법도 여러가지가 있는데 하트비트도 그중 하나일 뿐인데.

      머리가 나빠서 이 사실을 모르는게 아니라 머리가 나쁘니깐 솔루션을 한심하게 만들지. 저건 진짜 솔루션에 소울이 없어 소울이.

      초딩도 어디 구글에 검색해서 뚫는다는소리가 요즘 나돌아 댕기는데 저건 좀 심각하다 내가보기에는.

      삭제
    3. 아니면 일부러 소울없이 만들어놓고 뚫릴때마다 유지비 명목으로 뜯어가려고 호구같이 만들어놨는지도 모르지.

      삭제
    4. 아니 당연히 무결성 검사값을 암호화해서 보내는게 하트비트잖아..
      뻔한 답변 유도해놓고 뻔한 답변 해주니까 거기에 태클을 넣네
      시비걸러왔니?

      삭제
    5. 1. 가상화된 로직을 instrumentation하세요.
      2. 적절히 동적분석하고 trace 결과로 읽는 메모리를 찾아주세요.
      3. ...
      뭐 내가 이렇게 답변해줬어야했나?

      삭제
    6. 이그... 주인장이 왜이렇게 눈치가 없어.
      쟤 학생아닌거 뻔히 보이지 않아?

      삭제
  23. 매뉴얼매핑된 함수는 어떻게찾아야하나요?

    답글삭제
    답글
    1. 감사합니다.

      근데 이글 계속 작성은 안하시는건가요?

      삭제
    2. 감사합니다.

      근데 이글 계속 작성은 안하시는건가요?

      삭제
  24. 메모리를 볼려면 ?? 로 표시되는 이유가 뭐죠?

    답글삭제
  25. 작성자가 댓글을 삭제했습니다.

    답글삭제
    답글
    1. 작성자가 댓글을 삭제했습니다.

      삭제
    2. 작성자가 댓글을 삭제했습니다.

      삭제
    3. 오브젝트콜백 후킹.

      니들이 흔히 말하는 메모리블럭이 걸려서 그럼

      서든핵 좀 그만써라 서든핵충들~

      삭제
  26. X3.XEM을 하트비트부분만 남겨두고 직접 코딩하여 X3.XEM을 바꾸어 인젝션 해주어도

    흔히들 말하는 싸인코드 언로드는 정상작동 됩니다.

    아니면 X3.XEM 정상작동중인 프로세스에서 하트비트 패킷을 서버에 날려주는

    함수를 찾아놓고 프로세스 시작시 싸인코드 로드부분을 막은뒤에

    VM에서 정상작동중인 패킷을 받아와서 스택을 맞춰주어 함수를 호출해주어도 되구요

    저는 리버싱을 야매로 시작해서 아직도 야매로 하고있어서 잘 못하지만

    현재 싸인코드 언로드와 하트비트부분은 어느정도 검색만해도 나오는 수준입니다.

    답글삭제
  27. 블로그 폐쇄만 하지말아주세요 ㅎㅎ ...

    답글삭제
  28. 너무어렵다 어케하는지를 모르겟슴 ㅠㅠ

    답글삭제
  29. 원격 프로세스에 매뉴얼 맵핑을 할 때 쓰이는 API는 VirtualAlloc(Ex), VirtualProtect(Ex), WriteProcessMemory, Create(Remote)Thread 입니다. 단 싸인코드는 이미 게임 프로세스에 인젝되어 있으므로, VirtualAlloc, VirtualProtect, CreateThread 를 보면 되겠죠. 저두 한번 PE를 떼 봐야지

    답글삭제
  30. 프로그래밍의 프자도 모르는 초보입니다. 뭔소리들을 하시는지 단 일말도 모르는 사람인데, 진로의 방향이 게임쪽과는 연관이 있는지라, 어쩔수 없이 프로그래밍과 지금 블로그 주인님, 팔라딘님과 같은 지식을 쌓을수밖에 없다고 판단해서 감히 이렇게 글을 씁니다. 블로그를 안보실수도 있다는 고려 내에서요.

    제가 몸담고 있는부분이 기획과 아트담당이다 보니, 기술적인면에선 좀 소홀한 부분이 태반입니다. 지금 여러분, 그러니까 주가 되시는 두분의 댓글을 천천히, 모르더라도 읽어봤는데, 상당한 열정과 자부심이 느껴졌습니다. 이건 기술을 아예 모르는 사람이라도 공감할수 있는 부분입니다. 동시에, 만약 내가 차후에 게임을 기획하고, 그걸 담당하게 되었을때, 이런 부분을 몰라 소홀하게 되면, 차후 한게임 퍼블리싱 - 테라와 같은 꼬라지가 날수도 있겠다라는 생각이 크게 들었습니다.

    고로, 여러분들처럼 언패킹에서부터 시작해서, 그걸 전부 뜯어보고, 제작자의 의도까지 파악하는 그런 수준까진 가지 못하더라도, 가장 기초적인 건 만들어볼수 있고, 뜯어보고 이해할수 있는 수준까진 지식을 쌓고 싶습니다.

    길을 좀 밝혀 주십시요. 저도 눈이 어둡고, 이 분야도 장벽이 상당히 높은지라, 도무지 먼저 손을 댈 부분을 못찾겠습니다.

    댓글, 기다리고있겠습니다.

    답글삭제
  31. 이 게시글이 이해와 공감이 될 정도의 실력을 갖춰서 1년 후에 다시 뵙겠습니다.
    그럼.

    답글삭제
    답글
    1. 저도 이해와 공감이 될 정도의 실력을 갖춰 1년후 다시 찾아오겠습니다.

      삭제
  32. 이거 분석용 프로그램은 어떤걸 사용했는지 궁금 합니다.

    답글삭제
  33. 형님 사인코드 우회를 알아볼라는게 구글에 있는 자료 들을 찾아보면
    사인코드3 동작방식 pdf방식을알면쉽다고해서 그거랑 cheatEngine이거로도 가능하다는게 자료같은거는 구굴 말도 어디서 찾아야하나요 ? 초보에요 ㅠ 팁점알려주세요

    답글삭제
  34. 형님 사인코드 우회를 알아볼라는게 구글에 있는 자료 들을 찾아보면
    사인코드3 동작방식 pdf방식을알면쉽다고해서 그거랑 cheatEngine이거로도 가능하다는게 자료같은거는 구굴 말도 어디서 찾아야하나요 ? 초보에요 ㅠ 팁점알려주세요

    답글삭제
  35. 굳이 무력화할필요없다.
    ntop , StartSerivceW[A] 만 후킹해도
    메모리블럭 , 감지우회가되고
    NTQueryInformationproc랑 NTQuerySystemInformation도 같이 후킹해주면
    sys로드하는걸 못잡지.
    개인적으로 이 블로그는 좋다고 생각한다만
    알짜배기같은건 없어서 유저가 얻어갈껀 없다고본다.
    그저 이런게 있구나 어떻게하는구나 라고 참고하는정도라고 생각하면된다.
    뭐 애들이 원하는 서든어택같은것은 에뮬레이터하나 개발해서
    멀쩡한컴퓨터한대랑 패치할 컴퓨터한대면 코드몬 , 싸인코드 다 무력화되고
    지들끼리 가상화랍시고 만들어놓은 코드들은 메인함수 2곳만 죽이면
    무력화되니 정말 우리나라의 보안수준이 이정도밖에안되나?
    라고생각될정도로 허술하다.

    답글삭제
  36. 사실 바보같은 생각이지만 클라이언트왜 다른게 실행대면 클라이언트가 꺼지게 만들면 되지않을가 생각해봅니다

    답글삭제
  37. 모 생각하기따라서 프로그랭 실행됬지만 실행되지 않았다 메시지만 보내도 된다고 서버에 패킷보낸다라고하면 다른것도 실행되겠지만 ㅋㅋ

    답글삭제
  38. 샌드박스가 사인코드에걸려 겜이꺼지는데 우회방법아시는분..

    답글삭제
  39. 형 혹시 게임가드 도 힌트줄수있어 ??

    답글삭제
  40. 작성자가 댓글을 삭제했습니다.

    답글삭제