분류 전체보기 205

[x64] DLL/6.09 ImplementingPlayer + 6.10 Final Notes.md

OPTIONAL: 6.09 Implementing Player Player 클래스를 반대로 변경 했으므로 Player 클래스를 만들고 클래스와 관련된 함수를 사용하는 자체 프로그램을 작성하겠습니다. 플레이어의 이름은 std :: string 일 필요는 없으며 const * 문자 일 수도 있습니다. ~~그림~~ Copy&Paste 코드 #include #include class Player { public: int score; float health; std::string name; }; //void __cdecl InitializePlayer(class Player * __ptr64) typedef void(WINAPI* IInitializePlayer)(Player*); // ?InitializePla..

CRONTAB 설정 (작업 자동실행)

크론 설정 예약 작업 목록을 보고 싶다면 다음과 같이 명령합니다. crontab -l 예약 작업을 모두 삭제하고 싶다면 다음과 같이 명령합니다. crontab -r 예약 작업을 만들거나 수정하고 싶다면 다음과 같이 명령합니다. crontab -e crontab 파일이 없다면 새로 만들고, 있다면 그 파일을 엽니다. minute hour day month weekday command minute : 0 - 59 hour : 0 - 23 day : 1 - 31 month : 1 - 12 weekday : 0 - 6 (0 : 일요일) command : 수행하려는 작업 명령어 */10 4 * * * /root/backup.sh 10분 간격, 4시, 매일, 매월, 매요일, 즉 매일 4시, 4시 10분, 4시 20..

Recon 2020.02.04

[x64] Chapter 6 - DLL/6.08 MysteryFunc.md

6.08 MysteryFunc 우리가 함수 이름을 가지고 있기 때문에 몇가지 DLL exports를 리버싱하는 방법을 소개하기로 결정했습니다. 불행히도, 이것은 항상 그렇지는 않습니다. 이 함수는 아주 작지만 예상되는 내용을 약간 미리 볼 수 있습니다. 여기 MysteryFunc를 디스어셈블했습니다. ~~그림(디스어셈블 코드)~~ 이 함수는 두개의 파라미터를 받는 것처럼 보입니다. RCX와 RDX가 사용되기 때문입니다. MOV QWORD PTR DS:[RDX], RCX RDX는 사용 방식으로 인해 일부 데이터 구조에 대한 포인터처럼 보입니다. 이것이 의미하는 것은 일종의 데이터 구조체의 지표인 오프셋 (예 : + 0x8)으로 액세스되고 있다는 것입니다. 이 코드는 배열이나 클래스 (또는 비슷한 것) 일 ..

[x64] Chapter 6 - DLL/6.7 PrintPlayerStats.md

6.7 PrintPlayerStats 우리 프로그램에서 InitializePlayer를 사용하기 전에 클래스에 대해 찾을 수 있는 다른 정보를 살펴 보겠습니다. 더 많으 정보를 찾기 위해 PrintPlayerStats를 살펴봅시다. 이 함수는 실제로 매우 간단합니다. 플레이어에 대한 정보를 인쇄합니다. 이 함수를 스스로 리버싱해 보세요. 각 코드 줄이 목적이 무엇인지 파악하도록 도전해보세요. 시작하기 전에 알려 드리겠습니다. 마지막 printf () 호출 후 추가 코드가 있습니다. 마지막 printf () 호출 후에 JB를 따르지 않으면 실행이 메모리 해제 코드로 들어갑니다. 원한다면 이것을 리버싱해도 되지만 무시해도됩니다. 여기 빨간색 박스에 있는 코드가 제가 말한 코드입니다.(메모리 해제 코드) ~~..

[x64] Chapter 6 - DLL/6.6 InitializePlayer.md

6.6 Initialize Player 일반적으로 DLL은 범용으로 사용됩니다. 링크된 목록, 로깅 정보, 그래픽 등을 설정하는데 사용되는 DLL 일 수 있습니다. 우리가 리버싱하는 DLL은 하나 이상의 범용 작업을 수행합니다. 더 쉬운 예제를 사용하여 DLL 리버싱을 소개하고 싶기 때문입니다. InitializePlayer, PrintPlayerStats 및 MysteryFunc 함수가 모두 서로 관련되어 있음을 알려드리고 싶습니다. 다시 말하지만, 이 DLL은 학습 도구입니다. 나중에 더 좋은 예를 들어 보겠습니다. Player와 관련된 두 가지 함수가 있는 것 같습니다. Player는 아마도 구조 (구조체) 일 것입니다. 이해하기 위해서 Player 구조체를 사용하는 함수를 리버싱하고 그 함수가 구..

