Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 뭉뭉
- Basic
- 2021
- 라이트업
- 변수
- hackingcamp
- 히공
- probgame
- 강의
- 드림핵
- PYTHON
- reversing.kr
- write up
- 풀이
- c언어
- 해킹캠프
- 라이트 업
- 코드엔진
- reversing
- 워 게임
- 라업
- vsCode
- web
- 파이썬
- ctf
- ShaktiCTF
- 리버싱
- 리버스 엔지니어링
- 시탭
- write-up
Archives
히공
DaVinciCTF 2021 - Crackme 본문
728x90
문제
int __cdecl main(int argc, const char **argv, const char **envp)
{
__int64 v3; // rbp
const char *v4; // rsi
const char *v5; // rdi
__int64 v6; // rdx
int result; // eax
unsigned __int64 v8; // rcx
unsigned __int64 v9; // rt1
const char **v10; // [rsp-48h] [rbp-48h]
__int64 v11; // [rsp-38h] [rbp-38h]
__int64 v12; // [rsp-30h] [rbp-30h]
__int64 v13; // [rsp-28h] [rbp-28h]
__int64 v14; // [rsp-20h] [rbp-20h]
char v15; // [rsp-18h] [rbp-18h]
unsigned __int64 v16; // [rsp-10h] [rbp-10h]
__int64 v17; // [rsp-8h] [rbp-8h]
__asm { endbr64 }
v17 = v3;
v10 = argv;
v16 = __readfsqword(0x28u);
if ( argc > 1 )
{
v11 = 0LL;
v12 = 0LL;
v13 = 0LL;
v14 = 0LL;
v15 = 0;
emmdee5((__int64)&v17, (__int64)argv[1], (__int64)&v11);
maybe_printf("%s", &v11);
v4 = (const char *)&v11;
if ( (unsigned int)maybe_strcmp("d2862c3379cbf547d317b3b1771a4fb6", &v11) )
{
v5 = "Nice try";
maybe_puts("Nice try");
}
else
{
v4 = v10[1];
v5 = "Well done! flag: dvCTF{%s}\\n";
maybe_printf("Well done! flag: dvCTF{%s}\\n", v4);
}
result = 0;
}
else
{
v4 = *argv;
v5 = "Usage: %s <password>\\n";
maybe_printf("Usage: %s <password>\\n", *v10);
result = 1;
}
v9 = __readfsqword(0x28u);
v8 = v9 ^ v16;
if ( v9 != v16 )
result = sub_562E0E712100(v5, v4, v6, v8);
return result;
}
메인 함수
emmdee5함수
esrever함수
md5해시 값을 esrever함수를 통해 암호화를 진행하고 hex로 문자열을 만든다.
그게 d2862c3379cbf547d317b3b1771a4fb6와 같아야 한다.
import hashlib
def strlen(st):
result = 0
for i in st:
if i==0:
return result
result+=1
return result
md5_st = "111111111" # 사용자 입력 값
md5_hash = hashlib.md5(md5_st.encode()).hexdigest()
md5_hash = [int(md5_hash[i:i+2], 16) for i in range(0,len(md5_hash)-1,2)]
v5 = strlen(md5_hash)
v6 = md5_hash[:]
v7 = md5_hash[v5-1:]
j = 0
while True:
result = v5//2
if j>=result:
break
md5_hash[v5-1-j], md5_hash[j] = md5_hash[j], md5_hash[v5-1-j]
j+=1
v11 = ["%02x"%md5_hash[i] for i in range(16)]
print(''.join(v11))
문제를 구현할 수 있다.
st = 'd2862c3379cbf547d317b3b1771a4fb6'
md5_hash = [st[i:i+2] for i in range(0,len(st)-1,2)]
v5 = len(md5_hash)
j = 0
while True:
result = v5//2
if j>=result:
break
md5_hash[v5-1-j], md5_hash[j] = md5_hash[j], md5_hash[v5-1-j]
j+=1
print(''.join(md5_hash))
이 코드를 이용해서 esrever함수에서 암호화 되기 전 상태로 복구할 수 있다.
출력 값이 b64f1a77b1b317d347f5cb79332c86d2이다.
https://www.md5online.org/md5-decrypt.html
이 사이트 가서 md5 복호화(?)를 진행하면
741852963가 정답이다.
플래그 : dvCTF{741852963}
'write up > DaVinciCTF 2021' 카테고리의 다른 글
DaVinciCTF 2021 - Rocca Pia (0) | 2021.03.20 |
---|
Comments