서브웨이

dreamhack rev-basic-3 풀이 본문

Reverse Engineering/dreamhack

dreamhack rev-basic-3 풀이

샌드위치메이커 2021. 7. 21. 17:19

자 1단계 마지막 리버싱입니다.

한번 파일을 봅시다.

이번에도 어김없이 입력값 검증 형태입니다.

 

그럼 디버깅을 해봅시다.

일단 참조된 문자열엔 없으니 검증하는 부분으로 가봅시다.

이번에도 검증함수가 존재합니다. 한번 들어가봅시다.

딱봐도 조금 복잡해보입니다.

정리하자면 이런 구조입니다.

일단 입력한 문자열을 불러온 뒤, 0x7FF600E53000에 위치한 암호화된 문자열(?)을 불러옵니다.

(입력 문자 ^ 인덱스) + 인덱스 * 2 = 암호 문자

이렇게 연산을 진행한 뒤 한 글자씩 인덱스에 맞게 총 24번 비교를 합니다.

 

그럼 암호화된 문자열로 검증에 필요한 문자열을 얻기 위해 공식을 수정해봅시다.

입력 문자 = (암호 -인덱스 * 2) ^ 인덱스

이 공식으로 파이썬 코드를 짜 봅시다.

def cal(c, i):
    print(chr((int(c)-i*2) ^ i), end='')


encrypted = [0x49, 0x60, 0x67, 0x74, 0x63, 0x67, 0x42, 0x66, 0x80, 0x78, 0x69, 0x69, 0x7B, 0x99, 0x6D, 0x88, 0x68, 0x94, 0x9F, 0x8D, 0x4D, 0xA5, 0x9D, 0x45]

for c, i in zip(encrypted, range(0, 24)):
    cal(c, i)

 

결과는 다음과 같습니다.

마지막은 0x0이니 그냥 무시하시면 될것같습니다.

'Reverse Engineering > dreamhack' 카테고리의 다른 글

dreamhack rev-basic-5 풀이  (0) 2021.07.28
dreamhack rev-basic-4 풀이  (0) 2021.07.28
dreamhack rev-basic-2 풀이  (0) 2021.07.21
dreamhack rev-basic-1 풀이  (0) 2021.07.21
dreamhack rev-basic-0 풀이  (0) 2021.07.21
Comments