Error en CryptStringToBinary usando wchar

Iniciado por MeTaD, 30 Marzo 2013, 02:01 AM

0 Miembros y 5 Visitantes están viendo este tema.

MeTaD

Cita de: IEAX en 30 Marzo 2013, 03:17 AM
No sé a que te referís, supuestamente si creas un proyecto de aplicación Win32 no tiene porque agregarte dependencia a .net framework... (eso creo)


B#

Vale, no importa eso ahora jejeje gracias de todas formas (aunque creo que en una pc sin .net framework no te iniciará la aplicación, repito, CREO), estoy teniendo otro problema... en el proyecto completo es necesario utilizar el archivo ntdef.h pero visual studio me da error, dice que no lo encuentra... ¿qué puedo hacer

Es algo problemática mi situación, por un lado, con Dev-c++ tengo problema con CryptStringToBinary y por el otro con VC++ me da el problema de ntdef.h :S

BloodSharp

Cita de: MeTaD en 30 Marzo 2013, 03:22 AM
Vale, no importa eso ahora jejeje gracias de todas formas (aunque creo que en una pc sin .net framework no te iniciará la aplicación, repito, CREO), estoy teniendo otro problema... en el proyecto completo es necesario utilizar el archivo ntdef.h pero visual studio me da error, dice que no lo encuentra... ¿qué puedo hacer

Copiar las definiciones en los archivos que necesites (?

Cita de: MeTaD en 30 Marzo 2013, 03:22 AM
Es algo problemática mi situación, por un lado, con Dev-c++ tengo problema con CryptStringToBinary y por el otro con VC++ me da el problema de ntdef.h :S

Con Dev-C+Mingw 3.4.2 tuve que llamar a CryptStringToBinary usando LoadLibrary y GetProcAddress, en cuanto al archivo ntdef.h no está en la sdk de visual pero está en la wdk y las definiciones de la wdk y de mingw en el archivo ntdef.h son completamente distintas  :-(


B#



MeTaD

Cita de: IEAX en 30 Marzo 2013, 04:03 AM
Copiar las definiciones en los archivos que necesites (?

Con Dev-C+Mingw 3.4.2 tuve que llamar a CryptStringToBinary usando LoadLibrary y GetProcAddress, en cuanto al archivo ntdef.h no está en la sdk de visual pero está en la wdk y las definiciones de la wdk y de mingw en el archivo ntdef.h son completamente distintas  :-(


B#
Podrías por favor mostrarme cómo lo hiciste con dev-c++??

PD: jejeje para aprender me gusta más empezar por lo difícil  :laugh:

BloodSharp

Cita de: MeTaD en 30 Marzo 2013, 04:19 AM
Podrías por favor mostrarme cómo lo hiciste con dev-c++??

PD: jejeje para aprender me gusta más empezar por lo difícil  :laugh:

#include <windows.h>
#include <stdio.h>
#include <conio.h>

#define CRYPT_STRING_HEX 0x00000004

typedef BOOL (WINAPI *TCryptStringToBinaryW)(LPCWSTR pszString,DWORD cchString,DWORD dwFlags,BYTE *pbBinary,DWORD *pcbBinary,DWORD *pdwSkip,DWORD *pdwFlags);
TCryptStringToBinaryW pCryptStringToBinaryW=NULL;

int main()
{
    pCryptStringToBinaryW=(TCryptStringToBinaryW)GetProcAddress(LoadLibrary("Crypt32.dll"),"CryptStringToBinaryW");
    if(!pCryptStringToBinaryW){printf("Error 404: CrypStringToBinaryW not found :S\n");return 1;}

    BOOL bIsSuccess = FALSE;
    WCHAR szKey[] = L"01000000D08C9DDF0115D1118C7A00C04FC297EB01000...";
    BYTE byKey[1024];
    DWORD cbBinary, dwFlags, dwSkip;
    bIsSuccess = pCryptStringToBinaryW(szKey, lstrlenW(szKey), CRYPT_STRING_HEX, byKey, &cbBinary, &dwSkip, &dwFlags);
    printf("%i/%i",bIsSuccess,byKey);
    getch();
    return 0;
}



B#



MeTaD

Cita de: IEAX en 30 Marzo 2013, 04:38 AM
#include <windows.h>
#include <stdio.h>
#include <conio.h>

#define CRYPT_STRING_HEX 0x00000004

typedef BOOL (WINAPI *TCryptStringToBinaryW)(LPCWSTR pszString,DWORD cchString,DWORD dwFlags,BYTE *pbBinary,DWORD *pcbBinary,DWORD *pdwSkip,DWORD *pdwFlags);
TCryptStringToBinaryW pCryptStringToBinaryW=NULL;

int main()
{
    pCryptStringToBinaryW=(TCryptStringToBinaryW)GetProcAddress(LoadLibrary("Crypt32.dll"),"CryptStringToBinaryW");
    if(!pCryptStringToBinaryW){printf("Error 404: CrypStringToBinaryW not found :S\n");return 1;}

    BOOL bIsSuccess = FALSE;
    WCHAR szKey[] = L"01000000D08C9DDF0115D1118C7A00C04FC297EB01000...";
    BYTE byKey[1024];
    DWORD cbBinary, dwFlags, dwSkip;
    bIsSuccess = pCryptStringToBinaryW(szKey, lstrlenW(szKey), CRYPT_STRING_HEX, byKey, &cbBinary, &dwSkip, &dwFlags);
    printf("%i/%i",bIsSuccess,byKey);
    getch();
    return 0;
}



B#

Hermano, me podés explicar lo que hiciste?, es posible hacer esto mismo con CryptUnprotectData?

BloodSharp

Cita de: MeTaD en 30 Marzo 2013, 04:47 AM
Hermano, me podés explicar lo que hiciste?

Google y msdn no muerden :P

http://msdn.microsoft.com/en-us/library/windows/desktop/ms683212

Cita de: MeTaD en 30 Marzo 2013, 04:47 AM(...), es posible hacer esto mismo con CryptUnprotectData?

Si, para cualquier rutina que sea exportada de cualquier modulo que esté activo en tu proceso...


B#



MeTaD

#16
Cita de: IEAX en 30 Marzo 2013, 05:02 AM
Google y msdn no muerden :P

http://msdn.microsoft.com/en-us/library/windows/desktop/ms683212

Si, para cualquier rutina que sea exportada de cualquier modulo que esté activo en tu proceso...


B#
Muchísimas gracias, haz sido muy paciente y servicial, de verdad, gracias... jajja sé que no muerde pero digo yo que es mejor que alguien más humano expliquee jajjaja, disculpa es que te repito, soy nuevo en c++ x_x pero gracias de verdad, un millón, trataré de hacerlo yo mismo con cryptunprotectdata y te cuento como me fue

MODIFICACION:
Bueno, funcionó, no dio error, pero la función que quiero que haga no la está haciendo bien, mañana crearé otro hilo liberando todo el código para ver si alguien me puede ayudar, IEAX, te debo mucho, muchísimas gracias