StolenByte를 구하시오 라고 한다.
StolenByte가 뭐냐고?
본인이 간단한 안티치트툴을 만들어보며 작성했던 pdf 파일에서 발췌해 왔다.
조금 더 덧붙이자면
안티 디버깅 기법중 하나이며, 단어의 의미처럼 코드를 훔쳐 다른 곳으로 옮긴 것이다.
OEP 주소의 코드를 분리해 점프 직전 Push로 넘겨준다.
프로그램 실행모습
언패킹 해주자
다시 실행하자
메세지박스가 깨져서 나온다.
UPX는 제일 위 사진의 설명처럼 upx0, upx1로 나뉘어 있다. Peview를 통해 보게되면
SECTION UPX0 : 섹션 및 기타 초기화 코드 -> 압축코드가 해제될 곳
SECTION UPX1 : 복호화 알고리즘 -> 압축코드가 저장된 곳
IDA로 보자
12바이트만큼 NOP처리가 되어있다. 저 곳에 StolenByte를 찾아서 넣어주자
x32Dbg로 열어보자
F9를 눌러 이동했고,
UPX 는 PUSHAD ~ POPAD 인스트럭션 사이에서 압축해제 코드가 실행 되며,
POPAD 인스트럭션 실행 후 JMP 를 통해 OEP로 이동한다.
PUSHAD : 범용레지스터의 값을 스택에 저장
POPAD : 스택의 데이터를 범용레지스터에 저장
밑으로 내려 POPAD를 찾자
글 상단에 서술했다시피 OEP로 JMP 하기전에 PUSH로 값을 넘겨준다고 했다.
JMP 40100C 부분이 OEP로 점프하는 부분이며
POPAD와 JMP사이의 PUSH로 넘기는 부분을 보면
push 0
push 402000
push 402012
를 볼 수 있다.
StolenByte는 6A 00 68 00 20 40 00 68 12 20 40 00 이라는 말이 된다.
OEP로 이동해 12바이트 만큼 패치해 주었다.
더이상 메세지박스가 깨지지 않는다.
'Reverse Engineering > [CodeEngn] Basic RCE' 카테고리의 다른 글
[Reversing] CodeEngn - Basic RCE L11 (0) | 2024.07.02 |
---|---|
[Reversing] CodeEngn - Basic RCE L10 (0) | 2024.07.02 |
[Reversing] CodeEngn - Basic RCE L08 (0) | 2024.07.02 |
[Reversing] CodeEngn - Basic RCE L07 (0) | 2024.07.02 |
[Reversing] CodeEngn - Basic RCE L06 (0) | 2024.07.02 |