黑客小知識之為什么dt和不抬頭不能一起開

我敢保證你的黑客軟件不會讓你這么干的,因?yàn)闊o論是Philip、polak還是sharklaser大家都這樣寫 if (config->tickbase.doubletap.isActive()) targetTickShift = 13; else if (config->tickbase.hideshots.isActive()) targetTickShift = 9; 那么,同時(shí)開=只開dt或反過來只開不抬頭 現(xiàn)在是欣賞高雅言論時(shí)間
看到這里相信大多數(shù)有點(diǎn)知識儲備的黑客都笑出來了 如果你不知道為什么,接下來我們進(jìn)入正題,它是如何實(shí)現(xiàn)的 一切的一切要追溯回2017年的一次游戲更新,使得tickbase漏洞利用成為可能
因?yàn)槊總€(gè)客戶端都有一個(gè)本地的獨(dú)立tick計(jì)數(shù)器(m_nTickBase),它在客戶端和服務(wù)器之間保持同步。服務(wù)器會讓它盡量與服務(wù)器當(dāng)前tick同步(執(zhí)行同步的閾值由 sv_clockcorrection_msecs 控制,默認(rèn)值為 30)。在服務(wù)器處理上傳到的usercmd時(shí),會將 tickbase 設(shè)置為全局變量中的當(dāng)前 tickcount(以及tick對應(yīng)的實(shí)際時(shí)間) 而下一次的開火時(shí)間也是基于tickbase計(jì)算的,因此我們可以利用這個(gè)漏洞取消兩次開火間的間隔,這就是dt 為了做到本地tick與服務(wù)器tick的盡量同步,服務(wù)器會有一個(gè)叫做模擬tick的東西,每個(gè)模擬tick,服務(wù)器都會將傳入的usercmd累加并檢查它來確定是否應(yīng)該調(diào)整 tickbase來將它們的差異控制在sv_clockcorrection_msecs定義的閾值范圍內(nèi)。詳見起源引擎sdk中的代碼 https://github.com/ValveSoftware/source-sdk-2013/blob/master/sp/src/game/server/player.cpp#L3208 https://github.com/ValveSoftware/source-sdk-2013/blob/master/sp/src/game/server/player.cpp#L3107 如果我們向服務(wù)器傳遞的數(shù)據(jù)包多于我們在特定tick中應(yīng)該發(fā)送的數(shù)據(jù)包,服務(wù)器會在處理之前把tickbase給“shift”回原來的位置,因?yàn)檫@樣能盡量讓服務(wù)器在處理完這個(gè)tick之后本地tick與服務(wù)器tick就能夠保持同步。即使服務(wù)器有時(shí)會忽略一些用戶命令(用來防止加速掛等惡意漏洞),但無論如何這樣都會讓tickbase被更改。 https://github.com/ValveSoftware/source-sdk-2013/blob/master/mp/src/game/server/player_command.cpp#L334 所以為了實(shí)現(xiàn)tickbase漏洞利用,我們需要一種方法在一個(gè)tick中使更多的usercmd“有效”。在2017年的那一次更新之后,當(dāng)服務(wù)器發(fā)現(xiàn)存在數(shù)據(jù)包丟失(“l(fā)oss”)時(shí),服務(wù)器會引入額外的“假”usercmd來處理(或引入客戶端發(fā)送的額外的數(shù)據(jù)包)。正常情況下每個(gè)數(shù)據(jù)包限制為10 。此外,每個(gè) CLC_Move 消息限制為 62 個(gè)usercmd,每個(gè)數(shù)據(jù)包限制為 1 個(gè) CLC_Move 消息(起源引擎公開sdk里面是找不到的,但是我們通過轉(zhuǎn)儲然后逆向server.dll可以知道) 所以我們最多可以得到:62 個(gè)真實(shí)的 usercmd+ 10 個(gè)由服務(wù)器從假數(shù)據(jù)包生成的 = 每個(gè)數(shù)據(jù)包 72 個(gè)tick。如何繞過這個(gè)限制?只需要快速發(fā)送一大堆數(shù)據(jù)包讓務(wù)器在同一個(gè)模擬tick中去處理這些數(shù)據(jù)包中的usercmd。 服務(wù)器將接受這些 usercmd 并將tickbase shift到正確位置,但它只會運(yùn)行第一個(gè)命令,這會使得tickbase 遠(yuǎn)遠(yuǎn)落后實(shí)際tick。于是我們就實(shí)現(xiàn)了這個(gè)漏洞利用?? 我們先前說過,利用這個(gè)漏洞可以取消開火間隔,而我們只需要改變shift的tick數(shù)量,就可以通過讓抬頭的tick超前于tickbase實(shí)現(xiàn)不抬頭了。 因此我們得知了,tickbase只能shift到一個(gè)位置,不能分身??所以dt和不抬頭只有一個(gè)能起作用 至于我們的老版fa玩家是哪里來的底氣,我暫且蒙在鼓里