0x07 CTF(37)
-
HacktheBox CTF coding problem
문제 명 AlienCamp 문제 컨셉은 이모지에 대응되는 값들이 유동적으로 변하는 서버에서 나누기를 제외한 사칙연산을 랜덤하게 추출하여 계산하는 문제이다. 처음에 헤맸는데 그 이유는 곱셈이 연산 우선순위가 되어야하는것을 깜박하고 있었기 때문. #-*-coding:utf-8-*- import emoji import sys from pwn import * # Algorithm # '1' -> Setting the Emogi's value # '2' -> Based on the '1' result value -> Calc ################ Emoji ####################### # \xf0\x9f\x8c\x9e : sun_with_face # \xf0\x9f\x8d\xa8 : ice..
2021.04.24 -
zer0pts 2021 - not beginners rev
새벽에 잠이 안와서 최근 대회 문제 중 zer0pts의 문제를 풀어보기로 했다. 14명 밖에 풀지 못하여 꽤 어려울 거 같지만 도전! 오늘의 컨셉은 실시간으로 푸는 듯한 컨셉으로 진행한다. 며칠이 걸릴 수도 있다... 시작 시간 : 12 March 4:00 AM (SGT) 1. 프로그램 취지를 파악하라. 프로그램의 취지를 파악하기 좋은 방법 중 하나는 직접 실행해보는 것이다. 2번의 실행을 통해 고정 값이 3개임을 파악할 수 있다. 입력 값 한번 입력하는 구간 존재 입력 값을 통해 특정 연산을 취하는 구간 존재 2. 고정 된 3개의 값은 어디에? 상단의 동적분석에서 얻게 된 값이 어디에 있는지 파악해보면 좋을 거 같다는 생각을 할 수 있다. 0x5aaf63e5c1f262bf, 0xa967ff06da3b4..
2021.03.12 -
AeroCTF2021 Dummyper
문제 카테고리: Rev TL;DR: 바이너리 속 유추할 수 있는 규칙을 통해 암호화 된 섹션을 복구해야한다. External에 존재하는 모듈을 연계지어 생각하면 분석이 용이하다. AES CBC 임을 유추해야한다. time() 을 어떻게 사용할 것인지 고민해야한다. 바이너리 분석: 파일 크기: 38400000 파일 크기가 큰 것으로 보아, 덤프파일임을 유추할 수 있다. 메인 함수에 3개의 서브 함수가 존재하나, loc_1691의 경우 올바르게 디스어셈블 되지 못하고 있는 상황임을 확인할 수 있다. 이에 따른 원인은 sub_172A 함수에 진입하면 보다 더 자세히 알 수 있게 된다. sub_172A 함수 .text 섹션 unk_13A9 + 895까지 복호화 시키는 루틴이다. 범위는 0x13A9부터 0x172..
2021.03.02 -
[REV] COMPEST - CreeptiCity
보호되어 있는 글입니다.
2020.09.12 -
HexionCTF XOR - Crypto
대회 끝나고 풀긴 했지만, 나름 재밌게 풀었다. 1. Concept XOR Encrypt -> XOR Decrypt 2. Source Code Analysis from random import choice, randint from string import ascii_letters from itertools import cycle key = ''.join([choice(ascii_letters) for i in range(randint(8, 16))]) with open("flag.txt", "r") as file: flag = file.read() key_gen = cycle(key) data = [] for i in range(len(flag)): data.append(chr(ord(flag[i]) ^..
2020.04.18 -
NOX CTF att3nti0n[REV]
NOX CTF 라이트업을 보니까 내가 접근 하지 못한 부분이 존재하였다. 그것은 바로 "VirtualAlloc부터 존재하는 루틴에 대한 미 이해 "좀 더 꼼꼼히 코드를 봐야겠다. 그럼 그대로 따라하면서 연습해보자. 먼저 main 부분부터 살펴보도록 하자.프로그램의 인자 값이 키 값이 되는 형태다.int __cdecl main(int argc, const char **argv, const char **envp) { int result; // eax __main(); if ( argc == 2 ) { if ( (unsigned __int8)check(argv[1]) == 1 ) fwrite("Correct! :)\n", 1u, 0xCu, (FILE *)__iob[0]._ptr); else fwrite("No..
2018.09.09