일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 |
- 코드엔진 베이직
- malware
- h4ckinggame
- Best of the Best
- 디지털 포렌식 트랙
- 코드엔진 basic 5
- 사회분업론
- bob
- 자살론
- 코드엔진
- CodeEngn
- CodeEngn Basic 5
- codeengn basic rce 01
- 논문리뷰
- 에밀 뒤르켐
- BoB 12기 최종합격 후기
- 사회적 사실
- CodeEngn Basic 01
- 철학
- BoB 12기
- 리버싱
- Today
- Total
woonadz :)
[DreamHack] basic_rev_4 문제 풀이_reversing_nabi 본문
DreamHack의 basic reversing 시리즈는 전체적인 로직은 같고, 입력값을 기반으로 serial과 비교하는 부분의 로직이 다르기 때문에 그 부분부터 설명한다.
1C와 비교하는 것으로 보아 총 28자리의 serial인 것을 추측할 수 있다.
sar 명령어는 오늘 처음 보았다.
sar : 오른쪽으로 밀어 낮은 bit를 내보내고 Carry Flag로 복사, 높은 bit 쪽에 0을 더하여 채운다.
But keep sign(1) 해야한다.
사용자가 입력한 첫 값에 대해 위와 같이 계산한다.
shl : 왼쪽으로 밀어(shift) 높은 bit를 내보내고 Carry Flag로 복사 낮은 bit쪽에 0을 더하여 채운다.
사용자가 입력한 첫 값에 대해 위와 같이 계산한다.
shl 연산을 한 값과 F0을 and 연산한다.
eax 레지스터의 값과 ecx 레지스터의 값을 or 연산한다.
위에서 연산한 값과 00007FF63C673000 주소에 있는 값들을 비교해서 점프 여부를 정한다.
해당 주소로 가서 28자리의 비트 수를 확인한다. 위 값을 기반으로 코드를 짤 것이다.
00007FF63C673000 24 27 13 C6 C6 13 16 E6 47 F5 26 96 47 F5 46 27 $'.ÆÆ..æGõ&.GõF'
00007FF63C673010 13 26 26 C6 56 F5 C3 C3 F5 E3 E3 00 .&&ÆVõÃÃõãã.
역으로 계산하면 다음과 같다.
M = 메모리 값
A = 사용자 입력값
(A → 오른쪽으로 비트 수 한자리 이동) or {(A → 왼쪽으로 비트 수 한자리 이동) and F0} = M
or의 역연산은 불가능하기 때문에 A를 변수로 두고 burteforce 방식으로 M이 되는 값을 찾는 코드를 작성했다.
사진을 보면 사용자가 입력할 수 있는 값은 10진수 기준으로 33부터 126까지이다.
encrypted = [0x24, 0x27, 0x13, 0xC6, 0xC6, 0x13, 0x16, 0xE6, 0x47, 0xF5, 0x26, 0x96, 0x47, 0xF5, 0x46, 0x27, 0x13, 0x26, 0x26, 0xC6, 0x56, 0xF5, 0xC3, 0xC3, 0xF5, 0xE3, 0xE3, 0x00]
for j in range(0,28):
for i in range(32,127):
if (i >> 4) | ((i << 4) & 0xF0) == encrypted[j]:
print(chr(i), end='')
break;
'IT > DreamHack' 카테고리의 다른 글
[DreamHack] palm 문제 풀이_forensic_nabi (2) | 2024.04.01 |
---|---|
[DreamHack] Batch Checker II 문제 풀이_reversing_nabi (1) | 2024.03.15 |
[DreamHack] basic_rev_9 문제 풀이_reversing_nabi (0) | 2024.03.09 |
[DreamHack] basic_rev_5 문제 풀이_reversing_nabi (0) | 2023.04.13 |
[DreamHack] 'chinese what?' 문제 풀이_crypto_nabi (0) | 2022.11.09 |