1

quelqu'un de relativement cale au niveau du comportement de ntdll saurait-il (elle) m'expliquer ce foutoir

KERNELBASE.dll: LoadLibraryA wrapped.
KERNELBASE.dll: LoadLibraryExA wrapped.
KERNELBASE.dll: LoadLibraryW wrapped.
KERNELBASE.dll: LoadLibraryExW wrapped.
KERNEL32.DLL: LoadLibraryA wrapped.
KERNEL32.DLL: LoadLibraryExA wrapped.
KERNEL32.DLL: LoadLibraryW wrapped.
KERNEL32.DLL: LoadLibraryExW wrapped.
A: kernel32.dll
A: kernel32.dll
A: kernel32.dll
W: kernel32.dll
W: rpcrt4.dll
A: kernel32.dll
A: kernel32.dll
A: kernel32.dll
W: kernel32.dll
A: ext-ms-win-rtcore-ntuser-window-ext-l1-1-0.dll
W: ext-ms-win-rtcore-ntuser-window-ext-l1-1-0.dll
A: advapi32.dll
A: advapi32.dll
A: advapi32.dll
W: advapi32.dll
A: api-ms-win-core-com-l1-1-0.dll
W: api-ms-win-core-com-l1-1-0.dll
A: ext-ms-win-mininput-inputhost-l1-1-0.dll
A: ext-ms-win-mininput-inputhost-l1-1-0.dll
W: ext-ms-win-mininput-inputhost-l1-1-0.dll
A: d3d9.dll
A: d3d9.dll
A: d3d9.dll
W: d3d9.dll
W: C:\WINDOWS\System32\DriverStore\FileRepository\igdlh64.inf_amd64_66011d60fecdb7a1\igdumdim32.dll
W: C:\WINDOWS\System32\DriverStore\FileRepository\igdlh64.inf_amd64_66011d60fecdb7a1\igdumdim32.dll
W: C:\WINDOWS\System32\DriverStore\FileRepository\igdlh64.inf_amd64_66011d60fecdb7a1\igdumdim32.dll
W: api-ms-win-core-synch-l1-2-0
W: api-ms-win-core-synch-l1-2-0
W: api-ms-win-core-fibers-l1-1-1
W: api-ms-win-core-fibers-l1-1-1
W: api-ms-win-core-synch-l1-2-0
W: api-ms-win-core-synch-l1-2-0
W: api-ms-win-core-fibers-l1-1-1
W: api-ms-win-core-fibers-l1-1-1
W: api-ms-win-core-localization-l1-2-1
W: api-ms-win-core-localization-l1-2-1
A: gdi32.dll
A: gdi32.dll
A: gdi32.dll
W: gdi32.dll
W: C:\WINDOWS\System32\DriverStore\FileRepository\nvmi.inf_amd64_9cd951c47b0da577\nvdlist.dll
W: C:\WINDOWS\System32\DriverStore\FileRepository\nvmi.inf_amd64_9cd951c47b0da577\nvdlist.dll
W: C:\WINDOWS\System32\DriverStore\FileRepository\nvmi.inf_amd64_9cd951c47b0da577\nvdlist.dll
W: api-ms-win-core-synch-l1-2-0
W: api-ms-win-core-synch-l1-2-0
W: api-ms-win-core-fibers-l1-1-1
W: api-ms-win-core-fibers-l1-1-1
W: api-ms-win-core-synch-l1-2-0
W: api-ms-win-core-synch-l1-2-0
W: api-ms-win-core-fibers-l1-1-1
W: api-ms-win-core-fibers-l1-1-1
W: api-ms-win-core-localization-l1-2-1
W: api-ms-win-core-localization-l1-2-1
W: kernel32.dll
W: C:\WINDOWS\System32\DriverStore\FileRepository\nvmi.inf_amd64_9cd951c47b0da577\nvldumd.dll
W: C:\WINDOWS\System32\DriverStore\FileRepository\nvmi.inf_amd64_9cd951c47b0da577\nvldumd.dll
W: C:\WINDOWS\System32\DriverStore\FileRepository\nvmi.inf_amd64_9cd951c47b0da577\nvldumd.dll
W: api-ms-win-core-synch-l1-2-0
W: api-ms-win-core-fibers-l1-1-1
W: api-ms-win-core-synch-l1-2-0
W: api-ms-win-core-fibers-l1-1-1
W: api-ms-win-core-localization-l1-2-1
W: C:\WINDOWS\system32\crypt32.dll
W: WINTRUST.DLL
W: C:\WINDOWS\System32\crypt32.dll
A: api-ms-win-core-processthreads-l1-1-2.dll
W: api-ms-win-core-processthreads-l1-1-2.dll
A: C:\WINDOWS\system32\rsaenh.dll
W: C:\WINDOWS\system32\rsaenh.dll
W: C:\WINDOWS\system32\bcryptprimitives.dll
W: C:\WINDOWS\system32\wintrust.dll
W: C:\WINDOWS\System32\DriverStore\FileRepository\nvmi.inf_amd64_9cd951c47b0da577\nvd3dum.dll
W: api-ms-win-core-synch-l1-2-0
W: api-ms-win-core-synch-l1-2-0
W: api-ms-win-core-fibers-l1-1-1
W: api-ms-win-core-fibers-l1-1-1
W: api-ms-win-core-synch-l1-2-0
W: api-ms-win-core-synch-l1-2-0
W: api-ms-win-core-fibers-l1-1-1
W: api-ms-win-core-fibers-l1-1-1
W: api-ms-win-core-localization-l1-2-1
W: api-ms-win-core-localization-l1-2-1
A: d3d9.dll
A: d3d9.dll
A: d3d9.dll
W: d3d9.dll
W: C:\WINDOWS\System32\DriverStore\FileRepository\igdlh64.inf_amd64_66011d60fecdb7a1\igdumdim32.dll
W: C:\WINDOWS\System32\DriverStore\FileRepository\igdlh64.inf_amd64_66011d60fecdb7a1\igdumdim32.dll
W: C:\WINDOWS\System32\DriverStore\FileRepository\igdlh64.inf_amd64_66011d60fecdb7a1\igdumdim32.dll
W: api-ms-win-core-synch-l1-2-0
W: api-ms-win-core-synch-l1-2-0
W: api-ms-win-core-fibers-l1-1-1
W: api-ms-win-core-fibers-l1-1-1
W: api-ms-win-core-synch-l1-2-0
W: api-ms-win-core-synch-l1-2-0
W: api-ms-win-core-fibers-l1-1-1
W: api-ms-win-core-fibers-l1-1-1
W: api-ms-win-core-localization-l1-2-1
W: api-ms-win-core-localization-l1-2-1

