Decided to release my 100% ban free bot source code

03/28/2019 07:08 HighGamer.#1
This is a private bot I had working before the latest XTRAP update now it doesn't work anymore..

This is a really good bot since you cannot get banned with it, it just uses a FindMonsterById() Hook in game engine and automatically walks to monster and attacks it, it uses the game engine's built-in functions to attack monsters which means the game plays it self, without packet modifications.. it still used recv() packets for data thats about it.. no packet sending at all.. this why you couldn't get banned with it.. it grinds like a normal person would without a ditto random script.. this was far more intelligent.

2 things Xtrap fixed..
~Import hooking (does nothing anymore) can't hook recv() to get packets for mob information etc.. but this isn't really that big of a deal I could strip the mob info from kalonline memory (this still is possible).

~Second thing they fixed which broke this bot completely is auto closes new threads created in DLL which makes multi-threading impossible and this means bot can no longer work, I tried to solve it with single threading with no luck since you need to wait for the game to load can't wait in single threading mode.

If anyone finds a new way to run threads that XTRAP cannot detect let me know I'll fix the bot up again and release it free for the community.


Edit:

Removed download for now.. I figured out a way to fix it again haha.. and its pretty nice way too.. won't disclose how I did it but it works now so they wont fix it again.
03/30/2019 02:26 HighGamer.#2
Can someone help me figure out the Monster Info like Current HP / Max HP / Monster Id.

Here is what I got so far..

Code:
unsigned int MonsterArray = 0x8E81B8; //TODO: Get PointerFindPattern
Code:
int GetMonsterIdByIndex(int index)
{
	int id = 0;
	__try {
		int pMonsterArray = *(unsigned int *)MonsterArray;
		if (pMonsterArray) {
			int firstMob = *(unsigned int*)(pMonsterArray + (index * 4));
			if (firstMob) {
				id = *(unsigned int *)(firstMob + 0xC);
			}
		}
	}
	__except (EXCEPTION_EXECUTE_HANDLER)
	{
		id = 0;
	}
	return id;
}
Anyone know how I can get the Current HP / Max HP of every monster?

I can find it easily in cheat engine but I can't find the pointers correctly because Pointer scan doesn't find anything.
03/30/2019 17:52 bloodx#3
PHP Code:
std::uintptr_t MonsterInfoPtr = *reinterpret_cast<std::uintptr_t*>(* reinterpret_cast<std::uintptr_t*>(Tool->QuickFindPattern("\xa1\x00\x00\x00\x00\x89\x45\xec\x8b\x4d\xec\x8b\x11\x89\x55\xe8\xc7\x45\xf8\x00\x00\x00\x00","x????xxxxxxxxxxxxxxxxxx"nullptr) + 1)); 
this should work -

anywhere in the Array should be Health values for sure ,too -

just cast it to a class like this ->

PHP Code:
std::uintptr_t player_pattern = *reinterpret_cast<std::uintptr_t*>(*reinterpret_cast<std::uintptr_t*>(Tool->QuickFindPattern(
            
"\xa1\x00\x00\x00\x00\x8b\x10\x8b\x0d\x00\x00\x00\x00\x8b\x42\x7c\xff\xd0""x????xxxx????xxxxx",
            
nullptr) + 1));

g_EnginePlayer = (EnginePlayer*)player_pattern;

class 
EnginePlayer
{
public:
    
unsigned char _0x0000[18128];
    
int X//0x46D0 
    
int Z//0x46D4 
    
int Y//0x46D8 
    
unsigned char _0x46DC[1732];
    
unsigned char Name[20]; //0x4DA0 
}; 
03/31/2019 01:36 HighGamer.#4
Here is what I have so far, it targets players too in the MonsterArray haha.. i'll check out your code thanks alot

Code:
int GetMonsterMinHP(int byMonsterId)
{
	int newid = FindCharacterInfo(byMonsterId, 0);
	if (newid > 0) {
		return *(DWORD *)(newid + 0x475C);
	}
	return 0;
}

int GetMonsterMaxHP(int byMonsterId)
{
	int newid = FindCharacterInfo(byMonsterId, 0);
	if (newid > 0) {
		return *(DWORD *)(newid + 0x4760);
	}
	return 0;
}

int GetMonsterXCoordinate(int byMonsterId)
{
	int newid = FindCharacterInfo(byMonsterId, 0);
	if (newid > 0) {
		return *(DWORD *)(newid + 0x46E0);
	}
	return 0;
}

