본문 바로가기

반응형

전체 글

(53)
[컴파일러 구성] flex와 bison으로 간단한 계산기 만들기 1. 문제 제시 사칙연산이 가능한 코드를 미리 제시하고, 이를 기반으로 새로운 연산을 추가하는 문제. 추가해야 하는 연산은, 나머지 연산(%)과 지수연산(^)이다. 소스코드 파일은 flex파일인 .l 파일과, bison파일인 .y 파일이 있다. 간단히 설명하자면, flex 파일에서는 토큰을 구분하는 역할을 수행한다. bison 파일에서는 flex에서 구분한 토큰을 기반으로, 파일에서 정의한 정규문법을 처리하는 역할을 수행하게 된다. 2. 풀이 코드 flex 파일 (04-2.l) %{ // 구문분석기(bison)과 연결하기 위한 파일. 구문분석기를 실행하면 자동 생성됨. #include "04-2.tab.h" %} %% // 각 연산자 기호가 토큰이 되고, 이를 인식하면 특정 문자열을 반환한다. "+" {..
[리버싱] Ollydbg 단축어와 여러 가지 팁 정리 1. Code Window에서 동작하는 단축어 명령어 단축키 설명 Restart [Ctrl+F2] 현재 프로세스의 디버깅을 다시 시작 Step Into [F7] 코드 한 줄을 실행 Step Over [F8] Step Into와 달리, 함수에 들어가지 않고 리턴값만 받음 Execute Until Return [Ctrl+F9] 함수 코드 내에서 RETN명령어까지 실행(함수 탈출 목적) Go to [Ctrl+G] 원하는 주소로 이동 Excute till curser [F4] 커서가 위치한 곳으로 이동 Set/Reset Break Point [F2] BP 설정/해제 Run [F9] BP 설정 되어 있는 곳까지 실행 Preview CALL/JMP address [Enter] 커서가 CALL/JMP 명령어에 있으면..
[리버싱] Windows 환경에서 파일과 메모리에서의 주소체계 용어 설명 리버싱에서의 주소계산은 "파일"과 "메모리" 관점에서 이루어집니다. 파일 안에서 절대주소는 OFFSET이라고 합니다. 메모리 안에서의 절대주소는 VA라고 합니다. 또한, 파일이나 메모리에는 여러 종류의 공간이 존재합니다. 예를 들어 Header 같은 공간이나 Section 같은 공간들이 존재합니다. 이런 공간들은 용도에 따라 나뉘어져 있으며, 공간의 시작점은 파일에서는 "PointerToRawData" (OFFSET값), 메모리에서는 "VirtualAddress" (VA값)이라고 합니다. 또한, 공간 내 특정 주소를 지칭하는 용어도 있습니다. 파일에서는 "RAW" (OFFSET값), 메모리에서는 "RVA" (VA값)이라고 합니다. (이를 변환하는 것은 밑에서 다룹니다.) 정리하자면, 파일이나 ..
[PWN] pwnable.kr collision 문제풀이 1. 문제 풀이 환경 접속하기 ssh를 통해, 문제 풀이 환경에 접속 할 수 있다. 접속을 하면, 아래 사진과 같은 화면이 출력된다. 또한, 'ls'명령을 통해, 디렉토리에 소스코드가 있음을 알 수 있다. 2. 소스코드 살펴보기 2.1. 소스코드 들어가보기 소스코드에 들어가면, 다음과 같이 소스코드를 볼 수 있다. #include #include unsigned long hashcode = 0x21DD09EC; unsigned long check_password(const char* p){ int* ip = (int*)p; int i; int res=0; for(i=0; i
[PWN] pwnable.kr fd 문제풀이 1. 문제 풀이 환경 접속하기 ssh를 통해, 문제 풀이 환경에 접속 할 수 있다. 접속을 하면, 아래 사진과 같은 화면이 출력된다. 2. 소스코드 살펴보기 2.1. 소스코드 들어가보기 'ls'명령을 통해, 디렉터리에 무엇이 있는지 살펴보자. 소스코드가 있다. 출제자의 의도는 소스코드를 보고 문제를 풀이하라는 것 같다. 소스코드로 들어가보자. 위 명령어를 사용해서 소스코드에 들어가면, 다음과 같이 소스코드를 볼 수 있다. #include #include #include char buf[32]; int main(int argc, char* argv[], char* envp[]){ if(argc
matplotlib 메모리 누수 시, 시도해볼만한 것들 문제사항: matplotlib를 통해, 반복문으로 수 백개 단위의 plot을 출력 및 저장할 때, 메모리 오류로 코드가 정지됨 해결방안 방법 1: 가비지 컬랙터와 close() 사용 import matplotlib.pyplot as plt import gc fig = plt.plot() fig.close() # 현재 figure를 삭제한다. gc.collect() # 할당이 해제된 메모리 공간을 강제로 회수한다.​ 방법 2: Figure 전체를 지워버리는 방법[1] import matplotlib.pyplot as plt fig = plt.plot() fig.close('all') # 모든 figure를 삭제한다. plt.clf() # figure 창 내의 plot을 지우기 방법3: use(“agg”) ..
Kali Linux에서 apt가 되지 않을 때, 시도 할 수 있는 방법 방법1: 네트워크 연결을 확인해 본다. Kali Linux는 가상머신에서 구동하는 경우가 많으므로, 인터넷 설정이 잘못되어 저장소에 접근하지 못할 수 있다. 따라서, 인터넷 연결이 되는지를 확인해 본다. 그래도 안되면, 아래 두 방법을 차례로 시도해본다. 방법2: /etc/apt/source.list를 변경하여, 다운 받을 주소를 변경한다. 다음과 같은 명령어를 사용하여 변경할 수 있다. 일반적인 저장소(kali-roling)로 변경 echo "deb http://http.kali.org/kali kali-rolling main contrib non-free non-free-firmware" | sudo tee /etc/apt/sources.list 안정화된 저장소(kali-last-snapshot)으로..
윈도우 원격 데스크탑의 포트 번호 변경하기 개요 윈도우 원격 데스크탑은 고정 포트(3389)를 사용합니다. 이는 자동화된 공격 등에 취약할 수 있습니다. 따라서, 아래 명령어를 통해 고정된 포트 번호를 변경해줘야 합니다. "Windows 키 + powershell"을 입력한 후, 명령어를 입력합니다. 만약, 관리자 권한 문제가 발생할 경우, 관리자 권한으로 실행해야 합니다. 원격 데스크탑의 포트 번호 확인하기 아래 명령어를 통해, 원격 데스크탑의 포트 번호를 확인할 수 있습니다 Get-ItemProperty -Path 'HKLM:\\SYSTEM\\CurrentControlSet\\Control\\Terminal Server\\WinStations\\RDP-Tcp' -name "PortNumber" 명령어를 수행하고 난 뒤, 다음과 같은 화면이 출..

반응형