일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 윈도우 커널 디버깅
- Network Byte Order
- Windows Kernel Driver
- packet capture
- windows kernel debugging
- vcruntime.dll
- 바이트 오더
- Windows Kernel
- 해킹
- Windows Kernel Debug
- pcap packet
- arudino
- C언어 패킷캡쳐
- HackCTF
- apphelp.dll
- 윈도우 커널 드라이버
- Windows
- ucrtbase.dll
- pwnable
- 포너블
- vcruntime140.dll
- 윈도우 커널
- hacking
- IAT Hooking
- 네트워크 바이트 오더
- 개발하기
- 시스템해킹
- Msvcrt.dll
- pcap packet capture
- 개발 환경 준비
- Today
- Total
목록Cheat Engine Tutorial (11)
미친해커
Step 2는 좀 불합리한 게임이다. 클리어 조건은 상대편 2명을 죽이면 된다. 다만 내 체력해 비해 상대방의 체력이 엄청 높고 공격력 조차도 차이가 심하다. 또 상대방 타게팅은 플레이어 고정이다. 이 조건에서 클리어를 하면 된다. 적의 체력을 모르니 당연히 처음은 Unknown initial value으로 스캔한다. 그 후 한 번 공격하고 Decreased value로 스캔을 반복한다. 이렇게 검색을 반복하다보면 다음과 같은 값을 볼 수 있다. 이제는 눈치껏 저렇게 두 값이 적 한명의 체력과 플레이어의 체력이라는걸 직감할 수 있다. 적의 체력을 리스트로 가져오고 Find out what writes to this address 기능을 사용한다. 그러면 위와 같이 하나의 Instruction이 잡히는걸 ..
Cheat Engine Tutorial을 모두 클리어했다면 이제부터는 Tutorial Game으로 넘어오게 된다. 혹시라도 Tutorial Game을 실행하고 싶다면 아래 더보기에 설명해두었다. 더보기 Game Step 1은 과녁의 체력을 모두 깎으면 클리어다. 하지만 게임을 플레이해봤으면 알겠지만 5발을 모두 맞춰야 클리어가 가능하지만 리로드 하는 동안 과녁의 HP가 다시 충전된다. 이 부분을 해결해 클리어하면 된다. 필자는 과녁의 체력을 찾아서 클리어할 예정이다. 다른 여러 클리어 방법도 있지만 그건 직접 해보는 것을 추천한다. 우선 Unknown initial value로 First Scan을 한다. 체력의 정확한 값을 알 수 없으니 체력이 증감하는 것을 이용하여 체력의 주소를 구할 것이다. 위 사..
Step 9의 주제는 Shared Code이다. Shared Code란 코드를 공유하는 것을 말한다. 예를 들어 캐릭터가 존재하고 대미지를 받는 함수가 존재한다고 했을 때 대미지를 받는 함수를 캐릭터마다 만든다면 메모리 낭비가 심할 수 있다. 이런 경우 대미지를 받는 함수를 하나만 만들고 모든 캐릭터가 그 함수를 사용한다면 메모리를 최소화하여 사용할 수 있다. 그리고 이번 Step의 클리어 조건은 Restart game and autoplay 버튼을 눌렀을 때 Dave팀이 승리하면 된다. 우선 Restart game and autoplay 버튼을 눌러보자 우리팀이 모두 죽었다고 나오는 것을 확인할 수 있다. 그렇다면 일단 Dave의 체력을 검색해보자 (Restart game 버튼을 누르면 체력이 모두 초..
Step 8의 주제는 Multilevel pointers이다. Step 6의 포인터를 다중으로 설정해둔 문제이다. 간단하게 설명하자면 Step 6의 Pointer(포인터)는 1중 포인터로 주소를 한 번만 참조하면 원본 주소를 가리켜 값을 바꿀 수 있었지만 Step 8에서는 다중 포인터로 여러 번 참조해야 값을 바꿀 수 있는 문제이다. 위 그림과 같이 여러 주소를 거치는 것을 다중 포인터라고 부른다. 1994라는 값에 도달하기까지 총 4번의 주소를 참조해야만 주소가 바뀌어도 값을 변경할 수 있다. 위 그림과 같이 값을 찾아서 리스트에 저장해준다. 리스트에 저장되어 있는 값을 마우스 우클릭하여 Find out what writes to this address을 클릭하고 Chnage value 버튼을 눌러주면..
Step 7 문제의 외형은 Step 2와 닮아 있는데 클리어 방법은 전혀 다르다. 기존의 클리어 조건이 특정 값으로 Health를 변경하는 거였다면 Step 7의 클리어 조건은 Hit me를 클릭했을 때 Health가 2씩 증가되도록하면 된다. 우선 Health의 주소부터 찾아보자 이렇게 찾았다면 Step 5에서 배운 Find out what writes to this address 기능을 사용해 어느 부분에서 저 값이 쓰여지는지 추적하자 Find out what writes to this address의 사용법은 Step 5에서 알려줬으니 기억이 나지 않는다면 다시한번 보고오는것을 추천한다. 아무튼 이 기능을 이용해서 어느 부분에서 값이 -1 이 되는지 확인 할 수 있다. 어셈블리는 보면 'sub dw..
Step 6 문제의 제복은 Pointers(포인터)이다. 프로그래밍을 좀 해본 사람이라면 무슨 포인터가 무슨 말인지 눈치 챘을 것이다. 모르는 사람을 위해서 간단하게 설명하자면 100이라는 값이 존재하면 이 값을 가지고 있는 주소가 존재할 것이다. 그렇다면 이 주소도 어딘가에 존재 할 수 있는것이 아닌가? 이렇게 값이 존재하는 주소를 가지고 있는 것을 포인터라고 부른다. 클리어 방법은 Change pointer 버튼을 누르고나서 값을 5000으로 바꿔주면 클리어다. 위 그림과 같이 주소를 가지고 있는 타입을 포인터라고 부른다. 이번 문제에서는 이 포인터라고 하는 개념을 알아야만 문제를 해결 할 수 있다. 우선 늘 그랬던 Change value를 눌러가며 100이 저장되어 있는 주소를 찾아보자 이렇게 값을..