int GetMonsterYCoordinate(int byMonsterId)
{
	int newid = FindCharacterInfo(byMonsterId, 0);
	if (newid > 0) {
		return *(DWORD *)(newid + 0x46E8);
	}
	return 0;
}
Any tips how to use MonsterInfoPtr ? it seems to only contain the first 4 monsters.. the other monsters are all 0's... and I have atleast 10 on my screen


using your MonsterInfoPtr I created a loop to scan for the first 100 monsters and here is the results!..

Code:
int GetMonsterIdByIndex(int index)
{
	int id = 0;
	__try {
		if (*(DWORD *)MonsterArray != 0)
			return (*(DWORD*)((*(DWORD *)(MonsterArray)) + (index * 4)));
		else
			return 0;
	}
	__except (EXCEPTION_EXECUTE_HANDLER)
	{
		id = 0;
	}
	return id;
}
Code:
	int id = 0;
	for (int i = 0; i < 100; i++) {
		id = GetMonsterIdByIndex(i);
		int newid = FindCharacterInfo(id, 0);

		if (newid > 0)
			Log("[Index = %X][monsterId = %X][HP = %d][HP Max = %d][x=%d][y=%d]\n", i, newid, *(DWORD *)(newid + 0x475C), *(DWORD *)(newid + 0x4760), *(DWORD *)(newid + 0x46E0), *(DWORD *)(newid + 0x46E8));

		//if (id > 0)
			//AttackMonster(id);
	}
results are

Code:
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258034][y=262706]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258034][y=262706]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258034][y=262706]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258034][y=262706]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258034][y=262706]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258034][y=262706]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258034][y=262706]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258034][y=262706]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258065][y=262707]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258065][y=262707]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258065][y=262707]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258065][y=262707]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258065][y=262707]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258065][y=262707]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258065][y=262707]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258065][y=262707]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258065][y=262707]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258065][y=262707]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258065][y=262707]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258065][y=262707]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258065][y=262707]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258065][y=262707]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258065][y=262707]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258095][y=262715]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258095][y=262715]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258095][y=262715]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258095][y=262715]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258095][y=262715]
as you can see my previous method does a better job with 0xC.. which is Index = (3 * 4) = 12 (0xC)

Here is with my old method

Code:
int GetMonsterIdByIndex(int index)
{
	int id = 0;
	__try {
		if (*(DWORD *)MonsterArray != 0) {
			int firstMob = (*(DWORD*)((*(DWORD *)(MonsterArray)) + (index * 4)));
			if (firstMob)
				id = *(unsigned int *)(firstMob + 0xC);
		}
	}
	__except (EXCEPTION_EXECUTE_HANDLER)
	{
		id = 0;
	}
	return id;
}
Code:
[Index = 1][monsterId = 22C105F8][HP = 207][HP Max = 207][x=259026][y=262892]
[Index = 2][monsterId = 22BD0430][HP = 207][HP Max = 207][x=259232][y=262789]
[Index = 1][monsterId = 22C105F8][HP = 207][HP Max = 207][x=259026][y=262892]
[Index = 2][monsterId = 22BD0430][HP = 207][HP Max = 207][x=259232][y=262789]
[Index = 1][monsterId = 22C105F8][HP = 207][HP Max = 207][x=259026][y=262892]
[Index = 2][monsterId = 22BD0430][HP = 207][HP Max = 207][x=259232][y=262789]
[Index = 1][monsterId = 22C105F8][HP = 207][HP Max = 207][x=259026][y=262892]
[Index = 2][monsterId = 22BD0430][HP = 207][HP Max = 207][x=259232][y=262789]
[Index = 1][monsterId = 22C105F8][HP = 207][HP Max = 207][x=259026][y=262892]
[Index = 2][monsterId = 22BD0430][HP = 207][HP Max = 207][x=259232][y=262789]
[Index = 1][monsterId = 22C105F8][HP = 207][HP Max = 207][x=259026][y=262892]
[Index = 2][monsterId = 22BD0430][HP = 207][HP Max = 207][x=259232][y=262789]
[Index = 1][monsterId = 22C105F8][HP = 207][HP Max = 207][x=259026][y=262892]
[Index = 2][monsterId = 22BD0430][HP = 207][HP Max = 207][x=259232][y=262789]
[Index = 1][monsterId = 22C105F8][HP = 207][HP Max = 207][x=259026][y=262892]
[Index = 2][monsterId = 22BD0430][HP = 207][HP Max = 207][x=259232][y=262789]
[Index = 1][monsterId = 22C105F8][HP = 207][HP Max = 207][x=259026][y=262892]
[Index = 2][monsterId = 22BD0430][HP = 207][HP Max = 207][x=259232][y=262789]
[Index = 11][monsterId = 22BF2C88][HP = 133][HP Max = 133][x=258768][y=262192]
[Index = 20][monsterId = 22BD0430][HP = 207][HP Max = 207][x=259073][y=262835]
[Index = 21][monsterId = 22BE3FD0][HP = 133][HP Max = 133][x=258293][y=262076]
[Index = 22][monsterId = 22C06828][HP = 207][HP Max = 207][x=259147][y=262779]
[Index = 1][monsterId = 22BD0430][HP = 207][HP Max = 207][x=259073][y=262835]
[Index = 11][monsterId = 22BF2C88][HP = 133][HP Max = 133][x=258768][y=262192]
[Index = 20][monsterId = 22BD0430][HP = 207][HP Max = 207][x=259073][y=262835]
[Index = 21][monsterId = 22BE3FD0][HP = 133][HP Max = 133][x=258293][y=262076]
[Index = 22][monsterId = 22C06828][HP = 207][HP Max = 207][x=259147][y=262779]
[Index = 1][monsterId = 22BD0430][HP = 207][HP Max = 207][x=259073][y=262835]
[Index = 11][monsterId = 22BF2C88][HP = 133][HP Max = 133][x=258768][y=262192]
[Index = 20][monsterId = 22BD0430][HP = 207][HP Max = 207][x=259073][y=262835]
[Index = 21][monsterId = 22BE3FD0][HP = 133][HP Max = 133][x=258293][y=262076]
[Index = 22][monsterId = 22C06828][HP = 207][HP Max = 207][x=259147][y=262779]
[Index = 1][monsterId = 22BD0430][HP = 207][HP Max = 207][x=259073][y=262835]
[Index = 11][monsterId = 22BF2C88][HP = 133][HP Max = 133][x=258768][y=262192]
[Index = 20][monsterId = 22BD0430][HP = 207][HP Max = 207][x=259073][y=262835]
[Index = 21][monsterId = 22BE3FD0][HP = 133][HP Max = 133][x=258293][y=262076]
[Index = 22][monsterId = 22C06828][HP = 207][HP Max = 207][x=259147][y=262779]
[Index = 1][monsterId = 22BD0430][HP = 207][HP Max = 207][x=259073][y=262835]
manages to pick up 3 monsters out of 10 or so


All my findings are from [Only registered and activated users can see links. Click Here To Register...] its a old engine kalonline which still has Hackshield not xTrap so I can use cheat engine to find the values.. then I convert the same code findings using IDA PRO to the international kalonline and thats how I work.

Here is how the offsets are..

[Only registered and activated users can see links. Click Here To Register...]


seems the pattern is reset every 0xC.. and a new nest of 0x0, 0x4, 0x8, then new 0xC again happens.

Newest one coded
Code:
int GetMonsterIdByIndex(int index)
{
	int id = 0;
	
	int offset_0 = 0;
	int offset_1 = 0;
	int offset_2 = 0;
	int offset_3 = 0;
	int offset_4 = 0;
	int stop_offset = 1;

	__try {
		for (int i = 0; i < index; i++) {
			if (offset_0 == 0xC) {
				offset_0 = 0;
				offset_1 += 4;
				stop_offset = 2;
			}
			if (offset_1 == 0xC) {
				offset_1 = 0;
				offset_2 += 4;
				stop_offset = 3;
			}
			if (offset_2 == 0xC) {
				offset_2 = 0;
				offset_3 += 4;
				stop_offset = 4;
			}
			if (offset_3 == 0xC) {
				break;
			}
			offset_0 += 4;
		}

		if (*(DWORD *)MonsterArray != 0) {
			int firstMob = (*(DWORD*)((*(DWORD *)(MonsterArray)) + (offset_0)));
			if (firstMob && stop_offset > 1) {
				int secondMob = *(DWORD*)((*(DWORD*)((*(DWORD *)(MonsterArray)) + (offset_0))) + (offset_1));
				if (secondMob && stop_offset > 2) {
					int thirdMob = *(DWORD*)(*(DWORD*)((*(DWORD*)((*(DWORD *)(MonsterArray)) + (offset_0))) + (offset_1)) + (offset_2));
					if (thirdMob && stop_offset > 3)
					{
						int forthMob = *(DWORD*)(*(DWORD*)(*(DWORD*)((*(DWORD*)((*(DWORD *)(MonsterArray)) + (offset_0))) + (offset_1)) + (offset_2)) + (offset_3));
						if (forthMob) {
							id = *(unsigned int *)(forthMob + 0xC);
						}
					} else {
						id = *(unsigned int *)(thirdMob + 0xC);
					}
				} else {
					id = *(unsigned int *)(secondMob + 0xC);
				}
			} else {
				id = *(unsigned int *)(firstMob + 0xC);
			}
		}
	}
	__except (EXCEPTION_EXECUTE_HANDLER)
	{
		id = 0;
	}
	return id;
}
manages to get alot of monsters now

