elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Transformar Codigo Sencillo de VB6 a C++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Transformar Codigo Sencillo de VB6 a C++  (Leído 4,820 veces)
revenge1252

Desconectado Desconectado

Mensajes: 70


Ver Perfil
Transformar Codigo Sencillo de VB6 a C++
« en: 1 Junio 2012, 19:16 pm »

Hola, como bien dice el titulo, tengo un codigo en VB6 que me funciona a la perfeccion.

es este:

Código:
Public Declare Sub UrlMkSetSessionOption Lib "urlmon.dll" (ByVal dwOption As Long, ByVal pBuffer As String, ByVal dwBufferLength As Integer, ByVal dwReserved As Integer)

Public Function UChange(ByVal Variable As String)
    UrlMkSetSessionOption &H10000001, Variable, Len(Variable), 0
End Function

me preguntaba si alguien me podria ayudar para adaptarlo a C++ 6

Necesito portar-lo y no encuentro el codigo ya hecho para C++, y tampoco se transformarlo yo mismo, seria para una DLL.


Gracias por leer mi post y Saludos!


En línea

The Swash

Desconectado Desconectado

Mensajes: 194


Programmer


Ver Perfil WWW
Re: Transformar Codigo Sencillo de VB6 a C++
« Respuesta #1 en: 1 Junio 2012, 20:15 pm »

Hola,

Paso de afán a programar la función pero no tuve tiempo de probar bien. En teoría debe funcionar, me cuentas.

Un saludo,
Iván Portilla.

Código
  1. #include <windows.h>
  2. HRESULT (WINAPI * UrlMkSetSessionOption)(DWORD dwOption, LPVOID Buffer, DWORD dwBufferLength, DWORD dwReserved);
  3.  
  4.  
  5. DWORD UChange(PCHAR Variable)
  6. {
  7.    HANDLE DLL;
  8.    HRESULT Result;
  9.    DWORD ResultFunc = 0;
  10.  
  11.    DLL = LoadLibraryA("urlmon.dll");
  12.    UrlMkSetSessionOption = GetProcAddressA(DLL, "UrlMkSetSessionOption");
  13.  
  14.    if (UrlMkSetSessionOption != NULL)
  15.    {
  16.        Result = UrlMkSetSessionOption(0x10000001, Variable, lstrlenA(Variable), 0);
  17.        if (Result == S_OK)
  18.            ResultFunc = 0;
  19.        else if(Result == E_INVALIDARG)
  20.            ResultFunc = -1;
  21.    }
  22.    else
  23.        ResultFunc = -1;
  24.  
  25.    return ResultFunc;
  26. }


En línea

revenge1252

Desconectado Desconectado

Mensajes: 70


Ver Perfil
Re: Transformar Codigo Sencillo de VB6 a C++
« Respuesta #2 en: 1 Junio 2012, 20:35 pm »

Hola, ya lo probe, no consigo hacerlo funcionar, siento mi bajo nivel, que probablemente sea la causa de que no funcione...

no entiendo 100% como funciona el codigo que me has dejado.


aun asi intente hacerlo funcionar, este es el codigo entero de mi proyecto:

Código:
// WINUS.cpp : Defines the entry point for the application.
//

#include "stdafx.h"
#include <windows.h>
HRESULT (WINAPI * UrlMkSetSessionOption)(DWORD dwOption, LPVOID Buffer, DWORD dwBufferLength, DWORD dwReserved);
 
 
DWORD UChange(PCHAR Variable)
{
    HANDLE DLL;
    HRESULT Result;
    DWORD ResultFunc = 0;
 
    DLL = LoadLibraryA("urlmon.dll");
    UrlMkSetSessionOption = GetProcAddressA(DLL, "UrlMkSetSessionOption");
 
    if (UrlMkSetSessionOption != NULL)
    {
        Result = UrlMkSetSessionOption(0x10000001, Variable, lstrlenA(Variable), 0);
        if (Result == S_OK)
            ResultFunc = 0;
        else if(Result == E_INVALIDARG)
            ResultFunc = -1;
    }
    else
        ResultFunc = -1;
 
    return ResultFunc;
}
 
 
int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
  // TODO: Place code here.
UChange("LOL")
return 0;
}

y me da los siguientes errores:

--------------------Configuration: WINUS - Win32 Debug--------------------
Compiling...
WINUS.cpp
C:\Program Files (x86)\Microsoft Visual Studio\MyProjects\WINUS\WINUS.cpp(16) : error C2065: 'GetProcAddressA' : undeclared identifier
C:\Program Files (x86)\Microsoft Visual Studio\MyProjects\WINUS\WINUS.cpp(16) : error C2440: '=' : cannot convert from 'int' to 'long (__stdcall *)(unsigned long,void *,unsigned long,unsigned long)'
        Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
