If you check Wine's source:
void WINAPI RtlCopyLuid (PLUID LuidDest, const LUID *LuidSrc)you see that this little NtDll API is very strong: no check is done, so it could be used literally for anything. A simple way to use it is just to jump, by setting the right arguments.
{
*LuidDest = *LuidSrc;
}
mov eax, espJumps is now updated with it. (Part 1 here)
sub eax, 10h
push jump_target
push esp
push eax
call RtlCopyLuid
un saut simple via API
Si on regarde le source de Wine:
void WINAPI RtlCopyLuid (PLUID LuidDest, const LUID *LuidSrc)on voit que cette petite API de NtDll est très puissante: aucune vérification, donc elle pourrait être vraiment utilisée pour tout et n'importe quoi. Une façon simple de l'utiliser est pour sauter, en préparant correctement la pile:
{
*LuidDest = *LuidSrc;
}
mov eax, espcette technique est maintenant ajoutée à Jumps (première partie ici)
sub eax, 10h
push jump_target
push esp
push eax
call RtlCopyLuid
also in the same family, the big sister, RtlCopyLuidAndAttributesArray . very similar, could be used for anything.
ReplyDeletehttp://source.winehq.org/source/dlls/ntdll/rtl.c#L889