일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- c언어
- web
- 파이썬
- 뭉뭉
- 라이트 업
- 라이트업
- 워 게임
- 풀이
- 라업
- 히공
- 코드엔진
- 변수
- write-up
- 해킹캠프
- PYTHON
- reversing
- 리버스 엔지니어링
- ctf
- hackingcamp
- vsCode
- 강의
- 시탭
- Basic
- reversing.kr
- probgame
- write up
- ShaktiCTF
- 리버싱
- 2021
- 드림핵
목록ctf (31)
히공
문제 revtine파일 하나가 있다. Ch0c0l4te_v3_1, Ch0c0l4te_v3랑 같은 친구다. 왜 두 개로 나뉜 것인지 모르겠다. Ch0c0l4te_v5는 "Ch0c0l4te"로 고정된다. 저 sub_1000036E0는 각 요소를 0xA와 xor하는 함수다. 여기서 free 해주는 것을 보아 분석할 필요가 없는 함수라는 것을 알 수 있다. 여기도 페이크 루틴이 많다. 여기가 가장 중요하다. sub_1000037F0 함수다. 암호화를 하는 것을 볼 수 있다. 여기에 인자로 들어가는 off_100008078가 많이 중요하다. off_100008078다. 문자열 중 이러한 문자열이 있다. 해석하면 나의 마음을 반대로 읽을 수 있느냐? 이런 뜻입니다. 여기서 복호화 코드를 만들어야 한단 것을 유추할 ..
문제 문제 파일들 UPX 패킹이다. 언패킹을 진행한다. 실행화면 ida에서 본 화면이다. 2를 입력했을 때 나오는 것들 여기서 1을 입력했을 때 sub_401080을 호출하는데 저게 굉장히 중요하다. 여기서 딱 수상한 루틴이 있다. 변수들 x32dbg로 풀었다. 메인함수 mov eax, dword ptr fs:[0x30] movzx eax, byte ptr [eax+0x68] NtGlobalFlag이다. 디버깅 중인지 아닌지 판단할 때 사용된다. 디버깅 중이면 0x70을 반환하고 아니면 0을 반환한다. 현재 eax값이 0x70인 것을 볼 수 있다. 패치를 통해 넘어가자 안티디버깅을 우회 했다. 이 부분에 bp를 걸어준다. 실행한다. 2를 입력한다. 그 후 여기에 bp를 걸고 1을 입력해준다. 이 함수가 ..
문제 메인함수다. 인자로 문자열 2개를 받는다. 2번째가 AA.....sks여야 한다. v15, v14에 인자1, 인자2를 복사한다. v15를 오픈하고 리턴 값을 v10에 저장한다. 두 번째 인자를 argv_s_2에 넣는다. 매우 중요한 핵심 루틴이다. v10(첫 번째 파일) 을 4바이트씩 끊어서 read_value에 집어넣는다. 그 후 for을 총 6번을 돌려 0x10과 xor 해준다. 그 후 두 번째 파일에 write를 4바이트씩 한다. 간단하게 코드를 만들 수 있다 name = "Data.enc" with open(name,'rb') as f: read_file = f.read() read_file = bytearray(read_file) write_byte = bytearray() for i in..
sSsSSsSSssSSsSsSsSssSSSSSSSssS{SSSsSsSSSsSsSSSsSSsSSssssssSSSSSSSsSSSSSSSSsSSsssSSssSsSSSsSSsSSSSssssSSsssSSsSSsSSSs} 문제 입니다. { 전 문자열의 길이가 30입니다. 플래그 형식이 utflag{}인 것을 생각했습니다. utflag의 길이는 6이고 그래서 한 문자당 5개의 s, S를 쓴다고 생각했습니다. 소문자 s는 1 대문자 S는 0 이런 식으로 변환해주고 97을 더해주면 됩니다. st = 'SSSsSsSSSsSsSSSsSSsSSssssssSSSSSSSsSSSSSSSSsSSsssSSssSsSSSsSSsSSSSssssSSsssSSsSSsSSSs' plus_num = 97 ls = [st[i:i+5] for i i..
문제 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..
문제 메인 함수 transform 함수 원격 디버깅을 사용했는데 segment fault가 뜬다. (v4가 0이란 값을 가지고 있기 때문이다. write 할 수 없는 영역) bec = [int(i,16) for i in '77 41 50 63 55 4C 5A 68 7F 06 78 04 4C 44 64 06 7E 5A 22 59 74 4A'.split()] flag = '' for i in range(len(bec)): if (i&1): flag += chr(bec[i] ^ 0x37) else: flag += chr(bec[i] ^ 0x13) print(flag) 간단하게 풀 수 있다. 플래그 : dvCTF{I_l1k3_sw1mm1ng}
이번 해킹캠프에 처음 도전했습니다. 저는 이번 발표가 전부 좋았는데 저는 그 중 "장한빈 - Fun, Cool, 하게 해킹하기 (네트워크, 웹 프로토콜 분석 방법)" 발표가 가장 인상 깊었습니다. 라이브로 해킹하시는 것이 신기했고, 보안이 약한 앱들이 많다는 것을 알게 되었습니다. 중간중간에 이벤트를 했는데 텐션 확 올려주시고 완전 좋았던 이벤트였습니다. 저는 CTF에서 리버싱 문제 딱 한 문제 풀기가 목표였습니다. 리버싱 3문제 + misc 2문제를 풀게 되어 매우 기뻤습니다. (한 문제는 퍼블해서 매우 기분 좋은..ㅎㅎ) 결과는 5등 안에 없는 6등으로 마무리해서 매우 슬펐습니다. ㅠㅠㅠ 그래도 양질의 리버싱 문제를 경험해 보았기에 매우 알찬 경험이라고 생각이 듭니다. 개인적으로 이번 해킹캠프는 정말..