목록전체 글 (103)
또 뭐하지
n, k = map(int, input().split())q = []for i in range(n): if n%(i+1)==0: q.append(i+1)if len(q)
문제풀이제공된 코드를 살펴봤을때, 평문 p가 주어졌을 때 암호화 방식은 아래 공식과 같다. 이 식을 아래와 같이 정리해보면 복호화 방식을 알 수 있다.여기서 readme 파일을 확인해보면 p 를 구하기 위해 필요한 것 중 모르는 것은 key1 밖에 없는 것을 확인할 수 있다. 이때코드에서 key2 보다 key1 이 작다는 것을 알 수 있고 , key1 은 1~94 까지의 값을 가진다 . 큰 범위가 아니므로 전수조사를 시행한다 .복호화 공식에 따라 코드를 작성하고, 나누어 떨어지는 경우만 프린트하도록 하면 p 값을 얻을 수 있다 .
N = int(input())p = []for _ in range(N): a, b, c = map(int, input().split()) d = 0 if a == b == c : d = 10000 + a*1000 elif a == b : d = 1000 + a*100 elif b == c : d = 1000 + b*100 elif c == a : d = 1000 + c*100 else : d = 100 * max(a, b, c) p.append(d)print(max(p))
카나리함수 시작 시 스택 버퍼와 Return Address 사이에 랜덤 값을 삽입한 후 함수 종료 시 해당 랜덤 값의 변조 여부를 확인하여 메모리 오염 여부를 확인하는 보호 기법 카나리 생성 `security_init` 함수에서 TLS에 랜덤 값으로 카나리를 설정하면, 매 함수에서 이를 참조하여 사용합니다. 카나리 우회 기법- 무차별 대입 공격 (Brute Force Attack) : 무차별 대입으로 카나리 값을 구하는 방법. 현실적으로 불가능.- TLS 접근 : 카나리는 TLS에 전역 변수로 저장되므로, 이 값을 읽거나 조작할 수 있으면 카나리를 우회 가능- 스택 카나리 릭 : 함수의 프롤로그에서 스택에 카나리 값을 저장하므로, 이를 읽어낼 수 있으면 카나리를 우회할 수 있음. 가장 현실적인 카나리 우..
풀이#include #include #include #include void alarm_handler() { puts("TIME OUT"); exit(-1);}void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(30);}void get_shell() { system("/bin/sh");} void print_box(unsigned char *box, int idx) { printf("Element of index %d is : %02x\n", idx, box[idx]);}void menu()..
풀이문제파일에는 Image.E01 파일이 첨부되어있다. E01 확장자 : EnCase 이미지 파일 포맷을 사용하여 생성된 디스크 이미지. EnCase는 Guidance Software에서 개발한 디지털 포렌식 도구로, 법적 증거로 사용될 수 있는 디지털 증거를 수집, 분석 및 보고하는 데 널리 사용. E01 파일 열기EnCase 사용EnCase 소프트웨어를 실행하고 "File" 메뉴에서 "Add Evidence"를 선택하여 E01 파일을 엽니다.디스크 이미지가 로드되면, 파일 시스템을 탐색하고 분석할 수 있습니다.FTK Imager 사용FTK Imager를 실행하고 "File" 메뉴에서 "Add Evidence Item"을 선택합니다."Image File"을 선택하고 E01 파일을 지정합니다.로드된 이..
1. 암호암호 기본 개념평문 Plaintext : 암호화되지 않은 메시지암호문 Cypertext : 암호화된 메시지 암호화 Encryption : 평문을 암호문으로 만드는 것복호화 Decryption : 암호문으로부터 평문을 복원하는 것키 Key : 평문/암호문을 암호화/복호화시키는 암호 알고리즘에 필요한 핵심 가변정보 값모듈러 연산 : 어떤 숫자를 다른 숫자로 나눈 나머지를 구하는 연산 ex) a ≡ b (mod n) : a와 b는 n으로 나눈 나머지가 같다합동 : 어떤 숫자를 다른 숫자로 나눈 나머지가 같은 경우, 이를 합동이라고 함인코딩 : 데이터를 코드화하고 압축하는 등 다른 형태로 변환하는 것인코딩은 암호화와 달리 데이터의 기밀성을 고려하지 않고 누구나 디코딩하여 원문을 구할 수 있다. 파일의 ..
풀이// Name: r2s.c// Compile: gcc -o r2s r2s.c -zexecstack#include #include void init() { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0);}int main() { char buf[0x50]; init(); printf("Address of the buf: %p\n", buf); printf("Distance between buf and $rbp: %ld\n", (char*)__builtin_frame_address(0) - buf); printf("[1] Leak the canary\n"); printf("Input: "); fflush(stdout); read(0..