1. Trang chủ
  2. » Công Nghệ Thông Tin

Hacker Professional Ebook part 130 pdf

6 224 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 6
Dung lượng 124,22 KB

Nội dung

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 : http://pg.photos.yahoo.com/ph/kienbi &.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 : http://pg.photos.yahoo.com/ph/kienbi 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 ftp://ftp.adelaide.edu.au/pub/rocksoft/crc_v3.txt (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 (http://ftpsearch.lycos.com?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ề

Ngày đăng: 04/07/2014, 11:20

TỪ KHÓA LIÊN QUAN