Access Token이란? Access Token은 Windows에서 주체가 객체에 접근하기 위해 사용되는 일종의 접근 권한에 대한 정보이다. Linux의 owner, group, others에 대한 권한을 생각하면 조금 이해가 편해진다. Windows는 가장 높은 권한인 System 권한(Linux의 root 권한)과 사용자의 계정을 구별하기 위해 생성되는 계정 별로 SID(Security IDentifier)를 두고 관리된다. Access Token에 저장되는 정보(MSDN) :사용자 계정 SID(Security IDentifier)사용자가 멤버인 그룹의 SID현재 로그인한 세션을 식별하기 위한 SID사용자 또는 사용자 그룹이 가지는 권한 목록소유자 SID주요 그룹의 SID사용자가 Security ..
자바스크립트 코드(Function Hooking)12345678910111213141516171819202122232425var handle = Module.findExportByName("msvcrt.dll", "memset");//var handle2 = Module.findExportByName("WS2_32.dll", "send");var baseAddr = Module.findBaseAddress("msvcrt.dll"); console.log(">> Hooking Function
Device Driver- DEVICE_EXTENSION 구조체 : https://www.codeproject.com/Articles/8651/A-simple-demo-for-WDM-Driver-development- DEVICE_OBJECT 구조체 : https://msdn.microsoft.com/en-us/library/windows/hardware/ff543147(v=vs.85).aspx- IO_STACK_LOCATAION 구조체 : https://msdn.microsoft.com/en-us/library/windows/hardware/ff550659(v=vs.85).aspx- IRP 구조체 : https://msdn.microsoft.com/en-us/library/windows/hardware..
보호되어 있는 글입니다.
보호되어 있는 글입니다.
보호되어 있는 글입니다.
#--------------------------------------------------- Windows의 특권 레벨 ---------------------------------------------------------# Windows에서는 0~3까지의 특권레벨이 있다. 0은 커널, 1과 2는 디바이스 드라이버 레벨, 3은 유저 레벨을 나타낸다. 하지만 실제로 사용하는 특권레벨은 0과 3 정도이고 1과 2는 본 적이 없다. 세그먼트 레지스터를 갱신할 때는 특권레벨에 대해 조건을 만족해야만 한다. 특정 특권레벨을 가지고 수행되는 코드가 다른 데이터 세그먼트의 메모리를 참조하기 위해서는 그 데이터 세그먼트의 DPL이 현재 실행중인 CPL보다 수치적으로 크거나 같아야 참조할 수 있다.데이터 세그먼트 갱신..
#------------------------------------------------------- 기존 내용 정리 -------------------------------------------------------------#페이지 테이블 : 각각의 프로세스가 페이지 프레임을 통해 실제 메모리에 어떻게 매핑되는지를 나타내는 매핑 목록페이지 디렉토리 : 페이지 테이블만을 사용하여 페이징을 표현하기에는 너무 양이 어마어마하기 때문에 분담해서 저장하기 위해 한 번 더 쪼개어 페이지 테이블의 엔트리를 저장한 목록, 페이지 디렉토리가 없을 경우 하나의 프로세스마다 대략 1048576(1024*1024)개의 테이블 엔트리를 만들어야 한다. 이 경우 갯수가 너무 많아서 메모리 또한 더욱 복잡해 질거임. 다시 보는..
#------------------------------------------------- 페이징 -----------------------------------------------------------# 여러개의 프로그램을 사용하는데 실제 주소모드와 같이 하나의 물리 메모리에서 모든 프로세스를 매핑할 경우 사용할 수 있는 메모리의 폭이 좁다. 때문에 가상 주소를 사용하여 여러 개의 프로그램이 각각의 메모리 할당을 할 때 혼자만의 메모리 공간을 가지도록 착각하게 되면 효율적이다. 페이징을 할 때 메모리를 일정 크기 단위로 블록을 만드는데 이 페이지 블록을 페이지 프레임이라고 부른다. 그리고 이 페이지 블록은 0번지부터 만들어져 페이지 프레임 0, 1번지는 페이지 프레임 1 같은 식으로 번호를 매긴다. ..