카테고리
-
Docker 소개 및 설치 방법카테고리 없음 2019. 9. 23. 23:24
다음글 : [Docker 사용방법 - 1. 남이 만든 이미지 써보기] WARNING. 중간중간 길고 지루한 얘기가 포함되어 있을 수 있으니, 적당히 보고 이론같이 보이는 부분은 넘겨도 된다. 백문이 불여일견이라. 어차피 설치해서 직접 써보면 더 빠르고 쉽게 이해가 될 수도 있다. 그리고 혹여나 잘못된 내용이 있으면 댓글로 꼮꼮!! 알려주시길 부탁드립니다(존댓말_) 0. 도커(Docker) 소개 및 간단한 개념 일반적으로 가상 머신(Virtual Machine) 이라고 하면, Vmware Workstation 이나 VirtualBox를 많이들 생각한다. Host OS에 가상 머신을 설치하고. 가상 머신에서 가상 하드디스크 공간을 만들어 운영체제(OS)를 설치하면, 한 개의 운영체제 위에서 또 다른 운영체제..
-
pwntools gdb.attach 사용법 - python process debugging# 시스템 해킹 공부중 2019. 8. 5. 21:08
gdb.attach 사용법 wargame이나 ctf 문제를 풀 때, 혹은 바이너리를 분석 할 때 파이썬으로 데이터를 입력하는 경우가 자주있다. example> p = process("binary") p.sendline("AAAA") 이 때 내가 입력한 데이터가 원하는데로 바이너리에 잘 입력이 되었는지, 스택은 잘 덮혔는지 확인하기 위해서 gdb를 사용해 디버깅을 할 수 있다. 보통은 다음과 같이 코드 내에 raw_input()을 넣어서 실행을 잠시 멈춘 다음, gdb로 실행된 binary의 pid 로 붙어서 디버깅을 한다. example> p = process("binary") raw_input("1") p.sendine("AAAA") $ ps -ef ..... 4111 ... binary $ gdb -..
-
가상함수(Virtual function)와 가상함수테이블(vtable)의 이해# 시스템 해킹 공부중 2019. 7. 17. 02:16
오버라이딩(Overriding) 가상함수를 이해하기 위해선 오버라이딩(Overriding) 에 대해서 알아야 한다. SourceCode(1) class Parent{ void show(){ printf("this is parent\n"); } } class Child : public Parent{ void show(){ printf("this is child\n"); } } class ChildChild : public Child{ void show(){ printf("this is childchild\n"); } } int main(){ Parent * p = new Parent; Child * c = new Child; ChildChild * cc = newChildChild; p->show(); c..
-
[MIPS] strcmp# 시스템 해킹 공부중 2018. 4. 4. 16:07
[MIPS strcmp] 동작 분석 [그림0] strcmp 코드 [그림1] 변수 공간 할당 및 $ra, $fp 백업후 frame pointer 갱신 [그림2] 스택에 str1, str2, str3 순서대로 저장 [그림3] $v0 값 스택에 백업 후 $a0, $a1 에 인자값 load 후 strcmp 호출 [그림4] if(!strcmp(str1, str2)) => bnez $v0, loc_40092C bnez는 $v0 값이 0이 아니면 두번째 오퍼랜드로 분기 즉 $a0과 $a1 문자열이 같으면 분기 x 문자열이 다르면 분기 o
-
Ubuntu MIPS ARM 크로스 컴파일 환경 구성# 시스템 해킹 공부중 2018. 3. 28. 15:33
[GCC 크로스 컴파일러 및 라이브러리 설치] sudo apt-get install -y gcc-multilib-arm-linux-gnueabi;sudo apt-get install -y gcc-multilib-arm-linux-gnueabihf;sudo apt-get install -y gcc-multilib-mips-linux-gnu;sudo apt-get install -y gcc-multilib-mips64-linux-gnuabi64;sudo apt-get install -y gcc-multilib-mips64el-linux-gnuabi64;sudo apt-get install -y gcc-multilib-mipsel-linux-gnu;sudo apt-get install -y gcc-multil..
-
[MIPS] MIPS 기본 내용 정리# 시스템 해킹 공부중 2018. 3. 28. 00:48
[MIPS Register]$0 = Always 0$at = The Assembler Temporary used by the assembler in expanding pseudo-ops.$v0, $v1 = 리턴값 저장. 1 word 인 경우 $v0 만 사용. 초과할 경우 $v1 과 나눠서 저장$a0-$a3 = 함수 인자값 저장. 초과할 경우 스택에 저장$t0-$t9 = 임시 저장 레지스터$s0 - $s7 = 저장 용 레지스터 – 함수 호출 중 불변$k0, $k1 = 커널에서 사용하는 레지스터$gp = 전역 포인터 레지스터$sp = 스택 포인터$fp = 함수 프레임 포인터 ($s8)$ra = 서브루틴 호출 시 반환 주소 저장 [MIPS 주요 명령어]addiu [addiu A B C] = [A B]lw [l..
-
[C언어] HelloWorld 를 분석해보자미사용/##프로그래밍 2016. 3. 5. 16:22
이번엔 C언어 책 앞부분에 항상 등장하는 HelloWorld를 한번 분석하는 시간을 가져봅시다. 사실 그 짧아 보이는 코드에는 굉장히 많은 개념이 담겨있어요. 우선 코드를 봅시다. #include int main(){printf("Hello World!\n");return 0;} 지난번 글이었던 "C언어 진입장벽 부수기" 에 있던 코드라 익숙하죠? 우선은 Visual Studio 에 입력하고 실행시켜 봅시다.단축키 기억나시나요? Ctrl + F5 실행 결과가 어떻게 나오나요? 이렇게 잘 나오나요? 지난번에 printf 함수의 역할이 쌍따옴포(") 사이에 있는 글자를 출력하는 기능을 한다고 했었어요. 그리고 "\n" 은 출력할 때 개행(줄바꿈)을 하는 기능을 한다고 했구요.그런데 printf 말고 그 주위..
-
[C언어] C언어 진입장벽 부수기미사용/##프로그래밍 2016. 3. 3. 01:35
C언어를 시작하려는데 너무 힘들어하는 사람이 많아서 이렇게 글을 써봅니다.처음에 외울게 조금 있고, 생소한 용어들이 나와서 그렇지 그것들을 있는 그대로 받아들이면 않습니다!찬찬히 들여다 볼까요? (입문자들을 위해 중간 중간 생략된 개념이 있을 수 있습니다.) 1. 준비물 컴퓨터, 컴파일러, 에디터, 손가락2. 기본 개념 탑재여기서 잠깐 기본적인 용어와 C언어 프로그래밍의 개요를 살펴보고 가도록 하죠. 소스 코드 -> 컴파일 -> 링크 -> 실행파일 프로그램이 만들어지는 큰 과정은 위와 같습니다. 사용된 용어들을 정리해보죠. 소스 코드(Source Code) == 프로그래머가 타이핑한 코드 그 자체컴파일(Compile) == 코드를 컴퓨터가 이해하는 기계어로 변환링크(Link) == 기계어를 이용해서 실행..