일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 유니티 설치방법
- 컴포넌트
- aes128
- 유니티3d
- 유니티 월드
- python
- c 환경설정
- C언어
- 게임 오브젝트
- c++
- 엔진기초
- VisualStudio2017
- AES
- 상속
- CryptoJS
- 기초
- Visual Studio
- 유니티기초
- cryptography
- 빈 프로젝트
- crypto-js
- 유니티3D 2018.2
- 비쥬얼 스튜디오
- Today
- Total
목록보안 (10)
Basic of Computer Skills
이전 포스팅에선 가상머신에 Santoku Linux를 설치하는 것까지 진행했다. 이제 스마트 폰의 앱을 PC로 추출해보자. 먼저 터미널을 열도록 한다. 처음 설치했으면 바탕화면에 아무것도 없을테니, 좌측 하단의 사시미를 눌러 'System tools' 탭에서 실행한다. root의 패스워드를 모르겠다면, 'sudo -i' 명령을 입력 후 설정해주자. (굳이 root가 아니어도 추출에는 지장이 없다.) 추출을 위해 우리가 사용해야할 도구는 'adb' 라는 프로그램이다. Windows 였다면 별도로 다운로드를 받아야겠지만, 여기선 이미 다 설치되어 있으므로 간단히 명령어만 입력해주면 된다. adb start-server adb를 사용하기에 앞서, 시동을 건다는 맥락으로 해석하면 되겠다. 폰트가 작은 관계로, ..
애플리케이션(이하 '앱'으로 총칭)은, '확장자가 .apk로 되어있는 파일'로 간단하게 정의할 수 있다. 그리고 이 확장자는 스마트 폰이 아닌 일반 데스크탑 환경에선 다소 생소하게 느껴질 수 있을 것이다. 하지만 .apk 파일은 .zip 확장자의 형태로 변환이 가능한 특징을 갖고 있다. 다음 사진은 이에 대한 예시이다. 확장자를 임의로 변경해도, 어떤 경고문 없이 바로 알집 형태로 변환되는 것을 알 수 있다. 이 파일의 압축 풀기를 시도해보자. 3개의 폴더와 그 외 잡다한 파일들이 보인다. 이는 모두 apk 파일을 이루고 있는 구성 요소란 것을 확인할 수 있다. 그렇다면, 왜 apk 파일의 확장자를 .zip으로 변경해도 아무런 문제가 일어나지 않는 건가? 왜냐하면 .apk 및 .zip 파일을 바이너리 분..
----실습에 앞서, 해당 게시글의 실습 환경은 LOB 서버를 이용했다는 걸 알아야한다. 만약 다른 실습 환경에서 진행했을 경우, ASLR 및 Stack Canary와 같은 메모리 보호기법이 걸려있을 가능성이 높으므로 원하는 결과를 얻을 수 없다는 것을 유념하자. 해당 LOB 서버는 메모리 보호기법이 다 해제된 상태이다.---- 스택 프레임에 대해 대략적으로나마 이해를 했다면 이번엔 이를 응용하여 지역변수 값을 변조하는 실습을 진행해보자 다음 코드는 기초적인 버퍼오버플로우에 대한 예시이다. i의 값이 100으로 고정되어있으므로, i가 123이 되지않는한 이 프로그램은 계속 "Failed"라는 문자열을 뱉고 종료할 것이다. 우리의 목적은 메인 함수 내부에서 100으로 초기화되어 있는 변수 'i'를 123으..
이전 포스팅에서 위와 같이 메인 함수의 esp와 ebp를 열람했고, 해당 사이즈에 따라 스택에 어떤 값들이 들어갔는지 알 수 있었다. 이제 다음 함수인 func1 함수의 스택 프레임을 열람할 것이다. 우리가 메인 함수의 스택 프레임을 살펴보기 위해 중단점을 걸은 것과 같이, func1 함수에도 중단점을 걸어주고 그 구조를 파악해보자. 메인 함수와 구조가 동일하다. (변수에 저장되는 값만 다른 걸 알 수 있다. 4, 5, 6) 그도 그럴 것이, 예제 코드에 나오는 함수들은 모두 동일한 매커니즘을 가졌기 때문이다. 이 상태에서 func1 함수의 esp 및 ebp의 값을 확인하자. esp의 값은 0xbffffb48이고, ebp는 0xbffffb54 라는 걸 알 수 있다. ebp에서 esp를 빼면 12가 나온다..
이전 포스팅에서 메인 함수의 스택 프레임 크기가 12라는 걸 알았다. (sub $esp, 12) 이제 스택의 구조를 파악하여, 어떻게 배치되어 있는지 확인해보자. 스택 프레임의 맨 아래(바닥) 부분을 가리키는 레지스터가 ebp라고 했다. (extended base pointer) 그리고 스택 프레임의 맨 위를(꼭대기) 가리키는 레지스터는 esp라고 했다. (extended stack pointer) 메인 함수의 스택 프레임을 파악하기 위해, 메인 함수에 브레이크 포인트(Break Point)를 걸자. 브레이크 포인트는 우리 말로 '중단점' 이라고 한다. 중단점을 걸고 프로그램을 실행시키면, 쭉 진행되다가 브레이크 포인트에 실행이 멈추게 된다. 따라서 메인 함수에 중단점을 걸게 될 경우엔, 메인 함수로 진..
저번 포스트에서 스택 프레임에 관한 개요를 살펴봤다. 정리하자면, 스택 프레임이란 스택 내부에서 함수가 갖는 자기만의 공간 이라고 말할 수 있다. 예를 들어 집에서(스택) 자기 방(스택 프레임)과 같은 개념인 것이다. 따라서 스택 프레임은 스택의 부분 집합에 속한다. C 언어는 메인 함수부터 시작하여, 그외 유저들이 만든 여러 함수들 까지 일단 호출되고나면 그 함수의 스택 프레임이 생성되고, 함수가 기능을 다해 종료될 때 그 함수의 스택 프레임이 정리되고 반납된다. 결국 이런 저런 함수들이 작동하면서 스택 프레임이 생성되었다가 반납되었다가를 반복하다가, 최종적으로 메인 함수의 스택 프레임까지 반납되면 비로소 프로그램이 종료되는 것이다. 여기서 함수란, 메인 함수를 포함하여 유저가 직접 만든 함수만을 한정..
스택 프레임(Stack Frame)이란, 간단히 말해서 "함수 자신만의 공간" 이라고 말할 수 있다. 그리고 이는 LOB를 풀기 위한 배경지식이므로, 해당 개념을 모른다면 포너블을 할 수가 없다. 어찌보면 스택 프레임이 프로그램 메모리 구조의 가장 기본이되는 지식이기 때문이다. 다음과 같은 프로그램이 있다고 가정하자. C 언어를 해봤다면, 프로그램이 시작할 때 main 함수부터 진행된다는 것쯤은 다 알 수 있을 것이다. 위의 프로그램은 main 함수가 func1을 호출하고, 또 func1은 func2를 호출하는 연쇄적인 구조를 가지고 있다. 따라서 해당 프로그램의 결과 값은 ================main has calledfunc1 has calledfunc2 has called==========..
ID에 gate, PW에도 gate를 입력하고 나면 1번 문제에 진입할 수 있다. ls 명령어를 실행하여 파일 리스트를 펼치고, 유저 권한을 보면 스파이가 하나 껴 있다. 여기서 root는 상위 디렉토리로 이동하는 ".."이니 당연히 아니고, 우리가 주목해야할 것은 하단 부분에 있는 gremlin이다. 그 아래 gremlin.c 가 있는 걸로 보아 저 gremlin 실행 파일은 C 언어로 컴파일 되었다는 것을 유추할 수 있다. 하단의 gremlin.c를 vi 라든지, cat이라든지, 아무거나 써서 코드를 읽어보자. 보기 쉽게 nl 명령어를 사용했다. 이는 cat 명령어와 유사한데, 대신 앞 부분에 라인(line) 수를 표기해준다. 코드를 보면 1 ~ 5번째 라인은 주석이니 무시하고, 결국 7번 라인 이후..
LOB는 vmware(가상머신) 기반으로 실행된다. 따라서 해당 문제를 실습하기 위해선, PC에 vmware가 필수로 설치되어 있어야한다. LOB 파일은 용량 한계상 여기에 업로드가 되지 않으니, 알아서 구한다. https://www.vmware.com/kr.html
시스템 해킹을 다른 말로 포너블(pwnable)이라 한다. 명칭의 유래는 한 유저가 게임에서 승리했는데, 이때 own! 이라고 입력할 것을 pwn! 라고 입력했고 이 말이 유행을 타서 굳어졌다고 한다. 시스템 해킹은 말 그대로 어떤 시스템을 해킹하여 정보를 획득하는 것을 목적으로 한다. 그리고 이런 목적을 달성하려면 해당 시스템의 관리자 권한을 탈취하는 과정이 필요하다. 즉 포너블은 시스템의 일반 유저의 자격으로, 여러 가지 공격 기법을 활용해 관리자 자격을 뺏는 절차라고 할 수 있겠다. 그리고 이는 문제풀이를 포함하여 여러 가지 여건을 살펴보니 리눅스 환경에서 많이 진행이 된다는 걸 알 수 있다. 그래서 해당 스킬을 공부하기 위해, 예전에 해커스쿨에서 구축해놓은 LOB(Lord of BufferOver..