Hey I'm playing on the mac version of this game, I was wondering what your anti anti-cheat script does? I have two memory editing programs on mac, Bit Slicer (which looks and runs nicer), and the recent Cheat Engine 6.2 for Mac.
Every address in this game is static as far as I can tell. I've found various values for things like life, gold, diamonds, etc. but when I change the gold value the game just activates its anti cheat mechanisms. Can you please tell me how you wrote your anti anti-cheat scripts?
Here's are all the addresses I've found so far:
(Again, on a Mac!) There's three addresses that read the gold value every instant, the first one runs during the pause menu the other two don't:
Code: Select all
0x299E79 - bb_player_class_Player::m_RenderHUD(int, bool) NecroDancer __TEXT (static) r-x
mov eax, [eax+0x3b9327]
0x2772E0 - bb_player_class_Player::m_Update() NecroDancer __TEXT (static) r-x
xor eax, [ebx+0x3d73a7]
and
0x278CB2 - bb_player_class_Player::m_Update() NecroDancer __TEXT (static) r-x
xor eax, [ebx+0x3d73a7]
Which I'm guessing are part of the anti-cheat functionality. If I nop them, I can change freely change the gold value and the game doesn't do it's anti-cheat mechanism, until I pick up any new gold or buy an item.
When a new level loads, these 4 address read the gold value:
Code: Select all
0x2811F1 - bb_player_class_Player::m_Update() NecroDancer __TEXT (static) r-x
cmp dword [esi+0x3d73a7], 0x2328
0x1AE526 - bb_level_Level::g_NewLevel(int, int, int, bool, bb_level_object_LevelObject*, bool) NecroDancer __TEXT (static) r-x
add eax, [edx+0x4a1617]
0x1AE59F - bb_level_Level::g_NewLevel(int, int, int, bool, bb_level_object_LevelObject*, bool) NecroDancer __TEXT (static) r-x
mov eax, [edx+0x4a1617]
0x1B46C0 - bb_level_Level::g_NewLevel(int, int, int, bool, bb_level_object_LevelObject*, bool) NecroDancer __TEXT (static) r-x
mov eax, [edx+0x4a1617]
(this one read only once, when the game starts up)
0x10EDBD - bb_player_class_Player::g_new(int, int) NecroDancer __TEXT (static) r-x
xor eax, [edi+0x53f727]
When I pick up gold, these addresses access the gold value:
Note: The first one is the only address that actually
writes to the coin value
Code: Select all
0xF3172 - bb_player_class_Player::g_SetCoins(int, bool) NecroDancer __TEXT (static) r-x
mov [esi+0x55b31a], edi
0x245EBF - bb_player_class_Player::g_AddCoins(int) NecroDancer __TEXT (static) r-x
mov eax, [esi+0x4085ca]
0xF3327 - bb_player_class_Player::g_SetCoins(int, bool) NecroDancer __TEXT (static) r-x
mov edi, [esi+0x55b31a]
0xF3531 - bb_player_class_Player::g_SetCoins(int, bool) NecroDancer __TEXT (static) r-x
mov eax, [esi+0x55b31a]
Finally, these all read the gold value on various shop actions. Buying a chest, buying an item, trying to buy an item/chest without enough money, etc
Code: Select all
0x2811F1 - bb_player_class_Player::m_Update() NecroDancer __TEXT (static) r-x
cmp dword [esi+0x3d73a7], 0x2328
0x3A1617 - bb_salechest_SaleChest::m_Open(bb_player_class_Player*) NecroDancer __TEXT (static) r-x
mov eax, [esi+0x2ace87]
0x32CA69 - bb_saleitem_SaleItem::m_Pickup(bb_player_class_Player*) NecroDancer __TEXT (static) r-x
cvtsi2ss xmm0, dword [ebx+0x321a97]
0x25E296 - bb_player_class_Player::m_AddGeneralMetrics(bool) NecroDancer __TEXT (static) r-x
mov eax, [esi+0x3f04b7]
0x3A1663 - bb_salechest_SaleChest::m_Open(bb_player_class_Player*) NecroDancer __TEXT (static) r-x
mov eax, [esi+0x2ace87]
0x32D59C - bb_saleitem_SaleItem::m_Pickup(bb_player_class_Player*) NecroDancer __TEXT (static) r-x
add eax, [ebx+0x321a97]
0x2633A0 - bb_player_class_Player::m_Hit(String, int, int, bb_entity_Entity*, bool, int) NecroDancer __TEXT (static) r-x
mov eax, [ebx+0x3efe57]
There's two more that read the gold value when you return to lobby, I think they have to do with score/leaderboards which I don't care about.
So yea, any help with how you wrote your anti anti-cheat scripts would be very helpful. I'm not too knowledgeable on assembly, so some extra notes on what mov, xor, or cmp is doing exactly would be nice too. Thanks