The reason for the patch is to enable IDA to attach more quickly. If ASLR is enabled, you need to wait for it to rebase the program every time it attaches.
|Leacher:11/2009|Donor:02/2010|Established Member:09/2010|Contributor:09/2010|Elite:08/2013|
Yes, it scans every dll loaded into wow process at specific offsets (offsets+size of data sent by server), hashes data and checks against hash received from server.
No idea about detouring, but I assume if you can do that for memory scans, it also possible for dll scans...
Some pseudo code:
Code:uint offset; // received from server byte size; // received from server var hmac = new HMACSHA1(seed); // seed is random 4 bytes, also received from server var data = ReadBytes(dll_base_adddress+offset, size); var hash = hmac.ComputeHash(data); // compute client side hash if(hash == serverHash) // compare client hash with hash received from server // module adds 0xE9 to it's CMSG_WARDEN_DATA response packet else // never bothered to check what it sends to server if hash doesn't match
Last edited by TOM_RUS; 05-22-2011 at 05:29 AM.
Thank you.
So if am understanding this correctly. It does the following:
Find dll base,
Adds offset,
Reads the data according to the size,
Converts this into a hash,
Checks this hash with the one from the warden server,
Replys with the result,
and starts again.
Looks like I need to find where this scan takes place then, so I can detour it and peak at the results![]()
|Leacher:11/2009|Donor:02/2010|Established Member:09/2010|Contributor:09/2010|Elite:08/2013|
TOM_RUS,
what about asm injection, for instance an allocated memory region not allocated by wow? Is there any jumping around with memory query functions?![]()
|Leacher:11/2009|Donor:02/2010|Established Member:09/2010|Contributor:09/2010|Elite:08/2013|
Finding code injected by almost every bot/hack is easy. Almost all cheats use BlackMagic for allocating memory in the target process. The problem is that the memory is always allocated with PAGE_EXECUTE_READWRITE permission and is never changed to PAGE_EXECUTE_READ. WoW has a section of memory with the same permission (tsk tsk) but it can easily be filtered out. When memory is allocated via VirtualAlloc(Ex), "BaseAddress" will be equal to "AllocationBase" (see code below). You can iterate through all the allocated memory regions in a few milliseconds.
Code:ULONG_PTR addressOffset = 0; MEMORY_BASIC_INFORMATION memInfo; while(VirtualQuery((LPCVOID)addressOffset, &memInfo, sizeof(MEMORY_BASIC_INFORMATION)) != 0){ if((memInfo.State != MEM_FREE) && (memInfo.Protect == PAGE_EXECUTE_READWRITE) && (memInfo.BaseAddress == memInfo.AllocationBase) && (memInfo.RegionSize != 0)){ //Process suspicious memory... } addressOffset += memInfo.RegionSize; }
Hey guys, ' want to contribute something too
Unit_Name1 = 0x91C // found by TOM_RUS, thanks
Unit_Subname = 0x4 // Jep... this was hard... since Unit_Name2 is @ 0x60 :P
Unit_Subname = [[ObjBase + UnitName1] + UnitSubname]
Has subzone and zone changed? I thought I used to read an offset and it would give the text but now with the new offsets it doesn't work. Am I not suppose to read as ASCII?