Sortir un fichier depuis une ressource RCDATA

Quelques lignes pour remettre sous forme de fichier une ressource préalablement incorporée.

Par exemple, via le fichier RC :

42	RCDATA	"../release/fichier.dll"

Puis ce bout de code :

bool RSCRCtoFile(DWORD id, const wchar_t * file)
{
	bool reussite = false;
	if(HRSRC maRefRessource = FindResource(NULL, MAKEINTRESOURCE(id), RT_RCDATA))
	{
		if(DWORD tailleRessource = SizeofResource(NULL, maRefRessource))
		{
			if(HGLOBAL maRessource = LoadResource(NULL, maRefRessource))
			{
				if(LPVOID ptrRessource = LockResource(maRessource))
				{
					if(HANDLE hFile = CreateFile(file, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL))
					{	
						DWORD dwBytesWritten;
						reussite = WriteFile(hFile, ptrRessource, tailleRessource, &dwBytesWritten, NULL) != 0;
						CloseHandle(hFile);
					}
				}
				FreeResource(maRessource);
			}
		}
	}
	return reussite;
}

Référence : http://msdn.microsoft.com/library/ff468901.aspx

NetBeans 7

parcequ’il n’y a pas que le c/c++ dans la vie
parceque je n’aime pas Eclipse

Il est judicieux séparer les composants JDK et IDE :

netbeans 7.0

Quelques librairies à avoir :

Visual Studio 2010 Express

Juste quelques petits liens pratiques :

Les versions Express des outils Microsoft sont des versions allégées, sans limite d’utilisation dans le temps : http://www.microsoft.com/express

Visual Studio 2010

Certaines fonctionnalités ne sont pas disponibles : http://msdn.microsoft.com/library/hs24szh9.aspx (comme la compilation x64 ou les MFC pour Visual C++)

En bonus pratique :

Signer rapidement quelques programmes

Avec les outils de Visual Studio (ou du SDK) :

signtool sign /v ^
/d "mimikatz 1.0 (alpha)" /du "http://blog.gentilkiwi.com/mimikatz" ^
/sha1 ab9e92b943ed47d915bc26939e24a58303acaa7e ^
/t http://timestamp.globalsign.com/scripts/timstamp.dll ^
c:\security\mimikatz\Win32\*.exe c:\security\mimikatz\Win32\*.dll ^
c:\security\mimikatz\x64\*.exe c:\security\mimikatz\x64\*.dll

Cela donne une belle signature :
sign_kiwi
Plus d’informations : http://msdn.microsoft.com/library/aa387764.aspx

Avec les outils Java :

jarsigner -verbose ^
-storetype Windows-MY -providername SunMSCAPI ^
-tsa http://timestamp.globalsign.com/scripts/timstamp.dll ^
kdc.jar "Benjamin Delpy"

Plus d’informations : http://download.oracle.com/javase/6/docs/technotes/tools/windows/jarsigner.html

Quelques services d’horodatages :

  • http://timestamp.globalsign.com/scripts/timstamp.dll
  • http://timestamp.verisign.com/scripts/timstamp.dll (ne fonctionne pas en Java…)
  • http://timestamp.comodoca.com/authenticode (ne fonctionne pas en Java…)

Visiblement Verisign et Comodo préfèrent se passer de la RFC 3161 (http://www.ietf.org/rfc/rfc3161.txt) qui indique que les communications sur HTTP doivent se faire en DER avec les mimetypes appropriés (application/timestamp-query et application/timestamp-reply)… ou pire, ils filtrent l’user-agent de l’appelant !
Notons aussi le non respect des normes de signtool qui encode en PEM et travaille en application/octect-stream….

Pour plus de souplesse, passez par GlobalSign ;) (http://www.globalsign.com/)


Un petit rappel sur la signature croisée pour les objets noyau de Windows : http://msdn.microsoft.com/windows/hardware/gg487315

Ce qui peut se résumer à :

signtool sign /v ^
/d "mimikatz driver 0.01 :-)" /du "http://blog.gentilkiwi.com/mimikatz" ^
/sha1 ab9e92b943ed47d915bc26939e24a58303acaa7e ^
/ac c:\security\mimikatz\tools\MSCV-GlobalSign.cer ^
/t http://timestamp.globalsign.com/scripts/timstamp.dll ^
c:\security\mimikatz\Win32\*.sys c:\security\mimikatz\driver\objfre_wnet_x86\i386\*.sys ^
c:\security\mimikatz\x64\*.sys c:\security\mimikatz\driver\objfre_wnet_amd64\amd64\*.sys