Only way to speedhack in AO without detection is to hook to API's addresses directly you have to find the IAT addresses for 3 api calls "timeGetTime", "GetTickCount", "QueryPerformanceCounter".
If you do the same method all speedhacks use which is simply this below, chances are it will get detected 100% of the time, i call this method (old speedhack) in my bot.
Works like this old speedhack
Code:
TimeGetTimex = (DWORD)GetProcAddress("winmm.dll", "timeGetTime");
Jump(TimeGetTimex, (DWORD)NewTickCount, TRUE);
GetTickCountx = (DWORD)GetProcAddress("kernel32.dll", "GetTickCount");
Jump(GetTickCountx, (DWORD)NewTickCount, TRUE);
QueryPerformanceCounterx = (DWORD)GetProcAddress("kernel32.dll", "QueryPerformanceCounter");
Jump(QueryPerformanceCounterx, (DWORD)NewQueryPerformanceCounter, TRUE);
myprintf(true, false, false, TextColor::RED, "Old Speedhack loaded, will be detected.\n");
OldSpeedHackInitialized = true;
New speedhack uses this method which is hardcoded IAT addresses. Here is a example for NA (Global server) of AO which I updated yesterday.
Code:
[SpeedHack]
timeGetTime=0x2707DD0
GetTickCount=0x27070F4
QueryPerformanceCounter=0x2707194