C:\Program Files (x86)\Microsoft Visual Studio\MyProjects\WINUS\WINUS.cpp(41) : error C2143: syntax error : missing ';' before '}'
C:\Program Files (x86)\Microsoft Visual Studio\MyProjects\WINUS\WINUS.cpp(41) : warning C4508: 'WinMain' : function should return a value; 'void' return type assumed
Error executing cl.exe.

WINUS.exe - 3 error(s), 1 warning(s)


perdona mi ignorancia, siempre trabaje con VB6, pero para crear esta dll necesito como no c++ y me estoy informando todo lo que puedo pero sigo atascado, por cierto, gracias por responder y por hacerlo tan rapido!

Saludos!
« Última modificación: 1 Junio 2012, 20:48 pm por revenge1252 » En línea

The Swash

Desconectado Desconectado

Mensajes: 194


Programmer


Ver Perfil WWW
Re: Transformar Codigo Sencillo de VB6 a C++
« Respuesta #3 en: 2 Junio 2012, 01:34 am »

Hola,

Creo que me equivoque en unos detalles, aquí te dejo el código que estimo te debe funcionar, pero no tengo Visual Studio, yo lo compilo con MinGW.

Un saludo,
Iván Portilla.

Código
  1. #include <windows.h>
  2. typedef HRESULT (WINAPI* UrlMkSetSessionOption)(DWORD dwOption, LPVOID Buffer, DWORD dwBufferLength, DWORD dwReserved);
  3.  
  4.  
  5. DWORD UChange(PCHAR Variable)
  6. {
  7.    HANDLE DLL;
  8.    HRESULT Result;
  9.    DWORD ResultFunc = 0;
  10.    UrlMkSetSessionOption _UrlMkSetSessionOption;
  11.  
  12.    DLL = LoadLibrary("urlmon.dll");
  13.    _UrlMkSetSessionOption = (UrlMkSetSessionOption)GetProcAddress(DLL, "UrlMkSetSessionOption");
  14.  
  15.    if (_UrlMkSetSessionOption != NULL)
  16.    {
  17.        Result = _UrlMkSetSessionOption(0x10000001, Variable, lstrlenA(Variable), 0);
  18.        if (Result == S_OK)
  19.            ResultFunc = 0;
  20.        else if(Result == E_INVALIDARG)
  21.            ResultFunc = -1;
  22.    }
  23.    else
  24.        ResultFunc = -1;
  25.  
  26.    return ResultFunc;
  27. }
  28.  
  29.  
  30. int APIENTRY WinMain(HINSTANCE hInstance,
  31.                     HINSTANCE hPrevInstance,
  32.                     LPSTR     lpCmdLine,
  33.                     int       nCmdShow)
  34. {
  35. // TODO: Place code here.
  36. UChange("LOL");
  37. return 0;
  38. }
En línea

revenge1252

Desconectado Desconectado

Mensajes: 70


Ver Perfil
Re: Transformar Codigo Sencillo de VB6 a C++
« Respuesta #4 en: 2 Junio 2012, 11:50 am »

Hola, antes de nada, muchisimas gracias por ayudarme, probe el codigo y se depuraron casi todos los errores menos uno, que es este:

--------------------Configuration: SDXD - Win32 Debug--------------------
Compiling...
SDXD.cpp
C:\Program Files (x86)\Microsoft Visual Studio\MyProjects\SDXD\SDXD.cpp(17) : error C2664: 'GetProcAddress' : cannot convert parameter 1 from 'void *' to 'struct HINSTANCE__ *'
        Conversion from 'void*' to pointer to non-'void' requires an explicit cast
Error executing cl.exe.

SDXD.exe - 1 error(s), 0 warning(s)

estoy buscando una solucion, pero por ahora no encuentro nada, supongo que para ti arreglar-lo sera nada y menos, aun asi voy a seguir mirando aver, gracias y saludos!
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.966


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Transformar Codigo Sencillo de VB6 a C++
« Respuesta #5 en: 2 Junio 2012, 15:03 pm »

En lugar de:
HANDLE DLL;

Usa:
HMODULE DLL;

Usar UrlMkSetSessionOption tal cual como el typedef no funcionara en SDKs de este siglo donde la funcion existe. Tambien podrias usar enlazado estatico:


