[Tool] BoI Memory Address Updater

06/14/2010 00:28 0xDEC0DE#1
So here's an example program about how to automatically update memory addresses of boi, it uses a signature scanner. Signatures are less likely to change from version to version so usually involves less updating. I only have a couple of different addresses currently in this program, but if you tell me about others i might add them in.

I sort of ripped it out of another program and made a standalone, so some of the functions aren't used in this program.

Also here's some info on signatures and what they are [Only registered and activated users can see links. Click Here To Register...]
06/14/2010 03:27 alaor#2
hmm.. thanks man
06/14/2010 05:04 Arcо#3
Very nice!
But I thought you were done with BoI?
06/14/2010 06:22 0xDEC0DE#4
Quote:
Originally Posted by .Arco View Post
Very nice!
But I thought you were done with BoI?
Me too... but i felt like i needed to finish boibb3 because it was kinda unfinished. I actually ripped this standalone from biobb3.1 but i want to do some debugging the next couple of days before i post the final version of biobb3.

Also the rant about me being done was at like 3 in the morning after like 15 hours of programming/debugging (sometimes stupid stuff takes a looonngg time). Basically want i meant was I'll probably float around abit but i won't be posting to much.
06/18/2010 17:07 SensaCool#5
int pCharacter_Name = Addr_Player_InfoBase + 0x8EB4;

is this offset of character Name.
06/18/2010 19:46 0xDEC0DE#6
Quote:
Originally Posted by SensaCool View Post
int pCharacter_Name = Addr_Player_InfoBase + 0x8EB4;

is this offset of character Name.
Yes, that is what it currently is. Or did you mean something else?

Code:
//---Bag Use Item
uint pBag_UseItem = HomeGrown.Hacking.dwFindPattern(pr, 0x401000, sig_Bag_UseItem, mask_Bag_UseItem);

//---Map Auto Route
uint pMap_AutoRoute = HomeGrown.Hacking.dwFindPattern(pr, 0x401000, sig_Map_AutoRoute, mask_Map_AutoRoute);

//---Player Current X, Y, Z
uint sig_Char_CurrentX_Addr = HomeGrown.Hacking.dwFindPattern(pr, 0x401000, sig_Char_CurrentX, mask_Char_CurrentX);
int pCharacter_CurrentX = MemAddr_GrabAddress((int)sig_Char_CurrentX_Addr, 29);
int pCharacter_CurrentY = pCharacter_CurrentX + 4;
int pCharacter_CurrentZ = pCharacter_CurrentX + 8;

//---Player Dest X, Y
uint sig_Char_DestX_Addr = HomeGrown.Hacking.dwFindPattern(pr, 0x401000, sig_Char_DestX, mask_Char_DestX);
int pCharacter_DestX = MemAddr_GrabAddress((int)sig_Char_DestX_Addr, 17);
int pCharacter_DestY = pCharacter_DestX + 4;


//---Player Info Base, not only possible sig
uint sig_Player_InfoBase_Addr = HomeGrown.Hacking.dwFindPattern(pr, 0x401000, sig_Player_InfoBase, mask_Player_InfoBase);
int Addr_Player_InfoBase = MemAddr_GrabAddress((int)sig_Player_InfoBase_Addr, 17);//E56710
int pCharacter_Name = Addr_Player_InfoBase + 0x8EB4;
int pCharacter_Hp = Addr_Player_InfoBase + 0x90D0;
int pCharacter_Mp = Addr_Player_InfoBase + 0x90D8;
int pCharacter_Rage = Addr_Player_InfoBase + 0x90E0;
int pCharacter_Lvl = Addr_Player_InfoBase + 0x90E8;
int pCharacter_Exp = Addr_Player_InfoBase + 0x90F0;
int pCharacter_Points = Addr_Player_InfoBase + 0x90F8;
int pCharacter_HpMax = Addr_Player_InfoBase + 0x9108;
int pCharacter_MpMax = Addr_Player_InfoBase + 0x9110;
int pCharacter_HpRegen = Addr_Player_InfoBase + 0x9128;
int pCharacter_Accuracy = Addr_Player_InfoBase + 0x9138;
int pCharacter_Evasion = Addr_Player_InfoBase + 0x9158;
int pCharacter_Str = Addr_Player_InfoBase + 0x9160;
int pCharacter_Vit = Addr_Player_InfoBase + 0x9168;
int pCharacter_Dex = Addr_Player_InfoBase + 0x9170;
int pCharacter_Int = Addr_Player_InfoBase + 0x9178;
int pCharacter_Spr = Addr_Player_InfoBase + 0x9180;
int pCharacter_PAtckMin = Addr_Player_InfoBase + 0x91B0;
int pCharacter_PAtckMax = Addr_Player_InfoBase + 0x91B8;
int pCharacter_MAtck = Addr_Player_InfoBase + 0x91C0;
int pCharacter_PDef = Addr_Player_InfoBase + 0x9218;
int pCharacter_MDef = Addr_Player_InfoBase + 0x9228;
int pCharacter_Money = Addr_Player_InfoBase + 0x9258;
int pCharacter_NextLvl = Addr_Player_InfoBase + 0x92E8;