pour faire simple: j'ai injecte des detours dans LoadLibrary(Ex)?(A|W). J'mattendais a voir des redondances (genre LoadLibraryExX qui appelle le LoadLibraryX associe), mais pourquoi (pour prendre l'exemple le plus evident) kernel32 est charge a la fois a coup de LoadLibraryA et de LoadLibraryW ??? me semble evident que le lanceur de windows a la main sur ces appels, donc pas besoin de trouze mille appels ????

(je sais aussi que kernel32 est juste un trampoline vers kernelbase, mais mon code ne fait pas (encore) la distinction. je ne distingue pas non plus les LoadEx des Load, puisque dans les deux cas la chaine de caracteres est le premier argument (stdcall))

en soit ca ne me bloque pas, je cherche juste a refuser le chargement de certaines dlls quand je demarre ma cible en DBI (a), parce que faut instrumenter tout ca, et plus ya de dll plus c'est long chef, donc si j'peux eviter les merdes genre nvidia ... mais ca me semblait curieux sur API que du code userspace appelle rarement (sauf pour faire des trucs pas tres nets)

le code pour les curieux

code
// LoadLibraryA(LPCSTR) // LoadLibraryExA(LPCSTR, HANDLE, DWORD) static void pre_loadLibraryA(void* wrapcxt, OUT void ** /* userdata */) { LPCSTR moduleName = static_cast<LPCSTR>(drwrap_get_arg(wrapcxt, 0)); logger << "A: " << moduleName << std::endl; } // LoadLibraryW(LPCWSTR) // LoadLibraryExW(LPCWSTR, HANDLE, DWORD) static void pre_loadLibraryW(void* wrapcxt, OUT void ** /* userdata */) { LPCWSTR moduleName = static_cast<LPCWSTR>(drwrap_get_arg(wrapcxt, 0)); int32_t length = WideCharToMultiByte(CP_UTF8, 0, moduleName, wcslen(moduleName), NULL, NULL, NULL, NULL); char* buffer = new char[length + 1]; WideCharToMultiByte(CP_UTF8, 0, moduleName, wcslen(moduleName), buffer, length, NULL, NULL); buffer[length] = '\0'; logger << "W: " << buffer << std::endl; delete[] buffer; } void module_load_event(void* ctx, const module_data_t* info, bool /* loaded */) { { app_pc towrap = reinterpret_cast<app_pc>(dr_get_proc_address(info->handle, "LoadLibraryA")); if (towrap == nullptr) return; bool wrap_op = drwrap_wrap(towrap, pre_loadLibraryA, nullptr); if (wrap_op) logger << info->names.file_name << ": LoadLibraryA wrapped." << std::endl; else logger << info->names.file_name << ": Failed to wrap LoadLibraryA: is it already wrapped?" << std::endl; } { app_pc towrap = reinterpret_cast<app_pc>(dr_get_proc_address(info->handle, "LoadLibraryExA")); if (towrap == nullptr) return; bool wrap_op = drwrap_wrap(towrap, pre_loadLibraryA, nullptr); if (wrap_op) logger << info->names.file_name << ": LoadLibraryExA wrapped." << std::endl; else logger << info->names.file_name << ": Failed to wrap LoadLibraryExA: is it already wrapped?" << std::endl; } { app_pc towrap = reinterpret_cast<app_pc>(dr_get_proc_address(info->handle, "LoadLibraryW")); if (towrap == nullptr) return; bool wrap_op = drwrap_wrap(towrap, pre_loadLibraryW, nullptr); if (wrap_op) logger << info->names.file_name << ": LoadLibraryW wrapped." << std::endl; else logger << info->names.file_name << ": Failed to wrap LoadLibraryW: is it already wrapped?" << std::endl; } { app_pc towrap = reinterpret_cast<app_pc>(dr_get_proc_address(info->handle, "LoadLibraryExW")); if (towrap == nullptr) return; bool wrap_op = drwrap_wrap(towrap, pre_loadLibraryW, nullptr); if (wrap_op) logger << info->names.file_name << ": LoadLibraryExW wrapped." << std::endl; else logger << info->names.file_name << ": Failed to wrap LoadLibraryExW: is it already wrapped?" << std::endl; } }

2

À peu près tous les programmes Windows importent KERNEL32.DLL. Certains utilisent aussi LoadLibrary dessus manuellement pour pouvoir utiliser les fonctionnalités des nouvelles versions de Windows sans devenir incompatibles avec les anciennes versions.
avatarMes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

3

Putain mais comment tu sais ça toi ? grin
avatar<<< Kernel Extremist©®™ >>>
Feel the power of (int16) !

4

Évidemment que tout utilisé K32, mais sachant que ntdll charge déjà le module (voir même je crois que c'est encore plus haut dans le chargement d'un PE), pourquoi aller forcer le chargement à la main? Je vois pas pourquoi la charger à la main ou pas depuis System32 change quelque chose niveau compatibilité

5

Et puis c'est pas que K32, D3D9 est chargée un paquet de fois aussi. Faudrait que je voie combien d'appels sont sur Load et combien sur LoadEx

6

Chaque module qui en a besoin demande son chargement, et au final ça ne fait rien ?
avatar<<< Kernel Extremist©®™ >>>
Feel the power of (int16) !

7

Ce que je veux dire c'est que je suis quasi sur qu'à la compilation le CRT* n'insere pas de LoadLibrary(T_("kernel32.dll")) à ma connaissance. Je verrais ce soir pour sortir tous les arguments car ça m'intrigue cette histoire.

* Oui c'est un abus de langage

8

Folco (./3) :
Putain mais comment tu sais ça toi ? grin
J'ai utilisé Windows à une époque (du passé lointain smile) et je me suis donc plongé aussi dans l'API. Il arrive aussi de temps en temps que ça aide de m'y connaître, quand j'ai besoin de cross-compiler quelque chose pour les personnes qui n'ont pas encore vu la lumière du GNU. tongue
avatarMes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

9

Warpten (./4) :
Évidemment que tout utilisé K32, mais sachant que ntdll charge déjà le module (voir même je crois que c'est encore plus haut dans le chargement d'un PE), pourquoi aller forcer le chargement à la main? Je vois pas pourquoi la charger à la main ou pas depuis System32 change quelque chose niveau compatibilité
C'est pour avoir un HMODULE pour GetProcAddress, probablement. Certes, GetModuleHandle suffirait dans ce cas, je suppose…
avatarMes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

10

Ah ouais, effectivement. M'enfin c'est pas très propre....