Foro de elhacker.net

Seguridad Informática => Criptografía => Mensaje iniciado por: festina73 en 28 Octubre 2019, 21:29



Título: Codigo en C# Criptografia por favor ayuda
Publicado por: festina73 en 28 Octubre 2019, 21:29
Hola alguien sabe
que significa y que hace este codigo


ZeroMemory(gch.AddrOfPinnedObject(), sSecretKey.Length * 2);
gch.Free();


gracias



Título: Re: Codigo en C# Criptografia por favor ayuda
Publicado por: ThunderCls en 28 Octubre 2019, 22:26
Hola alguien sabe
que significa y que hace este codigo

ZeroMemory(gch.AddrOfPinnedObject(), sSecretKey.Length * 2);
gch.Free();

ZeroMemory
https://docs.microsoft.com/en-us/previous-versions/windows/desktop/legacy/aa366920(v%3Dvs.85)
GCHandle.AddrOfPinnedObject
https://docs.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.gchandle.addrofpinnedobject?view=netframework-4.8
GCHandle.Free
https://docs.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.gchandle.free?view=netframework-4.8

Creo que se explica a si mismo, solo hay que usar el buscador un poco


Título: Re: Codigo en C# Criptografia por favor ayuda
Publicado por: kub0x en 28 Octubre 2019, 22:28
Bueno tu pregunta poco tiene que ver con criptografía, estás dando un código que forma parte de alguna implementación criptográfica.

En este caso, las dos líneas son pertenecientes a la API de windows y son normalmente llamadas desde procesos nativos codificados por ejemplo en C++. Por lo tanto al estar tu en C# tienes que hacer uso de Marshalling o P/Invoke para llamar código unmanaged desde managed.

Zeromemory es una función que setea la porción de memoria que tu le dices a 0. En este caso gch.AddressOfPinnedObject() es el puntero de memoria a gch, y sSecretKey.Length * 2 es el número de 0 que va a setear desde el inicio del puntero de gch.

Después gch.Free() es el equivalente a llamar desde C++ a Free(gch); por lo tanto lo que hace es desreferenciar el puntero gch para que el heap lo libere, ten en cuenta que esto hace que gch no contenga nada útil porque pudo haber sido sobreescrito al ser liberado en heap.

Si te suena a chino vas a tener que estudiar mucho :D

Saludos.