[QUOTE="CaliberCH, post: 54738, member: 10066"]Guys there is 260 (maybe more) anti cheat (or tamper if it makes you happy) triggers in this game. This is reminiscent of the STEAM TRIGGERS put out many years back. Each of them scans a block of the game, and others scan other blocks to cover the blocks scanning the blocks and whatnot. The method being employed is to scan a base address to a length of a variable, both are unique to each trigger, then compare to a known variable at the end of the scan, and if not the same, then jmp to a function that closes the game. You have to bypass each scanner, or trick the game into scanning a copy of that memory. Both methods have been used by others to bypass it.
The scope of this and going into this many triggers and whatnot is beyond more of a posting. The areas being scanned, most of them have nothing to do with anti-tamper (i.e. doing something about DRM or whatever), and this being used in combination with Denovo suggests that this ploy is mostly to try and keep people from cheating online by modifying the game code (i.e. anticheats), rather than relying on a central server to control the game.
Good luck,
Cal
1534000318
Great, now look for the other 257 of these and change them all and the game won't crash. The need to do this depends on how much stuff you add to your trainer, and how many things you are going to click on, open, menus, cutscenes, and 100 other things that trigger specific scanners.
best,
Cal[/QUOTE]
260 you said? that's good because I do have exactly 260 now. Automatic and probably pretty update-safe too. [COLOR=rgb(184, 49, 47)]Anti-anti-tampering done :)[/COLOR]
[SPOILER="Script"]
[CODE]
227
"Scripts"
Auto Assembler Script
{$lua}
local function hex(input)
return string.format("%02X", input)
end
local function restoreCheck(start_address)
local indx = 100
while indx < 200 do
if readBytes(start_address+indx,1) == 0xB0 then
if readBytes(start_address+indx+1,1) == 0x01 then
if readBytes(start_address+indx+2,1) == 0x90 then
writeBytes(start_address+indx,0x0f, 0x94, 0xc0)
return 1
end
end
end
indx = indx + 1
end
return 0
end
local function removeCheck(start_address)
local indx = 100
while indx < 200 do
if readBytes(start_address+indx,1) == 0x0f then
if readBytes(start_address+indx+1,1) == 0x94 then
if readBytes(start_address+indx+2,1) == 0xc0 then
writeBytes(start_address+indx,0xB0, 0x01, 0x90)
return 1
end
end
end
indx = indx + 1
end
return 0
end
local function aa_tamper(activate)
local aobs = AOBScan("8B 02 48 8D 52 04 48 33 D8", "+X-C-W", 0)
local modded = 0
if aobs ~= nil then
for ind = 0,aobs.count-1 do
if activate then
modded = modded + removeCheck(getAddress(aobs[ind]))
else
modded = modded + restoreCheck(getAddress(aobs[ind]))
end
end
end
--print(modded.." places modified.")
end
[ENABLE]
aa_tamper(true)
[DISABLE]
aa_tamper(false)
[/CODE][/SPOILER]