Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - BloodSharp

#741
Buenas, tené en cuenta que posteaste en el foro de C++ cuando querías algo con C#, aún así te voy a dar un ejemplo básico de .NET para que te sirva de referencia pero en C++ ya que este es el subforo de C++. :silbar:

Código (cpp) [Seleccionar]
using namespace System;
using namespace System::Collections;


ref class Alumno
{
public:
String ^Nombre;
String ^Apellido;
Int32 Edad;
Char Sexo;
};

void ImprimirAlumnos(ArrayList ^K)
{
Console::WriteLine("Listado de Alumnos:");
for(int i=0;i<K->Count;i++)
{
Alumno ^UnAlumno=(Alumno ^)(K[i]);
Console::WriteLine("Nombre: "+UnAlumno->Nombre+", Apellido: "+
UnAlumno->Apellido+", Edad: "+UnAlumno->Edad+", Sexo: "+UnAlumno->Sexo);
}
}

int main(array<System::String ^> ^args)
{
ArrayList ^Alumnos=gcnew ArrayList();

Alumno ^A=gcnew Alumno();
A->Nombre="Cosme";
A->Apellido="Fulanito";
A->Edad=13;
A->Sexo='M';
Alumnos->Add(A);

A=gcnew Alumno();
A->Nombre="Mengana";
A->Apellido="Sultana";
A->Edad=14;
A->Sexo='F';
Alumnos->Add(A);

A=gcnew Alumno();
A->Nombre="Asdasd";
A->Apellido="Dsadsa";
A->Edad=12;
A->Sexo='M';
Alumnos->Add(A);

ImprimirAlumnos(Alumnos);
Alumnos->RemoveAt(1);
ImprimirAlumnos(Alumnos);

Console::ReadKey();
   return 0;
}





B#
#742
Cita de: ukol en  2 Abril 2013, 15:06 PM
La convención de llamada por defecto de C/C++ no es cdecl? puede ser eso?

Sí, la convención por defecto de Mingw es cdecl, lo recuerdo por un problema que tuve de corrupción de pila en kernel en un hook de sysenter :silbar: (Lindas pantallas azules que tuve por eso...  :rolleyes:)

en cuanto al prototipo de tu función que apunta a la dirección original fijate que la declaraste con la convención stdcall, por lo cuál la función hookeada también debería estar escrita de la misma manera:

Ejemplo:
HINTERNET __stdcall HookerInternetConnect(...)


B#
#743
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#
#744
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#
#745
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#
#746
Cita de: MeTaD en 30 Marzo 2013, 03:08 AM
Amigo, una última pregunta antes de revisar tu archivo... ¿Cómo haces para programar en Visual Studio sin crear dependencia a .net framwork?

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#
#747
probá de nuevo ya lo solucioné :P

PD: No sé si está bien implementado pero compila eso seguro...


B#
#748
Cita de: MeTaD en 30 Marzo 2013, 02:46 AM
#pragma comment (lib,"Crypt32.lib")

Si era eso, pero al parecer tu librería estática no contiene la definición de esa función... lo cual es raro :S

Cita de: MeTaD en 30 Marzo 2013, 02:46 AM
¿Cómo soluciono lo primero?, de verdad que estoy muy básico pero me encantaría poder solucionar este obstáculo... porfavor.

Te dejo el link de como lo hice yo para que no te hagas más líos :S

https://rapidshare.com/files/2056454809/CryptStringBinary.rar


B#
#749
Cita de: MeTaD en 30 Marzo 2013, 02:24 AM
Gracias por tu pronta respuesta amigo, pero surge el siguiente problema:

Si no cambio lstrLenW(szKey) por lstrlenA(szKey) da el siguiente error:
Citar[Error] cannot convert 'CHAR* {aka char*}' to 'LPCWSTR {aka const wchar_t*}' for argument '1' to 'int lstrlenW(LPCWSTR)'

Es porque estás tratando de usar una cadena ansi en una función que recibe una cadena unicode...

http://msdn.microsoft.com/en-us/library/windows/desktop/ff381407(v=vs.85).aspx

Cita de: MeTaD en 30 Marzo 2013, 02:24 AMLuego de realizar el cambio da el siguiente error:

Citarundefined reference to `_imp__CryptStringToBinaryA@28'
[Error] ld returned 1 exit status

¿Qué está suciendiendo?

El compilador no tiene la referencia de que modulo debe importar esa función (Tenés que agregar la librería estática de la dll Crypt32.dll)


B#
#750
Cita de: MeTaD en 30 Marzo 2013, 02:01 AM
Citar[Error] cannot convert 'WCHAR* {aka wchar_t*}' to 'LPCSTR {aka const char*}' for argument '1' to 'WINBOOL CryptStringToBinaryA(LPCSTR, DWORD, DWORD, BYTE*, DWORD*, DWORD*, DWORD*)'

LPCSTR no es una cadena unicode sino ansi:

typedef __nullterminated CONST CHAR *LPCSTR, *PCSTR;

Las correciones serían así sino me equivoco :P

CHAR szKey[] = "01000000D08C9DDF0115D1118C7A00C04FC297EB01000...";
...
lstrlenA(szKey)



B#