Tải bản đầy đủ (.pdf) (5 trang)

Cracker Handbook 1.0 part 194 potx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (81.82 KB, 5 trang )

OKI,

- Do tôi chỉ biết mỗi lập trình VC++, nên tôi chỉ đề cập đến ngôn ngữ này thui .
Các bác nào biết các lập trình trên các ngôn ngữ khác có thể POST lên cho mọi
nguời tham khảo .

- Đối với VC++, thì đã có sẵn thư viện của MD5 ( tôi có đính kèm ), các bác chỉ
việc copy 2 file này và cho vào thư mục ( theo như giả định ) : C:\Program
Files\Microsoft Visual Studio\VC98\Include\Md5\ ( ở đây tôi tạo một thư mục
Md5 và PASTE 2 file này vào .

- Khi sử dụng thì ta gọi 2 File này ra bằng cách khai báo :

#include "Md5\md5.c"

- Và trong Source của KeyGen ta viết thế này :
Code:
md5_context md5;

static char reaName[64]={0};
char reaSerial[64]={0};
unsigned char reaMD5String[64]={0};
char reaTemp[10]={0};

int LenUser=0;
int i=0, j=0;

LenUser=GetDlgItemText(IDC_Name,reaName,128);

if (LenUser < 1 || LenUser > 64)
{


MessageBox(" ===== Your name atleast 1 chart =====
\n\n ===== But not over than 64 charts ===== ","Hey !!
Please input your name again !! ");
}
else
{
md5_starts(&md5);
md5_update(&md5,(uint8 *) reaName,LenUser);
md5_finish(&md5,reaMD5String);

i=0; j=0;
while ( i < 16 )
{
wsprintf(reaTemp,"%02x", (reaMD5String[i]&0xFF));
reaSerial[j] = reaTemp[0];
reaSerial[j+1] = reaTemp[1];
j+=2;
i++;
}

SetDlgItemText(IDC_Serial,reaSerial);
}
- Nhân tiện tôi nói thêm, đối với lập trình VB, khi xem xét đoạn code
MD5Start hay MD5Init thì ta không thể thấy ngay các giá trị ban đầu, mà
đây là cả một đoạn FUNTION , và để tìm đến được địa chỉ lưu các giá trị
MD5Start hay MD5Init ta cần nhìn vào cửa sổ STACK trong Olly .

- Trong các Link bác KIENMANOWAR giởi thiệu trong BOX CRACKER,
thì link : giởi thiệu về soft được viết bằng VB và
sử dụng thuật toán MD5 . CÁc bác có thể tham khảo nó . Nó PACK ở một

dạng lạ, nhưng PEiD có thể UnPACK hoàn chỉnh .Thằng này khá đơn giản
nhưng hơi đểu . CÁc bác làm quen MD5 rồi hẵng làm thử em này . :D (joke)

Moonbaby

vì mình mới tham gia vào reaonline.net nên không biết bác nào đã có mã nguồn
của MD5 chưa nhưng thừa còn hơn thiếu mình xin mạn phép giới thiệu một mã
nguồn của MD5 :spam_lase
code:
Code:
MD5.h
#ifndef _MD5_H
#define _MD5_H

#ifndef uint8
#define uint8 unsigned char
#endif

#ifndef uint32
#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 */

MD5.c

#include <string.h>

#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 );
GET_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 );
P( D, A, B, C, 13, 12, 0xFD987193 );
P( C, D, A, B, 14, 17, 0xA679438E );
P( B, C, D, A, 15, 22, 0x49B40821 );


#undef F

#define F(x,y,z) (y ^ (z & (x ^ y)))

P( A, B, C, D, 1, 5, 0xF61E2562 );
P( D, A, B, C, 6, 9, 0xC040B340 );
P( C, D, A, B, 11, 14, 0x265E5A51 );
P( B, C, D, A, 0, 20, 0xE9B6C7AA );
P( A, B, C, D, 5, 5, 0xD62F105D );
P( D, A, B, C, 10, 9, 0x02441453 );
P( C, D, A, B, 15, 14, 0xD8A1E681 );

×