메모리 비교
보호할 메모리를 읽어봐 비교합니다.
클라이언트에서 int형 변수에 17을 넣어주고 출력해줬었습니다.
push 11로 17을 넣어주고 있습니다.
push 30으로 변조하게되면 감지하게 됩니다.
CheckRemoteDebuggerPresent
IsDebuggerPresent 함수와 동일한 역할을 합니다만, 현재 시점을 기준으로 값을 불러옵니다.
난독화
코드를 읽기 어렵게 만들어 분석을 어렵게 하는 기술입니다.
변수명, 쓸모없는 코드등을 이용해 읽기 어렵게 만듭니다.
암호화와는 다른 개념이며, 암호화는 키값이 있어야 볼 수 있습니다.
PE Header
메모리 상에 존재하는 PE Header를 지워 덤핑을 방해합니다.
Junk Code / Dummy Code
실제로는 아무 역할도 하지 않는 코드입니다만, 코드 사이에 넣어줌으로써 난독화를 시키거나
분석툴이 인스트럭션들을 잘못 해석하게 하는 용도로 사용됩니다.
IsDebuggerPresent 난독화
IsDebuggerPresent 함수를 직접 구현해주었습니다.
ecx를 해주고
TEB주소를 계산하고
PEB주소를 계산해서
반환값을 가져오기전에 eax를 0으로 초기화 해주고
beingdebugged 값을 al에 저장해줍니다.
이런식으로 직접 함수구현을 통해 사용하게 된다면, 분석시에 리버서들은 상세히 뜯어봐야 알수 있을겁니다.
IDA에 올려서 보게되면
위의 좌측 사진은 안티디버깅 기법으로 IsDebuggerPresent가 쓰이고 있다는걸 바로 알 수 있습니다, 반면
위 우측사진은 이렇게만 봐서는 어떤 안티디버깅 기법이 쓰인건지 알 수 없습니다.
함수를 계속 타고들어가 무슨 기능을 하는지 분석해야할 필요가 생깁니다.
'Reverse Engineering > GAMEHACK' 카테고리의 다른 글
[Anti - Reversing] 보안솔루션 직접 제작하기 - 4 - (0) | 2024.07.06 |
---|---|
[Anti - Reversing] 보안솔루션 직접 제작하기 - 2 - (0) | 2024.07.05 |
[Anti - Reversing] 보안솔루션 직접 제작하기 - 1 - (0) | 2024.07.04 |
[Game] 지뢰찾기 월핵 제작 - 2 - (1) | 2024.07.04 |
[Game] 지뢰찾기 월핵 제작 - 1 - (0) | 2024.07.04 |