StolenByte를 구하라고 한다.
그게 뭐지??
블로그 글을 봤는데 잘 모르겠다.
+) 패킹된 바이너리의 언팩을 방해하기 위해 일부 명령어를 조작하는 것 (안티 디버깅의 일종)
일단 디버거에 얹어보자
PUSHAD가 있고 한 줄씩 디버깅이 되지 않는 것으로 보아 패킹되어있는 것 같다.
Exeinfo PE 프로그램을 사용해서 어떤 방식으로 패킹되어있는지 살펴보자
UPX로 패킹 되어 있는 것을 확인할 수 있었다.
UPX 사용해 언패킹 해주자
언패킹 해줬으니까 다시 디버거에 넣어서 살펴보자
잉 근데 에러가 뜬다 ...
HxD에서 살펴봐야겠다.
보니까 헤더 시그니처는 맞는데 바로 뒤에 50이라는 값이 붙어있었다.
그래서 50값을 00으로 바꿔주고 저장 후 디버거에 올려보았다.
그랬더니 잘 들어갔다 !
이제 여기서 StolenByte를 구해야 한다.
언패킹 후 디버거에 넣으면 바로 OEP 부분인데 이 프로그램은 NOP 명령어가 많다.
아까 StolenByte 관련 블로그 찾은 걸 보면
NOP 명령어 부분이 Code 부분인 것을 알 수 있다.
근데 언패킹한 프로그램이 조금 이상하다
실행시켜보면 메시지 박스가 이렇게 깨져있는 것을 확인할 수 있다.
확인을 누르면
이건 또 멀쩡하다.
그래서 패킹되었던 프로그램도 실행해봤는데
얘는 안깨지고 확인을 눌러도
멀쩡하다.
UPX 툴로 언패킹 하게 되면 oep부터 덤프를 뜨는데 복호화 과정에서 무슨 문제가 생긴 것 같다.
패킹된 프로그램 자체가 원래의 프로그램을 실행하기 위해 복호화를 하는 과정에 주의해보자
패킹된 프로그램을 디버거에 넣어보면 PUSHAD로 시작하는데 이때 POPAD도 존재한다.
POPAD가 나타나면 복호화 끝났구나 / 메모리에 원래 프로그램의 코드를 적어놨구나 생각할 수 있다.
POPAD가 있고 밑에 JMP 명령어가 있다.
이 부분에서 OEP로 이동한다.
--------------------------------------------------------------------------------------------------------------
이 부분에서 한 줄씩 f8로 실행하면
저기 걸리는 부분이 생긴다. 저 부분이 왜 필요할까 ???
----------------------------------------------------------------------------------------------------------------
언패킹한 프로그램을 디버거에서 살펴보자
NOP부분도 수상했지만 오른쪽에 MessageBoxA 부분도 요상하다.
이렇게 인자가 하나만 있다.
좀만 밑에 내리면
또 다른 MessageBoxA를 볼 수 있는데 얘네들은 다 똑같이 인자가 4개가 있다.
아마 아까 언패킹한 프로그램 실행했을 때 첫 번째 팝업은 깨졌는데, 두 번째 팝업은 안깨진 것과 연관이 있는 것 같다.
메세지 박스에 출력해야 할 값들이 인자 4개가 있어야하는데 1개가 있어서 스택에 저장하는 과정이 없으므로 쓰레기 값이 출력된 것 같다.
이 사라진 부분을 패킹된 프로그램에서 찾아보자.
아까봤던 POPAD 부분에 바로 밑 부분!
POPAD는 PUSH로 스택에 넣은 값들을 다시 레지스터에 채우는 역할을 하기 때문에 바로 밑에 있는 PUSH 3줄을 의심해볼 수 있다.
3줄 바이트를 순서대로 적고 다시 언패킹 했던 프로그램을 넣은 디버거 창으로 가자.
6A0068002040006812204000
NOP의 시작 주소인 401000으로 가서 적어놓았던 바이트를 패치하자
그러면 NOP였던 부분도
이렇게 바뀐다.
실행해보면 언패킹 한 프로그램도
이렇게 안깨지게 된다.
성공!
정말 큰 도움이 된 마띠언니 블로그,,,
'Reversing > Wargame' 카테고리의 다른 글
[CodeEngn] Basic RCE L07 (0) | 2021.02.25 |
---|---|
[CodeEngn] Basic RCE L15 (0) | 2021.02.24 |
[CodeEngn] Basic RCE L04 (0) | 2021.02.22 |
[CodeEngn] Basic RCE L02 (0) | 2021.02.22 |
[CodeEngn] Basic RCE L06 (0) | 2021.02.19 |
댓글