Hola, estoy queriendo resumir y usar Invoke o CAbN (Call Api by Name) en el siguiente algoritmo de encriptacion basicamente porque es bastante rapido.
http://pastebin.com/R9eXK9gX
No tuve ningun problema en pasar todas funciones, pero me he trabado en esta parte (CryptDecrypt y CryptEncrypt)
Private Declare Function CryptEncrypt Lib "advapi32.dll" (ByVal hKey As Long, ByVal hHash As Long, ByVal Final As Long, ByVal dwFlags As Long, ByVal pbData As String, ByRef pdwDataLen As Long, ByVal dwBufLen As Long) As Long
Private Declare Function CryptDecrypt Lib "advapi32.dll" (ByVal hKey As Long, ByVal hHash As Long, ByVal Final As Long, ByVal dwFlags As Long, ByVal pbData As String, ByRef pdwDataLen As Long) As Long
'Encrypt or decrypt depending on the Encrypt parameter
lLength = Len(Text)
If (Encrypt) Then
If (CryptEncrypt(hKey, 0, 1, 0, Text, lLength, lLength) = 0) Then '<--- DUDA! No se como pasarlo a CAbN
Call Err.Raise(vbObjectError, , "Error during CryptEncrypt.")
End If
Else
If (CryptDecrypt(hKey, 0, 1, 0, Text, lLength) = 0) Then '<--- DUDA!
Call Err.Raise(vbObjectError, , "Error during CryptDecrypt.")
End If
End If
Agradeceria que alguien me explique como hacer para usar el CAbN en esos dos casos.
Supongo que voy a poner el codigo final (con todas las funciones pasadas a CAbN) cuando resuelva esta parte.
No se mucho del tema, pero tenes estos enlaces
Call API By Name Usin vtable Patch - cobein (http://foro.elhacker.net/programacion_vb/call_api_by_name_usin_vtable_patch-t226177.0.html)
Universal dll function caller, CDECL & stdcall with .bas/.cls/.frm/.ctl callbacks - Paul Caton (http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=69718&lngWId=-1)
mZombieInvoke – Native VB6 Invoke :) - cobein (http://cobein.com/wp/?p=567)
de todas formas podes pasar por Análisis y diseño de malware (http://foro.elhacker.net/analisis_y_diseno_de_malware-b17.0/)
Gracias por responder, pero ese no es el problema, se como usar Invoke o Call Api by Name.
Mi problema es que no se por qué no puedo hacer andar esas dos APIS con Invoke:
CryptEncrypt y CryptDecrypt , ambas de "advapi32.dll"
¿Alguien sabe como invokar esas dos funciones para que funcione en el código que puse ahi arriba en el PasteBin?
Pero es que no hay "un solo CallApiByName", cuál estas usando vos?
Aunque todos por lo general aceptan punteros o valores enteros como parametros. Asi que si tenes que pasar algo que no sea de tipo numero entero. Hacelo con VarPtr, ObjPtr o StrPtr segun corresponda. Cuando uses StrPtr, recuerda que este te devuelve un puntero a un string Unicode, así que la llamada debe ser a la version Unicode de la función o sino transformar el string a Array y de ahí pasarlo con VarPtr(miString(0))
Proba con el de Paul Caton que es muy probable que te funcione, despues vas comentando
Wow!, por un segundo pensé que me había equivocado de Foro...
Gracias por responder @raul338 estoy probando lo que me decís.
Edit: Dejo el Code completo solo por si alguien quiere terminarlo así lo comparte
Están las líneas originales y los comments:
http://pastebin.com/rNg0v5hN
Serían esas dos líneas que marqué en mi comentario anterior lo que fataría invokar.
Uso este Invoke:
http://cobein.com/wp/?p=567