Skip to content
View in the app

A better way to browse. Learn more.

WRobot

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

nax

WRobot user
  • Joined

  • Last visited

Everything posted by nax

  1. Update: Warmane utilizes an RCE exploit to enable the loading of custom content. Additionally, they run a modified Warden system. I'm currently investigating the extent of these modifications. Further updates to follow.
  2. Hi, you could always use a TCP server to handle communications .
  3. They do not leave files on your pc.
  4. Hi, Did you change your IP address using a VPN or proxy? Also, did you use a relogger? Some servers might use a LUA function called 'Reportbug,' which can send back details about your computer, potentially flagging any new accounts created and connected by the same hardware. The reason I ask about the relogger is that @Droidz said mentioned here that reloggers ensure WoW doesn’t send back your PC name. ReportBug Pseudocode char __cdecl SendBugOpcode(int type, char *description) { int v2; // eax unsigned int v3; // eax unsigned __int64 v4; // rax unsigned __int64 v5; // rax double v6; // st7 double v7; // st6 char v8; // al unsigned __int64 v9; // rax unsigned __int64 v10; // rax const char *v11; // esi const char *v12; // eax _DWORD *v13; // eax _DWORD *v14; // esi int v15; // edi int v16; // ebx int v17; // eax const char *v18; // edi __int64 v19; // rax char *v20; // ecx char *v21; // eax int v22; // edi int v23; // eax void *v24; // eax char *v25; // eax unsigned int i; // ebx int v27; // edi _BOOL1 v28; // zf char *v29; // eax int v30; // esi int v31; // edi __int64 v33; // [esp+10h] [ebp-14F0h] unsigned __int64 v34; // [esp+18h] [ebp-14E8h] double v35; // [esp+18h] [ebp-14E8h] SpellRec v36; // [esp+2Ch] [ebp-14D4h] BYREF char v37; // [esp+2D4h] [ebp-122Ch] BYREF char Dst[4095]; // [esp+2D5h] [ebp-122Bh] BYREF char Buffer[256]; // [esp+12D4h] [ebp-22Ch] BYREF int a1[64]; // [esp+13D4h] [ebp-12Ch] BYREF unsigned int v41; // [esp+14D4h] [ebp-2Ch] BYREF CDataStore v42; // [esp+14D8h] [ebp-28h] BYREF DWORD nSize; // [esp+14F0h] [ebp-10h] BYREF float v44; // [esp+14F4h] [ebp-Ch] BYREF unsigned __int64 v45; // [esp+14F8h] [ebp-8h] if ( !description || !*description ) return 0; if ( !s_clientServices ) goto LABEL_46; v37 = 0; memset(Dst, 0, sizeof(Dst)); nSize = 256; if ( sub_86B4A0(Buffer, &nSize) ) { SStrPrintf((char *)a1, 256, "Username:\t%s\n", Buffer); SStrCopy_0(&v37, a1, 4096); } nSize = 256; if ( sub_86B480(Buffer, &nSize) ) { SStrPrintf((char *)a1, 256, "Computer:\t%s\n", Buffer); SStrCopy_0(&v37, a1, 4096); } v2 = OsGetNumberOfProcessors(); SStrPrintf((char *)a1, 256, "Processors:\t%u\n", v2); SStrCopy_0(&v37, a1, 4096); sub_86B9A0(&v41); v3 = v41; if ( v41 > 4 ) { v3 = 0; v41 = 0; } SStrPrintf((char *)a1, 256, "Processor vendor:\t%s\n", off_AD93C0[v3]); SStrCopy_0(&v37, a1, 4096); v4 = sub_86AE70(); if ( v4 >= qword_AD93B8 ) { v9 = v4 / 0xF4240; v6 = (double)(v9 & 0x7FFFFFFFFFFFFFFFi64); v45 = __PAIR64__(HIDWORD(v9) & 0x80000000, 0); v7 = (double)__SPAIR64__(HIDWORD(v9) & 0x80000000, 0); v8 = 71; } else { v5 = v4 / 0x3E8; v6 = (double)(v5 & 0x7FFFFFFFFFFFFFFFi64); v45 = __PAIR64__(HIDWORD(v5) & 0x80000000, 0); v7 = (double)__SPAIR64__(HIDWORD(v5) & 0x80000000, 0); v8 = 77; } SStrPrintf((char *)a1, 256, "Processor speed:\t%6.2f%cHz\n", (v6 - v7) * 0.001, v8); SStrCopy_0(&v37, a1, 4096); v10 = sub_86B4C0(); SStrPrintf((char *)a1, 256, "Memory:\t%uMB\n", (unsigned int)(v10 >> 20)); SStrCopy_0(&v37, a1, 4096); SStrCopy_0(&v37, "OS:\t\t", 4096); sub_86B430((char *)a1, 256); SStrCopy_0(&v37, a1, 4096); SStrCopy_0(&v37, L"\n", 4096); SStrPrintf((char *)a1, 256, "Version:\t%s\n", "WoW [Release] Build 12340 (Jun 24 2010 23:54:57)"); SStrCopy_0(&v37, a1, 4096); v11 = byte_C79620 != 0 ? &byte_C79620 : 0; if ( v11 ) { v12 = (const char *)GetRealmName(); SStrPrintf((char *)a1, 256, "Realm:\t%s\n", v12); SStrCopy_0(&v37, a1, 4096); SStrPrintf((char *)a1, 256, "Account:\t%s\n", v11); SStrCopy_0(&v37, a1, 4096); if ( ClientServices::GetCurrent() ) { if ( *((_DWORD *)ClientServices::GetCurrent() + 3029) ) { v13 = ClntObjMgrGetActivePlayerObj(); v14 = v13; if ( v13 ) { v15 = v13[52]; v16 = ClientDB::GetRow((int)&g_ChrRacesDB.funcTable2, *(unsigned __int8 *)(v15 + 68)); v17 = ClientDB::GetRow((int)&g_ChrClassesDB.funcTable2, *(unsigned __int8 *)(v15 + 69)); if ( v17 ) v18 = *(const char **)(v17 + 16); else v18 = "Unknown"; if ( v16 ) HIDWORD(v19) = *(_DWORD *)(v16 + 56); else HIDWORD(v19) = "Unknown"; LODWORD(v19) = v14[52]; v20 = off_AD6628[*(unsigned __int8 *)(v19 + 70)]; LODWORD(v19) = *(_DWORD *)(v19 + 192); v34 = __PAIR64__((unsigned int)v18, (unsigned int)v20); v33 = v19; v21 = CGUnit_C::GetObjectName_0((int)v14, 0, 1); SStrPrintf( (char *)a1, 256, "Character:\t%s (level %i %s %s %s)\n", v21, (_DWORD)v33, (const char *)HIDWORD(v33), (const char *)v34, (const char *)HIDWORD(v34)); SStrCopy_0(&v37, a1, 4096); v22 = CGPlayer_C::GetNewContinentID(); v23 = ClientDB::GetRow((int)&g_MapDB.funcTable2, v22); if ( v23 ) SStrPrintf((char *)a1, 256, "Map:\t\t%u (%s)\n", v22, *(const char **)(v23 + 4)); else SStrPrintf((char *)a1, 256, "Map:\t\t%u\n", v22); SStrCopy_0(&v37, a1, 4096); if ( dword_BD0788 && *(_BYTE *)dword_BD0788 ) { SStrPrintf((char *)a1, 256, "Zone:\t\t%s", (const char *)dword_BD0788); SStrCopy_0(&v37, a1, 4096); if ( dword_BD0784 && *(_BYTE *)dword_BD0784 ) { SStrPrintf((char *)a1, 256, " - %s", (const char *)dword_BD0784); SStrCopy_0(&v37, a1, 4096); } SStrCopy_0(&v37, L"\n", 4096); } (*(void (__thiscall **)(_DWORD *, float *))(*v14 + 44))(v14, &v44); v35 = ((double (__thiscall *)(_DWORD *))*(_DWORD *)(*v14 + 52))(v14); SStrPrintf((char *)a1, 256, "Position:\t%f %f %f, %f\n", v44, *(float *)&v45, *((float *)&v45 + 1), v35); SStrCopy_0(&v37, a1, 4096); if ( CGGameUI::m_lockedTarget ) { v24 = ClntObjMgrObjectPtr(CGGameUI::m_lockedTarget, TYPEMASK_UNIT); if ( v24 ) { v25 = CGUnit_C::GetObjectName_0((int)v24, 0, 1); SStrPrintf((char *)a1, 256, "Target:\t%s\n", v25); SStrCopy_0(&v37, a1, 4096); } } SStrPrintf((char *)a1, 256, "Auras:\n"); SStrCopy_0(&v37, a1, 4096); WowClientDB::GetRow(&v36); for ( i = 0; i < CGUnit_C::GetAuraCount(v14); ++i ) { v27 = CGUnit_C::GetAuraSpellId(i); if ( v27 ) { v28 = ClientDb::GetLocalizedRow(&g_SpellDB, v27, &v36) == 0; v29 = v36.m_name_lang; if ( v28 ) v29 = "UNKNOWN"; SStrPrintf((char *)a1, 256, "\t%s(%d)\n", v29, v27); SStrCopy_0(&v37, a1, 4096); } } nullsub_3(); } } } } v30 = SStrLen(&v37) + 1; v31 = SStrLen(description) + 1; v42.vTable = (CDataStore_vTable *)off_9E0E24; v42.m_buffer = 0; v42.m_base = 0; v42.m_alloc = 0; v42.m_size = 0; v42.m_read = -1; CDataStore::PutInt32(&v42, CMSG_BUG); CDataStore::PutInt32(&v42, type); CDataStore::PutInt32(&v42, v30); CDataStore::PutBytes2(&v42, (int)&v37, v30); CDataStore::PutInt32(&v42, v31); CDataStore::PutBytes2(&v42, (int)description, v31); v42.m_read = 0; if ( !s_clientServices ) LABEL_46: sub_8889B0((int)&byte_9E14FF, (int)&byte_9E14FF, 0); SendPacket((int)s_clientServices, &v42); v42.vTable = (CDataStore_vTable *)off_9E0E24; if ( v42.m_alloc != -1 ) CDataStore::InternalDestroy(&v42.m_buffer, &v42.m_base, &v42.m_alloc); return 1; }
  5. Hello, You can set a variable and modify it based on specific conditions as shown below: bool results = false; EventsLuaWithArgs.OnEventsLuaWithArgs += (name, args) => { if (name == "PLAYER_DEAD") results = true; }; OnEventsLuaWithArgs` is an event listener that triggers the specified action when the event occurs.
  6. It really not hard, if you are unable to do it yourself. you dont need nor deserve a copy.
  7. With the build button of ctrl + B download Visualstudio 2022 community
  8. @AsanWarriorVanilla.dll here is a build copy of @MateniaWarrior Vanilla without Auth .
  9. @DroidzYou are correct, sorry i should of thought of this before i replied. So to make a plugin more secure, you would have to hook and spoof Memcheck and PageScan to make sure when they do check if something is detoured. that we send back the right data they seek.
  10. So with wrobot plug-in, you’d have to use a detourhook using ASM, wow uses two different send data to server function. One is for public static and other is loaded when warden is loaded. I know that from wotlk below the server don’t get the pc username. For Cata and above I have no clue.
  11. not gonna lie, would be awesome if @DroidzAdd a Asm DetourHook class to wrobot so we can hook functions and have more control over wow. but i know he is using Break points and i dont know if having asm hook will mess with break points. @Pudgei wrote my own packet sniffer for wow in c++ (its not public) if you want to message me, i can let you use a copy of it.
  12. Anything is possible, wrobot just uses C#, besides a massive API, Wrobot can run all .net code . Just takes time and understanding how to build it. With wrobot plug-in you can build your own internet browser if you really wanted. why do you wanna see out going packets? Besides warden , I can surely tell you that there’s nothing interesting .
  13. local tooltip local function CreateToolTipFrame() tooltip = CreateFrame("GameTooltip", "MyTempTooltip", UIParent, "GameTooltipTemplate") tooltip:SetOwner(UIParent, "ANCHOR_NONE") end local function OnTooltipSetItemFromLink(itemLink) if itemLink then CreateToolTipFrame() -- Ensure tooltip is created tooltip:SetHyperlink(itemLink) local numLines = tooltip:NumLines() if numLines > 0 then for i = 1, numLines do local line = getglobal(tooltip:GetName() .. "TextLeft" .. i) if line then DEFAULT_CHAT_FRAME:AddMessage(line:GetText()) end end end tooltip:Hide() end end
  14. Hello, i Believe you have to use tooltip reading ,
  15. local tooltip; local function CreateToolTipFrame() tooltip = CreateFrame("GameTooltip", "MyTempTooltip", UIParent, "GameTooltipTemplate") tooltip:SetOwner(UIParent, "ANCHOR_NONE") end local function OnTooltipSetItemFromLink(itemLink) if itemLink then tooltip:SetHyperlink(itemLink) local numLines = tooltip:NumLines() if numLines > 0 then for i = 1, numLines do local line = _G[tooltip:GetName() .. "TextLeft" .. i] if line then print(line:GetText()) end end end tooltip:Hide() end end
  16. Could use tooltip reader to get the each lines.
  17. You can do this by creating your own product or by using Quester and creating Quest steps to run to trainer and learn spells once you completed the required step.
  18. Could always use Distance check, Distance from portal is more then a range then return true.
  19. give this profile a try, i ripped it from some random Dk profile i had in my quester An End To All Things....xml
  20. seems like a problem with your fightclass. Can you post logs?
  21. They just ban, but they do track your up after that.
  22. They ban bots all the time but not for detection, Wrobot doesn’t modify any memory. Wrobot use HWBP which is harder to detect if at all possible. The inject if I am correct is via endscene which every single video captured uses. they ban because people are watching bot do weird shit. sharp turns, weird directions etc
  23. Hey, for this problem with the pathfinder. I know wrobot sometimes (more or less of the time.) breaks down. I would recommend if you have the time sit down and build your own navigational system. It fairly easy to set up a basic one with recast and detour. And after you have a basic one up and running. Add features like distanceToWall etc.I find learning how it’s built is very fun.

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.