프로그램의 등록키는 무엇인가 입니다!
Ollydbg로 올려보겠습니다 :D
처음부터 PUSHAD 명령어가 보입니다.
생소한 시작이네요..
PUSHAD 명령어로 시작한다는 것은 현재 프로그램이 Packing 되어 있다는 것을 의미합니다 :D
PEiD라는 툴이 있는데 이는 프로그램의 상태를 보여줍니다!
"UPX 0.89.6 ~~ "로 시작되어 있는거 보이시나요 :D
그리고 EP Section이 현재 UPX1으로 나타납니다!
이는 UPX Packer로 Packing 되어 있다는 얘기죠!
블로깅 전에는 Google을 이용하여 스스로 공부하시길 바랍니다 :D
아주 잘 나와있어용 !
https://github.com/upx/upx/releases/tag/v3.94
upx/upx
UPX - the Ultimate Packer for eXecutables. Contribute to upx/upx development by creating an account on GitHub.
github.com
명령프롬프트로 upx 프로그램이 존재하는 경로까지 이동해줍시다.
그리고 "upx.exe"를 입력하면 옵션을 볼 수 있습니다 :D
저희는 unpacking 해줘야 하기 때문에
"upx.exe -d 프로그램이름"
이용해줍니다!
+ 언팩킹하실 때 권한이 없다고 뜨신다면, 05.exe 프로그램이 동작 중인지 확인하시기 바랍니다 :D
unpacking이 되었다면 PEiD로 확인해봅시다 :D
쨘! Borland Delphi 4.0 -5.0 로 바뀌었죠 :D ?
그리고 EP Section 또한 Code로 변경되었습니다!
이제 순조롭게 분석을 시작해보도록 합시다 :D
EP입니다. 빠르고 쉽게 분석하기 위해 앞서 알게된
[Search for] - [All referenced text strings] 옵션을 이용해봅시다 :D
내려가 보니 시리얼로 보이는 부분과 성공, 실패 시 출력되는 문구같은 곳을 발견할 수 있었습니다 :D
그래서 실행시켜보니 프로그램이 실행이되고 유저 이름과 시리얼 번호를 적는 칸이 존재하더군요 !
아무값이나 시도해보았는데 자꾸 실패가 됩니다 : (
그래서 분석결과 표시된 CALL 함수에서 확인 후 JNZ에서 넘어가게 됩니다 !
그럼 CALL 함수로 들어가봅시다!
CALL 내부로 들어가니 어떤 두개의 값을 비교합니다 !
제가 입력한 값과 "Unregistered..." 비교값인 "Registered User"을 비교하는군요 :D
그리고 마저실행하니 예상대로 실패 메시지 박스가 실행됩니다.
그래서 "Unregistered..." -> "Registered User"로 변경을 하였습니다.
그런데 또 무언가를 비교하는군요 ?
앞에 이름을 비교하는것처럼 똑같은 방식으로 시리얼을 비교하고 있습니다 :D
그럼 ASCII로 나타나있는 저 시리얼 번호가 진짜 번호겠죠 :D ?
입력해봅시다!
이렇게 간단히 찾을 수 있었습니다 :D
이번 문제에서는 Packing부분을 알아야 풀 수 있는 문제가 아니었나 생각이 듭니다 :D
여기서 중요한 것은 Packing이 되어 있다고 해서 분석을 못하는 것은 아닙니다!
Packing되어있는 부분을 진행시키다 보면 OEP를 마주하게 되고
그때부터는 Unpacking되어 있는 것처럼 분석이 가능하니까요 :D
그러나 편의상 upx 프로그램을 이용하여 언패킹해서 문제를 풀어보았습니다!
반드시 Packing 되어 있는 상태에서 직접 분석 해보시기를 바랍니다 :D
또 하나의 공부로써 도움이 많이 되걸랑요 >_<
그럼 5번문제 풀이를 마치겠습니다!
'CTF > CodeEngn.kr' 카테고리의 다른 글
Basic RCE L07 (0) | 2020.02.13 |
---|---|
Basic RCE L06 (0) | 2020.02.12 |
Basic RCE L04 (0) | 2020.02.09 |
Basic RCE L03 (0) | 2020.02.07 |
Basic RCE L02 (0) | 2020.02.03 |