Không phải là em phủ nhận công lao của những người đã viết tut , nhưng ý của em ở đây là tut không được nhiều và các cao thủ có lẽ là cũng chưa share hết kiến thức cho mọi người.. Bạn sẽ
Trang 1mov eax,dtc
add [esi].dtC,eax
mov eax,dtd
add [esi].dtD,eax
add edi,64
sub edx,64
jnz hashloop
; phase IV · results
mov ecx,4
@@: mov eax,dword ptr [esi]
xchg al,ah
rol eax,16
xchg al,ah
mov dword ptr [esi],eax
add esi,4
loop @b
mov esi,ptMD5Result
invoke wsprintfA,ptBuffer,addr
szMD5Format,[esi].dtA,[esi].dtB,[esi].dtC,[esi].dtD
ret
procMD5hash endp
FF proc uses ebx ecx,dta,dtb,dtc,dtd,x,s:byte,t ; a = b + ((a + F(b,c,d) + x + t) << s )
mov eax,dtb
mov ebx,dtc
mov ecx,dtd
; F(x,y,z) = (x and y) or ((not x) and z)
Trang 2and ebx,eax
not eax
and eax,ecx
or eax,ebx
add eax,dta
add eax,x
add eax,t
mov cl,s
rol eax,cl
add eax,dtb
ret
FF endp
GG proc uses ebx ecx,dta,dtb,dtc,dtd,x,s:byte,t ; a = b + ((a + G(b,c,d) + x + t) << s)
mov eax,dtb
mov ebx,dtc
mov ecx,dtd
; G(x,y,z) = (x and z) or (y and (not z))
and eax,ecx
not ecx
and ecx,ebx
or eax,ecx
add eax,dta
add eax,x
add eax,t
mov cl,s
rol eax,cl
add eax,dtb
Trang 3ret
GG endp
HH proc uses ebx ecx,dta,dtb,dtc,dtd,x,s:byte,t ; a = b + ((a + H(b,c,d) + x + t) << s)
mov eax,dtb
mov ebx,dtc
mov ecx,dtd
; H(x,y,z) = x xor y xor z
xor eax,ebx
xor eax,ecx
add eax,dta
add eax,x
add eax,t
mov cl,s
rol eax,cl
add eax,dtb
ret
HH endp
II proc uses ebx ecx,dta,dtb,dtc,dtd,x,s:byte,t ; a = b + ((a + I(b,c,d) + x + t) << s)
mov eax,dtb
mov ebx,dtc
mov ecx,dtd
; I(x,y,z) = y xor (x or (not z))
not ecx
or eax,ecx
xor eax,ebx
add eax,dta
Trang 4add eax,x
add eax,t
mov cl,s
rol eax,cl
add eax,dtb
ret
II endp
end start
Bạn hảy tạo file !!com.bat như sau:
ml /c /coff /Cp ASMmd5hasher.asm
rc RCmd5hasher.rc
link /subsystem:windows /libpath:c:\masm32\lib ASMmd5hasher.obj
RCmd5hasher.res
@del ASMmd5hasher.obj
@del md5hasher.exe
@del RCmd5hasher.res
@ren ASMmd5hasher.exe md5hasher.exe
File RCmd5hasher.rc như sau:
#include "/masm32/include/resource.h"
100 DIALOGEX MOVEABLE PURE LOADONCALL DISCARDABLE 117,
108, 208, 39, 0
STYLE DS_SYSMODAL | 0x0004 | DS_CENTER | WS_CAPTION |
WS_SYSMENU | WS_VISIBLE | WS_OVERLAPPED
CAPTION "md5 hasher"
FONT 8, "MS Sans Serif", 700, 0 /*FALSE*/
BEGIN
EDITTEXT 102, 24,2,182,12, ES_AUTOHSCROLL | ES_LEFT, , 0
EDITTEXT 103, 24,14,182,12, ES_AUTOHSCROLL | ES_READONLY | ES_LEFT, , 0
PUSHBUTTON "&about", 101, 168,26,38,13, 0, , 0
LTEXT "text :", -1, 6,3,17,9, SS_LEFT, , 0
Trang 5LTEXT "hash :", -1, 2,15,21,8, SS_LEFT, , 0
END
200 ICON MOVEABLE PURE LOADONCALL DISCARDABLE
"ICOMD5HASHER.ICO"
Đó là 3 file cần thiết để tạo ra file exe
Traslated : MD5 Hash Cracking !
Lời nói đầu :
Hầu hết tâm lý của mọi người là rất ngại đọc tut bằng tiếng Anh (vì nó không phải
là ngôn ngữ mẹ đẻ của chúng ta mà ! :tongue: ) Nhưng lại ngặt một nỗi , tut tiếng Việt thì lại không sâu và nhiều bằng các tut nước ngoài , vì các Cracker VN đâu có chịu ngồi viết tut để share knowledge với mọi người , chỉ mình mình khám phá , mình mình biết , và mình mình enjoy Không phải là em phủ nhận công lao của những người đã viết tut , nhưng ý của em ở đây là tut không được nhiều và các cao thủ có lẽ là cũng chưa share hết kiến thức cho mọi người Em nói vậy mong các cao thủ đừng giận và quan tâm giùm em :wassat:
Hôm qua em online , thấy tut của chị Nini cũng khá hay nên em xin cáo lỗi chị Nini (cùng anh Còm :) ), mạn phép translate ra cho mọi người cùng học
Hihi… Em cũng rất ngại đọc tut bằng Tiếng Anh Đọc nhiều mệt muốn xỉu ! :happy: Nhưng sau khi xỉu rồi thì thấy knowledge mà mình vừa thu được cũng đáng để lần sau lại xỉu tiếp đây chứ ! Hihiiiiiiii… :)
Author : Kevin
Translated by : Hoadongnoi
Date : 04/11/2004
Tôi không nhận thấy rằng chương trình MD5 của Slarty có thể trở thành một vấn
đề cho mọi người dễ hiểu Giả sử bạn đang sử dụng Windows , mở Windows Brinary (thanks to Enjoi ) Bạn sẽ thấy một prompt như dưới đây :
Code:
MD5 Cracker by Slarty
Windows Brinary by Enjoi
Cách sử dụng : h <plaintext> - tạo hash
Trang 6Cách sử dụng : c <hash> <độ dài tối thiểu > <độ dài tối đa> - cố gắng để Crack Điều này đúng hơn là không phức tạp , Nhưng để cho những điều đó trở nên sáng
tỏ hơn cho những ai chưa hiểu , tôi sẽ break nó xuống cho bạn
Flag h sẽ chỉ cho chương trình biết cách để tạo ra một MD5 hash của một từ
plaintext mà bạn đã chỉ định ở trên Ví dụ : nếu bạn muốn MD5 hash tạo ra một giới hạn chiều dài “password” bạn sẽ phải gõ như sau :
Code:
C:\Documents and Settings\Owner>"C:\Documents and
Settings\Owner\Desktop\Tutoria
ls\Programs\md5.exe" h password
5f4dcc3b5aa765d61d8327deb882cf99
Như các bạn đã thấy ở trên 5f4dcc3b5aa765d61d8327deb882cf99 là MD5 của bạn trong term “password”
Bây giờ hãy nói là bạn muốn crack một MD5 hash Để thực hiện được điều này , chúng ta sẽ sử dụng một Flag “c” (c để crack … not cocaine ) Cú pháp của một lệnh để crack chương trình này như sau :
Code:
md5.exe c <hash> <độ dài tối thiểu> <độ dài tối đa>
Hiển nhiên , bạn sẽ thay thế : <hash> cho MD5 mà bạn muốn crack , <minlen> cho
độ dài tối thiểu của ký tự của chương trình mà bạn cần crack và <maxlen> cũng cho độ dài tối đa của chương trình đó Chiều cao <maxlen> , chiều dài là những là những cái mà chương trình sẽ dùng để chạy Về cơ bản , bạn sẽ tự hỏi độ dài , độ ngắn của một password là như thế nào ?
Ví dụ để minh hoạ cho điều này : chúng ta sẽ sử dụng một shorter term (cái này dùng cho mục đích là crack time ) Term mà chúng ta sẽ sử dụng là “pass” (ở trên , trong MD5 nó là : “1a1dc91c907325c69271ddf0c944bc72”) Cú pháp cho câu lệnh này như sau :
Code:
C:\Documents and Settings\Owner>"C:\Documents and
Settings\Owner\Desktop\Tutoria
ls\Programs\md5.exe" c 1a1dc91c907325c69271ddf0c944bc72 1 4
Vâng , bây giờ thì chúng ta đã biết được chính xác chiều dài của một từ khoá là gì Tôi hoàn toàn có thể đưa 4 vào như là một độ dài lớn nhất Tuy nhiên bạn sẽ
không thể biết được chiều dài của pass là gì , nó sẽ an toàn hơn khi giả thiết một maxlen là 12 hoặc một cái gì đó tương tự cũng thuộc loại này ….Mặc dù bạn luôn
Trang 7đặt chiều dài tối thiểu của bạn bằng 1 :D
Trong khoảng thời gian ¼ giây bạn đã crack xong Và bạn sẽ nhìn thấy nó như sau :
Code:
Bạn đã nhập vào :1a1dc91c907325c69271ddf0c944bc72
Ký tự trắng :36
Bạn đã nhập vào :1a1dc91c907325c69271ddf0c944bc72
Ký tự trắng :36
Bạn đã nhập vào :1a1dc91c907325c69271ddf0c944bc72
Ký tự trắng :36
Bạn đã nhập vào :1a1dc91c907325c69271ddf0c944bc72
Ký tự trắng :36
GOT IT after only 911140 guesses!
pass
C:\Documents and Settings\Owner>
Một khi cracker MD5 hash không làm dictionary bị tấn công , hoặc bất cứ cái gì như vậy Nó đơn giản là đang ước chừng chuỗi random này cho đến khi nó tìm thấy một cái thích hợp :tongue: :D
Nó phụ thuộc vào cái strength của pass và tốc độ của bộ xử lý của bạn Để crack được nó bạn có thể mất nhiều phút , nhiều giờ , nhiều ngày , nhiều tuần, nhiều tháng , hoặc nhiều năm :)
Phù ! Xong ! :((
Enjoy ! :)
Hoadongnoi(REA)
MD5 Source Code
Code:
#ifndef _MD5_H
#define _MD5_H
#ifndef uint8
#define uint8 unsigned char
#endif
#ifndef uint32
Trang 8#define uint32 unsigned long int
#endif
typedef struct
{
uint32 total[2];
uint32 state[4];
uint8 buffer[64];
}
md5_context;
void md5_starts( md5_context *ctx );
void md5_update( md5_context *ctx, uint8 *input, uint32 length );
void md5_finish( md5_context *ctx, uint8 digest[16] );
#endif /* md5.h */
Code:
/*
* RFC 1321 compliant MD5 implementation
*
* Copyright (C) 2001-2003 Christophe Devine
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE See the
* GNU General Public License for more details
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#include <string.h>
Trang 9#include "md5.h"
#define GET_UINT32(n,b,i) \
{ \
(n) = ( (uint32) (b)[(i) ] ) \
| ( (uint32) (b)[(i) + 1] << 8 ) \
| ( (uint32) (b)[(i) + 2] << 16 ) \
| ( (uint32) (b)[(i) + 3] << 24 ); \
}
#define PUT_UINT32(n,b,i) \
{ \
(b)[(i) ] = (uint8) ( (n) ); \
(b)[(i) + 1] = (uint8) ( (n) >> 8 ); \
(b)[(i) + 2] = (uint8) ( (n) >> 16 ); \
(b)[(i) + 3] = (uint8) ( (n) >> 24 ); \
}
void md5_starts( md5_context *ctx )
{
ctx->total[0] = 0;
ctx->total[1] = 0;
ctx->state[0] = 0x67452301;
ctx->state[1] = 0xEFCDAB89;
ctx->state[2] = 0x98BADCFE;
ctx->state[3] = 0x10325476;
}
void md5_process( md5_context *ctx, uint8 data[64] ) {
uint32 X[16], A, B, C, D;
GET_UINT32( X[0], data, 0 );
GET_UINT32( X[1], data, 4 );
GET_UINT32( X[2], data, 8 );
GET_UINT32( X[3], data, 12 );
GET_UINT32( X[4], data, 16 );
Trang 10GET_UINT32( X[5], data, 20 );
GET_UINT32( X[6], data, 24 );
GET_UINT32( X[7], data, 28 );
GET_UINT32( X[8], data, 32 );
GET_UINT32( X[9], data, 36 );
GET_UINT32( X[10], data, 40 );
GET_UINT32( X[11], data, 44 );
GET_UINT32( X[12], data, 48 );
GET_UINT32( X[13], data, 52 );
GET_UINT32( X[14], data, 56 );
GET_UINT32( X[15], data, 60 );
#define S(x,n) ((x << n) | ((x & 0xFFFFFFFF) >> (32 - n)))
#define P(a,b,c,d,k,s,t) \
{ \
a += F(b,c,d) + X[k] + t; a = S(a,s) + b; \
}
A = ctx->state[0];
B = ctx->state[1];
C = ctx->state[2];
D = ctx->state[3];
#define F(x,y,z) (z ^ (x & (y ^ z)))
P( A, B, C, D, 0, 7, 0xD76AA478 );
P( D, A, B, C, 1, 12, 0xE8C7B756 );
P( C, D, A, B, 2, 17, 0x242070DB );
P( B, C, D, A, 3, 22, 0xC1BDCEEE );
P( A, B, C, D, 4, 7, 0xF57C0FAF );
P( D, A, B, C, 5, 12, 0x4787C62A );
P( C, D, A, B, 6, 17, 0xA8304613 );
P( B, C, D, A, 7, 22, 0xFD469501 );
P( A, B, C, D, 8, 7, 0x698098D8 );
P( D, A, B, C, 9, 12, 0x8B44F7AF );
P( C, D, A, B, 10, 17, 0xFFFF5BB1 );
P( B, C, D, A, 11, 22, 0x895CD7BE );
P( A, B, C, D, 12, 7, 0x6B901122 );