안녕하세요 오늘 할짓없어서 여러개 올려요 ㅋㅋ
일단 전편에서 말했듯이 오늘은 H사의 보안력과 그 보안을 어떻게 bypass하는지 좀 알아보려고 해요.
다들 이거 하시죠?
잉카인터넷에서 개발한 nProtect GameGuard 에요.
굉장히 오래된 가드라서 견고하지만 그에비해 쉽게(?) 우회가 가능합니다.
일단 nProtect의 기능에 대해서 말씀드려볼게요
저희가 만들 뷰어 프로그램에서 가장 골칫거리인 핵심기능은 캡쳐방지와 루트킷이에요.
저희는 모니터를 캡쳐를 해서 저희 서버로 보내줘야하거든요 (원뷰어의 방식)
그런데 이 nProtect가 화면 캡쳐를 방지하고 있어요.
일단 제가 글쓸때 사용하는 캡처도구도 사용금지가 돼어버리고 캡쳐를 찍었다한들 검은화면이 나와버립니다.
아니면 하얀색이거나요.
가드를 분석해도 로우레벨(커널)까지 내려가는 프로그래머가 아닌이상 이 루트킷을 감지하여 무력화시키기란
쉽지 않죠 해당 프로그램에 nprotect가 작동되면 어떻게 되는지 봐볼까요 ?
이 가드가 자신과 다른 프로세스를 숨겨주는 역할을 하고 있어요.
여기서 다른 프로세스란 저희가 캡쳐해야할 게임이에요.
그리고 프로세스 리스트에서 사라집니다.
아래사진처럼요.
그래서 해당 프로세스를 잡아 디버깅할 수도 없습니다.
왜냐면 프로세스 리스트에서 사라졌으니 해당 프로세스를 찾지 못하는거죠 그럼 어태치를 할 수 없으니...
그리고 하나 더 있는데 nProtect는 다른 프로세스에게 글로벌로 DLL Injection을 해줍니다.
스크린샷이 귀찮아서...DLL 목록을 불러와보면 DLL확장자명을 des로 바꿔놨어요
위에 사진에 GameMon이라고 보셨죠 ? 그놈입니다.
GameMon.des 파일이 로드돼어서 저희 프로그램에 상주하고 있는걸 보실 수 있어요.
제가 사용했던 방법은 하나지만 생각해뒀던 방법은 3개에요 (3개중에 한개 사용)
1. 너희 루트킷이니 ? 우리도 루트킷형태로 가자
우리 프로세스도 루트킷형태로 돼어있어 hideprocess를 시켜준다면 nProtect는 저희 프로세스를 감지하지 못한다.
2. 프로세스를 보호하자
obregistercallbacks 라는 함수가 있어요 이 콜백루틴을 등록하면 저희 프로세스를 보호하게 돼어 접근할 수 없어요.
3. DLL Injection ? okay DLL Ejection
nProtect가 글로벌로 DLL Injection을 건다고 했죠 ? 그럼 풀어주는 역할을 하는 기법인 DLL Ejection으로 언로드
3가지중 하나를 선택하여 사용하셔도 좋지만 1번과 2번은 추천드리지 않아요.
WDK를 사용해서 윈도우즈 디바이스 드라이버를 작성하신분은 알겠지만 Windows 7 x64부턴 디지털 서명이 필요해요.
이거 돈주고 서명받아야하고 복잡하고 어쨋든 3번은 제가 마지막으로 생각해낸 방법이에요.
루트킷이 가장 먼저 떠올라서 전 루트킷형태로 만들었습니다.
당연히 여기엔 C언어가 사용되었고 C# 이랑 연동한겁니다.
루트킷이 가장 확실하거든요 ( 귀찮은건 있지만 )
어쨋든 3가지중 하나만 사용하셔도 우회가 쌉가능입니다.
더 상세하게 들어가 코드까지 보여주고 하면 좀 수위가 높아지니 이부분은 개인적으로 연락주든 ( 연락줄 수 있으면 )
아니면 공부를 하셔서 작성하시든 선택이십니다.
루트킷 형태로 만드신 후 캡쳐를 찍어보시면 캡쳐가 찍힌답니다.
그리고 2번으로 우회하는 대표적인 소프트웨어는
Ba*d*Cam입니다.
그리고 프로세스를 감지하는 코드에요.
이정도는 구글에 검색해도 충분히 많이나옵니다.
'programming' 카테고리의 다른 글
포커뷰어 제작원리 서버편 두번째 (0) | 2020.05.30 |
---|---|
포커뷰어 제작원리 서버기초편 (1) | 2020.05.29 |
포커 핵 제작 원리 통신설정편 (1) | 2020.04.15 |
포커 게임 핵 제작 원리 발담구기편 (2) | 2020.04.12 |
카드 게임 뷰어 제작원리 소개편 (5) | 2020.04.12 |