http://bbs.pediy.com/showthread.php?t=43349
PEDIY找到这篇帖子 里面有个Crypto Hash 模块
想在VB里用ThunderVB 控件用它的函数 对汇编不大熟悉 弄了半天 都没弄好
不知道问题出在哪里 请知道的朋友帮忙看看 谢谢
C里面调用是成功的 代码如下
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "cryptohash.h"
#pragma comment(linker,"/DEFAULTLIB:cryptohash.lib")
SHA1String(char *sz)
{
char szSHA1[SHA1_DIGESTSIZE*2+2];
SHA1Init();
SHA1Update((BYTE *)sz,strlen(sz));
HexEncode(SHA1Final(),SHA1_DIGESTSIZE,(BYTE *)szSHA1);
puts((char *)&szSHA1);
}
int main(int argc,char *argv[])
{
SHA1String("a");
return getchar();
}
这是这3个函数C的声明
BYTE * __stdcall SHA1Init ();
__stdcall SHA1Update ( BYTE *lpBuffer,DWORD dwBufLen );
BYTE * __stdcall SHA1Final ();
在VB下 用ThunderVB控件 想用汇编调用 弄了半天 不知道什么原因vb_SHA1Final返回数每次都是一样的 应该是汇编返回语句写错了 ..对汇编不太懂 请知道的朋友 帮忙看下 谢谢
Option Explicit
Private Sub ASM_DEF()
'#asm'
'#asm' includelib E:\masm32\LIB\cryptohash.lib
'#asm' SHA1Init PROTO STDCALL
'#asm' SHA1Update PROTO STDCALL :dword, :dword
'#asm' SHA1Final PROTO STDCALL
'#asm'
End Sub
Public Sub vb_SHA1Init()
'#asm'
'#asm' INVOKE SHA1Init
'#asm'
End Sub
Public Function vb_SHA1Update(ByVal lpBuffer As Long, ByVal dwBufLen As Long)
'#asm'
'#asm' mov ecx, [esp+4];lpBuffer
'#asm' mov edx, [esp+8];dwBufLen
'#asm'
'#asm' INVOKE SHA1Update,ecx,edx
'#asm'
End Function
Public Function vb_SHA1Final() As Long
'#asm'
'#asm' INVOKE SHA1Final
'#asm' ret 4
'#asm'
End Function
窗体代码
Option Explicit
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByVal Destination As Long, ByVal Source As Long, ByVal Length As Long)
Private Sub Form_Load()
Dim i As Long
Dim buf(19) As Byte
Dim ret As String
vb_SHA1Init
vb_SHA1Update i, 1
CopyMemory VarPtr(buf(0)), vb_SHA1Final, 20
For i = 0 To 19
ret = ret & Right$("0" & Hex$(buf(i)), 2)
Next
MsgBox ret
End Sub
这个是ThunderVB的下载地址
http://bbs.pediy.com/showthread.php?t=67090
[课程]Linux pwn 探索篇!