Foonsearch

Hoi RGJ,

Ik heb nu session.exe met statisch gelinkte verise van cl32.dll code (versie 341) werkend gekregen. Ben nu zoekende waar de bugs zitten tussen deze versie en mijn source stack versie. Beiden versies zijn opgebouwd uit dezelfde source code. De cl32.dll code checkt of zaken goed zijn. Denk aan encryptie methoden. Als niet goed werkt stopt hij er mee.

De hartelijke groeten Jan Marco

Hoi RGJ,

Statische variabele krnlData heeft mij wel wat tijd gekost. N.B. Deze (cl32.dll kernel) variabele’leeft’ alleen in de file waarin hij staat. Omdat het in 12 files voorkomt zijn er eigenlijk 12 van deze variabelen. Ik had eerst alles op 1 variabele gezet en dan krijg je rare run-time fouten. Ik hoop komend weekend dit gedeelte werkend te hebben.

De hartelijke groet Jan Marco

Hoi RGJ,

Ik ben wel door de initialisatie van session.exe heen gekomen, echter in de run fase gaat nog stuk. Wel weer (klein) stukje verder gekomen dan vorige week. Ik kijk naar de laatste procedure, waarbij het programma stopt, daarna naar de laatste routine in de ‘laatste’ procedure, die fout gaat.

De hartelijke groet Jan Marco

Hoi RGJ,

Ik heb heel weekend zitten ‘puzzelen’. Een variabele heeft niet de juiste waarde en daarom stopt session.exe er mee. Heeft m.i. te maken met geen goede initialisatie. Ik ga mij nu verdiepen in de werking (van de initialisatie).

De hartelijke groet Jan Marco

Hoi RGJ,

sftp werkt nu onder mijn source stack. Ik zie dat ssh -2 vanaf linux naar windows nog niet werkt. In de gelinkte versie van cryptlib (cl32.dll) doet het het wel, dus even uitzoeken waar de ‘bug’ zit,

De hartelijke groet Jan Marco

Hoi RGJ,

Ik zie dat het op het Windows platform wel werkt, namelijk van Putty naar ssh server . In het begin en bij het afsluiten van de sessie zie ik nog wel vreemde karakters. Mogelijk heeft het iets met Unicode te maken, maar dat ga ik nog verder uitzoeken.

Van Linux naar de ssh server geeft een “CRYPT_ENVELOPE_RESOURCE” status fout. Alle code waarin deze parameter voorkomt ben ik aan het ‘nalopen’.

Ik ben ook begonnen om te kijken hoe ik de SQLyog GUI kan ‘verbeteren’:

  1. Ik wil situationele menu’s onder de rechtermuisknop programmeren. Mogelijk dat ik iets uit Cool Owner Drawn Menus with Bitmaps - Version 3.03 - CodeProject kan halen. Wat je veel ziet zijn menu opties met (vaak) een afbeelding in het begin van de menuoptie.

  2. SQLyog heeft ‘tree’ met root@localhost en dan verdeling naar databases. Als je op een database klikt krijg je weer een onder verdeling. In mijn beeld moet je er boven ook structuur gaan zetten, router of switch of filewall. Je zou m.i. je configuratie hier kunnen aangeven. Vaak kan je ook met deze componenten communiceren.

De hartelijke groet Jan Marco

Hoi RGJ,

Ik ben momenteel bezig om de www.peerblock.com code in drie layers onder te verdelen:
1: Driver;
2: Serviceprogramma;
3: GUI.

Indien je in een telefoonboek het ip-adres zou opnemen dan kan je met peerblock subscribers ‘toelaten’ of ’blokkeren’.

De hartelijke groet Jan Marco

Hoi RGJ,

Afgelopen weekend naar http://www.honeynet.org/node/315 gekeken. Zie voor functionaliteit: Malware analysis tool, Capture-Bat

De kernel drivers heb ik wel op XP 32 bits kunnen compileren. Ben bezig om het (hoofd)progrmma te compileren. Ik zie nog afhankelijkheden met andere source code.

De hartelijke groet Jan Marco

P.S Document waar de achtergrond/omgeving van capture-bat wordt uitgelegd: http://dfrws.org/2007/proceedings/p23-seifert.pdf

Hoi RGJ,

Momenteel ben ik bezig om de driver van Winpooch Watchdog download | SourceForge.net te compileren en te linken in een XP-(32 bits) omgeving. Het was mij al gelukt om het hoofdprogramma van winpooch (versie 0.6.6) te linken met de Visual Studio poort van ClamAV ( ClamAV Native Win32 Port ).

