코드엔진 챌린지들을 기초부터 풀고 있다.
그중 이 문제는 안티 디버깅 기법이 들어간 문제여서, 기록해 두려고 한다.
StolenByte를 구하라고 한다.
훔쳐진 바이트? 처음엔 이게 뭔지 모르고 일단 디버깅을 시작했다.
x32dbg로 디버깅을 하니 unpacking 코드가 있어서 peview로 살펴봤다.
섹션 이름을 보면, UPX로 패킹되어 있단 것을 알 수 있다.
F8로 움직이며, OEP를 찾아주었다.
위 사진이 OEP 부분이다.
코드는 복잡하지 않다.
CreateFileA 함수를 실행하고서 리턴 값에 따라서 메시지 박스가 띄어진다.
well done! 메세지 박스를 띄어야 하는 건가 싶어 CreateFileA 함수를 찾아봤었는데, 풀리지 않았다.
StolenByte가 무슨 뜻인지 모르겠어서, 그냥 다른 사람의 리포트를 봤다.
StolenByte는 안티 디버깅 기법이라고 한다.
구글링을 통해 더 알아봤는데, 간단히 말하자면
패킹하는 코드 마지막 부분, 그러니까 OEP로 jump하기 바로 전 부분에 코드를 넣어두는 기법이다.
이렇게 하면 OEP부터 덤프 했을 때 프로그램에 에러가 생기게 된다.
이 문제에서도 아래 사진의 부분이 훔쳐진 부분이다.
위의 OEP 코드를 보면 시작하자마자, MessageBox 함수가 실행되는 것을 알 수 있는데,
거기 필요한 매개변수 4개 중에 3개가 Stolen 되었다.
아래 블로그가 StolenBytes에 대해 참고한 글인데, 어셈블리 코드에서 StolenBytes를 찾는 방법을 쉽게 알려주고 있다.
https://duwjdtn11.tistory.com/235
'리버싱' 카테고리의 다른 글
[Reversing.kr] Direct3D FPS 문제 풀이 (0) | 2023.07.14 |
---|---|
Position 파이썬 코드 해설 (0) | 2023.07.03 |
Reversing.kr Position 문제 풀이 (0) | 2023.07.03 |
Reversing.kr ImagePrc 문제 풀이 (0) | 2023.06.18 |
Reversing.kr Replace 문제 풀이 (0) | 2023.06.16 |