- TAC (Treyarch Anti-Cheat) của Black Ops Cold War là anti-cheat ở user mode, không có kernel driver Ricochet, nhưng có cấu trúc mã khá tương đồng với các bản Call of Duty mới hơn
- Lớp bảo vệ sử dụng kết hợp mã hóa tệp thực thi, checksum, làm rối
jmp, làm rối entry point của Arxan cùng với cơ chế mã hóa con trỏ của dòng Treyarch/IW - TAC thực hiện nhiều cơ chế phát hiện ở user mode như tra cứu API bằng hash lúc runtime, kiểm tra pattern hook API, kiểm tra debug register, phát hiện Windows test signing, phát hiện cấp phát console, phát hiện DirectX/overlay
- Overlay bên ngoài được thu thập thông tin về kiểu cửa sổ, vị trí, display affinity, danh sách module của tiến trình rồi tải lên máy chủ; các trình quét bộ nhớ kiểu Cheat Engine có thể bị phát hiện bằng virtual memory honeypot
- Kỹ thuật độc đáo nhất là syscall stub tùy biến được mã hóa, giúp vượt qua hook của ntdll và khiến nguồn gốc syscall trông như đến từ một hàm ntdll khác, gây khó khăn cho việc giám sát
Đối tượng và phạm vi phân tích
- Đối tượng phân tích là anti-cheat ở user mode bên trong Black Ops Cold War, được gọi là TAC (Treyarch Anti-Cheat)
- Black Ops Cold War không có thành phần kernel mode của Ricochet như trong Modern Warfare 2019 và các tựa game về sau
- Khác biệt lớn với các bản Call of Duty mới là driver kernel mode; phần lớn mã anti-cheat vẫn ở user mode và rất giống TAC
- Pseudocode của hàm là dạng tái dựng vì kết quả decompile thực tế quá phức tạp do bị làm rối và có mã resolve
- Một số nội dung đã được lược bỏ để tránh cổ vũ hành vi gian lận hoặc vượt qua cơ chế bảo vệ
Arxan và bảo vệ tệp thực thi
- Arxan là công cụ làm rối và bảo vệ được dùng trong nhiều game Call of Duty từ Black Ops 3 trở đi
- Giải mã tệp thực thi lúc runtime
- Tệp thực thi của game được pack và mã hóa
- Arxan chèn mã vào quá trình khởi động để unpack và giải mã tệp thực thi thật của game
- Checksum tệp thực thi
- Arxan liên tục giám sát việc vá tệp thực thi của game
- Nếu phát hiện debugger hoặc checksum không khớp, tiến trình sẽ bị kết thúc
- Làm rối
jmp- Chèn nhiều lệnh
jmpgiữa các chỉ thị của hàm để gây khó cho phân tích tĩnh - Khi một hàm lớn bị chèn hàng trăm lệnh nhảy, phân tích của IDA có thể bị phá vỡ và cần công cụ bên ngoài
- Chèn nhiều lệnh
- Làm rối entry point
- Mã Arxan được bảo vệ sẽ unpack và thực thi entry point thực sự
- Đoạn này cũng có thể bị làm rối bằng
jmp, khiến việc lần theo luồng thực thi trở nên khó khăn
Mã hóa con trỏ
- Các con trỏ quan trọng được mã hóa và giải mã ngay trước khi sử dụng
- đối tượng toàn cục hiện tại của game
- mảng entity
- con trỏ object, v.v.
- Cùng một cơ chế mã hóa có 16 biến thể, và địa chỉ PEB hiện tại quyết định sẽ dùng kiểu nào
- Cách làm này cản trở việc pointer scan của Cheat Engine
- giá trị lưu trong biến toàn cục chỉ là giá trị đã mã hóa
- giá trị đã giải mã chỉ tồn tại trên stack
- Muốn lấy được con trỏ đã giải mã thì cần dùng công cụ theo dõi lệnh giải mã, hoặc hook vào điểm game đã giải mã sẵn
Tra cứu API lúc runtime và phát hiện hook
- TAC dùng hàm tra cứu API lúc runtime được inline
- nhận hash của module và hash tên API
- duyệt danh sách module đã nạp và hash tên của chúng
- duyệt các hàm export của module rồi so sánh với hash tại thời điểm biên dịch
- Việc nhận diện hash được thực hiện bằng danh sách module đã nạp trong tiến trình game và hàm hash của game
- tính hash của tên module và tên export
- lấy thủ công base hash và function hash từ kết quả decompile để đối chiếu API đang được gọi là gì
- Hash không giống nhau giữa các phiên bản game
- Vì con trỏ hàm được lưu trong biến toàn cục, cũng có thể nhận diện bằng cách so sánh địa chỉ ảo với các hàm export trong DLL đã nạp
- Cơ chế phát hiện hook API của TAC hiện chỉ kiểm tra 7 pattern
- các stub kiểu
push/movabs/xchg/ret push immrồiretcalljmp [rip+x]
- các stub kiểu
- TAC không kiểm tra mọi API quan trọng mà chỉ kiểm tra các API chính nó sử dụng
Phát hiện debug register và test signing của driver
- Debug register có thể được dùng như một cách hook không vá mã để vượt qua cơ chế giám sát vá
.textcủa Arxan - TAC kiểm tra các giá trị DR0~DR3 trong thread context
- nếu có giá trị, nó sẽ gọi callback với thông điệp khác nhau tùy có thuộc tiến trình hiện tại hay không
- sau đó luồng sẽ chuyển sang hàm kết thúc
- DR0~DR3 là privileged register nên không thể đọc trực tiếp bằng assembly thông thường; phải lấy qua kernel Windows hoặc qua chuyển tiếp ngoại lệ
- Chế độ test của Windows cho phép chạy driver kernel mode không có chữ ký hợp lệ
- TAC dùng
NtQuerySystemInformationđể kiểm tra xem test signing có đang bật hay không- chỉ riêng việc bị phát hiện này chưa dẫn đến ban trực tiếp nhưng tài khoản sẽ bị gắn cờ
Cách kết thúc tiến trình
- TAC có hai cách để kết thúc tiến trình
- Cách thứ nhất là xóa các thanh ghi rồi gọi
NtTerminateProcess- đặt
RCXthành-1 - nếu phát hiện
NtTerminateProcessđã bị hook thì sẽ không dùng cách này
- đặt
- Cách thứ hai là xóa các thanh ghi rồi nhảy đến
0x0để làm tiến trình crash - Cả hai cách đều xóa các thanh ghi quan trọng nên rất khó khôi phục
Phát hiện console, hiển thị trực quan và overlay
- Cheat nội bộ có thể dùng
AllocConsoleđể in log hoặc làm menu - TAC kiểm tra cửa sổ console hoặc
ConsoleHandletrong PEB để phát hiện việc cấp phát console - Thành phần hiển thị nội bộ thường được vẽ lên màn hình bằng hook vào graphics API
- các bản Call of Duty hiện đại dùng DirectX 12
- mục tiêu hook phổ biến là
IDXGISwapChain::Present - với DirectX 12, cần command queue và
ID3D12CommandQueue::ExecuteCommandListslà điểm lấy phổ biến
- OBS Studio, Streamlabs OBS, Discord game overlay và Steam game overlay cũng có thể hoạt động ở vị trí tương tự
- Steam và Discord thực hiện vẽ
- nhóm OBS sẽ chụp ảnh render khi dùng game capture
- TAC hiện không quét chính hàm DXGI present mà kiểm tra con trỏ present trong vtable
Cheat bên ngoài và phát hiện dựa trên cửa sổ
- Cheat bên ngoài nhiều khả năng tạo một overlapped window phủ lên trên cửa sổ game
- TAC duyệt tất cả cửa sổ và dùng
GetWindowLongAđể kiểm tra kiểu WS_EX_LAYERED - Sau đó dùng
GetWindowRectđể so sánh xem có chồng lấp với cửa sổ game hay không- nếu tỷ lệ chồng lấp từ
0.5trở lên và số mục cache nhỏ hơn 8 thì lưuhwndđó - có xuất hiện các giá trị tương ứng với độ phân giải ví dụ
1920x1080
- nếu tỷ lệ chồng lấp từ
- Các cửa sổ đã cache sẽ được điều tra thêm ở hàm khác
- kiểm tra văn bản cửa sổ bằng
GetWindowTextW - kiểm tra tên lớp bằng
GetClassNameA - kiểm tra display affinity bằng
GetWindowDisplayAffinity
- kiểm tra văn bản cửa sổ bằng
- TAC cũng kiểm tra trường hợp dùng
SetWindowDisplayAffinityvàWDA_EXCLUDEFROMCAPTUREđể ẩn khỏi công cụ quay/chụp màn hình - Thông tin liên quan đến cửa sổ được lưu vào bộ đệm mã hóa và tải lên máy chủ
- văn bản cửa sổ
- tên lớp
- vị trí và kiểu cửa sổ
- display affinity
- danh sách module và tên exe của tiến trình sở hữu cửa sổ chồng lấp
- Tiến trình của cửa sổ chồng lấp được mở bằng
OpenProcess(PROCESS_VM_READ | PROCESS_QUERY_INFORMATION), rồi thu thập tên module bằngK32EnumProcessModulesvàK32GetModuleFileNameExW
Phát hiện trình quét bộ nhớ kiểu Cheat Engine
- Cheat Engine khá dễ bị phát hiện vì cách hoạt động của bộ nhớ ảo trên Windows
- Dù chương trình cấp phát bộ nhớ ảo bằng
VirtualAlloc, vùng đó vẫn chưa được backing bằng bộ nhớ vật lý trước khi bị truy cập - Game có thể cấp phát bộ nhớ rồi không dùng tới
- Nếu Cheat Engine hoặc tab memory của Process Hacker quét vùng đó, sẽ phát sinh truy cập và bộ nhớ chuyển sang trạng thái valid
- Honeypot kiểu TAC dùng
K32QueryWorkingSetExđể kiểm tra xem địa chỉ ảo đó đã thực sự bị truy cập hay chưa, từ đó phát hiện trình quét bộ nhớ
Cản trở quét signature
- Hacker game thường dùng signature scanning để cheat vẫn tự hoạt động sau mỗi lần cập nhật
- Ý tưởng của Treyarch là bảo vệ vùng quanh return address của những hàm không bị gọi lại bằng PAGE_NOACCESS
- Signature scanner sẽ đọc byte của tệp thực thi từ đầu đến cuối để tìm pattern
- Nếu kiểm tra khả năng truy cập ở từng byte thì rất chậm, nên khi chạm vào vùng
PAGE_NOACCESS, tiến trình có thể bị crash - Đây không phải biện pháp chặn tuyệt đối nhưng có thể khiến nhiều người phân tích gặp khó khăn
Chống debug
- Các kiểm tra anti-debug của riêng TAC khá đơn giản, nhưng Arxan cũng cung cấp kỹ thuật anti-debug riêng
- TAC duyệt tất cả thread của tiến trình hiện tại
- dùng
CreateToolhelp32Snapshotvà thread snapshot - kiểm tra
DbgSsReservedtrong TEB của từng thread để phát hiện sự tồn tại của DebugObject
- dùng
- Cũng có kỹ thuật ghi vào vùng nhớ bất thường để tạo access violation
- nếu mã tiếp tục chạy đến điểm sau ngoại lệ thì TAC cho rằng debugger đã xử lý hoặc vượt qua ngoại lệ đó
- TAC cũng dùng
CheckRemoteDebuggerPresent ThreadHideFromDebuggerkhiến ngoại lệ được gửi cho tiến trình thay vì debugger- khi debugger cố dừng tiến trình, có thể phát sinh ngoại lệ
STATUS_BREAKPOINTkhiến tiến trình bị kết thúc - ở user mode không thể unset cờ này
- chiến thuật này được thực thi trong TLS callback trước entry point của tệp thực thi
- khi debugger cố dừng tiến trình, có thể phát sinh ngoại lệ
Giám sát lưu lượng mạng
- TAC không lưu toàn bộ kết nối đang hoạt động mà chỉ tìm một số điều kiện cụ thể
- Đối tượng phát hiện là cách tạo máy chủ mạng cục bộ bên trong tiến trình game
- kẻ gian ghi shellcode vào tiến trình game
- khởi động máy chủ mạng bên trong tiến trình game
- ứng dụng bên ngoài trao đổi dữ liệu với máy chủ cục bộ này
- TAC lấy bảng TCP bằng
GetTcpTable2, rồi so sánh các kết nối do tiến trình hiện tại tạo ra với quan hệ cổng của tiến trình khác để phát hiện điều kiện này
Syscall stub tùy biến được mã hóa
- Nhiều API export của ntdll thực hiện syscall ở bên trong
- Dùng syscall stub tùy biến có thể vượt qua hook của hàm ntdll do cheat ở user mode cài vào
- Syscall có thể lộ ra với instrumentation callback
- instrumentation callback được gọi sau syscall
- địa chỉ trả về sẽ là ngay sau lệnh syscall
- TAC dùng syscall stub được mã hóa để khiến việc phân tích tĩnh khó hơn
- Stub được dựng sau khi bảo vệ một vùng lớn được cấp trong section
.textở chế độ write/execute - Nó tìm lệnh syscall trong
NtReadFile, rồi dùng giá trị thời gian CPU như yếu tố ngẫu nhiên để thay đổi vị trí - Với bên giám sát, syscall có thể trông như phát sinh từ một hàm ntdll ngẫu nhiên
- syscall thực tế có thể không phải là
NtReadFile - nếu không kiểm tra syscall index trong
eaxthì khó biết đó là syscall nào
- syscall thực tế có thể không phải là
- Có ví dụ cho thấy vị trí lệnh syscall thay đổi giữa các lần chạy lại
Phát hiện vượt qua cơ chế ẩn anti-debugger
- Muốn thiết lập
ThreadHideFromDebuggerthì phải gọiNtSetInformationThread - Kẻ gian có thể hook API này và buộc nó trả về thành công
- khi đó anti-cheat tưởng rằng việc ẩn đã thành công nhưng thực tế có thể không có gì xảy ra
- TAC kiểm tra kết quả gọi với tham số sai để bắt các hook làm cẩu thả
- nếu một lời gọi lẽ ra phải thất bại vì sai tham số độ dài mà lại thành công thì sẽ bị phát hiện
- có ví dụ cho thấy debugger và môi trường ScyllaHide trả về giá trị khác nhau
- cũng có trường hợp hook luôn trả về thành công cho yêu cầu
ThreadHideFromDebuggervới handle giả
Chặn tạo remote thread
- TAC cài exception handler gọi
TerminateThreadtrên thread hiện tại khi gặp ngoại lệSTATUS_PRIVILEGED_INSTRUCTION - DLL manual mapping cần có cách thực thi shellcode trong tiến trình từ xa, và cách phổ biến là
CreateRemoteThread - TLS callback trong Windows PE có thể được gọi trước thread entry point khi thread được tạo
- TAC kiểm tra địa chỉ bắt đầu trong context của thread mới
- lấy Win32 start address bằng
NtQueryInformationThread - duyệt danh sách module đã nạp để kiểm tra xem địa chỉ bắt đầu có nằm trong phạm vi module hợp lệ hay không
- lấy Win32 start address bằng
- Nếu địa chỉ bắt đầu không nằm trong phạm vi của bất kỳ module đã nạp nào, nó sẽ ghi nhận phát hiện rồi tạo ngoại lệ privileged instruction để kết thúc thread đó
Các kiểm tra khác và kết luận
- Có đoạn mã kiểm tra chưa rõ mục đích là xác nhận
AllocationGranularitycủaNtQuerySystemInformationcó bằng0x10000hay không- có vẻ như để gắn cờ máy ảo hoặc bản Windows tùy biến
- TAC phụ thuộc khá nhiều vào danh sách module đã liên kết, nên nó kiểm tra xem
InMemoryOrderModuleListtrong PEB có phải là danh sách rỗng hay không- nếu biến thành rỗng, bản thân tiến trình có thể bị hỏng
- Cuối cùng, TAC là một anti-cheat user mode có các chức năng sau
- tra cứu API lúc runtime
- phát hiện hook làm cẩu thả
- phát hiện overlay bên ngoài
- phát hiện hook DirectX nội bộ
- kiểm tra hook trên các API nó sử dụng
- kiểm tra debugger và dấu vết debug
- phát hiện
AllocConsole - phát hiện
CreateRemoteThread - syscall stub giả mạo và được mã hóa
- Arxan hỗ trợ TAC bằng khả năng làm rối mạnh, cản trở phân tích tĩnh, kỹ thuật phá IDA Pro, giám sát sửa đổi
.text, và chức năng anti-debug riêng - Mã tương tự TAC cũng được dùng trong các game Call of Duty hiện đại
1 bình luận
Ý kiến trên Hacker News
Năm 2021, tài khoản CS:GO trên Linux của tôi gặp vấn đề với chỉ số độ tin cậy, tụt xuống màu vàng rồi sau đó là màu đỏ; không phải lệnh cấm chính thức nhưng trên thực tế hoạt động như một hình thức trừng phạt
Kết quả là tôi liên tục bị ghép trận với cheater, khiến việc tìm đồng đội trở nên khó khăn
Sau này tôi biết rằng những người dùng Linux khác dùng GPU Radeon và VRAM từ 16GB trở lên cũng gặp vấn đề tương tự, nên đã tạo một issue trên GitHub để theo dõi: https://github.com/ValveSoftware/csgo-osx-linux/issues/2630
Tìm hiểu thì có vẻ Valve đang phạt những người dùng Linux có một số cấu hình phần cứng nhất định, đặc biệt là card Radeon có VRAM từ 16GB trở lên, vốn lúc đó còn khá mới
Cuối cùng, sau khi một người dùng liên hệ trực tiếp với gaben, vấn đề đã được sửa: https://github.com/ValveSoftware/csgo-osx-linux/issues/2630#...
Tôi đoán có thể đó là kết quả của việc Valve quan tâm đến trải nghiệm người dùng Linux khi chuẩn bị ra mắt Steam Deck
Dù vậy vẫn khá thú vị
Không biết là họ suy đoán từ chất lượng trận đấu kém đi, hay có cách nào để kiểm tra
Theo tôi hiểu thì chỉ số độ tin cậy được ẩn đi để tránh bị lạm dụng
Cheating rốt cuộc là vấn đề con người
Các biện pháp bảo vệ và heuristic được mô tả trong bài có thể lọc được 90% cheater lộ liễu, và về cơ bản tôi cho rằng anti-cheat như vậy là hướng đi tốt
Tuy nhiên anti-cheat phải vận hành một cách thận trọng, và cuối cùng thì người chơi cùng quản trị viên mới là bên phải giải quyết
Game multiplayer online nhất thiết phải chạy trên server do con người quản lý, và phải có quản trị viên hiện diện trong phần lớn thời gian người chơi đang kết nối
Nếu có thể thì càng tốt khi đó là quản trị viên mà người chơi nhận ra; khi không có quản trị viên, cũng cần có các hình thức điều tiết nhẹ hơn như vote kick hoặc vote ban
Không có khác biệt bản chất nào giữa việc đuổi cheater và đuổi người lạm dụng chat
Rốt cuộc, tôi cho rằng hình thức server khả thi duy nhất cho game multiplayer online là server riêng hoặc server cộng đồng
Quá trình kiểm soát cheater và kẻ lạm dụng không nên là kiểu nhận báo cáo qua hệ thống report rồi xử lý bất đồng bộ; quản trị viên game phải nhanh chóng kick hoặc ban
Nếu một game chỉ cho chơi online qua server matchmaking của nhà phát hành, và cách xử lý cheater hay người lạm dụng chat chỉ là gửi report qua biểu mẫu web, thì đừng mua hay chơi nó; hãy bỏ phiếu bằng ví tiền của mình
Có thể còn lập hẳn một tổ chức riêng chỉ để giám sát trọng tài, nhưng tốt hơn là cứ chơi game thôi
Apex Legends vận hành tốt nhờ hệ thống report và anti-cheat mạnh, còn Rocket League thì phần lớn cơ chế điều tiết tự động cũng hoạt động hiệu quả
Có thể dùng số điện thoại, xác minh thủ công bằng ảnh, yêu cầu chơi 10 giờ trước khi vào đấu xếp hạng, đề cử từ người chơi khác, hoặc thêm một game pass trả một lần 5 USD trên các điều kiện đó
Nếu chưa xem, tôi khuyên nên xem bài trình bày về AI anti-cheat của Valve
Công việc đó khá thú vị, và họ tuyên bố bắt được 99% cheater
Tất nhiên vẫn còn những cách cheat rất tinh vi
Tôi đã có cuộc chiến pháp lý kéo dài 2 năm để lật ngược lệnh cấm vĩnh viễn sai của Activision, và Activision thua kiện vì không đưa ra được bất kỳ bằng chứng cheating nào: https://antiblizzard.win/2025/01/18/my-two-year-fight-agains...
Tôi chưa từng cheat, nhưng bị ban không có giải thích; tôi chơi thường xuyên ba tài khoản, còn hai tài khoản kia thì không bị ban
Bộ phận hỗ trợ khách hàng cứ lặp lại “sau khi xem xét, lệnh cấm là đúng”, và không cung cấp bất kỳ thông tin nào để tôi biết mình đã làm sai gì mà sửa
Tôi sở hữu vài skin hiếm nhất trong game, đã chơi hàng nghìn giờ từ năm 2009, chỉ chơi ARAM; thật vô lý khi cho rằng tôi lại đem một tài khoản có giá trị tình cảm lớn ra để cheat trong chế độ casual nhất
Chưa có chuyện gì liên quan đến game khiến tôi stress hơn thế, và nhờ một người quen trong ngành kiểm tra nội bộ, lệnh cấm đã được gỡ mà không có lý do rõ ràng
Tôi vẫn chơi, nhưng hầu như lần nào cũng nhớ đến lệnh cấm sai đó, và có lẽ League sẽ là game multiplayer cạnh tranh cuối cùng mà tôi bỏ thời gian vào
Tôi cũng có cảm giác không muốn chơi nữa vì sợ chuyện như vậy lại xảy ra
Trên console gần như không thể cheat, tôi mất quá nhiều thời gian mới leo được đến mức Gold 1 bình thường trong ranked, và chưa từng bị cảnh cáo hay report vì bất kỳ hành vi nào, vậy mà bị cấm vĩnh viễn không giải thích
Thay vì chiến đấu như tác giả bài viết, tôi quyết định sẽ không bao giờ chi tiền cho sản phẩm của Activision nữa, và tôi nghĩ mọi người cũng nên làm vậy
Ở Mỹ có lẽ khó hơn, nhưng tôi hiểu là ở Anh hoặc England, bị đơn phải chứng minh điều đó là sự thật
May là tôi hầu như không chơi shooter multiplayer, và tôi chắc sẽ rất ghét nếu mất cả thư viện Steam khổng lồ của mình
Rất tò mò về làm rối lệnh nhảy
Sẽ rất hay nếu ai đó đã reverse engineering sâu hơn có thể trả lời
Tôi thắc mắc liệu các lệnh nhảy vô điều kiện có phổ biến đến mức khó lọc bằng một số điều kiện tiên quyết cụ thể hay không; cuối hàm có lệnh trả về nên có vẻ dễ tìm, nhưng liệu có thể phân tích stack để biết hàm sẽ trả về đâu rồi tìm lệnh gọi ngay trước địa chỉ trả về không
Tôi chưa lập trình assembly x86 nhiều nên có thể đã hiểu sai cách nó hoạt động
Cũng có thể thực hiện các phân tích thú vị bằng framework PIN của Intel
Một số bài viết có thể hữu ích ở đây: https://calwa.re/reversing/obfuscation/binary-deobfuscation-..., https://www.nccgroup.com/us/research-blog/a-look-at-some-rea...
Nhiều hàm không kết thúc bằng
retMột số lệnh nhảy là giả, và một số lệnh nhảy đi vào giữa một lệnh máy
Decompiler không xử lý được tình huống có hai lệnh ở cùng một vị trí
Ví dụ như trong
jmp 0x1234, bỏ qua opcodejmpvà giả định0x1234là một lệnh hợp lệỞ một số nhánh, stack bị hỏng, nhưng có thể đó là chủ ý để cố tình gây exception
Vì vậy có thể sửa decompile bằng cách đổi các lệnh như
lea RAX, [rsp + 0x99999999999]thànhnop, nhưng cũng có thể bỏ lỡ exception được chủ ý tạo raIDA xử lý những thứ như vậy không tốt nên tôi đang dùng license Binary Ninja, và có thể dễ dàng viết script để inline hàm cho decompiler
Tôi cho rằng IDA khó xử lý đúng các trường hợp những lệnh nhảy tái sử dụng các khối mã của nhau, vì một khối mã giữa các lệnh nhảy chỉ có thể thuộc về một hàm
Có vẻ mọi người ít dùng Binary Ninja hơn vì nó từng có lỗi với game của Blizzard, nhưng lỗi đó đã được sửa qua một bug report khoảng một năm trước
Đây là kiểu làm rối nhằm gây khó chịu cho người dùng các công cụ phổ biến có sẵn, đặc biệt là IDA Pro
Phần lớn obfuscation chỉ nhằm khiến mọi người khó chịu đủ để chuyển sang dự án khác
Hành vi tước bỏ tính năng sản phẩm sau khi bán nên bị pháp luật ngăn cấm, dù có trong hợp đồng hay EULA
Việc bị chặn không được tước luôn quyền sở hữu trò chơi, và nếu như vậy thì phải hoàn tiền
Nếu phải đi đến phán quyết mới buộc được hoàn tiền, thì ngoài phí license, phí luật sư, chi phí tòa án còn phải có bồi thường thiệt hại gấp 3 lần
Chẳng hạn, việc bị chặn trên Steam khiến mọi giao dịch mua bị vô hiệu hóa nên là điều không thể về mặt pháp lý
Ngay cả khi không đăng nhập được tài khoản, vật phẩm và kho đồ vẫn phải có thể giao dịch, vì đó là những thứ khách hàng đã trả tiền và bỏ thời gian thật để có được
Nếu muốn thực thi quy tắc đạo đức trong game multiplayer thì hoặc không được thu tiền cho game, hoặc người dùng trả phí phải có quyền liên quan đến việc bị chặn
Việc chặn phải tuân theo nguyên tắc tương xứng, và phải có quy trình cùng hồ sơ kháng cáo với con người tham gia, chi phí được giới hạn bằng giá license và chỉ phải chịu nếu thua kiện
Trường hợp tệ nhất là tài khoản bị gắn một dấu bêu xấu công khai trong các game VAC
Mọi người chơi game multiplayer để giải trí và tương tác với người khác, nên nếu hành vi cheat hay hành vi xấu khác ảnh hưởng đến người khác thì nên bị chặn sử dụng dịch vụ multiplayer
Nếu gây phiền hà cho xã hội thì phải trả giá là một nguyên tắc khá phổ biến
Tôi nghĩ họ mất tiền thật cũng được
Nhưng bị chặn do nhầm lẫn lại là chuyện khác
Và thứ bị chặn không phải toàn bộ tài khoản Steam mà là game cụ thể không thể chơi nữa, đúng không?
Những người chơi khác cũng đã trả tiền
Trong COD thì cũng chẳng cần phải cheat
Game có quá nhiều bug đến mức nó làm thay bạn
Trong ranked đôi khi game load súng thay vì dao, và chuyện đó có thể xảy ra vì trong phần kiểm tra trang bị súng ranked có một
casehoặcif-elserõ ràng sai; có vẻ nếu khẩu súng hiển thị trong bộ chọn trang bị không được phép thì nó mặc định thành XM4Đây gần như là game duy nhất tôi biết mà phiên bản ranked còn hỏng hơn phiên bản casual
Tôi tò mò không biết những thứ như thế này được học ở đâu
Tôi muốn học thêm đến mức có thể hiểu được dù chỉ một nửa bài viết, nhưng không biết nên bắt đầu từ đâu
Dù là sách cũ nhưng rất hay, giúp mình theo được nhiều kỹ thuật và bài thực hành
Các công cụ hiện đại đã hơi khác so với thời đó, nhưng tập lệnh x86 và assembly nói chung thì không thay đổi nhiều
Một trong những thu hoạch lớn nhất là biết đến
crackmeĐó là các binary thử thách nhỏ được tạo ra để học reverse engineering, giống như ổ khóa luyện tập trong cộng đồng lockpicking
Tôi nhớ trong sách có kèm CD-ROM chứa nhiều cái như vậy, và nếu tìm trên mạng cũng có rất nhiều
Tự tay làm những bài luyện tập kiểu này chính là cách để học
Đừng bắt đầu bằng cách cố reverse engineering COD ngay, mà phải tích lũy từng bước
Xin chào những ai từng xem UnknownCheats, cs.rin.ru, v.v.
Tôi cũng đang hoạt động ở đó, và đặc biệt quan tâm hơn đến anti-cheat ở user space trên Linux, nhất là cách VAC hoạt động
Tôi từng reverse engineering một chút một MMO nổi tiếng dựa trên Horde/Alliance, và nó gần như đi theo cùng các bước, bao gồm cả hash export FNV32
Thấy họ dùng các trick rất giống nhau nên trông gần như cùng một cách làm
Không biết có phải nó được pack bằng cùng công nghệ bảo vệ không
Signature scanning thật sự rất mạnh
Đó cũng là phần gây nghiện nhất với tôi trong reverse engineering
Quá trình tạo danh sách signature rồi viết binding cho ngôn ngữ script để có thể gọi các function pointer đó rất thú vị
Nó cũng là nền tảng của nhiều nền tảng mod bên thứ ba, vì cần cung cấp cho modder các API có ý nghĩa mà nhà phát triển chính không công khai
Tôi biết một số plugin của engine Source cũng dùng cách này khi cần
Tuy nhiên, có vẻ đa số dùng offset của con trỏ bảng hàm ảo
Tôi tự hỏi liệu việc định kỳ ký điện tử trạng thái game, hoặc đưa vào một dạng proof of work nào đó để chống cheat có khả thi hay có ý nghĩa không
Tôi bắt đầu nghĩ rằng cheating là một vấn đề quá khó để ngăn chặn
Tôi đang làm một FPS online nhỏ, chi phí thấp, và thay vì cài phần mềm anti-cheat, tôi đang nghĩ đến việc để người dùng tin tưởng lẫn nhau và tự phát hiện cheater, hoặc dùng AI như Valve
Có lẽ tôi sẽ để người chơi tự quản lý và vận hành server
Có thể đặt các điều kiện như liên kết số điện thoại, điểm danh tiếng do người chơi khác đưa ra, căn cước hoặc phương thức xác thực mạnh khác, xác thực thủ công qua ảnh như app hẹn hò, hoặc chơi 10 giờ trước khi vào đấu xếp hạng
Tôi cho rằng các game thủ hardcore sẽ sẵn sàng làm những quy trình như vậy để giảm cheater
Cũng có kiểu lạm dụng xã hội là báo cáo người chơi mình không thích để khiến họ bị chặn
Trong một hệ thống như vậy, số false positive sẽ nhiều hơn bất kỳ anti-cheat nào rất nhiều