//---Pet Info Base, used a bunch of int3 in sig
uint sig_Pet_InfoBase_Addr = HomeGrown.Hacking.dwFindPattern(pr, 0x401000, sig_Pet_InfoBase, mask_Pet_InfoBase);
int pPet_InfoBase = MemAddr_GrabAddress((int)sig_Pet_InfoBase_Addr, 17); //E7A2C0
int pPet_FrameIsOut = pPet_InfoBase + 0xE4;
int pPet_CurrentHp = pPet_InfoBase + 0xCA0 + 0x31C;
int pPet_CurrentMp = pPet_InfoBase + 0xCA0 + 0x31C + 0x324;

//---Current Map ID
uint sig_Character_Map_ID_Addr = HomeGrown.Hacking.dwFindPattern(pr, 0x401000, sig_Character_Map_ID, mask_Character_Map_ID);
int pCharacter_Map_ID = MemAddr_GrabAddress((int)sig_Character_Map_ID_Addr, 1); //b33fb0

//---Target Info base, bunch of int3 in sig
uint sig_Target_InfoBase_Addr = HomeGrown.Hacking.dwFindPattern(pr, 0x401000, sig_Target_InfoBase, mask_Target_InfoBase);
int pTarget_InfoBase = MemAddr_GrabAddress((int)sig_Target_InfoBase_Addr, 1); //108EDB8
int pTarget_IsMonster = pTarget_InfoBase + 0x8 + 0xE4;
int pTarget_IsLord = pTarget_InfoBase + 0x53A0 + 0xE4;
int pTarget_HasBeenHit = pTarget_InfoBase + 0x8240 + 0xE4;
int pTarget_PointerName = pTarget_InfoBase + 0x1318; //guess offset
06/19/2010 15:50 SensaCool#7
I still not find base address of character, pet, mod >"< to make sign and mark.
06/19/2010 16:39 0xDEC0DE#8
Quote:
Originally Posted by SensaCool View Post
I still not find base address of character, pet, mod >"< to make sign and mark.
you'll need to attach a debugger to do that. Your best bet is to use pCharacter_Name (or the lowest value in memory) and just do offsets from that.

EX:
Code:
pCharacter_Name = XXXXXXXX;  //some addres
int pCharacter_Hp = pCharacter_Name + 0x21C;
int pCharacter_Mp = pCharacter_Name + 0x224;
.
.
.
OR
you could find pCharacter_Name and subtract 0x8EB4 to get the base, attach a debugger and figure out where that is used and thus you could make a sig and mask from where that code being used.