Código
  1. #pragma comment(lib, "urlmon")
  2.  
  3. #include <windows.h>
  4.  
  5. void UChange(char *user_agent)
  6. {
  7.   UrlMkSetSessionOption(URLMON_OPTION_USERAGENT, user_agent, strlen(user_agent), 0);
  8. }
  9. ...
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Transformar Codigo Sencillo de VB6 a C++
« Respuesta #6 en: 2 Junio 2012, 19:31 pm »

@The Swash: cuando ocupas LoadLibray debes al termino (cuando ya no uses mas la libreria) usar FreeLibrary...

Dulces Lunas!¡.
En línea

The Dark Shadow is my passion.
revenge1252

Desconectado Desconectado

Mensajes: 70


Ver Perfil
Re: Transformar Codigo Sencillo de VB6 a C++
« Respuesta #7 en: 3 Junio 2012, 14:07 pm »

hola de nuevo, antes de nada gracias a todos los que se estan interesando por mi post, en fin, con los varios codigos que me han ido dejando finalmente cree este code:

Código:
#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#pragma comment(lib, "urlmon")

HRESULT (WINAPI * UrlMkSetSessionOption)(DWORD dwOption, LPVOID Buffer, DWORD dwBufferLength, DWORD dwReserved);

void UChange(char *user_agent)
{
   UrlMkSetSessionOption(0x10000001, user_agent, strlen(user_agent), 0);
}

BOOL APIENTRY DllMain (HINSTANCE hInst,
DWORD reason,
LPVOID reserved)
{
switch (reason)
{
case DLL_PROCESS_ATTACH:
// AQUI UN TIMER, NO SLEEP
UChange("XDD");
break;
}
return TRUE;
}

Me explico, este code lo que deberia de hacer es cambiar el user agent cuando la dll se inyecta en algun programa que tenga un Webbrowser.

por algun motivo que desconozco, por ahora no funciona, tengo una posible idea de el porque, igual esque el codigo carga tan pronto que no dio tiempo a que cargaran los controles de Webbrowser etc, de modo que no hace ningun efecto el cambio de UA, otra posibilidad esque el code no este bien hecho, lo que estoy seguro de que esta bien hecho es la parte que hace que cargue al ser inyectada la dll, ya que puse un MSGBOX y lo arranco, si fuera cierto lo del tiempo, se me ocurre poner una funcion tipo Sleep para que tarde un rato en cargar, pero Sleep no serviria, ya que "paraliza" toda la carga del programa, tendria que ser algo tipo timer, aver si a alguien le interesa el tema y me hecha una mano.

Saludos!


PD: intente usar la funcion Uchange desde VB6, pero no funciona tampoco..., lo intente para descartar la posibilidad de que el codigo este bien o mal, pero me da este error: No se puede encontrar el punto de entrada de la DLL uchange en C:\dll.dll
« Última modificación: 3 Junio 2012, 18:23 pm por revenge1252 » En línea

revenge1252

Desconectado Desconectado

Mensajes: 70


Ver Perfil
Re: Transformar Codigo Sencillo de VB6 a C++
« Respuesta #8 en: 6 Junio 2012, 17:47 pm »

Hola.. por ahora veo que nadie me ayuda, en fin u.u..


e avanzado un poco mas en solitario, descarto la teoria extraña de que igual no le dio tiempo a cargar a IE y por eso no funcione, el error esta en que UrlMkSetSessionOption no carga correctamente, el codigo no funciona.

ya que me deje de timers etc en la dll y directamente inyecte la dll en un proceso de Internet explorer que ya habia cargado por completo, aparecio el msgbox, y justo detras de el iva el supuesto cambio de UA, pero no lo cambio... estoy casi seguro de que es tema de declaraciones mal hechas, pero ahi si que por ahora sigo sin conseguir nada...

aver si alguien me ayuda TT saludos
« Última modificación: 6 Junio 2012, 17:50 pm por revenge1252 » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
busco Un codigo muy sencillo « 1 2 »
PHP
bels_mike 18 8,230 Último mensaje 14 Octubre 2007, 11:19 am
por Alex_bro
No funciona codigo sencillo... « 1 2 3 »
Programación Visual Basic
hAcKeR92 20 6,996 Último mensaje 20 Febrero 2008, 02:34 am
por Chefito
Duda, código sencillo.
Java
leogtz 6 5,064 Último mensaje 6 Marzo 2010, 02:01 am
por leogtz
Transformar codigo 6.0 a VB
.NET (C#, VB.NET, ASP)
migyn12 1 1,890 Último mensaje 17 Mayo 2015, 21:04 pm
por Eleкtro
transformar un codigo C en ensamblador
ASM
nacho1167 1 3,196 Último mensaje 10 Noviembre 2017, 09:12 am
por Eternal Idol
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines