Register for your free account! | Forgot your password?

Go Back   elitepvpers > MMORPGs > 12Sky2
You last visited: Today at 15:35

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



How to hook the client-side?

Discussion on How to hook the client-side? within the 12Sky2 forum part of the MMORPGs category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Mar 2023
Posts: 11
Received Thanks: 1
How to hook the client-side?

First of all, I wish everyone a good day. I am new to this business and I am constantly trying to improve myself to solve the basic logic. I apologize in advance for disturbing you.
I am trying to find the memory address of the blacksmith in the first photo and I find it according to the cheat engine, and in the second photo, the value changes when I change it, then I search this value in IDA, as Mr. DOS has shown on the forum several times, in the first photo, I use the hex value as the value I got from the Cheat Engine. I search and I see the values like in the 2nd photo, then as it can be seen in the 3rd photo, I think it shows me where it is used or where it is defined. I'm not sure exactly. I click it and I think it sends me to the place in the 4th photo, fld dword ptr [ecx] value in the 5th photo. I'm trying to search for the value as well, and in the 6th photo it shows me that there are more defined places (or used in more places) this time. When I search again, I get the result in the first photo and as Mr DOS shows in the forum, the sequence of bytes in the search section I'm looking for the IMG file from the defined in the 1st photo (using ? ) I find the place When I perform the operations in the 2nd and 3rd photos, I reach the result in the 4th photo (I decompile by pressing the F5 key) I don't know exactly where I went wrong So I can't understand much here, even if I read the code because I don't know exactly what it is, I am giving an example on the client side I want to hook the damage function, but when I search for it, I can't quite understand how I should read that code. If I can understand this logic basically, I think I can write the code on the dll or source code side. Thank you very much for reading this far and taking your time. Something is wrong. If I said (or wrote) I apologize very much I wish everyone a good and healthy day
Attached Images
File Type: png 1.png (1.77 MB, 153 views)
File Type: png 2.png (1.77 MB, 159 views)
File Type: png 3.png (366.0 KB, 158 views)
File Type: png 4.png (355.8 KB, 155 views)
File Type: png 5.png (344.9 KB, 136 views)
File Type: png 6.png (333.9 KB, 131 views)
File Type: png 7.png (428.1 KB, 109 views)
File Type: png 8.png (351.4 KB, 108 views)
File Type: png 9.png (356.6 KB, 105 views)
File Type: png 10.png (360.9 KB, 98 views)
File Type: png 11.png (344.1 KB, 97 views)
File Type: png 12.png (316.1 KB, 98 views)
Luminoso845 is offline  
Old 03/11/2023, 14:49   #2
 
elite*gold: 0
Join Date: Nov 2011
Posts: 129
Received Thanks: 174
use for hook client side

1.open craft page > search 10
2.close craft page > search 0
3.do it again
4.you will get nWorkIdx address

Here's code for init Blacksmith

Val[0] = 1st item for craft
Val[1] = 2nd item for craft
Val[2] = 3rd item for craft
Val[3] = 4th item for craft
Val[4] = 5th 0 = ? img, item id = item img
Val[5] = not in use
Code:
struct NPCUI_MATERIAL
{
  int Val[6];
};
void NPCUI::Init_010(NPCUI *this)
{
    int i;

    this->nWorkIdx = 10;
    for ( i = 0; i < 100; ++i )
        this->bIsClick[i] = 0;
    if ( this->uType )
    {
        if ( this->uType == 1 )
        {
            this->uMaxPage = 22;
            this->uSlot[20].Val[0] = 1379;
            this->uSlot[20].Val[1] = 1379;
            this->uSlot[20].Val[2] = 1379;
            this->uSlot[20].Val[3] = 1379;
            this->uSlot[20].Val[4] = 702;
            this->uSlot[20].Val[5] = 0;
            this->uSlot[21].Val[0] = 1125;
            this->uSlot[21].Val[1] = 1125;
            this->uSlot[21].Val[2] = 1125;
            this->uSlot[21].Val[3] = 1125;
            this->uSlot[21].Val[4] = 702;
            this->uSlot[21].Val[5] = 0;
            this->uMinPage = 20;
        }
        else if ( this->uType == 3 )
        {
            this->uMaxPage = 62;
            this->uSlot[60].Val[0] = 2483;
            this->uSlot[60].Val[1] = 2475;
            this->uSlot[60].Val[2] = 2150;
            this->uSlot[60].Val[3] = 2150;
            this->uSlot[60].Val[4] = 2474;
            this->uSlot[60].Val[5] = 0;
            this->uSlot[61].Val[0] = 2485;
            this->uSlot[61].Val[1] = 2150;
            this->uSlot[61].Val[2] = 2150;
            this->uSlot[61].Val[3] = 0;
            this->uSlot[61].Val[4] = 2474;
            this->uSlot[61].Val[5] = 0;
            this->uMinPage = 60;
        }
        else
        {
            this->uMaxPage = 42;
            this->uSlot[40].Val[0] = 695;
            this->uSlot[40].Val[1] = 695;
            this->uSlot[40].Val[2] = 695;
            this->uSlot[40].Val[3] = 0;
            this->uSlot[40].Val[4] = 0;
            this->uSlot[40].Val[5] = 0;
            this->uSlot[41].Val[0] = 695;
            this->uSlot[41].Val[1] = 695;
            this->uSlot[41].Val[2] = 695;
            this->uSlot[41].Val[3] = 0;
            this->uSlot[41].Val[4] = 696;
            this->uSlot[41].Val[5] = 0;
            this->uMinPage = 40;
        }
    }
    else
    {
        this->uMaxPage = 17;
        this->uSlot[0].Val[0] = 1019;
        this->uSlot[0].Val[1] = 1019;
        this->uSlot[0].Val[2] = 1019;
        this->uSlot[0].Val[3] = 1019;
        this->uSlot[0].Val[4] = 0;
        this->uSlot[0].Val[5] = 0;
        this->uSlot[1].Val[0] = 1024;
        this->uSlot[1].Val[1] = 1024;
        this->uSlot[1].Val[2] = 0;
        this->uSlot[1].Val[3] = 0;
        this->uSlot[1].Val[4] = 1025;
        this->uSlot[1].Val[5] = 0;
        this->uSlot[2].Val[0] = 1473;
        this->uSlot[2].Val[1] = 1474;
        this->uSlot[2].Val[2] = 1475;
        this->uSlot[2].Val[3] = 1476;
        this->uSlot[2].Val[4] = 1477;
        this->uSlot[2].Val[5] = 0;
        this->uSlot[3].Val[0] = 708;
        this->uSlot[3].Val[1] = 709;
        this->uSlot[3].Val[2] = 710;
        this->uSlot[3].Val[3] = 711;
        this->uSlot[3].Val[4] = 707;
        this->uSlot[3].Val[5] = 0;
        this->uSlot[4].Val[0] = 983;
        this->uSlot[4].Val[1] = 983;
        this->uSlot[4].Val[2] = 983;
        this->uSlot[4].Val[3] = 983;
        this->uSlot[4].Val[4] = 984;
        this->uSlot[4].Val[5] = 0;
        this->uSlot[5].Val[0] = 870;
        this->uSlot[5].Val[1] = 871;
        this->uSlot[5].Val[2] = 872;
        this->uSlot[5].Val[3] = 873;
        this->uSlot[5].Val[4] = 0;
        this->uSlot[5].Val[5] = 0;
        this->uSlot[6].Val[0] = 874;
        this->uSlot[6].Val[1] = 875;
        this->uSlot[6].Val[2] = 876;
        this->uSlot[6].Val[3] = 877;
        this->uSlot[6].Val[4] = 0;
        this->uSlot[6].Val[5] = 0;
        this->uSlot[7].Val[0] = 576;
        this->uSlot[7].Val[1] = 576;
        this->uSlot[7].Val[2] = 576;
        this->uSlot[7].Val[3] = 576;
        this->uSlot[7].Val[4] = 2476;
        this->uSlot[7].Val[5] = 0;
        this->uSlot[8].Val[0] = 2476;
        this->uSlot[8].Val[1] = 2150;
        this->uSlot[8].Val[2] = 0;
        this->uSlot[8].Val[3] = 0;
        this->uSlot[8].Val[4] = 2477;
        this->uSlot[8].Val[5] = 0;
        this->uSlot[9].Val[0] = 1886;
        this->uSlot[9].Val[1] = 1886;
        this->uSlot[9].Val[2] = 1886;
        this->uSlot[9].Val[3] = 1886;
        this->uSlot[9].Val[4] = 2150;
        this->uSlot[9].Val[5] = 0;
        this->uSlot[15].Val[0] = 17111;
        this->uSlot[15].Val[1] = 17111;
        this->uSlot[15].Val[2] = 17111;
        this->uSlot[15].Val[3] = 17111;
        this->uSlot[15].Val[4] = 17112;
        this->uSlot[15].Val[5] = 0;
        this->uSlot[16].Val[0] = 17112;
        this->uSlot[16].Val[1] = 17112;
        this->uSlot[16].Val[2] = 17112;
        this->uSlot[16].Val[3] = 17112;
        this->uSlot[16].Val[4] = 17113;
        this->uSlot[16].Val[5] = 0;
        this->uSlot[10].Val[0] = 17086;
        this->uSlot[10].Val[1] = 17089;
        this->uSlot[10].Val[2] = 17090;
        this->uSlot[10].Val[3] = 17093;
        this->uSlot[10].Val[4] = 17102;
        this->uSlot[10].Val[5] = 0;
        this->uSlot[11].Val[0] = 17087;
        this->uSlot[11].Val[1] = 17088;
        this->uSlot[11].Val[2] = 17091;
        this->uSlot[11].Val[3] = 17092;
        this->uSlot[11].Val[4] = 17103;
        this->uSlot[11].Val[5] = 0;
        this->uSlot[12].Val[0] = 17102;
        this->uSlot[12].Val[1] = 17103;
        this->uSlot[12].Val[2] = 2150;
        this->uSlot[12].Val[3] = 17104;
        if ( mMYINFO[0].mUseAvatar.aPreviousTribe )
        {
            if ( mMYINFO[0].mUseAvatar.aPreviousTribe == 1 )
            {
                this->uSlot[12].Val[4] = 90789;
            }
            else if ( mMYINFO[0].mUseAvatar.aPreviousTribe == 2 )
            {
                this->uSlot[12].Val[4] = 90792;
            }
        }
        else
        {
            this->uSlot[12].Val[4] = 90786;
        }
        this->uSlot[12].Val[5] = 0;
        this->uSlot[13].Val[0] = 17102;
        this->uSlot[13].Val[1] = 17103;
        this->uSlot[13].Val[2] = 2150;
        this->uSlot[13].Val[3] = 17104;
        if ( mMYINFO[0].mUseAvatar.aPreviousTribe )
        {
            if ( mMYINFO[0].mUseAvatar.aPreviousTribe == 1 )
            {
                this->uSlot[13].Val[4] = 90790;
            }
            else if ( mMYINFO[0].mUseAvatar.aPreviousTribe == 2 )
            {
                this->uSlot[13].Val[4] = 90793;
            }
        }
        else
        {
            this->uSlot[13].Val[4] = 90787;
        }
        this->uSlot[13].Val[5] = 0;
        this->uSlot[14].Val[0] = 17102;
        this->uSlot[14].Val[1] = 17103;
        this->uSlot[14].Val[2] = 2150;
        this->uSlot[14].Val[3] = 17104;
        if ( mMYINFO[0].mUseAvatar.aPreviousTribe )
        {
            if ( mMYINFO[0].mUseAvatar.aPreviousTribe == 1 )
            {
                this->uSlot[14].Val[4] = 90791;
            }
            else if ( mMYINFO[0].mUseAvatar.aPreviousTribe == 2 )
            {
                this->uSlot[14].Val[4] = 90794;
            }
        }
        else
        {
            this->uSlot[14].Val[4] = 90788;
        }
        this->uSlot[14].Val[5] = 0;
        this->uMinPage = 0;
    }
    INVENUI::Set();
}
lnwnuyhodd is offline  
Thanks
1 User
Old 03/11/2023, 22:20   #3
 
elite*gold: 0
Join Date: Mar 2023
Posts: 11
Received Thanks: 1
Post Help

Quote:
Originally Posted by lnwnuyhodd View Post
use for hook client side

1.open craft page > search 10
2.close craft page > search 0
3.do it again
4.you will get nWorkIdx address

Here's code for init Blacksmith

Val[0] = 1st item for craft
Val[1] = 2nd item for craft
Val[2] = 3rd item for craft
Val[3] = 4th item for craft
Val[4] = 5th 0 = ? img, item id = item img
Val[5] = not in use
Code:
struct NPCUI_MATERIAL
{
  int Val[6];
};
void NPCUI::Init_010(NPCUI *this)
{
    int i;

    this->nWorkIdx = 10;
    for ( i = 0; i < 100; ++i )
        this->bIsClick[i] = 0;
    if ( this->uType )
    {
        if ( this->uType == 1 )
        {
            this->uMaxPage = 22;
            this->uSlot[20].Val[0] = 1379;
            this->uSlot[20].Val[1] = 1379;
            this->uSlot[20].Val[2] = 1379;
            this->uSlot[20].Val[3] = 1379;
            this->uSlot[20].Val[4] = 702;
            this->uSlot[20].Val[5] = 0;
            this->uSlot[21].Val[0] = 1125;
            this->uSlot[21].Val[1] = 1125;
            this->uSlot[21].Val[2] = 1125;
            this->uSlot[21].Val[3] = 1125;
            this->uSlot[21].Val[4] = 702;
            this->uSlot[21].Val[5] = 0;
            this->uMinPage = 20;
        }
        else if ( this->uType == 3 )
        {
            this->uMaxPage = 62;
            this->uSlot[60].Val[0] = 2483;
            this->uSlot[60].Val[1] = 2475;
            this->uSlot[60].Val[2] = 2150;
            this->uSlot[60].Val[3] = 2150;
            this->uSlot[60].Val[4] = 2474;
            this->uSlot[60].Val[5] = 0;
            this->uSlot[61].Val[0] = 2485;
            this->uSlot[61].Val[1] = 2150;
            this->uSlot[61].Val[2] = 2150;
            this->uSlot[61].Val[3] = 0;
            this->uSlot[61].Val[4] = 2474;
            this->uSlot[61].Val[5] = 0;
            this->uMinPage = 60;
        }
        else
        {
            this->uMaxPage = 42;
            this->uSlot[40].Val[0] = 695;
            this->uSlot[40].Val[1] = 695;
            this->uSlot[40].Val[2] = 695;
            this->uSlot[40].Val[3] = 0;
            this->uSlot[40].Val[4] = 0;
            this->uSlot[40].Val[5] = 0;
            this->uSlot[41].Val[0] = 695;
            this->uSlot[41].Val[1] = 695;
            this->uSlot[41].Val[2] = 695;
            this->uSlot[41].Val[3] = 0;
            this->uSlot[41].Val[4] = 696;
            this->uSlot[41].Val[5] = 0;
            this->uMinPage = 40;
        }
    }
    else
    {
        this->uMaxPage = 17;
        this->uSlot[0].Val[0] = 1019;
        this->uSlot[0].Val[1] = 1019;
        this->uSlot[0].Val[2] = 1019;
        this->uSlot[0].Val[3] = 1019;
        this->uSlot[0].Val[4] = 0;
        this->uSlot[0].Val[5] = 0;
        this->uSlot[1].Val[0] = 1024;
        this->uSlot[1].Val[1] = 1024;
        this->uSlot[1].Val[2] = 0;
        this->uSlot[1].Val[3] = 0;
        this->uSlot[1].Val[4] = 1025;
        this->uSlot[1].Val[5] = 0;
        this->uSlot[2].Val[0] = 1473;
        this->uSlot[2].Val[1] = 1474;
        this->uSlot[2].Val[2] = 1475;
        this->uSlot[2].Val[3] = 1476;
        this->uSlot[2].Val[4] = 1477;
        this->uSlot[2].Val[5] = 0;
        this->uSlot[3].Val[0] = 708;
        this->uSlot[3].Val[1] = 709;
        this->uSlot[3].Val[2] = 710;
        this->uSlot[3].Val[3] = 711;
        this->uSlot[3].Val[4] = 707;
        this->uSlot[3].Val[5] = 0;
        this->uSlot[4].Val[0] = 983;
        this->uSlot[4].Val[1] = 983;
        this->uSlot[4].Val[2] = 983;
        this->uSlot[4].Val[3] = 983;
        this->uSlot[4].Val[4] = 984;
        this->uSlot[4].Val[5] = 0;
        this->uSlot[5].Val[0] = 870;
        this->uSlot[5].Val[1] = 871;
        this->uSlot[5].Val[2] = 872;
        this->uSlot[5].Val[3] = 873;
        this->uSlot[5].Val[4] = 0;
        this->uSlot[5].Val[5] = 0;
        this->uSlot[6].Val[0] = 874;
        this->uSlot[6].Val[1] = 875;
        this->uSlot[6].Val[2] = 876;
        this->uSlot[6].Val[3] = 877;
        this->uSlot[6].Val[4] = 0;
        this->uSlot[6].Val[5] = 0;
        this->uSlot[7].Val[0] = 576;
        this->uSlot[7].Val[1] = 576;
        this->uSlot[7].Val[2] = 576;
        this->uSlot[7].Val[3] = 576;
        this->uSlot[7].Val[4] = 2476;
        this->uSlot[7].Val[5] = 0;
        this->uSlot[8].Val[0] = 2476;
        this->uSlot[8].Val[1] = 2150;
        this->uSlot[8].Val[2] = 0;
        this->uSlot[8].Val[3] = 0;
        this->uSlot[8].Val[4] = 2477;
        this->uSlot[8].Val[5] = 0;
        this->uSlot[9].Val[0] = 1886;
        this->uSlot[9].Val[1] = 1886;
        this->uSlot[9].Val[2] = 1886;
        this->uSlot[9].Val[3] = 1886;
        this->uSlot[9].Val[4] = 2150;
        this->uSlot[9].Val[5] = 0;
        this->uSlot[15].Val[0] = 17111;
        this->uSlot[15].Val[1] = 17111;
        this->uSlot[15].Val[2] = 17111;
        this->uSlot[15].Val[3] = 17111;
        this->uSlot[15].Val[4] = 17112;
        this->uSlot[15].Val[5] = 0;
        this->uSlot[16].Val[0] = 17112;
        this->uSlot[16].Val[1] = 17112;
        this->uSlot[16].Val[2] = 17112;
        this->uSlot[16].Val[3] = 17112;
        this->uSlot[16].Val[4] = 17113;
        this->uSlot[16].Val[5] = 0;
        this->uSlot[10].Val[0] = 17086;
        this->uSlot[10].Val[1] = 17089;
        this->uSlot[10].Val[2] = 17090;
        this->uSlot[10].Val[3] = 17093;
        this->uSlot[10].Val[4] = 17102;
        this->uSlot[10].Val[5] = 0;
        this->uSlot[11].Val[0] = 17087;
        this->uSlot[11].Val[1] = 17088;
        this->uSlot[11].Val[2] = 17091;
        this->uSlot[11].Val[3] = 17092;
        this->uSlot[11].Val[4] = 17103;
        this->uSlot[11].Val[5] = 0;
        this->uSlot[12].Val[0] = 17102;
        this->uSlot[12].Val[1] = 17103;
        this->uSlot[12].Val[2] = 2150;
        this->uSlot[12].Val[3] = 17104;
        if ( mMYINFO[0].mUseAvatar.aPreviousTribe )
        {
            if ( mMYINFO[0].mUseAvatar.aPreviousTribe == 1 )
            {
                this->uSlot[12].Val[4] = 90789;
            }
            else if ( mMYINFO[0].mUseAvatar.aPreviousTribe == 2 )
            {
                this->uSlot[12].Val[4] = 90792;
            }
        }
        else
        {
            this->uSlot[12].Val[4] = 90786;
        }
        this->uSlot[12].Val[5] = 0;
        this->uSlot[13].Val[0] = 17102;
        this->uSlot[13].Val[1] = 17103;
        this->uSlot[13].Val[2] = 2150;
        this->uSlot[13].Val[3] = 17104;
        if ( mMYINFO[0].mUseAvatar.aPreviousTribe )
        {
            if ( mMYINFO[0].mUseAvatar.aPreviousTribe == 1 )
            {
                this->uSlot[13].Val[4] = 90790;
            }
            else if ( mMYINFO[0].mUseAvatar.aPreviousTribe == 2 )
            {
                this->uSlot[13].Val[4] = 90793;
            }
        }
        else
        {
            this->uSlot[13].Val[4] = 90787;
        }
        this->uSlot[13].Val[5] = 0;
        this->uSlot[14].Val[0] = 17102;
        this->uSlot[14].Val[1] = 17103;
        this->uSlot[14].Val[2] = 2150;
        this->uSlot[14].Val[3] = 17104;
        if ( mMYINFO[0].mUseAvatar.aPreviousTribe )
        {
            if ( mMYINFO[0].mUseAvatar.aPreviousTribe == 1 )
            {
                this->uSlot[14].Val[4] = 90791;
            }
            else if ( mMYINFO[0].mUseAvatar.aPreviousTribe == 2 )
            {
                this->uSlot[14].Val[4] = 90794;
            }
        }
        else
        {
            this->uSlot[14].Val[4] = 90788;
        }
        this->uSlot[14].Val[5] = 0;
        this->uMinPage = 0;
    }
    INVENUI::Set();
}
Mr Dos, I don't want to disrespect, but I want to learn the basic logic of this business, of course, you don't have to show or teach it, rather than a client-side code, but if you say it, I think it will be more useful for me to say the logic instead of this code block you have given, I hope I can express myself correctly.
Luminoso845 is offline  
Reply

Tags
12sky2, 12sky2 cheat, twelvesky2


Similar Threads Similar Threads
Hackable: Client side vs Server side
05/01/2008 - Dekaron - 7 Replies
I'v been reading a bit and I was already familiar with winhex and the likes, so I was able to start messing around in the Dekaron process rather easily. What I'm wondering is, what exactly can be modified, and what use it could be. For example, we know that character experience is server side, so modifying it would have no real purpose, but for some reason, it'll let you equip weapons of higher level if you meet the other requirements, which could also be modified should they need be. So all...
Character name restrictions are client side, not server side
04/24/2008 - Conquer Online 2 - 1 Replies
"Sorry non-alpha numberic....." That error message you get when you type in special characters in your character name, is client sided. It does no server check. Im not a coder or anything, so I'm not sure how to fix that. But since it is client sided, it would be a lot easier to repair this problem.
Client Side? Server side?
02/10/2008 - Metin2 - 1 Replies
hii erstma bin neu hier und deshalb ne frage!! wieso kann man nich auf Sever Side Umstellen nur client side !! damit du due waffe z.B. REK +9 benutzen kannst???:)
server side/client side
12/19/2005 - Conquer Online 2 - 6 Replies
hey guys, could someone make a list for me that has all the server side items and then another that has the client side items? thx in advance 8)



All times are GMT +1. The time now is 15:35.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.