목록CTF (63)
안 쓰던 블로그
sage sage는 python에서 수학 계산을 위한 프로그래밍 도구이다 sage 문서: doc.sagemath.org/html/en/tutorial/ sage의 클라우드 서비스: cocalc.com/ 설치 sagemath.org/download-linux.html 이곳에서 바이너리 파일을 다운로드 받아서 압축 해제를 한다 tar --lzma -xvf 파일명 그리고 필요한 패키지들을 설치해야 한다 sudo apt-get upgrade && sudo apt-get install build-essential m4 gfortran sudo apt-get install imagemagick texlive dvipng 설치 후 압축 해제했던 디렉터리에서 make 명령어를 치면 알아서 설치가 된다 실행 설치 폴더로..
RSA 공개키 개인키 구하는 법 1. p, q선택 파이썬에서 p, q값을 생성하는 방법은 다음과 같다 from Crypto.Util.number import getPrime p = getPrime(1024) #1024 bit q = getPrime(1024) pycryptodome가 설치되어 있지 않다면 $ pip install pycryptodome 로 설치해 준다 2. n 계산 p와 q를 곱하면 n이 된다 n = p * q 3. phi 계산 (p-1)과 (q-1)을 곱하면 phi가 된다 phi = (p - 1) * (q - 1) 4. e 선택 주로 65537이다 다른 값이라도 phi와 서로소인 수 5. d 계산 mod phi에 대한 e의 곱셈의 역원을 구한다 gmpy2의 invert나 divm으로 계..
pwntool 기본 사용법: foxtrotin.tistory.com/289 덧셈 문제 실행하면 20개 문제를 풀라는 문장과 함께 문제가 시작된다 기본 사용법 글에서 다뤘던 것처럼 풀면 된다 #!/usr/bin/env python from pwn import * r=remote("-", 1234) r.recvline() for i in range(20): first=r.recvuntil('+')[:-1] a=int(first) second=r.recvuntil('=')[:-1] b=int(second) res=a+b print(res) r.sendline(str(res)) r.interactive() 처음 한 줄 받아서 questions 문장 넘기고 +까지 받고 공백제거 =까지 받고 공백제거 계산 후 출력한다
pwntools pwntools는 CTF 프레임워크이자 익스플로잇을 쉽게 짤 수 있게 해주는 라이브러리이다 공식 깃허브: github.com/Gallopsled/pwntools 공식 문서: docs.pwntools.com/en/stable/# 설치 apt-get update apt-get install python3 python3-pip python3-dev git libssl-dev libffi-dev build-essential python3 -m pip install --upgrade pip python3 -m pip install --upgrade pwntools 기본 사용법 from pwn import * #임포트 r = precess("파일") #파일 실행 r.sendline("hello") ..
프로그램 실행-input: 이라는 게 뜨고 입력하면 종료된다 문자열 검색-input이 있다 사실 여기서도 누가봐도 플래그 같이 생긴 문자열이 있긴 하다.. input으로 이동한다 처음에는 input: 을 출력한다 그리고 256바이트를 입력 받는다 CALL 0x00007FF7B2B41000 해서 해당 함수를 호출한다 호출해서 나온 결과값을 비교해서 0이면 corret 틀리면 wrong을 출력한다 일단 함수에 따라 들어가보면 아래처럼 있다 위에서 입력받은 값을 Compar3_the_str1ng과 strcmp함수로 비교한다 strcmp는 동일하면 0을 반환한다 JNE로 0이 아니면 1이고 0이면 0을 리턴한다 어쨌든 여기서도 플래그를 확인할 수 있다 Compar3_the_str1ng 여기서 0으르 리턴하면 위..
main코드부터 본다 push rbp mov rbp, rsp sub rsp, 16 먼저 main 시작 전의 rbp레지스터 주소를 push로 스택에 넣는다. 이제부터 main함수에서 rbp가 베이스 포인터 역할을 하게 될 것이기 때문에 원래 가지고 있던 이전 rbp주소를 미리 저장해 두는 용도이다 mov로 현재 스택 포인터 rsp값을 rbp에 복사한다. rbp는 main의 스택 베이스 포인터로, main의 스택 프레임을 생성하는 부분이다 sub로 rsp에서 16을 뺀다. 스택에서 16바이트를 확보한다 mov DWORD PTR [rbp-4], 1 mov eax, DWORD PTR [rbp-4] mov edi, eax mov eax, 0 call sequare 스택의 rbp-4 에 1를 넣는다. 4바이트 변수..
레지스터 레지스터: CPU 내부에 존재하는 작은 고속의 다목적 메모리 저장 공간이라고는 하지만 일반적으로 말하는 메모리인 RAM과는 성격이 조금 다르다 CPU가 RAM에 있는 데이터에 접근하기 위해서는 물리적으로 돌아가야 하기 때문에 오래 걸리지만, 레지스터는 CPU 내부에 존재하기 때문에 더 빠른 연산 속도를 갖는다 종류로는 범용, 세그먼트, 상태 플래그, 명령 포인터 레지스터 등등.. 이 있다 범용 레지스터 이름 그대로 '범용'적으로 쓰이는 레지스터 계산, 메모리 주소 지정, 임시 저장 공간 등의 목적으로 사용되며 32bit로 구성된다 EAX: 입출력, 산술, 논리 연산을 수행하는 누산기 레지스터로 함수의 리턴값을 저장한다(32비트) AX: EAX의 하위 16비트(AX에서 확장 Extended되었다고..