Sharif University CTF 2016 : Serial
- Points : 150
- Solves : 108
- Description
Run and capture the flag! Download serial
리눅스 원격디버깅 방법과 IDA를 통한 리버싱을 익힐 수 있었다.
하드코딩된 시리얼넘버였지만 단순하게 박혀있는 타입이 아니였다.
로직은 코드의 일부분이 오버랩되어 IDA에 의해 디컴파일이 불가한 상태였다.
롸잇업을 보고나서야 점프코드 부분이 다른 코드와 오버랩 되어있다는 사실을 알았다.
그리고 단축키 C와 D를 이용해서 코드를 변환할 수 있다는 사실을 알고 놀라웠다.
C: Code로 변환
D: DATA변환
R: 헥스 값을 아스키 케릭터로 변환
한글자씩 시리얼 넘버를 비교하고 다음에는 길이를 비교하는 로직인데
플래그는 EZ.......로 16글자이며 각 글자 비교 중간에 또 무엇인가 비교하는 로직이 존재한다.
이부분이 이해가 필요한 부분이다. 구글링해도 뭔말인지 모르겠네 ㅡㅡ;
다른 사람의 해석풀이
- Input must be 16 bytes
- Read str[ 0], must be equal to ‘E’
- Read str[15], add with str[0], sum must be 0x??
- Read str[ 1], must be equal to ‘Z’
- Read str[14], add with str[1], sum must be 0x??
- Repeat until whole string has been read.
The rest of the check is straight forward: It checks that the xth byte is some hard code value, and then checks that the value of the xth byte from the back, plus the xth byte adds up to some other hardcoded value. You can hit R on the byte values to see the ASCII representation, but this won’t work on the back half checks, because the two characters’ sums aren’t likely still in the ASCII range. After 8 of these double checks you should have what you need.
'리버싱CTF > 미분류 CTF' 카테고리의 다른 글
Internetwache CTF 2016 : File Checker (0) | 2019.12.30 |
---|---|
Internetwache CTF 2016 : SPIM (0) | 2019.12.30 |
Sharif University CTF 2016 : SRM (0) | 2019.12.30 |
[Android]Sharif_CTF (0) | 2019.12.30 |