-
Notifications
You must be signed in to change notification settings - Fork 154
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Packet 0x17 support #26
Conversation
server packet? */ | ||
} PACKED_ATTR() t_client_unknown_17; | ||
bn_int request_id; | ||
bn_byte memory; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Type is actually VOID, I only tested 1 address and found that byte was the correct type, at least for the address that I tested
Could you explain how to test this feature? |
Create a command with that code and use the command when you're in a chat channel and inside a game, the value will change. |
I add function Usage example: ...
["/memory"] = command_memory,
... command\memory.lua function command_memory(account, text)
api.client_readmemory(account.name, 1, 0x00596904, 1) -- game mode
api.client_readmemory(account.name, 2, 0x0057F0F0, 32) -- get minerals of all players in the game
api.client_readmemory(account.name, 3, 0x0057FE40, 64) -- get game map name
return 1
end handle_client.lua function handle_client_readmemory(account, request_id, data)
TRACE("Read memory request Id: " .. request_id)
-- display memory bytes
DEBUG(data)
if request_id == 1 then
DEBUG(account.name .. "'s in game flag: " .. data[0] )
end
if request_id == 2 then
DEBUG("Player 1 minerals: " .. bytes_to_int(data, 0, 4) )
DEBUG("Player 2 minerals: " .. bytes_to_int(data, 4, 4) )
DEBUG("Player 3 minerals: " .. bytes_to_int(data, 8, 4) )
DEBUG("Player 4 minerals: " .. bytes_to_int(data, 12, 4) )
DEBUG("Player 5 minerals: " .. bytes_to_int(data, 16, 4) )
DEBUG("Player 6 minerals: " .. bytes_to_int(data, 20, 4) )
DEBUG("Player 7 minerals: " .. bytes_to_int(data, 24, 4) )
DEBUG("Player 8 minerals: " .. bytes_to_int(data, 28, 4) )
end
if request_id == 3 then
DEBUG("Game map name: " .. bytes_to_string(data) )
end
end Output log http://pastebin.com/Egqnn0RC |
@xboi209 if I'm not mistaken, we can get memory flag of "fog of war", so to detect map hack in current games in interval. |
I have many offsets but I don't wish to share them. |
could you please add, Antihack mineral and multi command thanks so much, regards |
@Danteoriginal, to create antihack we need:
This antihack polls the players once a minute with checking that offset value is changed or not. So it's important that hacked offset is stored in memory for a long time (like maphack). If offset changes for a moment (like autoclick, etc) and then restores the value, it can't be catched. |
If we had a common process/tutorial to detect these it would be easy to build a small database of offsets for each game. And the good thing is that a non-coder could do it (moderators :)) @xboi209: Could you give some guidelines on this? It seems you have the most experience in this. |
You just need a program like Cheatengine and know how to filter out addresses until you get what you want which is very easy(could be done in minutes). Also specifically for StarCraft, I found a nice list of functions: https://vgce.googlecode.com/svn/trunk/data/Blizzard/Starcraft/1161_Functions_All.txt |
Ok, after some more research this is what I got:
This method could be implemented together with this packet. Problems:
I am currently testing the problem 2. together with some other moderators. Opinions and thoughts welcome. |
Ok.. scrap that for now. If game.dll is relocated by the OS to another address, all the addresses in the module are rewritten off the new base address. So the hash gets broken and you'd have to have a clean hash of every possible address to compare against. I'll have to find a way to take into the account the corrected addresses or target more specific regions in memory. |
No description provided.