Computer - Communication - Control. 3C INC
 
Search
Nhiều người quan tâm
Tối ưu Windows bằng WinXP Manager
Sửa lỗi Safely Remove Hardware
Kêt nối mạng Lan bằng Hub và Switch
Hướng dẫn sử dụng máy tính để thực hiện nhiệm vụ in và scan
Kết nối nhiều máy tính với một máy in
Có cách nào lấy lại hoặc xóa mật khẩu

Trao đổi kinh nghiệm


In bài này Gửi bài viết này cho bạn bè
(Thứ Tư, 26/11/2008-9:49 AM)
Kiểm tra tính toàn vẹn của file
Việc làm sao để ứng dụng của bạn chạy trơn tru không gặp lỗi là hết sức quan trọng, tuy nhiên thật phiền toái nếu trong quá trình lưu trữ, ứng dụng của bạn bị nhiễm virus hay bị thay đổi về cấu trúc file...

Để đảm bảo an toàn và tính toàn vẹn của ứng dụng, người ta đính kèm thêm các mã CRC (Cyclic Redundancy Check), MD (Message Digest) hay SHA (Secure Hash Algorithm).

Làm sao để chương trình khi thực thi tự kiểm tra tính toàn vẹn của nó? Bài viết này sẽ đưa ra hướng giải quyết khá đơn giản. Ở đây tôi sử dụng ngôn ngữ Visual Basic 6 để minh hoạ.

Như bạn biết, việc virus chèn thêm dữ liệu vào cuối file, hay sửa chữa cấu trúc file sẽ thay đổi mã MD của cả file đó.

Thao tác mấu chốt cũng là vấn đề làm sao lưu trữ được mã MD - ở đây tôi sử dụng mã MD5 - vào trong file mà khi thực thi, chúng ta có thể kiểm tra.

Chúng ta không thể đơn giản đưa mã MD5 đó trực tiếp vào trong mã lệnh, vì mã này của cả file chỉ biết được sau khi thực thi, đồng nghĩa với mỗi chuỗi bạn nhập vào biến lưu MD5 lại tạo một mã MD5 mới. Nên việc này là gần như không khả thi (thực ra vẫn có thể thực hiện tuy nhiên rất phức tạp).

Vì vậy, chúng ta sẽ sử dụng một cách thức khác, đó là lưu mã này vào cuối file, rồi chỉ lấy mã MD5 của chuỗi bắt đầu từ Byte đầu tiên của file đến một vị trí nhất định mà thôi, phần lưu trữ mã MD5 sẽ không được xét đến. Điều này làm quá trình kiểm tra mã MD5 trở nên chính xác.

Đây là hình vẽ của quá trình thay đổi cấu trúc file:

Khi ứng dụng làm việc, chúng ta kiểm tra mã MD5 trong lúc thực thi xem có khác biệt với mã MD5 lưu ở cuối file hay không để kiểm tra tính toàn vẹn.

Để thực hiện việc này, chúng ta cần tạo thêm một ứng dụng nhỏ để thực hiện việc chèn dữ liệu vào chương trình và viết thêm một đoạn mã để ứng dụng tự kiểm tra.

Bạn có thể tham khảo chương trình mẫu đi kèm bài viết (hoặc tải về tại http://dungnguyenle.googlepages.com/SourceMD5Check.zip). Ở đây tôi chỉ xin giới thiệu 2 đoạn code chính.

Code 1: Chèn dữ liệu

Private Sub cmdMD5_Click()

Const Chuoi = "DungCoi-VirusVN.com"

If TonTai(txtPath) = True Then

Dim BoDem As String

Dim BoDem1 As String

Open txtPath For Binary As #1

BoDem = Space(LOF(1))

`Đặt dữ liệu của file vào biến BoDem

Get #1, , BoDem

Dim ViTri As Double

ViTri = InStr(1, BoDem, Chuoi, vbBinaryCompare)

If ViTri = 0 Then

`Bien BoDem1 lưu dữ liệu file mới

BoDem1 = BoDem & Chuoi & MD5String(BoDem)

`Đặt dữ liệu mới vào file

Put #1, 1, BoDem1

MsgBox "Da hoan thanh"

Else

MsgBox "Du lieu da duoc ghi truoc day roi"

End If

Close #1

Else

MsgBox "File khong ton tai"

End If

End Sub

Private Function TonTai(filename) As Boolean

'Kiem tra tinh ton tai cua file

On Error GoTo ErrorHandler

TonTai = (Dir(filename) <> "")

Exit Function

ErrorHandler:

TonTai = False

End Function

Code 2: Kiểm tra

Private Sub Form_Load()

Const Chuoi = "DungCoi-VirusVN.com"

`Xác định đường dẫn

Dim PathMe As String

If Len(App.Path) <> 3 Then

PathMe = App.Path + "\" + App.EXEName + ".exe"

Else

PathMe = App.Path + App.EXEName + ".exe"

End If

`Đưa toàn bộ dữ lieu của file vào biến BoDem

Dim BoDem As String

Open PathMe For Binary As #1

BoDem = Space(LOF(1))

Get #1, , BoDem

Close #1

‘Lấy vị trí của Chuoi trong file

Dim ViTri As Double

ViTri = InStr(1, BoDem, Chuoi, vbBinaryCompare)

‘Nếu không tìm thây Chuoi trong file

If ViTri = 0 Then GoTo Sai

‘Kích thước file khác với kích thước file gốc + Độ dài chuoi + 32 byte của mã MD5
If Len(BoDem) <> ViTri + Len(Chuoi) + 31 Then GoTo Sai

‘Lấy mã MD5 từ cuối file

Dim MaMD5 As String

MaMD5 = Mid(BoDem, ViTri + Len(Chuoi), 32)

‘Tạo mã MD5 từ dữ liệu của file ban đầu (Phần file gốc)

Dim MaMD5Me As String

Dim strTmp As String

strTmp = Left(BoDem, ViTri - 1)

MaMD5Me = MD5String(strTmp)

If MaMD5 <> MaMD5Me Then
GoTo Sai

Else

MsgBox "Chuong trinh hop le", vbInformation, "Okie"

End If

Exit Sub

Sai:

MsgBox "Ma kiem tra chuong trinh bi sai, chuong trinh co the da bi nhiem virus hoac bi thay doi cau truc. Chuong trinh se tu ket thuc", vbCritical, "Bao dong"

End

End Sub

Bạn thực hiện các thao tác sau:

Bước 1: Biên dịch project có đoạn Code 2

Bước 2: Thực thi project có đoạn Code 1, nhập đường dẫn ứng dụng vừa được biên dịch vào TextBox rồi bấm chọn Ghi du lieu.

Sau đó ứng dụng khi thực thi sẽ tự nhận biết có bị nhiễm virus hay bất kỳ thao tác nào làm thay đổi file hay không.


Nguồn: PCWorld

3Cdotcom   Nhà cung cấp dịch vụ Hosting trực tiếp"  www.hosting.net.vn

Download các phần mềm miễn phí được ưa dùng nhiều nhất

    [ Các bài mới ]
    [ Các bài đã đăng ]
    Download Unikey - PM gõ tiếng Việt phổ biến nhất
    Chương trình nhỏ gọn, free.
    Thủ thuật hay với Gmail
    Tham khảo các tính năng độc đáo có thể bạn chưa biết
     
     
     
    COMPUTER - COMMUNICATION - CONTROL 3C, INC.
    Số 6 - Láng Hạ - Ba Ðình - Hà Nội; Tel: 84.4.38312695; Fax: 84.4.38311925
    Copyright © 2005 3C INC. All rights reserved.