Ostatnio skrypt mi przegrał 300k, ale to tak kusi żeby znowu go postawić, masakra jakaś:D
Wersja do druku
Ostatnio skrypt mi przegrał 300k, ale to tak kusi żeby znowu go postawić, masakra jakaś:D
Proszę o wyslanie jakis informacji o tych crashach. Potrzebuje feedbacka, a sam nie jestem w stanie stworzyc 100 sytuacji do testowania.
Jak jest crash, cos sie wyswietla. Czy jest po restarcie jakas wiadomosc w oknie Tibii?
@Okno
Wiem, wiem, raz jest się na wozie, raz pod wozem ;)
Mi pojawia się debug, Cały klient wyłącza się razem z botem. Ale to nie koniecznie może być wina skryptu tylko miliarda ludzi którzy przechodzą przez depo.
@
Ponawiam...
Wyjaśni mi ktoś w końcu dlaczego ten bot tak bardzo zużywa procka? 100% przy 2 mckach?
LordCompi synchronizujesz wysyłanie pakietów?
@up
TibiaSock to robi za niego. (w brzydki sposób..)
a myślałem że się chłopak chociaż trochę wysilił
http://gmclan.org/uploader/3899/dicebot1.png
Co wy na to?
Dice bot ? doskonały pomysł
Rozwiń. Jestem ciekawy.
Jak najbardziej za!
I XenoBot i ElfBot wstrzykują swoją dllke do procesu Tibii, co gwarantuje im bezpośredni dostęp do pamięci i funkcji klienta. Jednak zacznijmy od tego, jak działa TibiaSock:
W skrócie: pobieramy watek glowny procesu, freezujemy go. Nastepnie, czytamy bufer pakietow wychodzacych do zmiennej pomocniczej, nadpisujemy go naszym pakietem, wysylamy, i przywracamy oryginalny buffer. Jak widać, jest to dosc "dluga" procedura, wiaze sie z manipulacja stanu watkow - w tym przypadku glownego watku.Kod:void SendPacketToServerEx(HANDLE process, BYTE* dataBuffer, int length, DWORD SendStreamData, DWORD SendStreamLength, DWORD SendPacketCall)
{
DWORD MainThreadId = GetProcessMainThreadId(process);
HANDLE MainThread = OpenAndSuspendThread(MainThreadId);
int OldLength;
BYTE OldData[1024];
ReadProcessMemory(process, (LPVOID)SendStreamLength, &OldLength, 4, NULL);
ReadProcessMemory(process, (LPVOID)SendStreamData, OldData, OldLength, NULL);
length += 8;
BYTE* actualBuffer = CreateOutgoingBuffer(dataBuffer, length);
WriteProcessMemory(process, (LPVOID)SendStreamLength, &length, 4, NULL);
WriteProcessMemory(process, (LPVOID)SendStreamData, actualBuffer, length, NULL);
ExecuteRemoteCode(process, (LPVOID)SendPacketCall, (LPVOID)1);
WriteProcessMemory(process, (LPVOID)SendStreamLength, &OldLength, 4, NULL);
WriteProcessMemory(process, (LPVOID)SendStreamData, OldData, OldLength, NULL);
ResumeAndCloseThread(MainThread);
}
Jak napisalem na poczatku, i XenoBot i ElfBot wstrzykuja dllke, dzieki czemu maja bezposredni dostep do pamieci tibii i jej funkcji. Umozliwia to programiscie, wywolywanie funkcji wbudowanych w klienta, jak rowniez kontrole nad nimi (hooki itd.). Nieporownywalnie lepszym rozwiazaniem jest wysylanie pakietow kontynuujac program-flow, niz wysylac pakiety 'spoza programu'. Przykład:
Załozmy, że Tibia pierwotnie korzysta z funkcji Tibia::OriginalSendPacket. Hookując tą funkcje funkcją Tibia::HookedOriginalSendPacket(), mamy mozliwosc wysylania pakietow, oraz kontynuujemy program-flow - nie modyfikujemy state watkow itd., ponadto, jest to duzo szybsze i efektywniejsze rozwiazanie.Kod:void Tibia::OriginalSendPacket(Packet& p)
{
//sending packet to server
}
void Tibia::HookedOriginalSendPacket(Packet& p)
{
//sending our packets to server
for (Packet& x : packetsToSend)
Tibia::OriginalSendPacket((x);
//sending packet to server
Tibia::OriginalSendPacket(p)
}
Jesli cos jest nie jasne, pytaj :)
Czyli w skrócie, Blue Bot jest chujowy.