Просмотр полной версии : CCP (dsetup.dll)
И так. В общем суть вопроса.
Где могут быть функции Шифровки исходящего и дешифровки входящего трафика.... Где же админам было наиболее выгодно вставить его... Какие функции перехвачивают... Помогите плиз)
Кстати алгортим шифрования пакетов у ССP - RC4
вот так вот выглядят функции шифровки в сервер части...
final int arcfour_byte()
	{
		int x;
		int y;
		int sx, sy;
		
		x = (this.x + 1) & 0xff;
		sx = (int)state[x];
		y = (sx + this.y) & 0xff;
		sy = (int)state[y];
		this.x = x;
		this.y = y;
		state[y] = (byte)(sx & 0xff);
		state[x] = (byte)(sy & 0xff);
		return (int)state[((sx + sy) & 0xff)];
	}
    public synchronized boolean encrypt(byte src[], int srcOff, byte dest[], int destOff, int len)
    {
        if(!_inited)
            return false;
        int end = srcOff + len;
        int si = srcOff;
        for(int di = destOff; si < end; di++)
        {
            dest[di] = (byte)((src[si] ^ arcfour_byte()) & 0xff);
            si++;
        }
		return true;
    }
    public boolean decrypt(byte src[], int srcOff, byte dest[], int destOff, int len)
    {
       if (encrypt(src, srcOff, dest, destOff, len))
			return true;
		return false;
    }
supernewbie
10.08.2011, 22:18
в сенд пакете оригинальную функцию шифровки подменяют, насчет входящего, думаю где-то в той функции которая вызывает recv, а потом собирает TNetworkPacket и в АддНетворк пускает тоже есть вызов ориг функции дешифровки
Ммм а подскажите народ))
Как найти ....::SendPacket?
Желательно через VMT что бы потом туда свою пихнуть
supernewbie
10.08.2011, 23:11
ну клиент ищет так
mov     eax, [ecx+48h]
mov     ecx, [eax]
mov     edx, [ecx+6Ch]
в ecx в начале экземпляр UNetworkHandler'а
sendpacket
.......
203D8C47: 7419      jz 203D8C62h если var networkobject.[+00009148h] = 0 то пропускаем (чего быть не должно)
 203D8C49: 8B16      mov edx, [esi]
 203D8C4B: 8B527C    mov edx, [edx+7Ch]
 203D8C4E: 8D43FE    lea eax, [ebx-02h]
 203D8C51: 50        push eax
 203D8C52: 8D8E4C910000lea ecx, [esi+0000914Ch]
 203D8C58: 51        push ecx
 203D8C59: 8D442416  lea eax, [esp+16h]
 203D8C5D: 50        push eax
 203D8C5E: 8BCE      mov ecx, esi
 203D8C60: FFD2      call edx            // CRYPT
203D8C62: 83BE14A1000000cmp [esi+0000A114h], 00000000h
......
Добавлено через 3 минуты
в ESI вроде как какраз тот объект который передаетса в сенд.
шифровалка тогда получаетса по смещению 7Ch в его VMT
Добавлено через 5 минут
mov eax, [ecx+48h]
mov ecx, [eax]
mov edx, [ecx+7Ch]
если в ЕСХ нетворкхандлер то в едх получим CryptPacket
destructor
11.08.2011, 13:34
Желательно через VMT что бы потом туда свою пихнутьзнает про VMT и следит чтобы туда "свои" не пихали
Ммм... и так)
что у меня получилось:)
.........
macro m2m dst*,src* {
    pushd src
    popd dst
}
.........
proc HookMethod uses edi, Table:DWORD,Method:DWORD,Hook:DWORD
    mov ecx,-1
    cld
    mov edi,[Table]
    mov eax,[Method]
    repnz scasd
    m2m dword[edi-4],[Hook]
    ret
endp
.........
proc Init_Hook
    mov dword[UNHandler],ecx
    jmp [UNHandlerInit]
endp
..........
stdcall HookMethod,[UNHandlerTable],[UNHandlerInit],Init_Hook
......
В UNHandler у меня по идеи UNetworkHandler
mov ecx, [UNHandler]
mov eax, [ecx+48h]
mov ecx, [eax]
mov edx, [ecx+7Ch]
если в ЕСХ нетворкхандлер то в едх получим CryptPacket
Это для всех хроник актуально? (точнее для ИТ и ГФ одинаково?)
И так...
Появилась потребность в восстановлении функции RequestAuthLogin
Смотрим, комментируем)
то что это не правильно - 100%
Но успех где то рядом :)
proc RequestAuthLogin_Hook uses esi, pLogin:DWORD,pPassword:DWORD,Param:DWORD
local loginBuf[256]:WORD
local passBuf[256]:WORD
	xor eax,eax
	mov eax, [pLogin]
	invoke ChekLoginPass,loginBuf,eax,0Eh
	MOV ESI,ECX
	MOV ECX,[pPassword]
	invoke ChekLoginPass,passBuf,ecx,10h
	
	MOV EDX,[Param]
	;MOV DWORD[B6AEB4],EDX
	
	MOV EAX,DWORD[ESI+4Ch]
	MOV DWORD [EAX+111ECh],1
	MOV ECX,DWORD[ESI+4Ch]
	MOV DWORD[ECX+111E8h],1
	MOV EAX,DWORD [ESI+4Ch]
	;ADD ESP,18h
	LEA EDX,DWORD[EAX+10858h]
	PUSH EDX 
	CALL Engine.0084F980  ; <<<--- Функция установки коннекта
	ret
endp
mOBSCENE
13.08.2011, 04:25
proc RequestAuthLogin_Hook uses esi, pLogin:DWORD,pPassword:DWORD,Param:DWORD
local loginBuf[256]:WORD
local passBuf[256]:WORD
	xor eax,eax
	mov eax, [pLogin] ;если я правильно понял, то ты тут копируешь 2 (UNICODE) или 4(ANSI) символа из строки в eax, а не адрес, если хочешь скопировать адрес (указатель) на строку в eax то пиши: lea eax,pLogin или mov eax, offset pLogin не проверял, но должно быть одно и тоже.
	invoke ChekLoginPass,loginBuf,eax,0Eh
	MOV ESI,ECX
	MOV ECX,[pPassword] ;тогда тут так: lea eax,pPassword или mov eax, offset pPassword
	invoke ChekLoginPass,passBuf,ecx,10h
	
	MOV EDX,[Param] ;тогда тут так: lea eax,Param или mov eax, offset Param
	;MOV DWORD[B6AEB4],EDX ; тут писать DWORD не обязательно, если работаешь с 32 битным регистром, там и так DWORD будет
	
	MOV EAX,DWORD[ESI+4Ch] ; и тут можно без DWORD
	MOV DWORD [EAX+111ECh],1
	MOV ECX,DWORD[ESI+4Ch] ; и тут можно без DWORD
	MOV DWORD[ECX+111E8h],1
	MOV EAX,DWORD [ESI+4Ch] ; и тут можно без DWORD
	;ADD ESP,18h
	LEA EDX,DWORD[EAX+10858h] ; и тут можно без DWORD
	PUSH EDX 
	CALL Engine.0084F980  ; <<<--- Функция установки коннекта
	ret
endp
Извиняюсь за грамотейство, не исключено, что я там наплужил или нет, ночь всетаки..))
в ЕАХ нам надо указатель на строку)
Точнее указатель на пустой buf для логина.
Зачем - без понятие.
Его клиент использует при проверке на "пустоту" логина и пасса)
хотя указатель на логин и пасс приходит в аргументах самой функции О_о
vBulletin® v3.6.11, Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot