목록CTF (63)
안 쓰던 블로그
RVA RVA: ImageBase로부터의 상대주소 (메모리에 로딩된 상태) 특정한 위치로부터 얼마만큼 떨어진 곳에 위치하는지 알려주는 주소 ImageBase는 NT Header중에서 IMAGE_OPTIONAL_HEADER32 구조체 안에 있으며, 메모리에서 PE파일이 어디에 로딩이 되는지 메모리에 로딩되는 시작 주소를 알려준다 PE헤더에서 나오는 거의 모든 주소값은 모두 RVA를 의미한다 VA VA: 프로세스 가상 메모리의 절대주소 (실제 메모리에 로딩되는 주소) 윈도우즈에서 파일을 실행하게 되면 프로세스 어딘가에 존재하는 가상의 메모리 주소공간에 실행한 파일이 올라간다 가상의 메모리이기 때문에 파일이 어디에 로딩 되었는지 시작 주소를 알고 있어야 파일에 접근할 수 있다 실제 주소와 가상 주소를 연결해 ..
from Crypto.Util.number import * import gmpy2 p = getPrime(1024) q = gmpy2.next_prime(p) e = 65537 N = p * q phi = (p - 1) * (q - 1) d = gmpy2.powmod(e, -1, phi) flag = open("flag").read() msg = ["Hello Happy RSA!", "Life like Pwn", flag] def enc(m): tmp = bytes_to_long(m) ct = gmpy2.powmod(tmp, e, N) ct = long_to_bytes(ct) return ct.encode("hex") print(enc(msg[0])) print(enc(msg[1])) print(enc(..
pdb> incomplete pdb information (GUID/Signature and/or age) associated with this program Either the program is not a PE, or it was not compiled with debug information windows x86 PE RTTI Analyzer> couldn't find type info 분석 옵션 선택할 때 PDB를 끈다 Windows x86 PE RTTI Analyzer> Couldn't find type info structure. 분석 옵션 선택할 때 Windows x86 PE RTTI Analyzer를 끈다
굉장히 익숙한 main함수 자연스럽게 함수 들어간다 처음에 스택 공간 할당하고 CMP RAX, 18과 MOV EAX, 1이 한 세트니까 for문을 0x18번 돈다는 것을 알 수 있다 플래그가 총 0x18(24)글자라는 걸 생각하고 아래 for문을 본다 for문 안에서는 아래같은 연산을 한다 1) 문자열 받은 것과 연산 RAX에 현재 카운터 주소값의 값을 넣고 RCX에는 입력받은 문자열 시작점 주소를 넣는다 EAX에 [시작점+카운터값]주소의 값을 넣으니까 a[i]가 된다(문자열이 a라고 할 때) MOV ECX, DWORD PTR SS:[RSP]에서 RSP는 지금 돌고 있는 카운터 값이다 카운터 값을 ECX에 넣는다는 의미이다 INC는 증감 연산자이다 피연산자++ 동작을 한다 지금은 ECX를 ++하고 있다 ..
rev4 libpcap 이더넷 헤더 만들기: nroses-taek.tistory.com/119 libpcap 패킷 캡쳐: arings.tistory.com/entry/libpcap%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%ED%8C%A8%ED%82%B7%EC%BA%A1%EC%B3%90 arp BOB위키: kitribob.wiki/wiki/ARP pcap 간단 소스: blog.daum.net/xaero77/39 libpcap 프로그래밍: www.joinc.co.kr/w/Site/Network_Programing/AdvancedComm/pcap_intro 패킷 스니핑: prosigi.tistory.com/20 libpcap: wiki.kldp.org/KoreanDoc/html/Li..
먼저 메인 함수를 본다. main을 보면 구조는 이전 문제들이랑 다르지 않다 함수에 들어가 본다 RCX(입력값)을 RSP+8 주소에 가져온다 RSP에 18만큼의 공간을 준비한다 RSP주소에는 0을 넣는다 JMP한다 CMP RAX, 1C를 하는데 RAC와 1C를 비교하는 것 결과값이 ~65주소보다 크거나 같으면(JAE) EAX에 1을 넣고 RSP에 18을 더하면서 종료된다 계속 비교하며 반복하는 모습이 보이니 즉 이 부분은 for문이다 for(int i=0; i>4 연산인 것이다 이 연산이 끝나면 RAX가 4가 된다 RDX에 다시 Hello를 가져온다(RSP+20 주소) ECX에 rdx+rcx*1: "Hello"를 한다 ECX에 'H'인 48이 들어간다 SHL은 왼쪽 쉬프트 연산. ECX가 원래 48이었는..
보호되어 있는 글입니다.