본문 바로가기

reversing

(86)
IRP, I/O Stack 관련 내용 정리 디바이스를 관리하기 위한 드라이버들이 존재한다. 이 드라이버들이 디바이스를 컨트롤 하는데 참여한다는 의미로 드라이버 마다 디바이스 오브젝트를 생선한다.그리고 이 디바이스 오브젝트들이 순서를 가지고 쌓여서 디바이스 스택이 된다.그러면 이제 하드웨어나 드라이버 통신을 위해서 어떻게 구성되어 있는지 이해한대로 정리해보려 한다. 윈도우에서 드라이버나 하드웨어를 통신 할 때, I/O Manager 가 참여하게 된다. 그 이유는 시스템 상에서 드라이버를 파일로 취급하여서 파일 입출력을 통해서접근을 하는데, 파일 입출력은 I/O Manager[관리자]가 제공하기 때문이다.응용프로그램에서 드라이버에 접근하여, 하드웨어를 제어한다고 생각해 본다. [응용프로그램] — [파일 입출력 드라이버에 대한]-----> [I/O M..
Driver Object , Deivce Object 연관성 및 함수 정리 디바이스 스택과 디바이스 오브젝트, 디바이스 드라이버는 다음과 같은 연관성을 가진다. 위와 관련되어 있는 함수를 정리 123456789NTSTATUS IoCreateDevice( _In_ PDRIVER_OBJECT DriverObject,/ _In_ ULONG DeviceExtensionSize, _In_opt_ PUNICODE_STRING DeviceName, _In_ DEVICE_TYPE DeviceType, _In_ ULONG DeviceCharacteristics, _In_ BOOLEAN Exclusive, _Out_ PDEVICE_OBJECT *DeviceObject);Colored by Color Scriptercs PDRIVER_OBJECT : 호출자인 드라이버 오브젝트의 포인터 값 Devi..
[Device Stack] 디바이스 스택 디바이스 스택하나의 디바이스(하드웨어)를 관리하기 위해서는 디바이스를 관리하는 여러개의 드라이버가 필요하다. 그리고 각 드라이버들은 해당 디바이스의 관리를 위해서 각 디바이스에 자신의 디바이스 오브젝트를 생성한다.그리고 여러개의 드라이버가 하나의 디바이스를 위해서 생성한 디바이스 오브젝트가 스택처럼 이루어지는데 해당 내용이 디바이스 스택이다. 디바이스 스택 형성 과정 버스 드라이버 —> 특정 디바이스를 발견 [가상으로 발견된 것 처럼 해도 됨] 버스 드라이버는 발견한 디바이스의 디바이스 오브젝트를 생성 버스드라이버는 I/O Manager (PnP관리자)에게 보고 시스템 레지스트리 확인해서 설지 정보 확인—> 이 장치가 이전에 설치 되었는지, 아니면 관련된 정보가 있는지 확인함 기능 드라이버(Functio..
MDL(Memory Descriptor List) 보호되어 있는 글입니다.
DPC (Deferred Procedure Calls) ------https://docs.microsoft.com/en-us/windows-hardware/drivers/kernel/introduction-to-dpc-objects -------- Because ISRs must execute as quickly as possible, drivers must usually postpone the completion of servicing an interrupt until after the ISR returns. Therefore, the system provides support for deferred procedure calls(DPCs), which can be queued from ISRs and which are executed at a later t..
rootkit - packet sniff[2] sk_buff에서 ip와 port 같은 내용을 추출할 수 있어서.. 간단하게 테스트해보니 되었다. 이러한 방식으로 데이터를 스니핑 할 수 있을 것 같다. 물론 정교하게 만들어야겠지만... 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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 1,1 All #include #include ..
rootkit - packet sniff[1] 패킷 구조를 알아 볼겸 raw socket 관련 내용 찾아 보았다. 좀 더 정확하게 만들어 봐야겠다. 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915..
rootkit - packet sniff[0] packet을 감청하는 루트킷을 만들어 보려고 한다.더 나아가 특정 조건이 맞는 패킷을 전송하게 되면, 특정 포트로 리버스 쉘을 생성하고자 한다. 먼저 사용할 내용은 netfilter라는 프레임 워크를 사용하고자한다.이를 위해서 netfilter와 관련된 내용을 공부한다. netfilter 관련 자료는 다음의 자료를 확인하면서 정리하려 한다. http://www.roman10.net/2011/07/22/how-to-filter-network-packets-using-netfilterpart-1-netfilter-hooks/http://www.tune2wizard.com/kernel-programming-network-programming/ 물론... 인터넷에서 코드를 긁어와서 사용해도 되겠지만... 하나..