http://www.uushare.com/user/unwake/file/1401123
这个静态库是汇编写的。比较小巧吧。
lib为库文件
inc为ASM头文件
h为C/C++头文件
里面分别附了ASM和C/C++的例子。C/C++是命令行接收字符串进行MD5,ASM是打开文件进行MD5。
C/C++用法
#include<iostream.h>
#include<string.h>
#include"MD5Lib.h"
void main()
{
char temp[17] ;
cin>>temp;
int len=strlen(temp);
MD5Init();
MD5Update(temp,len);
MD5Final(temp);
cout<<temp;
cin>>temp;
}
ASM用法
.386
.model flat, stdcall ;32 bit memory model
option casemap :none ;case sensitive
include windows.inc
include kernel32.inc
include user32.inc
include Comctl32.inc
include shell32.inc
include comdlg32.inc
includelib comdlg32.lib
includelib kernel32.lib
includelib user32.lib
includelib Comctl32.lib
includelib shell32.lib
include MD5Lib.inc
includelib MD5Lib.lib
;#########################################################################
.data?
x db 33 dup(?)
hInstance dd ?
buffer db 512 dup(?)
hFile dd ?
hMapping dd ?
pMapping dd ?
ddFileSize dd ?
.data
dbAppName db "Unwake Stuido"
ofn OPENFILENAME <>
.code
start :
invoke GetModuleHandle,NULL
mov hInstance,eax
mov ofn.lStructSize,SIZEOF ofn
mov ofn.lpstrFile, OFFSET buffer
mov ofn.nMaxFile,512
mov ofn.Flags, OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST or OFN_LONGNAMES or OFN_EXPLORER or OFN_HIDEREADONLY
invoke GetOpenFileName, ADDR ofn
.if eax==TRUE
invoke CreateFile, addr buffer, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL
.if eax!=INVALID_HANDLE_VALUE
mov hFile, eax
invoke CreateFileMapping, hFile, NULL, PAGE_READONLY,0,0,0
.if eax!=NULL
mov hMapping, eax
invoke MapViewOfFile,hMapping,FILE_MAP_READ,0,0,0
.if eax!=NULL
mov pMapping,eax
invoke GetFileSize,hFile,0
mov ddFileSize,eax
call MD5Init
invoke MD5Update,pMapping,ddFileSize
invoke MD5Final,addr x
invoke MessageBox,0,addr x,addr x,MB_OK
.endif
.endif
.endif
.endif
invoke ExitProcess,0
end start
注意,在用C/C++时,一定要在链接时指定LIB库文件,不然,会找不到链接符号。
[课程]Linux pwn 探索篇!