


Praca vyuziva implementaciu existujuceho hypervisora Ddimon.
https://github.com/tandasat/DdiMon

Programovane pod Microsoft Visual Studio Enterprise 2015


Hlavna funkcionalita: "ddimon.cpp" "ddimon.h" "ndisStructs.h"


-----Poradie Volania Funkcii-----

DdimonInitialization -> DdimonpGetModuleBaseAddress Vrati adresu "tcpip.sys" modulu
                     -> GetLowLevelFunctionToHook -> GetBestInterface() Vrati string, IP adresu Default Gateway.
												  -> CheckRegistryKeyGateway() Overi pre dany registrovy kluc, ci polozka "DhcpDefaultGateway" == Default Gateway IP
												  -> NdisStructHelper() Zaregistruje protokol s nazvom "KIWI", prechadza internymi strukturami a vrati smernik
																		na funkciu SendNetBufferListsHandler, ktora ma byt hooknuta
																		
					 -> InstallHookAtAddress_Index_0 Nainstaluje hook


// Hook Handler
HandleSendNetBufferLists -> GetFrameData() Parsuje strukturu _NET_BUFFER_LISTS 

							Pri testovani sme zistili:
							 _NET_BUFFER_LISTS->next smernik je vzdy NULL
							 _NET_BUFFER_LISTS->FirstNetBuffer->next smernik je vzdy NULL
							 
							Alokuje pamat a prekopiruje data so vsetkych MDL predstavujucich data odosielaneho ramca.
							
						 -> CheckTcpipConnection() Prechadzanim internych Windowsovych struktur overi, ci exituje zaznam o spojeni
												   na danu IP adresu a PORT.
						
												 

-----Premenne-----

Kedze interne struktury odlisnych OS sa lisia, kompilacia 
projektu je riadena preprocesorovymi premennymi: WIN7, _WIN64
Premenna _WIN64 je nastavovana automaticky, vyberom platformy v nastaveniach projektu.
Premennu  WIN7 je potrebne rucne menit v subore "ndisStructs.h"
Momentalne funguje detekcia iba na Windows 7 x86/x64
Odchytavanie paketov funguje aj na Windows 10 x86/x64


-----Subory-----


"ndisStructs.h" - Vybrane NDIS struktury, su oficialne nedokumentovane, ale mozno ich preskumat
				  pomocou windbg.
				  Niektore struktury uvadzame cele, niektore nie.
				  Vyuzivame to, ze polozky sa nachadzaju na fixnych offestoch a tak su niektore struktury tvaru:
				  
				struct  _NDIS_MINIPORT_BLOCK {
						UCHAR padding[3816];
				_NDIS_M_DRIVER_BLOCK* DriverHandle; // at offset 0xee8

				};
				
				Alebo niektore struktury skratime.



-----Testovanie-----


Malware - heslo k archivu je "malware"

Testovacie prostredie: VMWare - podporuje vnorenu virtualizaciu, beh
								hypervisora pod hypervisorom, Virtualbox nema takuto podporu.
								Potrebne zapnut EPT virtualizaciu v nastaveniach.
								
								
Ovladac mozno nacitat prostrednictvom aplikacie OSR Driver Loader.
1)Najprv treba ovladac nainstalovat - Register Service
2)Spustenie hypervisora - Start Service

Dbgview - treba povolit "Capture Kernel"  ctrl + k