[x64] Chapter 6 - DLL/6.5 PrintArray.md

dll.dll의 symbol을 보면 PrintArray가 두개가 있음 오버라이딩 형태라 파라미터와 반환 값을 알 수 있음 void __cdecl PrintArray(char * __ptr64 const,int) Parameters: const char*, int void __cdecl PrintArray(int * __ptr64 const,int) Parameters: const int*, int 첫번째 파라미터로 둘다 포인터 주소를 받는다. 함수 이름을 보고 함수을 추측해본다면 첫번째 파라미터는 주소는 배열의 시작 주소 일 것이다. 두번째 파라미터는 확실하게 알지 못하지만 배열의 크기 또는 얼마나 출력할지 정하는 값일 것으로 추측한다. 리버싱할 때 중요한 점은 항상 큰 그림을 기억해야 한다는 것이다. ..

GOT와 PLT

PLT(Procedure Likanage Table): 외부 프로시저를 연결해주는 테이블. PLT를 통해 다른 라이브러리에 있는 프로시저를 호출해 사용할 수 있다. GOT(Global Offset Table): PLT가 참조하는 테이블. 프로시저들의 주소가 들어있다. "함수를 호출하면(PLT를 호출하면) GOT로 점프하는데 GOT에는 함수의 실제 주소가 쓰여있다. 첫 번째 호출이라면 GOT는 함수의 주소를 가지고 있지 않고 ‘어떤 과정’을 거쳐 주소를 알아낸다. 두 번째 호출 부터는 첫 번째 호출 때 알아낸 주소로 바로 점프한다." 어떤 코드를 작성한다고 생각해봅시다. 예를들어, 소스 안에는 printf 함수를 호출하는 코드가 있고 include 한 헤더파일에는 printf의 선언이 있습니다. 소스파일을..

기본개념 2020.01.28

[x64] Chapter 6 - DLL / 6.4 SayHello.md

Z0FCourse_ReverseEngineering/Chapter 6 - DLL/6.4 SayHello.md dll.dll 리버싱, SayHello 분석 1. modules에 dll.dll이 로드될 때까지 실행(F9) 2. SayHello 클릭 3. 어떤 것도 리턴하지 않는 것으로 보임, 함수 내부로 들어감 4. XAnalyze 분석 실행해야함. 5. SayHello 내부를 쭉 훓어보면 함수이름과 관련있어 보이는 Hello 문자열을 볼 수 있음 6. 더 내려가 보면 ios_base를 참조하는 걸 볼 수 있음. =>5,6 과정을 보고 필자는 이 함수가 std::cout이 아닐까 추측했다고 한다. 그 이유는 ios_base는 I/O stream의 baseclass이다. 7. 이를 검증하기 위헤 간단한 std..

[pwntools] Cheatsheet

pwntools 사용 방법 - 맨 윗부분에 from pwn import * 를 입력해줘야한다. from pwn import * pwntools 연결하기 - nc : remote(ip, port)형식으로 사용 (ip는 string이고 port는 int형이다) p = remote("localhost", 8888) - local : process(path)형식으로 사용 (path는 string이다) p = process("./example") - ssh : ssh(username, ip, port, password)형식으로 사용 (username, ip, password는 string 이고 port는 int형이다 또한 port와 password는 = 를 붙여준다 그리고 port와 password는 기본값으로 ..

기본개념 2020.01.26

vim 컬러변경, 셋팅, 자동완성

,https://alvinalexander.com/linux/vi-vim-editor-color-scheme-syntax 설정파일 ~/.vimrc 한글꺠짐 방지 set fencs=utf-8,euckr set nu set ts=4 set autoindent hi Comment ctermfg=white hi Constant ctermfg=10 hi Special ctermfg=white hi Statement ctermfg=LightRed hi Normal ctermfg=yellow Vim의 기본 자동완성이라 할 수 있다. : ctrl + p 를 의미한다. : ctrl + n 을 의미한다. insert 모드에서 또는 을 입력하면, complete옵션에서 지정한 위치의 키워드를 기반으로 자동완성해준다. IDE..

기본개념 2020.01.26