Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 9 của 9
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Cách chống kill thread cho phần mềm anticheat có cơ chế hoạt động giống một chương trình antivirus?

    Đầu tiên xin cảm ơn các bạn đã chiếu cố, dành thời gian quý báu để ngó qua topic này!

    Vấn đề mình muốn thảo luận và xin các bạn giúp đỡ ở đây là làm sao để chống kill một thread do mình tạo ra!
    Mình xin mô tả sơ qua cái gọi là phần mềm anti-cheat của mình!
    Thực chất nó là một dll được đính kèm với một game online, mỗi khi game khởi động sẽ gọi đến cái dll này, trong dll sẽ gọi lên một vài thread với vài chức năng khác nhau:
    -Quét tiêu đề cửa sổ các chương trình đang chạy => phát hiện theo tên (kém chính xác)
    -Quét bộ nhớ RAM xem có chương trình cheat nào đang chạy không => phát hiện theo "chữ ký của chương trình" cái này tương tự như cái quét file của phần mềm anti của a Dũng nhưng khác ở chỗ là các offset và đoạn code mẫu lấy khi chương trình được load vào RAM (tức là khác so với ở file chưa thực thi)
    Với mỗi phát hiện sẽ dẫn đến thoát Game

    Vấn đề ở đây của mình là chỉ cần dùng một chương trình quản lý tác vụ, soi process của game lên, kill bỏ cái thread anticheat là lại cheat ầm ầm được!
    Mình đã thử sử dụng cách hide process nhưng cũng không ăn thua vì vẫn có tool có thể chống hide được

    Mình có nghĩ đến cách sau mỗi một lượt quét lại tạo một thread mới và kết thúc thread cũ nhưng nếu pause hay suspense cái process game thì vẫn kill thread được như thường

  2. #2
    Trích dẫn Gửi bởi quyen194
    Đầu tiên xin cảm ơn các bạn đã chiếu cố, dành thời gian quý báu để ngó qua topic này!

    Vấn đề mình muốn thảo luận và xin các bạn giúp đỡ ở đây là làm sao để chống kill một thread do mình tạo ra!
    Mình xin mô tả sơ qua cái gọi là phần mềm anti-cheat của mình!
    Thực chất nó là một dll được đính kèm với một game online, mỗi khi game khởi động sẽ gọi đến cái dll này, trong dll sẽ gọi lên một vài thread với vài chức năng khác nhau:
    -Quét tiêu đề cửa sổ các chương trình đang chạy => phát hiện theo tên (kém chính xác)
    -Quét bộ nhớ RAM xem có chương trình cheat nào đang chạy không => phát hiện theo "chữ ký của chương trình" cái này tương tự như cái quét file của phần mềm anti của a Dũng nhưng khác ở chỗ là các offset và đoạn code mẫu lấy khi chương trình được load vào RAM (tức là khác so với ở file chưa thực thi)
    Với mỗi phát hiện sẽ dẫn đến thoát Game

    Vấn đề ở đây của mình là chỉ cần dùng một chương trình quản lý tác vụ, soi process của game lên, kill bỏ cái thread anticheat là lại cheat ầm ầm được!
    Mình đã thử sử dụng cách hide process nhưng cũng không ăn thua vì vẫn có tool có thể chống hide được

    Mình có nghĩ đến cách sau mỗi một lượt quét lại tạo một thread mới và kết thúc thread cũ nhưng nếu pause hay suspense cái process game thì vẫn kill thread được như thường
    Không rõ tất cả các yêu cầu của bạn hoạt động ở hệ điều hành nào, nếu windows 7 trở lên, bạn có thể tìm hiểu ObRegisterCallback

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi quyen194
    Cám ơn bạn nhiều!
    Của mình là từ win xp trở lên bạn ạ có thể dùng cái trên hay phải cách khác vậy bạn?[IMG]images/smilies/icon_question.gif[/IMG]
    với windows xp thì có thể dùng SSDT hook. bạn cần xây dựng một driver để hook SSDT, ObRegisterCallback chỉ hỗ trợ từ VistaSP1 trở lên.
    Khi hook cần tránh các hàm gọi lồng nhau, chương trình bị re-entry, sẽ dump hệ thống.
    Còn 1 tình huống khác, bạn bị antivirus nhận nhầm là rootkit.

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi quangnh89
    với windows xp thì có thể dùng SSDT hook. bạn cần xây dựng một driver để hook SSDT, ObRegisterCallback chỉ hỗ trợ từ VistaSP1 trở lên.
    Khi hook cần tránh các hàm gọi lồng nhau, chương trình bị re-entry, sẽ dump hệ thống.
    Còn 1 tình huống khác, bạn bị antivirus nhận nhầm là rootkit.
    Cám ơn bạn rất nhiều! Tuy vẫn hơi hơi mơ hồ nhưng mình sẽ tìm hiểu trước, nếu có vẫn chưa làm được mình sẽ reply lại ở topic này, hi vọng lại nhận được sự giúp đỡ của bạn ^o^

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi quangnh89
    Không rõ tất cả các yêu cầu của bạn hoạt động ở hệ điều hành nào, nếu windows 7 trở lên, bạn có thể tìm hiểu ObRegisterCallback
    Cám ơn bạn nhiều!
    Của mình là từ win xp trở lên bạn ạ có thể dùng cái trên hay phải cách khác vậy bạn?[IMG]images/smilies/icon_question.gif[/IMG]

  6. #6
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Nếu bạn muốn chống kill thread theo đúng nghĩa thì theo mình biết có một số phương pháp nhưng chủ yếu thực hiện ở kernelmode
    1. Hook ssdt function NtTerminateThread
    2. Unlink thread list -> Hide thread
    .....
    Các phương pháp này có thể chống tốt các chương trình từ usermode, nhưng nếu gặp mấy bác powertool, xuetr... thì tắt điện.

    Hầu hết các hệ thống anti cheat hiện đại ngày này không sử dụng phương pháp này để chống bị kill. Thay vào đó nó tạo ra một kênh liên lạc riêng với game kiểu kiểu như:
    Game: mày có đó không anti cheat?
    Anti Cheat: tao có
    Game: mày đang làm gì thế?
    Anti Cheat: tao đang chơi điện tử
    ........
    Tất nhiên cuộc nói chuyện giữa 2 đứa này đã bị mã hóa rồi, ta không dễ mà hiểu được nó đang nói cái gì với nhau. Nếu ta kill hoặc suppend thằng anti cheat thì thằng anti cheat sẽ không trả lời lại thằng game, do đó thằng game biết thằng anti cheat đã bỏ đi nên nó sẽ bỏ đi theo luôn. Kiểu như chàng không còn thiếp chẳng thiết sống nữa ấy.

    Ở mức độ đơn giản thì bạn có thể hiểu như vậy.

  7. #7
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Tức là nếu tắt anti Cheat thì game cũng out luôn?

    Vậy có thể giả Anti Cheat không nhỉ?

    Mình đặt giả thiết vậy, chứ mình chưa sờ đến mấy cái này...

  8. #8
    Ngày tham gia
    Sep 2015
    Đang ở
    hà nội
    Bài viết
    0
    Trích dẫn Gửi bởi puss
    Nếu bạn muốn chống kill thread theo đúng nghĩa thì theo mình biết có một số phương pháp nhưng chủ yếu thực hiện ở kernelmode
    1. Hook ssdt function NtTerminateThread
    2. Unlink thread list -> Hide thread
    .....
    Các phương pháp này có thể chống tốt các chương trình từ usermode, nhưng nếu gặp mấy bác powertool, xuetr... thì tắt điện.

    Hầu hết các hệ thống anti cheat hiện đại ngày này không sử dụng phương pháp này để chống bị kill. Thay vào đó nó tạo ra một kênh liên lạc riêng với game kiểu kiểu như:
    Game: mày có đó không anti cheat?
    Anti Cheat: tao có
    Game: mày đang làm gì thế?
    Anti Cheat: tao đang chơi điện tử
    ........
    Tất nhiên cuộc nói chuyện giữa 2 đứa này đã bị mã hóa rồi, ta không dễ mà hiểu được nó đang nói cái gì với nhau. Nếu ta kill hoặc suppend thằng anti cheat thì thằng anti cheat sẽ không trả lời lại thằng game, do đó thằng game biết thằng anti cheat đã bỏ đi nên nó sẽ bỏ đi theo luôn. Kiểu như chàng không còn thiếp chẳng thiết sống nữa ấy.

    Ở mức độ đơn giản thì bạn có thể hiểu như vậy.
    Cám ơn bạn rất nhiều!
    Thật ra game này mình hiện đang không có source [IMG]images/smilies/biggrin.png[/IMG] và làm ra Anticheat thì game cũng không biết đến sự tồn tại của Anticheat vậy nên mình mới phải tìm cách để tự nó có thể chống kill [IMG]images/smilies/biggrin.png[/IMG]

  9. #9
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trong game có một vòng lặp vô hạn, thay vì bạn tự tạo thread, hãy lấy thread của chính game để chống, hki đó kill thread chính là kill game.
    Chúc bạn may mắn [IMG]images/smilies/smile.png[/IMG]

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •