본문 바로가기

OLD 2018 ~ 2021/BASIC → Hacking8

[System Hacking ] PLT / GOT 영역 이론적 배경 Linking : 실행파일이 호출하는 라이브러리의 API 함수를 정상적으로 실행시킬 수 있도록 라이브러리의 printf 오브젝트 파일을 서로 연결시켜 주는 과정이다. Static Link : 파일 생성시에 라이브러리 파일을 실행파일에 포함하기 때문에 따로 라이브러리를 설치할 필요가 없으며 실행 시에도 라이브러리 연동과정이 필요없다. Dynamic Link : 메모리에 로딩시킨 라이브러리를 여러 프로그램이 공유한다. 이 때에, PLT와 GOT는 다이나믹 링킹과정에서 프로그램이 해당 라이브러리의 위치를 찾아가기 위해 쓰이는 영역이다. PLT/GOT 함수 호출과정 junior@catpwn:~/System_Hacking$ gdb -q ./plt_got Reading symbols from ./plt.. 2018. 7. 10.
[pwnable.kr] fd / collision / bof / mistake Hands-on Practice 실습 1. 개인 로컬 서버에 pwntools python 모듈 설치 설치 : pip install pwntools 사용 : from pwn import * 2-1. pwnable.kr fd File Descriptor 리눅스에서 시스템이 할당하여 준 파일이나 소켓을 대표하는 정수이다. 이 정소를 이용하여 파일에 접근할 수 있으며, 윈도우의 HANDLE과 비슷한 개념이다. 이 중, 예약되어 있는 값이 있는데 표준입력 : 0 // 사용자 키보드 입력 표준출력 : 1 // 화면출력 표준 에러 출력 : 2 이다. [ 문제 소스코드 ] #include #include #include char buf[32]; int main(int argc, char* argv[], char* en.. 2018. 7. 10.
180127_REVERSING(5)_key Hands-on Practice 실습 start 함수 부분에서 처음에 어떤 인자 값을 기준으로 exit() 함수로 분기하였다. 그 뒤에는 파일 포인터를 fclose 하는 것이 있어서 문자열 검색을 통해 보니, C\....\flag.txt 라는 경로가 보였다. fopen 하는 부분을 쉽게 찾을 수는 없었지만 해당 경로에 같은 이름의 파일을 만들어 주니, 분기문을 지나올 수 있었다 . 'Congrats You got it' 이라는 문자열을 출력하기 위해서는 sub_D920C0에서 0이 아닌 값을 반환받아야 한다. 그러기 위해서는 아래의 line45의 조건을 만족시킨 다음, label21로 뛰어야 했다. 해당 함수에 들어가니, 문자를 하나씩 비교하는 구문이 보였다. 입력한 문자열과 해당 문자열을 비교하는 부분.. 2018. 1. 28.
180121_REVERSING(4)_winme Concept 개념정리 index 주의!! x 는 출력시킬 값이고, y 는 연산 시킬 값이므로 각 인자의 수가 15,14 이기 때문에 for 문 range에서 인덱스를 잘못 주기 쉽다. 연산과 출력을 변수에 따로 따로 저장해놓고 하는 습관을 들이는게 작은 실수나 오류를 줄일 수 있을 것 같다. --> Q. 그런데 왜 atomic 이후로는 출력이 안 되었을까? 변수 x 는 쓰레드마다 1씩 증가하는데 어떤 역할을 할까? Hands-on Practice 실습 주어진 문제를 실행 시켜보면 flag가 atomic 까지 나온다. 그러나 해당 함수를 동적분석을 통해 살펴보니, MSDN 에서 beginthreadex 함수는 3번째 인자 - 쓰레드로 호출할 함수 4번째 인자 - 해당 함수로 넘겨줄 리스트 ( MSDN에서.. 2018. 1. 23.
180118_[REVERSING]_닷지게임_안죽게_패치하기 Concept 개념정리 윈도우의 WM_USER 메시지 : WM_USER은 사용자가 메시지를 전달하고 싶은 경우를 대비하여 시스템에서 쓰는 주소와 곂치지 않도록 미리 시스템에서 사용자가 Windows Messge로 활용할 수 있게 예약해둔 공간을 가리키는 포인터다. WM_USER+1 과 같이 쓴다. 윈도우의 메시지를 처리하는 함수인 WndProc이 있다면, 윈도우 자체에서 메시지를 발생시키는 함수에는 PostMessage와 SendMessage가 있다. WM_USER에서 보내는 메시지 넘버는 닷지가 죽고, 안죽고와 같은 사용자측의 이벤트가 아니라 운영체제와 관련된 메시지 인것 같다. Hands-on Practice 실습 닷지게임 안죽게 패치하기 1) 언패킹 해당 파일은 FSG 1.0으로 패킹되어 있었다. .. 2018. 1. 19.
170119_REVERSING(3)_snake Concept python 바이트 코드 파이썬은 하이브리트 인터프리터 언어로, 컴파일러와 인터프리터를 보두 사용한다. 프로그램을 실행할 때 먼저, 프로그램을 바이트 코드로 어셈블링 한 다음, 파이썬 인터프리터에서 실행할 수 있다. 이때, dis 모듈은 클래스, 메소드, 함수 및 코드 객체를 디스 어셈블 하여 사람이 읽을 수 있는 python 바이트 코드를 만들 수 있다 . [ python source code ] --> [ byte code ] --> 인터프리터에서 해석 marshal 모듈 "internal python object serialization " 을 위한 모듈이다. 즉, marshal 포맷에 맞추어 데이터를 가용성있게 만드는 것을 Serialize( =직렬화 )라고 한다. ( 메모리에 올라.. 2018. 1. 18.
180113_REVERSING(2)_pick_me Concept Windows MFC Reversing sub_401000이 WinMain이고 , sub_401110이 WndProc임을 알 수 있다. (노란 형광펜 부분 딱 들어가면 된다.) 일반적으로 WndProc은 두번째 인자를 메시지 번호로 받고, 그 메시지 번호에 따라서 분기한 후, 메시지 번호에 맞는 함수를 호출하거나 WndProc이 호출하는 함수목록과 비교하여 일치하는 경우 해당 함수로 이동할 수 있도록 되어있다. 문제를 풀면서 느낀점 아이다의 수도코드로 어느정도 분석이 끝나고 나면, 패치나 상세 어셈블리 분석은 olly를 같이 키고 주소 비교해가면서 하는게 빠른것 같다. 올리가 특정 주소의 메모리 보기에 더 편한 듯. Hands-on Practice pick_me 라는 게임은3x3개의 칸 중.. 2018. 1. 14.
170111_REVERSING(1)_whereami Concept Windows MFC Reversing WndProc 함수 ( =메시지 처리 함수 ) : 특정 메시지가 발생했을 때 그것을 처리하는 함수로, WinMain과는 별개로 WndProc 이라는 이름으로 존재한다. WinMain 내의 메시지 루프는 메시지를 메시지 처리 함수로 보내주기만 할 뿐이며, WndProc은 메시지가 입력되면 윈도우즈에 의해 호출되어 메시지를 처리한다. 이렇게 운영체제에 의해 호출되는 응용프로그램 내의 함수를 Callback(콜백) 함수라고 한다. 보통 winProc 함수는 위와 같은 양상을 띄며, message를 인자로 넘겨받고 이러한 메시지 번호에 따라 분기하는 구조를 띈다. WM_DESTORY는 창을 닫는 메시지이며, 안의 코드를 작성하여 해당 메시지가 발생했을 때 어.. 2018. 1. 14.