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
- write up
- 워 게임
- 2021
- 히공
- 강의
- 파이썬
- 코드엔진
- c언어
- 드림핵
- 변수
- 시탭
- 리버스 엔지니어링
- 라이트업
- vsCode
- 라이트 업
- ShaktiCTF
- reversing.kr
- 해킹캠프
- 라업
- ctf
- PYTHON
- write-up
- probgame
- 뭉뭉
- Basic
- hackingcamp
- web
- 풀이
- reversing
- 리버싱
Archives
히공
ShaktiCTF 2021 - PacMat 본문
728x90
문제
exe파일이고 gui 프로그램이다.
WinProc에서 분기점을 찾았다.
sub_411109 이 함수를 분석해보자
// attributes: thunk
int sub_411109(void)
{
return sub_411F90();
}
함수 내부에서 함수를 호출한다.
int sub_411F90()
{
__int64 v1; // [esp+Ch] [ebp-138h]
int v2; // [esp+D8h] [ebp-6Ch]
char v3[20]; // [esp+E4h] [ebp-60h] BYREF
int v4[11]; // [esp+F8h] [ebp-4Ch]
int v5; // [esp+124h] [ebp-20h]
int j; // [esp+130h] [ebp-14h]
int i; // [esp+13Ch] [ebp-8h]
__CheckForDebuggerJustMyCode(&unk_41C018);
j_memcpy(Str, Src, 0x35u);
if ( j_strlen(Str) != 0x34 )
return 0;
MessageBoxA(0, "Thanks for your input", "Gratitude", 0);
v4[0] = 22;
v4[1] = 91;
v4[2] = 7;
v4[3] = 3;
v4[4] = 7;
v4[5] = 41;
v4[6] = 7;
v4[7] = 18;
v4[8] = 69;
v4[9] = 25;
v4[10] = 124;
v5 = 77;
qmemcpy(v3, "e3fhs@df#b]0", 12);
for ( i = 0; i < 10; ++i )
{
if ( (v3[i] ^ Str[i]) != v4[i] )
return 0;
} // 아마 shakictf{
HIDWORD(v1) = (v3[i] ^ Str[50]) != v4[i];
LODWORD(v1) = (v3[11] ^ Str[51]) != v5;
if ( v1 )
return 0;
v2 = 10;
for ( i = 0; i < 5; ++i )
{
for ( j = 0; j < 8; ++j )
{
if ( (Str[j + i + v2] ^ 8) != dword_41A000[5 * j + i] )
return 0;
}
v2 += 7;
}
return 1;
}
간단한 코드였다. (사실 dword_41A000[5 * j + i] 이 친구 덕분에 삽질 좀 한...ㅎㅎ..)
v3 = "e3fhs@df#b]0"
v4 = [22,91,7,3,7,41,7,18,69,25,124]
flag = [0]*52
for i in range(10):
flag[i] = chr(ord(v3[i]) ^ v4[i])
i+=1
flag[50] = chr(ord(v3[i]) ^ v4[i])
flag[51] = chr(ord(v3[11]) ^ 77)
v2 = 10
dword_41A000 = '39 00 00 00 60 00 00 00 38 00 00 00 7F 00 00 00 64 00 00 00 57 00 00 00 3C 00 00 00 66 00 00 00 39 00 00 00 38 00 00 00 60 00 00 00 7C 00 00 00 7C 00 00 00 7C 00 00 00 7A 00 00 00 38 00 00 00 57 00 00 00 39 00 00 00 60 00 00 00 69 00 00 00 78 00 00 00 7F 00 00 00 66 00 00 00 57 00 00 00 7C 00 00 00 6D 00 00 00 3B 00 00 00 7D 00 00 00 3B 00 00 00 61 00 00 00 57 00 00 00 57 00 00 00 6D 00 00 00 70 00 00 00 38 00 00 00 7C 00 00 00 6B 00 00 00 57 00 00 00 78 00 00 00 66 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
dword_41A000 = dword_41A000.replace('00','')
dword_41A000 = bytes.fromhex(dword_41A000)
for i in range(5):
for j in range(8):
flag[j+i+v2] = chr(dword_41A000[5*j + i] ^ 8)
v2+=7
flag = ''.join(flag)
print(flag)
플래그 : shaktictf{1_h0pe_th4t_w3_c0nt1nue_w1th_3xpl0rati0n!}
'write up > ShaktiCTF 2021' 카테고리의 다른 글
ShaktiCTF 2021 - pillow (1) | 2021.04.05 |
---|---|
ShaktiCTF 2021 - Chunkies (0) | 2021.04.05 |
ShaktiCTF 2021 - BomB (0) | 2021.04.05 |
ShaktiCTF 2021 - fusk (0) | 2021.04.05 |
ShaktiCTF 2021 - deceev (0) | 2021.04.05 |
Comments