Om winpooch op 64 bits (Windows7) hooking (met trampoline) te krijgen ga ik naar de volgende drie projecten kijken:

  1. MinHook - The Minimalistic x86/x64 API Hooking Library - CodeProject
  2. http://easyhook.codeplex.com/downloads/get/61309
  3. Powerful x86/x64 Mini Hook-Engine - CodeProject

Ik heb bovenstaande voorbeeld programma’s nog niet goed inhoudelijk bestudeerd. N.B. Ik zag ook nog een Pascal (Delpi) versie was, namelijk ‘madcodehook.2.5.7.src.rar’. Kost mij te veel tijd om dat eigen te maken en is ook niet integreerbaar met mijn huidige ‘software stack’ .

Gisteren is het mij gelukt om hoofdprogramma van http://www.mcs.vuw.ac.nz/~cseifert/Capture-BAT/CaptureBAT-Setup-2.0.0-5574-src.zip De onderliggende (File/Kernel-) Drivers compileren was al eerder gelukt. Het ontwerp van CaptureBat lijkt op Fig. 5 ‘Capture architecture diagram’ van http://www.dfrws.org/2007/proceedings/p23-seifert.pdf Je hebt dus een ‘File Monitor’, ‘Proces Monitor’, ‘Registery Monitor’, maar ook een ‘Netwerk Monitor’. Deze zit in een ander project namelijk Peerblock. Ik ga alle log regels in Mysql zetten.

Ik zie met Capture-BAT dat de virusscanner ‘ClamAVSetup.exe’ erg veel naar disk schrijft, namelijk in In “C:\Program Files\Immunet\history.db”. Als je de logging meer in het geheugen zou laten staan, dan zou het Immunet (viruscheck) programma m.i. veel sneller gaan werken.
Doordat ik heb zitten zoeken op Hooking (met trampoline net als Detours van Microsoft) stuitte ik weer op het Sandbox principe. Ik ga kijken of ik het Sandbox principe werkend kan krijgen met Pybox Google Code Archive - Long-term storage for Google Code Project Hosting. Ik ben niet zo’n fan van Python, maar ik vind het gemakkelijke om een werkende programma’s te analyseren. Zie ook http://subs.emis.de/LNI/Proceedings/Proceedings195/137.pdf voor algemene beschrijving van PyBox.

De hartelijke groet Jan Marco

RGJ,

Ik heb hoofdprogramma van winpooch in 1 file van 21376 source regels en de driver winpooch.sys in 1 file met 19541 source regels gezet. Beide programma’s kan in compileren en linken in XP vs2008 en de driver met C:\WinDDK\6001.18002. Alleen essentieel assembler code nog niet om kunnen zetten.

