Changing Grant name

08/07/2020 22:47 thaidu0ngpr0#1
Hello

Can someone help me how grant name changing Through Filter
i want to send this packet via the guild master's

I tried many ways, but the filter still only sends by char guild member

PHP Code:
 public void ChangeGrant()
        {

            
Packet name = new Packet(0x7256); //C->S
            
name.WriteUInt32(12591); // id char Guild member 
            
name.WriteAscii("AnhE101"); // grant name
            
m_RemoteSecurity.Send(name);
            
Send(false);
        } 
08/07/2020 22:57 ownkhan#2
u need bypass GS for instant update
08/08/2020 00:39 Chigako#3
Quote:
Originally Posted by ownkhan View Post
u need bypass GS for instant update
Do you mean this?

PHP Code:
void CGObjPC::UpdateGrantName(uint32_t playerchar *grantname
08/08/2020 10:09 #HB#4
Quote:
Originally Posted by Chigako View Post
Do you mean this?

PHP Code:
void CGObjPC::UpdateGrantName(uint32_t playerchar *grantname
Stop acting like...

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

If you're not gonna give him a proper answer, then you better not answer.

-

In topic, there you go: (GameServer code)

Code:
push charid; //charid as dword
mov ebx, strptr; //vc80's std::string ptr
mov esi, pcptr; //CGObjPC ptr
call 0x005C7560; //returns short as result code
This is the main function, but it checks if you're the master of the guild, so you don't need that, you need to get deeper.

Code:
push stringptr; //vc80's std::string ptr
push 0x25; //just a constant value, its actually update type since the function we're calling now is guild update
push pcptr; //CGObjPC ptr
mov ecx, charid; //charid as dword
xor edx, edx; //edx is a ptr to something, but u set it null so u're fine
call 0x005C80A0; //guild update
This one is guild update function, doesn't do any checks to get your grant name change rejected. So that should be what we need.

You can turn this little assemblies into an actual member function, like:

Code:
void CGObjPC::SetGrantName(std::string* grantname)
{
	if (m_instance)
	{
		unsigned int charid = m_instance->CharID;

		__asm
		{
			push grantname;
			push 0x25;
			push this;

			mov ecx, charid;
			xor edx, edx;
			
			mov eax, 0x005C80A0;
			call eax;
		}
	}
}
[Only registered and activated users can see links. Click Here To Register...]

Or you can just disable the master member class check here:

Code:
005CFF9A | 3848 3C                   | cmp byte ptr ds:[eax+3C],cl                      |
005CFF9D | 0F94C1                    | sete cl                                          |
005CFFA0 | 8BC1                      | mov eax,ecx                                      |
And then just use original packets :D (but that will allow anyone to change the grant name of anyone in his guild to anything he wants)
08/08/2020 16:43 thaidu0ngpr0#5
Quote:
Originally Posted by #HB View Post
Stop acting like...

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

If you're not gonna give him a proper answer, then you better not answer.

-

In topic, there you go: (GameServer code)

Code:
push charid; //charid as dword
mov ebx, strptr; //vc80's std::string ptr
mov esi, pcptr; //CGObjPC ptr
call 0x005C7560; //returns short as result code
This is the main function, but it checks if you're the master of the guild, so you don't need that, you need to get deeper.

Code:
push stringptr; //vc80's std::string ptr
push 0x25; //just a constant value, its actually update type since the function we're calling now is guild update
push pcptr; //CGObjPC ptr
mov ecx, charid; //charid as dword
xor edx, edx; //edx is a ptr to something, but u set it null so u're fine
call 0x005C80A0; //guild update
This one is guild update function, doesn't do any checks to get your grant name change rejected. So that should be what we need.

You can turn this little assemblies into an actual member function, like:

Code:
void CGObjPC::SetGrantName(string05* grantname)
{
	if (m_instance)
	{
		unsigned int charid = m_instance->CharID;

		__asm
		{
			push grantname;
			push 0x25;
			push this;

			mov ecx, charid;
			xor edx, edx;
			
			mov eax, 0x005C80A0;
			call eax;
		}
	}
}
[Only registered and activated users can see links. Click Here To Register...]

Or you can just disable the master member class check here:

Code:
005CFF9A | 3848 3C                   | cmp byte ptr ds:[eax+3C],cl                      |
005CFF9D | 0F94C1                    | sete cl                                          |
005CFFA0 | 8BC1                      | mov eax,ecx                                      |
And then just use original packets :D (but that will allow anyone to change the grant name of anyone in his guild to anything he wants)
thanks idol , work perfect
[Only registered and activated users can see links. Click Here To Register...]
08/08/2020 19:17 Chigako#6
Quote:
Originally Posted by #HB View Post
Stop acting like...

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

If you're not gonna give him a proper answer, then you better not answer.

-

In topic, there you go: (GameServer code)

Code:
push charid; //charid as dword
mov ebx, strptr; //vc80's std::string ptr
mov esi, pcptr; //CGObjPC ptr
call 0x005C7560; //returns short as result code
This is the main function, but it checks if you're the master of the guild, so you don't need that, you need to get deeper.

Code:
push stringptr; //vc80's std::string ptr
push 0x25; //just a constant value, its actually update type since the function we're calling now is guild update
push pcptr; //CGObjPC ptr
mov ecx, charid; //charid as dword
xor edx, edx; //edx is a ptr to something, but u set it null so u're fine
call 0x005C80A0; //guild update
This one is guild update function, doesn't do any checks to get your grant name change rejected. So that should be what we need.

You can turn this little assemblies into an actual member function, like:

Code:
void CGObjPC::SetGrantName(string05* grantname)
{
	if (m_instance)
	{
		unsigned int charid = m_instance->CharID;

		__asm
		{
			push grantname;
			push 0x25;
			push this;

			mov ecx, charid;
			xor edx, edx;
			
			mov eax, 0x005C80A0;
			call eax;
		}
	}
}
[Only registered and activated users can see links. Click Here To Register...]

Or you can just disable the master member class check here:

Code:
005CFF9A | 3848 3C                   | cmp byte ptr ds:[eax+3C],cl                      |
005CFF9D | 0F94C1                    | sete cl                                          |
005CFFA0 | 8BC1                      | mov eax,ecx                                      |
And then just use original packets :D (but that will allow anyone to change the grant name of anyone in his guild to anything he wants)
You have to stop pretending to be smart. :wojak: Because you got caught in my trap :kekw:
08/08/2020 20:50 #HB#7
Quote:
Originally Posted by Chigako View Post
You have to stop pretending to be smart. :wojak: Because you got caught in my trap :kekw:
Looks like you've decided to turn to blablabla talk, after feeling embarrassed.

I won't reply anymore, since there's no point of doing so.