본문 바로가기

컴퓨터공부

(26)
memcpy, memset 구현 구현하게 된 계기 code injection을 진행하다보니, 해당 함수를 많이 사용하게되는데 이를 macro함수로 구현하게 되면 API호출을 줄일 수 있습니다. assembly를 사용하여 구현이 가능하지만, 이는 환경에 영향을 받기 때문에 macro함수로 구현하였습니다 call이 제한된 상황에서 유용하게 사용 할 수 있습니다. 어떤 운영체제에서도 동일한 작동을 보장 받을 수 있는 함수가 필요하였습니다. 구현을 위해 참고 한 문서 https://devdocs.io/c/preprocessor http://tcpschool.com/c/c_prepro_macroFunc 구현한 코드 1234567891011121314151617181920212223242526272829#ifndef _MEMIO_H#define ..
프로세스가 생성되고, 실행되는 과정 저번 글 에서는.. 조금 많이 따분한 PE FILE의 구조에 대해서 포스팅했었다. 생각보다 조회수도 많이 나오고 칭찬받은 포스트라서 비슷한 주제로 다시 포스팅하게 되었다. (https://traitors-biscuit.tistory.com/40) 이번 글 에서는.. Windows operating systems에서 process가 생성되고 실행되는 과정을 포스팅하고싶다. PE FILE의 전체적인 구조는? process는 pe file을 loader가 읽어서 메모리에 적재한 일종의 객체이다. 따라서 pe file의 구조를 알아야한다. 다음 그림은 loader가 보조저장장치에서 주저장장치로 옮겨서 실행시키는 과정을 설명했다. load-store 설계에 따라서, RAM에 있는 정보를 CPU의 레지스터로 옮겨서..
북한 Windows 64 bit 어셈블리 후킹 논문 리뷰 저자는 남한에서 거주중이며, 공산주의 사상에 동의하지 않으며 민주주의를 수호하는 시민입니다. 또한 해당 리뷰는 오직 학습을 위해서 만들어진 리뷰입니다. 선행연구에서 제안한 IAT 후킹에 관하여 다루고있다. IAT Hooking은 간편하지만, 간접호출과 같은 호출방식은 후킹하지 못한다는 단점이 있다. IAT는 다음과 같이 존재하며, 사용된다. PE FILE내의 IAT는 해당 프로그램이 사용하는 API의 정보를 담아두는 Table로써, 해당 Table을 통해서 직접적인 API의 호출이 가능하다. 따라서 해당 Table의 주소를 바꾼다면 공격자의 코드가 실행 될 것이다. 또한 64비트 환경에서의 어셈블리 후킹에 관한 문제점을 다루고 있다. 이러한 문제점들을 극복하기 위해서 해당 논문에서는 Windows 64b..
윈도우 실행파일(PE FILE) 구조에 대해서 What Is PE FILE?(P)ortable (E)xecutable 의 줄임말로써,Windows OS가 실행 할 수 있는 실행파일의 약자다. What is PE FILE’s file name extension?.dll, .exe, .mui, .ocx, .scr, .sys, ... About memoryDLL은 오직 한번만 메모리에 Loading된다 (HDD to RAM)다른 process에서 LoadLibrary API를 호출한다면, OS는 오직 주소만 복사한다 실행파일이 mapping 또는 loading된 제일 첫번째 주소를 image base라고 한다.RVA란, example address - image base값이다. 예를 들어서, 0x00406060 주소에 int a가 존재하고 실행파일은 0x..
64비트 프로세스 은닉 성공적으로 은폐된 프로세스의 모습!! 작업관리자에 서술되는 프로세스의 은닉을 위해서 2개의 과정이 필요했다. 1. code injection 2. 64bit WINAPI hooking 1번같은 경우 32비트와 호환되는 부분이 상당히 많아서 쉽게 성과를 내었지만, 2번같은경우 유감스럽게도 자료가 없다시피하여, 직접 삽질했다. 삽질결과 다음 결론에 도달했다. JMP instruction의 relative address는 32비트에선 후킹시 유효했지만, 64비트에선 후킹시 유효하지않다. 이유는 상위 4바이트 때문인데, 상위4바이트는 모듈마다 달라지지만 상대주소로 JMP를 진행했을시 상위4바이트는 JMP instruction이 존재하는 모듈을 따라간다. 따라서 간접호출을 통하여 JMP instruction을 진..
작업관리자 프로세스 은닉 작동영상 (Taskmgr.exe Stealth Process) 작동영상 https://www.youtube.com/watch?v=_QQxgBX6FsE
윈도우64비트 컴파일을 Command Line으로 진행하기 이전 글은 VS 2019 IDE를 이용하여 MASM 컴파일을 진행했다. 이번 글은 Command Line에서 MSVC 컴파일을 진행할것이다. 다음은 소스코드의 구조이다. 거쳐야 할 과정은 다음과 같다. ml64.exe를 사용하여 어셈블리를 오브젝트 파일로 컴파일한다. cl.exe를 사용하여 오브젝트 파일과 소스코드를 링크한다음 실행파일로 컴파일한다. 다음 코드는 구글링과 VS를 분석한 결과다. ml64: MASM CompilerMicrosoft (R) Macro Assembler (x64) cl: C/C++ Optimizing Compiler 해당 실행파일의 경로는 VS2019의 분석을 진행하다 알게되었다. 64비트 컴파일을 진행할것임으로 "x64 Native Tools Command Prompt for..
비주얼스튜디오 2019, 64비트에서 어셈블리 컴파일 64비트에선 편리하던 inline assembly의 사용이 불가능하다. 따라서, MASM을 사용하여 assembly를 작성해야한다. 콘솔 프로젝트 생성이후, Build Dependencies -> Build Customizations -> Build Customization을 클릭하면 다음과 같은 윈도우가 나온다. masm을 선택한다. 선택한이후, Source Files -> New Item 그리고 FILENAME.asm 을 입력하면 성공적으로 asm파일이 추가된다. 이제 컴파일옵션에서 asm파일을 링크해주어야한다. FILENAME.asm을 클릭하면 Properties가 나온다. Alt + Enter 입력하면 다음과 같은 윈도우가 나온다. Excluted From Build -> NO Item Type ..