btw what are you trying to do, i'm kinda confused and i might be able to help better if you explain
06/19/2010 17:28 SensaCool#9
i am trying to config BOI address update to suitable with my BOI client (not Global) and then config the BBot3. I get stuck with 2 function (map auto round and Crusade Order Quest). But Thanks u very very much for helping me. Sorry because my english is not good.
06/19/2010 18:13 0xDEC0DE#10
Quote:
Originally Posted by SensaCool View Post
i am trying to config BOI address update to suitable with my BOI client (not Global) and then config the BBot3. I get stuck with 2 function (map auto round and Crusade Order Quest). But Thanks u very very much for helping me. Sorry because my english is not good.
It's np. Which version are you using? If its too different you might also have to change the key bindings. Maybe if you upload the game.exe somewhere i might be able to help you find the function addresses, if not then you'll need to attach a debugger to find where the function addresses are.
06/19/2010 19:48 SensaCool#11
Here is my Game.exe, Thanks for helping me :handsdown::handsdown::handsdown:
06/19/2010 23:15 0xDEC0DE#12
Ok i uploaded a newer version that should give correct addresses for both versions now.
Here's the output for your version
Code:
pBag_UseItem: 0x53B160
pMap_AutoRoute: 0x689430
pCharacter_CurrentX: 0xA0FCD0
pCharacter_CurrentY: 0xA0FCD4
pCharacter_CurrentZ: 0xA0FCD8
pCharacter_DestX: 0xA3C064
pCharacter_DestY: 0xA3C068
pCharacter_Name: 0xA4508C
pCharacter_Hp: 0xA452A8
pCharacter_Mp: 0xA452B0
pCharacter_Rage: 0xA452B8
pCharacter_Lvl: 0xA452C0
pCharacter_Exp: 0xA452C8
pCharacter_Points: 0xA452D0
pCharacter_HpMax: 0xA452E0
pCharacter_MpMax: 0xA452E8
pCharacter_HpRegen: 0xA45300
pCharacter_Accuracy: 0xA45310
pCharacter_Evasion: 0xA45330
pCharacter_Str: 0xA45338
pCharacter_Vit: 0xA45340
pCharacter_Dex: 0xA45348
pCharacter_Int: 0xA45350
pCharacter_Spr: 0xA45358
pCharacter_PAtckMin: 0xA45388
pCharacter_PAtckMax: 0xA45390
pCharacter_MAtck: 0xA45398
pCharacter_PDef: 0xA453F0
pCharacter_MDef: 0xA45400
pCharacter_Money: 0xA45430
pCharacter_NextLvl: 0xA454C0
pPet_FrameIsOut: 0xA5E08C
pPet_CurrentHp: 0xA5EF64
pPet_CurrentMp: 0xA5F288
pCharacter_Map_ID: 0x0
pTarget_IsMonster: 0xBC2C6C
pTarget_IsLord: 0xBC8004
pTarget_HasBeenHit: 0xBCAEA4
pTarget_PointerName: 0xBC3E98
Tell me if they are wrong so i can fix them

edit: just noticed map id, will try and fix now~

edit2: ok fixed...
06/20/2010 00:01 SensaCool#13
i still doesn't work.The memory address below is suitable for my server. I think it will helpful.Thanks

00A438B0 is this base address of PChar?

"Pcharacter,Monter,Pet" i have checked and memory address is wrong.the MAP ID memory is right.

Code:
public const int pCharacter_Current_HP = 0x400000 + 0x643AC8; //8byte
        public const int pCharacter_Current_MP = 0x400000 + 0x643ACC; //8byte

        public const int pPet_Portait_Is_Out = 0x400000 + 0x65E088;//byte
        public const int pPet_Current_Hp = 0x400000 + 0x65EF4C;//4byte
        public const int pPet_Current_Mp = 0x400000 + 0x65F26C;//4byte

        //Target
        public const int pTarget_IsMonster = 0x400000 + 0x82DA3C; //2byte, also is alive
        public const int pTarget_PointerName = 0x400000 + 0x82EC58; //4byte, Points to name with 0 offset
        public const int pTarget_HasBeenHit = 0x400000 + 0x836490; //2byte
        public const int pTarget_IsLord = 0x400000 + 0x832310; //2byte

        //zone
        public const int pCharacter_Destination_X = 0x400000 + 0x63C064; //float
        public const int pCharacter_Destination_Y = 0x400000 + 0x63C068; //float
        public const int pCharacter_Current_X = 0x400000 + 0x60F774; //float
        public const int pCharacter_Current_Y = 0x400000 + 0x60F778; //float
        public const int pCharacter_Map_ID = 0x400000 + 0x60F8F4; //int

        //stats
        public const int pCharacter_Name = 0x400000 + 0x61E013; //string
        public const int pCharacter_Current_Exp = 0x400000 + 0x643AD8;//4byte
        public const int pCharacter_Max_Exp = 0x400000 + 0x61E00F;//4byte
        public const int pCharacter_Current_XP = 0x4000000 + 0x7A2E30;//4byte
06/21/2010 17:34 Ojji#14
I don't know exactly if this is correct but I think this may be the attack speed address.

00E5F850

I found it by taking my weapon off an on which has a 5% attack rate added to it.
06/24/2010 21:14 My420Time#15
Any chance you can add in Pet Max Hp and Mana?