Từ 1 tới 9 trên tổng số 9 kết quả

Đề tài: 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?

  1. #1
    Ngày gia nhập
    04 2011
    Bài viết
    5

    Mặc định 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
    Ngày gia nhập
    11 2007
    Nơi ở
    Hà Nội
    Bài viết
    520

    Trích dẫn Nguyên bản được gửi bởi quyen194 Xem bài viết
    Đầ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 gia nhập
    04 2011
    Bài viết
    5

    Trích dẫn Nguyên bản được gửi bởi quangnh89 Xem bài viết
    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?

  4. #4
    Ngày gia nhập
    11 2007
    Nơi ở
    Hà Nội
    Bài viết
    520

    Trích dẫn Nguyên bản được gửi bởi quyen194 Xem bài viết
    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?
    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.

  5. #5
    Ngày gia nhập
    04 2011
    Bài viết
    5

    Trích dẫn Nguyên bản được gửi bởi quangnh89 Xem bài viết
    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^

  6. #6
    Ngày gia nhập
    10 2010
    Nơi ở
    Unallocated Memory
    Bài viết
    47

    Mặc định 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?

    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.
    Nghìn dặm phong ba cách tiếng lòng
    Vạn sầu thương nhớ nỗi hư không
    Nhìn phương xa ấy, mình ta ngóng
    Cố với tay theo một bóng hồng

  7. #7
    Ngày gia nhập
    03 2009
    Nơi ở
    Ở địa ngục
    Bài viết
    667

    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 gia nhập
    04 2011
    Bài viết
    5

    Trích dẫn Nguyên bản được gửi bởi puss Xem bài viết
    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 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

  9. #9
    Ngày gia nhập
    02 2009
    Bài viết
    23

    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

Các đề tài tương tự

  1. Làm sao tạo phần mềm bắt buộc có đĩa CD hoặc CD ảo mới chạy.
    Gửi bởi binhdt35 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 0
    Bài viết cuối: 11-11-2012, 01:35 PM
  2. giúp về dừng thread để thực hiện 1 công việc sau đó chạy tiếp thread đó
    Gửi bởi prt_awm trong diễn đàn Nhập môn lập trình Java
    Trả lời: 2
    Bài viết cuối: 03-11-2012, 09:48 PM
  3. ADO.NET Cách chống các phần mềm khác kill process chương trình do mình tạo ra đang chạy?
    Gửi bởi luongtankhang123 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 0
    Bài viết cuối: 22-05-2012, 09:16 PM
  4. Không cho người dùng Kill App giống như chương trình Antivirus???
    Gửi bởi cchangkhongayngo trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 0
    Bài viết cuối: 28-07-2011, 02:27 PM
  5. Kill Process bằng việc Kill toàn bộ thread của Process đó trên VC++ như thế nào?
    Gửi bởi AdminPro trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 1
    Bài viết cuối: 22-05-2009, 05:44 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn