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

Hacker Professional Ebook part 130 pdf

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 (124.22 KB, 6 trang )


Vậy thuật toán của giải thuật của chúng ta bây giờ là :
Quote:
While (byte string is not exhausted)
Begin
Top = top_byte of register ;
Register = Register shifted 8 bits left ORred with a new byte from string ;
Register = Register XORred by value from precomputedTable at position Top ;
End

The direct Table Algorithm

Giải thuật đã được nêu trong phần trên có thể được tối ưu . Các byte từ byte string
không cần phải dịch chuyển qua tòan bộ thanh ghi trước khi chúng được sử dụng.
Với giải thuật mới này chúng ta có thể XOR một cách trực tiếp một byte từ một
byte string với byte đã được dịch chuyển ra ngoài thanh ghi . Kết quả sẽ trỏ tới một
giá trị trong bảng đã được tính từ trước mà sẽ đựơc đem XOR với thanh ghi .
Tôi cũng không biết được một cách chính xác rằng tại sao chúng đều cho ra cùng
một kết quả , nhưng nó lại có một thuận lợi rất lớn là bạn sẽ không phải thêm các
bít hoặc byte 0 vào byte string của bạn. (if you know why, pleaz tell me :)
Hãy hình dung về giải thuật :

&.dnm=a05f.jpg


Kết thúc nốt phần I của Tut này :

The 'reflected' direct Table Algorithm :

Để làm cho mọi thứ trở nên phức tạp hơn có một phiên bản ‘reflected’ của chính
giải thuật này.Một Reflected value/register là giá trị mà các bít được trao đổi xung


quanh vị chính giữa. Lấy vị dụ 0111011001 chính là giá trị reflection của
1001101110 .

Điều này được nêu ra bời vì UART (chip that performs serial IO) nó gửi từng byte
với bit đầu tiên có ý nghĩa ít nhất và bít cuối cùng có ý nghĩa lớn nhất (this is the
reverse of the normal situation.)
Do đó tất cả các byte khác nữa cũng được reflected , thay vì việc phải reflecting
từng byte trước khi xử lý . Lợi ích của quá trình này là nó cho ta một đoạn code
ngắn gọn, cô đọng hơn trong quá trình thi hành. Vì vậy trong quá trình tính toán
table , các bit được dịch sang bên phải và poly thì được reflected. Còn trong việc
tính toán CRC thì thanh ghi được dịch sang bên phải (of course) và
reflected table được sử dụng. Minh họa :

2573.jpg<br />

Some implementations in Assembly :

Để giải quyết cho tất cả những gì đã đề cập ở trên sau đây là thông tin đầy đủ về
CRC-32 :

Name : "CRC-32"
Width : 32
Poly : 04C11DB7
Initial value : FFFFFFFF
Reflected : True
XOR out with : FFFFFFFF

Thêm vào đó là thông tin về CRC-16 cho những ai muốn tìm hiểu thêm

Name : "CRC-16"

Width : 16
Poly : 8005
Initial value : 0000
Reflected : True
XOR out with : 0000

‘XOR out with’ là giá trị mà đã được XOR với giá trị cuối cùng của thanh ghi
trước khi chúng ta có được kết quả cuối cùng là CRC. Đó cũng chính là việc
'reversed' CRC poly's nhưng chúng không thích hợp trong bài viết này . Để làm
việc với assembly tôi sử dụng 32 bit code trong môi trường DOS 16 bit , vì vậy
bạn sẽ thấy sự trộn lận của 32 bit code và 16 bit code nhưng cũng rất dễ dàng để
convert nó hoàn toàn sang 32 bit code. Chú ý rằng đoạn code bằng assembly này
đã được test rất kỹ để sao cho nó hoạt động chính xác nhất.Đoạn code này cũng có
thể được chuyển hóa sang C hoặc Java. Ok sau đây là đoạn code bằng hợp ngữ
dùng để tính toán CRC-32 table :
Code:
xor ebx, ebx ;ebx=0, because it will be used whole as pointer
InitTableLoop:
xor eax, eax ;eax=0 for new entry
mov al, bl ;lowest 8 bits of ebx are copied into lowest 8 bits of eax

;generate entry
xor cx, cx
entryLoop:
test eax, 1
jz no_topbit
shr eax, 1
xor eax, poly
jmp entrygoon
no_topbit:

shr eax, 1
entrygoon:
inc cx
test cx, 8
jz entryLoop

mov dword ptr[ebx*4 + crctable], eax
inc bx
test bx, 256
jz InitTableLoop

Notes: - crctable is an array of 256 dwords
- eax is shifted to the right because the CRC-32 uses reflected Algorithm
- also therefore the lowest 8 bits are processed

In Java or C (int is 32 bit):

for (int bx=0; bx<256; bx++){
int eax=0;
eax=eax&0xFFFFFF00+bx&0xFF; // the 'mov al,bl' instruction
for (int cx=0; cx<8; cx++){
if (eax&&0x1) {
eax>>=1;
eax^=poly;
}
else eax>>=1;
}
crctable[bx]=eax;
}
The implementation for computing CRC-32 using the table:


computeLoop:
xor ebx, ebx
xor al, [si]
mov bl, al
shr eax, 8
xor eax, dword ptr[4*ebx+crctable]
inc si
loop computeLoop

xor eax, 0FFFFFFFFh

Notes: - ds:si points to the buffer where the bytes to process are
- cx contains the number of bytes to process
- eax contains current CRC
- crctable is the table computed with the code above
- the initial value of the CRC is in the case of CRC-32: FFFFFFFF
- after complete calculation the CRC is XORred with: FFFFFFFF
which is the same as NOTting.

In Java or C it is like this:

for (int cx=0; cx>=8;
eax^=crcTable[ebx];
}
eax^=0xFFFFFFFF;
Cuối cùng bây giờ chúng ta cũng đã đi đến phần cuối của phần một : The CRC
tutorial.Nếu bạn muốn tìm hiểu sâu hơn nữa về CRC tôi khuyên bạn nên tìm đọc
thêm các tài liệu mà tác giả đã khuyến cáo sau đây :
Quote:

References

> A painless guide to CRC error detection algorithm

(I bet this 'painless guide' is more painfull then my 'short' one ;)
> I also used a random source of a CRC-32 algorithm to understand the algorithm
better.
> Link to crc calculation progs hmmm search for 'CRC.ZIP' or 'CRC.EXE' or
something
alike at ftpsearch (?form=advanced)
Trong phần sau chúng ta sẽ đến phần 2 không kém phần hấp dẫn : Reversing CRC!
Ok Hẹn trong tut sau . Thanx ( Sorry nếu như có chỗ tôi dịch chưa sát nghĩa lắm)

Kienmanowar(REA)

Encrypting data with the Blowfish algorithm

Ặc ặc, keke.
(Đó là những từ cảm thán mà tui học được trên NET. Tui yêu NET và con người ảo
của NET ở chổ này . hihi. )
Gác kiếm đã lâu đang ngâm trầm cái khác, híhí , bài này cũng đã viết lâu rồi (từ lúc
mới wen NINI trên NET có send cho ẻm đọan vào đề :) ). Hôm nay lục ra ,thấy
cũng giống như một bài luận nên post cho các bạn xem chơi. Đọan analysis thuật
tóan và cracking cắt bỏ. Mong các bạn thông cảm vì em đã lỡ dại gác rồi


VÀO ĐỀ:

Lúc bé, tui thường ở nhà với bà nội , vì mẹ tôi phải đi dạy học xa. Và tui là một
trong những đứa cháu nội được yêu thương nhất . Bà nội tui lúc nào cũng muốn

những điều tốt lành cho tôi. Bà thường mong muốn: Nếu lớn lên tôi sẽ được làm
nghề “gỏ dây thép”, vì nghề này chỉ ngồi ở trong mát lại lương cao.Và ngày hôm
nay khi nghiên cứu về mã hóa bổng tôi rất nhớ đến bà. TUT này ngòai việc chia sẽ
cho các bạn, tui cũng muốn gởi tặng linh hồn Nội tôi. Rất rất nhớ bà !!!.huhu

Thưa các bạn, thật ra viết tut ko cần dài dòng như benina hay làm. Nhưng vì đối
tượng đọc tut mà benina muốn share là các newbie như benina vậy. Thật là vất vả
cho newbie khi trên các diễn đàn cracker tiếng Việt chưa nhiều tài liệu hướng dẫn
cụ thể. Và thường , các newbie ko biết bắt đầu từ đâu . Vì vậy bắt buộc benina biết
gì thì sẽ share ngay cho các bạn. Thật là vui vẽ khi chúng ta cùng tiến bộ.

Như trên tui có nói, bà nội tui rất thích nghề “gỏ dây thép”. Vì những năm 60, kỹ
thuật còn lạc hậu so với bây giờ, nghề “gỏ dây thép” rất sang trọng, là một nghề

×