01/10/2018, 10:01

[Nghiên cứu] Cheat Engine và các app viết bằng DotNet

Khi chạy các app được viết bằng DotNet, JIT Compiler sẽ biên dịch IL thành mã máy.
Điều đặc biệt ở đây là: JIT Compiler không bao giờ đảm bảo rằng biên dịch trong mọi thời điểm thì sẽ ra mã máy giống nhau.
(Thậm chí khi build file exe cũng không đảm bảo cùng một mã nguồn thì sẽ ra cùng 1 file exe).
Nguồn: https://blogs.msdn.microsoft.com/ericlippert/2012/05/31/past-performance-is-no-guarantee-of-future-results/
Minh nghĩ là ví dụ nếu có biến a, lần JIT Compile thứ 1 được push vào vị trí số 3 trong stack, lần JIT Compile sau này có thể nó sẽ được push vào vị trí số 10 (tức là mã máy thay đổi so với lần đầu).

Ví dụ mình có cái game dùng DotNet, dùng cheat engine để dò tọa độ X của player, thì mình được dãy pointer kiểu như này:

threadstack0[-0x000007F8][0x00000160][0x000001F4][0x000000D4][0x00000044][0x00000018]

Threadstack0 là Address tại đáy của stack ở thread số 0 (thread đầu tiên của app).

Sau khi mình update windows, dãy pointer trên không còn trỏ đúng nữa (JIT Compiler nó biên dịch khác đi so với lúc đầu).
(Ít nhất thì đây là điều hợp lý với kiến thức đầu bài, không biết có nhầm không)
Vậy mọi người có ai dùng cheat engine lập được table cho game viết bằng DotNet chưa, mình thì đầu hàng rồi

Tao Không Ngu. viết 12:09 ngày 01/10/2018

Hi 明玉.
Theo mình thì update window không nhất thiết phải biên dịch lại.

明玉 viết 12:11 ngày 01/10/2018

Nhưng mà chuỗi pointer trên đã không còn chính xác nữa rồi, nên mình mới nói là JIT Compiler đã đưa ra mã máy hoàn toàn mới mặc dù exe không thay đổi.
Mà game này không phải của mình nhe. Nó là cái này: link

Tao Không Ngu. viết 12:08 ngày 01/10/2018

Hi 明玉.
Chuỗi poitẻ không còn chính xác và kết luận luôn JIT copilẻ lại có vẻ hơi vội.

Bài liên quan
0