Hello all)
Today i release emulation of ObjectStruct for client (it like OBJECTSTRUCT of GS, but for main.exe), with it very simply "decompile" some main moments and create hard customs.
Spoiler:
Code:#pragma pack(push, 1) struct ObjectItem //-> Complete (size: 107) { /*+0*/ short ItemID; /*+2*/ int Level; /*+6*/ char Unknown6; /*+7*/ char Unknown7; /*+8*/ char Unknown8; /*+9*/ short DamageMin; /*+11*/ short DamageMax; /*+13*/ char Unknown13; /*+14*/ short Unknown14; /*+16*/ short Unknown16; /*+18*/ char Unknown18; /*+19*/ char Unknown19; /*+20*/ short Unknown20; /*+22*/ char Durability; /*+23*/ char ExcellentOption; /*+24*/ char AncientOption; /*+25*/ short ReqStrenght; /*+27*/ short ReqDextirity; /*+29*/ short ReqEnergy; /*+31*/ short ReqVitality; /*+33*/ short ReqCommand; /*+35*/ short ReqLevel; /*+37*/ char SpecialCount; /*+38*/ WORD SpecialType[8]; /*+54*/ BYTE SpecialValue[8]; /*+62*/ int UniqueID; /*+66*/ char Unknown66; /*+67*/ char PosX; /*+68*/ char PosY; /*+69*/ WORD HarmonyType; /*+71*/ short HarmonyValue; /*+73*/ char Is380Item; /*+74*/ char SocketOption[5]; /*+79*/ char Unknown79; /*+80*/ char SocketSeedIndex[5]; /*+85*/ char SocketSphereLevel[5]; /*+90*/ char SocketSet; BYTE gap01[5]; /*+96*/ char DurabilityState; /*+97*/ char PeriodItem; /*+98*/ char ExpiredItem; /*+99*/ int ExpireDateConvert; /*+103*/ int Unknown103; }; #pragma pack(pop) // ---------------------------------------------------------------------------------------------- #pragma pack(push, 1) struct UnknownStruct0 { /*+0*/ WORD Unknown0;//? /*+2*/ WORD Unknown2;//? /*+4*/ WORD Unknown4;//? /*+6*/ WORD Unknown6; /*+8*/ WORD Unknown8; /*+10*/ WORD Unknown10; /*+12*/ WORD Unknown12;//? /*+14*/ WORD Unknown14; /*+16*/ WORD Unknown16; }; #pragma pack(pop) // ---------------------------------------------------------------------------------------------- #pragma pack(push, 1) struct ObjectCharacter //-> ~InDev (size: 6012) [8128AC4 | 8128AC8] { /*+0*/ char Name[11]; /*+11*/ BYTE Class; /*+12*/ BYTE Unknown12; /*+13*/ BYTE Unknown13; /*+14*/ short Level; /*+16*/ DWORD Experience; /*+20*/ DWORD NextExperience; /*+24*/ short Strength; /*+26*/ short Dexterity; /*+28*/ short Vitality; /*+30*/ short Energy; /*+32*/ short Leadership; /*+34*/ WORD Life; /*+36*/ WORD Mana; /*+38*/ WORD MaxLife; /*+40*/ WORD MaxMana; /*+42*/ WORD Shield; /*+44*/ WORD MaxShield; /*+46*/ WORD AttackRate; /*+48*/ WORD DefenseRate; /*+50*/ short AddStrength; /*+52*/ short AddDexterity; /*+54*/ short AddVitality; /*+56*/ short AddEnergy; BYTE gap01[4]; /*+62*/ WORD AddLeadership; //GS use unsigned value... /*+64*/ WORD Stamina; /*+66*/ WORD MaxStamina; /*+68*/ BYTE ItemSpecialUseFlag; //Bit decomposit (1, 2, 8) BYTE UnknownGap; /*+70*/ WORD ItemSpecialUseTime[3]; //[ ] /*+76*/ WORD AddPoint; //FruitStat start /*+78*/ WORD MaxAddPoint; /*+80*/ WORD MinusPoint; /*+82*/ WORD MaxMinusPoint; //FruitStat end /*+84*/ WORD AttackSpeed; /*+86*/ WORD DamageRate; /*+88*/ WORD DamageMin; /*+90*/ WORD DamageMax; /*+92*/ WORD Unknown92; /*+94*/ WORD Unknown94; /*+96*/ WORD Unknown96; BYTE gap02[10]; /*+108*/ WORD Unknown108; /*+110*/ WORD Unknown110; BYTE gap03[4]; /*+116*/ WORD LevelPoint; /*+118*/ BYTE MagicCount; /*+119*/ BYTE Unknown119; /*+120*/ WORD pMagicList[650]; //maybe 150? /*1420*/ BYTE gap04[3252]; /*+4672*/ ObjectItem pEquipment[12]; /*+5956*/ DWORD MoneyInventory; //(C4) /*+5960*/ DWORD MoneyWarehouse; //(C4) BYTE gap05[8]; /*+5972*/ UnknownStruct0 Unknown5972; BYTE gap06[2]; /*+5992*/ WORD Unknown5992; /*+5994*/ WORD Unknown5994; BYTE gap07[2]; /*+5998*/ WORD Unknown5998; /*+6000*/ WORD Unknown6000; /*+6002*/ WORD Unknown6002; /*+6004*/ WORD Unknown6004; /*+6006*/ WORD Unknown6006; /*+6008*/ BYTE Unknown6008; /*+6009*/ BYTE Unknown6009; /*+6010*/ BYTE Unknown6010; /*+6011*/ BYTE Unknown6011; }; #pragma pack(pop) // ----------------------------------------------------------------------------------------------
And again some moments with "Unknown" names and gaps, but it work)
Geting structure adress from OllyDbg
Spoiler:
- (Inter commands)
- (Go to result)
-
- (Down list)
8128AC4 -> Structure adress
How call to structure from DLL
Spoiler:
Code:ObjectCharacter * pPlayer = &*(ObjectCharacter*)*(DWORD*)0x8128AC4;
How add structure to IDA (HexRoys)
Spoiler:
1. Shift + F1
2. Press Insert
3. Paste all code from thread head
4. Go to any function with structure adress
5. Set to he type ObjectCharacter*
6. View in result
Examples:
(everfall.com :: paste,
everfall.com :: paste)
P.S.:
- Same need set it type to +4 from main structure (0x8128AC8)
- Same u can add type to ItemObject vars:
Credits: Me (DarkSim)
Version: Season 6 Episode 3 GMO (maybe 1.04d+)
On other versions need make research and check all struct positions.
Bad english and etc
Good luck to all with it)














Reply With Quote![[Development] CharObject Struct Of Client (Source)](http://ragezone.com/hyper728.png)



