[PREGUNTA] Convertir una declaracion API de C# a VB6 (problema con punteros)

Iniciado por el_c0c0, 16 Marzo 2012, 19:01 PM

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

el_c0c0

Cita de: RHL en 19 Marzo 2012, 02:20 AM
Es raro entonces es como decir que la funcion esta mal porque el RETN forma parte de ella  :silbar:
pues los POP por algo deben estar no seguramente usaba registros o variables locales...
cuanto era el valor de RETN?

Ninguno. es un RETN solo. Ademas, el IDA decia bp-based frame... por ende, es CDECL.
Era un poco ambiguo para mi (primera vez que me pasa esto, sin que el VB diga lo de "Convencion de llamadas no valido").

En fin, ahora resta descubrir la declaracion de una funcion que exporta, pero no esta declarada en el codigo de C#.
'-     coco
"Te voy a romper el orto"- Las hemorroides

x64core

Cita de: el_c0c0 en 19 Marzo 2012, 02:22 AM
Ninguno. es un RETN solo. Ademas, el IDA decia bp-based frame... por ende, es CDECL.
Era un poco ambiguo para mi (primera vez que me pasa esto, sin que el VB diga lo de "Convencion de llamadas no valido").

En fin, ahora resta descubrir la declaracion de una funcion que exporta, pero no esta declarada en el codigo de C#.

ningun valor en el RETN? se supone que debe de haber un RETN 04h
que es el puntero al array... sin poder ver codigo ni nada a lo mucho que llega uno es adivinando :P
prueba modificando a RETN 04h... Esperemos a que dice Karcrack :)
muestra el desemsamblado

el_c0c0

Cita de: RHL en 19 Marzo 2012, 02:25 AM
ningun valor en el RETN? se supone que debe de haber un RETN 04h
que es el puntero al array... sin poder ver codigo ni nada a lo mucho que llega uno es adivinando :P
prueba modificando a RETN 04h... Esperemos a que dice Karcrack :)
muestra el desemsamblado

Nop. Como es CDECL, el RETN no tiene nada... es decir, si uno prepara el stack previo a la llamada, uno mismo debe hacer pop por cada parametro. Entonces la DLL no los quita del stack al volver...

En fin, el desensamblado (parcial, solo de la funcion que no se si estoy pasandole bien los argumentos) esta aqui:
http://pastebin.com/yb5Jeu7y

No esta entero. Pero es igual a la funcion por la cual cree el post.

La dll por si te interesa, esta aca
http://www.mediafire.com/?c8movap40k83qra

Si no estan instalados los drivers, va a tirar error al llamar a cualquier funcion, ya que no se carga siquiera.
'-     coco
"Te voy a romper el orto"- Las hemorroides

x64core

Entonces no es stdcall se supone que si era stdcall, Bueno revisando un poco la funcion yo encontre
el codigo siguiente, se supone que es llamar a la funcion ReadDataFromTPM ...
El Codigo del pastebin que subiste es el de la funcion ReadCertFromTPM...


X_100033F0:   push ebp
X_100033F1:   mov ebp, esp
X_100033F3:   push -0x1
X_100033F5:   push 0x1000c3b8
X_100033FA:   mov eax, fs:[0x0]
X_10003400:   push eax
X_10003401:   sub esp, 0x8
X_10003404:   push ebx
X_10003405:   push esi
X_10003406:   push edi
X_10003407:   mov eax, [0x1001001c]
X_1000340C:   xor eax, ebp
X_1000340E:   push eax
X_1000340F:   lea eax, [ebp-0xc]
X_10003412:   mov fs:[0x0], eax
X_10003418:   mov [ebp-0x10], esp
X_1000341B:   mov esi, [ebp+0x8]
X_1000341E:   xor ebx, ebx
X_10003420:   cmp esi, ebx
X_10003422:   jz 0x10003463
X_10003424:   push 0x18
X_10003426:   mov [ebp-0x4], ebx
X_10003429:   call 0x100036a0
X_1000342E:   add esp, 0x4
X_10003431:   cmp eax, ebx
X_10003433:   mov [ebp-0x14], eax
X_10003436:   jz 0x10003463
X_10003438:   lea ecx, [ebp+0xb]
X_1000343B:   call 0x10002470
X_10003440:   lea eax, [ebp-0x14]
X_10003443:   push eax
X_10003444:   push 0x18
X_10003446:   push 0x3
X_10003448:   lea ecx, [ebp+0xb]
X_1000344B:   mov byte [ebp-0x4], 0x1
X_1000344F:   call 0x100026e0
X_10003454:   cmp eax, ebx
X_10003456:   mov [ebp-0x4], bl
X_10003459:   jz 0x10003478
X_1000345B:   lea ecx, [ebp+0xb]
X_1000345E:   call 0x10002480
X_10003463:   or eax, -0x1
X_10003466:   mov ecx, [ebp-0xc]
X_10003469:   mov fs:[0x0], ecx
X_10003470:   pop ecx
X_10003471:   pop edi
X_10003472:   pop esi
X_10003473:   pop ebx
X_10003474:   mov esp, ebp
X_10003476:   pop ebp
X_10003477:   ret


el parametro se recupera aquí:
X_1000341B:   mov esi, [ebp+0x8] sino me equivoco :P
se tendria que depurar para ver adonde se pierde la pila

ED: bueno igual ahora que releo los post  :xD entonces el problema era la convecion  

el_c0c0

si, con cobein habiamos visteo que al final era cdecl por eso mismo.  es decir que con ReadDataFromTPM ya estamos listos (y funcionando).

Pero en el pastebin esta OTRA funcion, que es una que NO se cuantos parametros tiene. Teoricamente es 1 solo, un puntero a un array, pero no le cambia ningun byte. Estamos hablando de ReadCertFromTPM.

saludos
'-     coco
"Te voy a romper el orto"- Las hemorroides