But its just 4 different monster Id's repeated over and over again.

Code:
[Index = 0][monsterId = 228D1758][HP = 243][HP Max = 243][x=257845][y=262437]
[Index = 1][monsterId = 228C7988][HP = 133][HP Max = 133][x=258736][y=262302]
[Index = 2][monsterId = 220E9098][HP = 100][HP Max = 100][x=258310][y=262332]
[Index = 5][monsterId = 228BDBB8][HP = 133][HP Max = 133][x=258296][y=262063]
[Index = 7][monsterId = 228C2AA0][HP = 133][HP Max = 133][x=257856][y=262151]
[Index = A][monsterId = 228C7988][HP = 133][HP Max = 133][x=258736][y=262302]
[Index = B][monsterId = 228C7988][HP = 133][HP Max = 133][x=258736][y=262302]
[Index = E][monsterId = 228BDBB8][HP = 133][HP Max = 133][x=258296][y=262063]
[Index = 10][monsterId = 228C2AA0][HP = 133][HP Max = 133][x=257856][y=262151]
[Index = 13][monsterId = 228E0410][HP = 168][HP Max = 168][x=258359][y=262981]
[Index = 14][monsterId = 220E9098][HP = 100][HP Max = 100][x=258310][y=262332]
[Index = 17][monsterId = 228BDBB8][HP = 133][HP Max = 133][x=258296][y=262063]
[Index = 19][monsterId = 228C2AA0][HP = 133][HP Max = 133][x=257856][y=262151]
[Index = 1C][monsterId = 228D6640][HP = 0][HP Max = 168][x=258325][y=262440]
[Index = 1D][monsterId = 228D6640][HP = 0][HP Max = 168][x=258325][y=262440]
[Index = 20][monsterId = 228BDBB8][HP = 133][HP Max = 133][x=258296][y=262063]
[Index = 22][monsterId = 228C2AA0][HP = 133][HP Max = 133][x=257856][y=262151]
[Index = 25][monsterId = 228C7988][HP = 133][HP Max = 133][x=258736][y=262302]
[Index = 26][monsterId = 228C7988][HP = 133][HP Max = 133][x=258736][y=262302]
[Index = 29][monsterId = 228BDBB8][HP = 133][HP Max = 133][x=258296][y=262063]
[Index = 2B][monsterId = 228C2AA0][HP = 133][HP Max = 133][x=257856][y=262151]
[Index = 2E][monsterId = 228E0410][HP = 168][HP Max = 168][x=258359][y=262981]
[Index = 2F][monsterId = 220E9098][HP = 100][HP Max = 100][x=258310][y=262332]
[Index = 32][monsterId = 228BDBB8][HP = 133][HP Max = 133][x=258296][y=262063]
[Index = 34][monsterId = 228C2AA0][HP = 133][HP Max = 133][x=257856][y=262151]
[Index = 37][monsterId = 228CC870][HP = 133][HP Max = 133][x=258624][y=261787]
[Index = 38][monsterId = 228CC870][HP = 133][HP Max = 133][x=258624][y=261787]
[Index = 3B][monsterId = 228BDBB8][HP = 133][HP Max = 133][x=258296][y=262063]
[Index = 3D][monsterId = 228C2AA0][HP = 133][HP Max = 133][x=257856][y=262151]
[Index = 40][monsterId = 228C7988][HP = 133][HP Max = 133][x=258736][y=262302]
[Index = 41][monsterId = 228C7988][HP = 133][HP Max = 133][x=258736][y=262302]
[Index = 44][monsterId = 228BDBB8][HP = 133][HP Max = 133][x=258296][y=262063]
[Index = 46][monsterId = 228C2AA0][HP = 133][HP Max = 133][x=257856][y=262151]
[Index = 49][monsterId = 228E0410][HP = 168][HP Max = 168][x=258359][y=262981]
[Index = 4A][monsterId = 220E9098][HP = 100][HP Max = 100][x=258310][y=262332]
[Index = 4D][monsterId = 228BDBB8][HP = 133][HP Max = 133][x=258296][y=262063]
[Index = 4F][monsterId = 228C2AA0][HP = 133][HP Max = 133][x=257856][y=262151]
03/31/2019 17:13 bloodx#5
just take a look with ReClass for example at the MonsterInfoPtr adress - so you can better create a class for smth like this.
03/31/2019 20:55 HighGamer.#6
I know what addresses mean what.. i don't know how to get the monster pointer data out successfully anyways. Can you post more code on your MonsterInfoPtr?

Can ReClass run with kalonline anticheats? is it like a debugger or something?

I know MonsterInfoPtr = std::map< int, TargetInfo>

Monster Data Info Ptr in Kalonline source code C++ is declared as..

Code:
class CGameTarget : public CModel {
#else
class CGameTarget : public CGameEffectBoneModel {
#endif

public:
	CGameTarget();
	~CGameTarget();

#ifdef DEF_S34_DIOB_080424 // DEF_S34_DIOB_080424_05
	// Ÿ°Ù À妽º ÀúÀå º¯¼ö
	int					m_nIndex;
#endif

#ifndef DEF_XMODEL_BONE_EFFECT_OEN_081125
	DWORD				m_CharaterID;                       //@  ij¸¯ÅÍ °íÀ¯ id
#endif

	DWORD				m_dwGID;                            //@  ±æµå ID
	const char *		m_pCharaterName;                    //@  ij¸¯ÅÍ ¸í
	char				m_pCharaterGuildName[MAX_PATH];     //@  ±æµå¸í
	char 				m_pCharaterGuildClassName[MAX_PATH];//@  ±æµåµî±Þ¸í

#ifdef DEF_UI_RENEWALL_081016
	BYTE				m_byLevel;		        //@  ·¹º§
#endif

	BYTE				m_byKind;		        //@  ij¸¯ÅÍÁ¾·ù CK_PLAYER CK_MONSTER
	BYTE				m_byEnd;                //@  ij¸¯Åͳ¡?
	int					m_vServerPt[3];         //@  ¼*¹öÆ÷ÀÎÅÍ?

	D3DXVECTOR3			m_vPosi;                //@  ij¸¯ÅÍÀ§Ä¡
	D3DXVECTOR3			m_vAttack;              //@  ij¸¯ÅÍ °ø°Ý ¹æÇâ?
	D3DXVECTOR3			m_vMove;                //@  ij¸¯ÅÍ ¿òÁ÷ÀÓ(À̵¿·®Àϵí)

	D3DXMATRIX			m_matRotPos;            //@  ȸÀüÀ§Ä¡Çà·Ä? ½ºÄÉÀÏ °ª Àû¿ë¾ÈµÈ Çà·Ä?

	int					m_nCurHP;               //@  ÇöÀç Health Point
	int					m_nMaxHP;               //@  ÃÖ´ë Health Point
}
}

	class TargetInfo
	{
	public:
		TargetInfo():m_pTarget(0)
		{};
		~TargetInfo()
		{
			SAFE_DELETE(m_pTarget);
		}
		CGameTarget * m_pTarget;
	};

typedef std::map< int, TargetInfo> t_TargetInfoMap;
t_TargetInfoMap m_TargetInfoMap;
Code:
//CGame_Character::TargetInfo* CGame_Character::FindCharacterInfo(DWORD  FindID)
//{
//	t_TargetInfoMap::iterator it = m_TargetInfoMap.find(FindID);
//	if (it != m_TargetInfoMap.end())
//	{
//		return &(*it).second;
//	}
//	return 0;
//}
04/04/2019 08:29 Sin12#7
buy kalonline Date Base any can help me add my skype [Only registered and activated users can see links. Click Here To Register...]