Volges FAQ is het met MinGW environment ( http://www.mingw.org/ ) gecompileerd. In visual studio werkt drie assembler regels niet. De eerste twee heb ik al omgezet GET_CR en SET_CR, maar nog niet getest. De laatste (JUMP_TO_STUB) is nog wel wat uitzoekwerk voor mij.

/*
#define GET_CR0(val) asm volatile (“movl %%cr0,%0” : “=r”(val)) ;

#define SET_CR0(val) asm volatile (“movl %0,%%cr0” : : “r”(val)) ;

#define JUMP_TO_STUB(iFunc) asm (“movl %%ebp, %%esp\n\t pop %%ebp\n\t jmp *(%%eax)” :: “a” (Hooks_GetStubAddForJmp(iFunc))) ;
*/

#define GET_CR0(val) (val=((__readcr0() & 0xFFFF)))

#define SET_CR0(val) (__writecr0((unsigned __int64) (val & 0xFFFF)))

De hartelijke groet Jan Marco

Hoi RGJ,

Orginele Winpooch kan ik opstarten op XP (engelse versie + Service Pack 2). Programma werkt niet goed, want gebruikt erg veel cpu cycles. Ik heb het hoofdprogramma (Winpooch.exe) vervangen door mijn gecompileerde versie van de source. Deze versie werkt nu wel ‘goed’. Ik krijg soms vragen over wat ik moet doen (accept, reject, etc).

Ik ga nu kijken hoe ik de assembler code van de driver (winpooch.sys) moet omzetten naar Visual Studio Assember. Hierna ga ik het omzetten naar 64 bits (detour achtige) hooking.

De hartelijke groet Jan Marco

P.S. Code moet je toch blijven onderhouden. Iets (Winpooch) wat blijkbaar in 2006 nog werkte, krijg ik nu fout van compiler dat je een statische tabel met free() wil ‘weggooien’. Of hij geeft foutmeldingen over het niet initialiseren van variabelen.

Hoi RGJ,

Ik ga nu proberen of ik SQLyog ( http://www.webyog.com/en/ ) en “BasicAdmin - Personal Organizer” ( BasicAdmin - Personal Organizer - CodeProject ) kan samenvoegen.

De hartelijke groet Jan Marco

P.S. Met winpooch ben ik bezig om de gebruikte code van het FreeImage project in het winpooch hoofdprogramma op te gaan nemen.

Hoi RGJ,

Ik heb het hoofdprogramma van Winpooch nu onder mijn source code stack zitten. Dus ook alle gebruikte open source libraries die het Winpooch hoofdprogramma aanroept. Werkt nu redelijk stabiel. Ik ga nu naar de driver kijken. Leuke uitdaging om in assembler te duiken. In de driver wordt bepaald of bepaalde Windows versie wel of niet compatibel is. Ik ga eerst proberen om andere XP versie aan te schakelen. Waarna ik naar window7 32 bits ga kijken.

De hartelijke groet Jan Marco

Hoi RGJ,

Ik heb bij mijn eerte omzetting poging van JUMP_TO_STUB(iFunc) gekeken naar “LISTING 5-2. Stack frame, prologue, and epilogue” in http://undocumented.rawol.com/sbs-w2k-5-monitoring-native-api-calls.pdf

Afhankelijk van iFunc wordt er naar 1 van de 13 procedurehookadressen gesprongen.

De hartelijke groet Jan Marco

P.S. Ik begrijp niet waarom "jmp"naar het adres ( & voor g_aStubs[]) waar naar toe gewezen wordt gesprongen zou moet worden “jmp &g_aStubs[iFunc]”. Ik heb dit uit orginele Hooks_GetStubAddForJmp() gehaald, zie ook appendix A.

Appendix A: JUMP_TO_STUB omzetting in inline asm Visual Studio C.
///////////////begin//////////////////////////////////
//typedef enum {
// HOOKS_NTSETVALUEKEY,
// HOOKS_NTQUERYVALUEKEY,
// HOOKS_IOCREATEFILE,
// HOOKS_NTDELETEFILE,
// HOOKS_NTSETINFORMATIONFILE,
// HOOKS_NTDEVICEIOCONTROLFILE,
// HOOKS_NTCREATEPROCESS,
// HOOKS_NTCREATEPROCESSEX,
// HOOKS_NTCREATESECTION,
// HOOKS_NTCREATEUSERPROCESS,
// HOOKS_NTTERMINATEPROCESS,
// //HOOKS_OBFASTDEREFERENCEOBJECT,
// //HOOKS_OBFDEREFERENCEOBJECT,
// HOOKS_PSPTERMINATEPROCESS,
// HOOKS_OBPFREEOBJECT,
// _HOOKS_FUNCTION_COUNT
//} HOOKS_FUNCTION ;

VOID * g_aStubs[_HOOKS_FUNCTION_COUNT] ;

//VOID* Hooks_GetStubAddForJmp (HOOKS_FUNCTION id)
//{
// ASSERT (id<_HOOKS_FUNCTION_COUNT) ;
//
// return &g_aStubs[id] ;
//}
//#define JUMP_TO_STUB(iFunc)
// asm (
// “movl %%ebp, %%esp\n\t”
// “pop %%ebp\n\t”
// “jmp *(%%eax)”
// :: “a” (Hooks_GetStubAddForJmp(iFunc))) ;

#define JUMP_TO_STUB(iFunc)
__asm mov esp, ebp;
__asm pop ebp;
__asm jmp &g_aStubs[iFunc];
#endif
//////////////////////eind//////////////////////////////////////////////

Hoi RGJ,

In tegenstelling tot de orginele winpooch driver crasht mijn gecompileerde versie wel stevig. Ik ben aan het localiseren waar het fout gaat. Altijd wel goed als je het orgineel weer kan laten werken om te zien hoe het werkt.

Hooking ga ik vervangen door MinHook - The Minimalistic x86/x64 API Hooking Library - CodeProject , want dit werkt naar verluit ook op 64 bits.

Het orginele winpooch ging files (aan de hand van de ingestelde filter) direct op virussen scannen. M.i. is het om winpooch alleen signalering te laten doen, dus files die gescaned moeten worden in MySQL zetten. In een andere programma die vanuit Mysql werkt, bepalen wanneer je ze moeten scannen. Performance verbetering door slimmer files te scannen.

De hartelijke groet Jan Marco

Hoi RGJ,

IK probeer nu OpalVOIP download | SourceForge.net te compileren. Indien het mij lukt om Opal onder mijn source stack te krijgen kan ik het gemakkeljk in SQLYog gaan inbouwen.

De hartelijke groet Jan Marco

Appendix A: Opal is:

Open Phone Abstraction Library (OPAL) is a C++ multi-platform, multi-protocol library for Fax, Video & Voice over IP and other networks. Also included is the Portable Tool Library (PTLib) which is a C++ multi-platform abstraction library and collection.

Hoi RGJ,

Ik ben nu met winpooch (kernel) driver bezig om die werkend te krijgen. Ik probeer logging routines er in toe te voegen. Ik denk ook aan om de code eerst in een normaal programma aan te roepen om de hookingroutines om te zetten naar een versie die ook in 64 bits werkt. Bij een normaal programma kan je makkelijker zien of het werkt.

Wat ik apart van kernel programmeren vind is dat het compileert en linkt en bij het laden van de kernel driver aangeeft dat hij bepaalde routines niet kan vinden. Normaal zal je wel tegen een standaard library aan linken, die zal in de kernelomgeving wel een andere library zijn.

De hartelijke groet Jan Marco

Hoi RGJ,

Ik ben bezig om de debugging-logging aanroepen in een kernel programma hetzelfde te maken als ik standaard gebruik. Ik doe dit op basis van procedure LogRecord in Reverse source code of diskmon in sysinternal Suite free download source code-CodeForge.com Het programma is een ‘reverse enginering’ versie van DiskMon for Windows - Sysinternals | Microsoft Learn Programma werkt goed. Het laat disk Write/read, sector, readlength zien. Ik ga deze routine gebruiken voor debugging logging. Verder uitbouwen door de winpooch driver er later in op te nemen.

Probleem met kernel programmeren is dat niet alle routines in de library zitten. Bij het laden van kernelprogramma checkt OS of hij ze kan resolven. In logRecord oplossing buffer je de meldingen. In hoofdprogramma haal je periodiek de meldingen op via een timer.

De hartelijke groet Jan Marco

Hoi RGJ,

Ben bezig om verschillende kernel programma’s te proberen om code er uit te halen die ik kan gebruiken om Winpooch weer aan de praat te krijgen. Ik zie dat de technieken als direct en via buffer, zoals in A simple demo for WDM Driver development - CodeProject wordt uitgelegd steeds weer terugkomen. Je kan ook pci kaarten identificeren met behulp van http://www.internals.com/utilities/WinIo.zip van Sysinternals.

Ik heb ook twee geluidskaarten gekocht, die de volgende (open source code) driver gebruikt Google Code Archive - Long-term storage for Google Code Project Hosting.

Ik ga het ook op windows 8 proberen, want ik zie dat niet alle kernel procedures van Winpooch in windows8-kernel zitten.

De hartelijke groet Jan Marco

P.S. De drivers hebben ook “subscriber record”. Je kan ze met database synchronisatie koppelen. Zie ook http://www.pcidatabase.com/

Hoi RGJ,

Het is mij gelukt om alle source te compileren om een sftp-verbinding op te zetten en het lijkt goed te werken.

Cliënt: Filezilla.exe → fzftp.exe (maakt verbinding met een SSH-server);

Server: Daemon.exe (luistert naar poort (22) om een SSH-sessie op te starten) → Session.exe → Shlex.exe

Fzftp.exe gebruikt deel van de code van Putty. Ik heb alle source code van Putty in één source file (104.644 source regels totaal) gedaan en de Fzftp code (initieel 47.298 source code regels) met compiler switches in de Putty code ingebouwd.

Ik probeer het te integreren met peerproject. Zie ook PeerProject download | SourceForge.net
Met peerproject (gnutella protocol) wil ik de peers gaan vinden en met sftp een veilige verbinding met de andere peer opzetten.

De hartelijke groet Jan Marco

P.S. Laatste uitdaging was om bn-win32.obj weg te werken van https://www.cs.auckland.ac.nz/~pgut001/cryptlib/ Cryptlib gebruikt (linkt) objecten van gecompileerde assembler sources, die meegeleverd worden in de distributie. Ik wilde alleen de C-code variant van BN_ASM.C gebruiken.