[SAMP] Algoritmo de 32 bytes. (UDP-PACKET) [REABIERTO]

Foro libre, comenta acerca de lo que quieras!. Realiza encuestas, chistes, adivinanzas, muestra imágenes, vídeos y todo lo que se te ocurra.
Responder
Avatar de Usuario
wachichorro
Aprendiz
Aprendiz
Mensajes: 120
Registrado: 19 Oct 2014 17:28
Reputación: 4

02 Ago 2017 22:52

Bueno, como todos sabemos, muchos de los paquetes de SAMP (de 32 bytes según veo hasta ahora, no comprobé el resto)
Tienen datos aparentemente "randoms" como el envio de cookies. (Paquete 32 bytes, 0x081eXXda)

Luego de unas horas de trabajo usando el sentido común, logré ver el algoritmo que realiza para llegar al valor que imprime en dichos paquetes, y aquí vengo a compartir el algoritmo (lo programé en C, para GNU/Linux, y lo compile con GCC)
-hi Saludos...
Nota: Ya pueden investigar valores :V
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208

/* Creditos: Frankito FSAMP (Wachichorro) */
#include <stdlib.h>
#include <stdio.h>

#define VECTOR 22 // 0x16

int vect = VECTOR;
char conv[2];
int secuencia = 0;
int keymaster;

int main(int argc, char *argv[]){
    if(argc < 1)
    {
        printf("- Uso: %s <NUM>\n", argv[0]);
        exit(1);
    }
    keymaster = atoi(argv[1]);
   while(256 <= keymaster)
    {
        keymaster = keymaster - 256;
    }
        printf("[SECUENCIA 0](+1) %d -> %02x \n", vect, (char)(vect & 0xFFFF));
        secuencia++;
        for(int i = 0; i != 128; i++)
        {
        vect = vect + 1;
        secuencia++;
        sprintf(conv, "%d", vect);
                if (keymaster == secuencia - 1)
        {
            printf(" \n \n --------> %02x <-------- \n \n", vect);
            break;
        }
        printf("%d -> %02x  %s\n",  secuencia - 1, (char)(vect & 0xFFFF), conv);
        vect = vect - 3;
                if(secuencia == 8)
        {
            printf("[SECUENCIA 8](+16)");
            vect = vect + 16;
        }
        else if(secuencia == 16)
        {
            vect = vect - 16;
        printf("[SECUENCIA 16](-16)");
        }
        else if(secuencia == 24)
        {
            vect = vect + 16;
            printf("[SECUENCIA 24](+16)");
        }
        else if(secuencia == 32)
        {
            vect = vect + 48;
            printf("[SECUENCIA 32](+48)");
        }
        else if(secuencia ==  40)
        {   
            vect = vect + 16;
            printf("[SECUENCIA 40](+16)");
        }
        else if(secuencia == 48)
        {   
            vect = vect - 16;
            printf("[SECUENCIA 48](-16)");
        }
        else if(secuencia == 56)
        {   
            vect = vect + 16;
            printf("[SECUENCIA 56](+16)");
        }
        else if(secuencia == 64)
        {
            vect = vect + 48;
            printf("SECUENCIA [64](+48)");
        }
        else if(secuencia == 72)
        {
            vect = vect + 16;
            printf("SECUENCIA [72](+16)");
        }
        else if(secuencia == 80)
        {
            vect = vect - 16;
            printf("SECUENCIA [80](-16)");
        }
        else if(secuencia == 88)
        {
            vect = vect + 16;
            printf("SECUENCIA [88](+16)");
        }
        else if(secuencia == 96)
        {
            vect = vect + 48;
            printf("SECUENCIA [96](+48)");
        }
        else if(secuencia == 104)
        {
            vect = vect + 16;
            printf("SECUENCIA [104](+16)");
        }
        else if(secuencia == 112)
        {
            vect = vect - 16;
            printf("SECUENCIA [112](-16)");
        }
        else if(secuencia == 120)
        {
            vect = vect + 16;
            printf("SECUENCIA [120](+16)");
        }
        else if(secuencia == 128)
        {
            vect = vect + 48;
            printf("SECUENCIA [128](+48)");
        }
        else if(secuencia == 136)
        {
            vect = vect + 16;
            printf("SECUENCIA [136](+16)");
        }
        else if(secuencia == 144)
        {
            vect = vect - 16;
            printf("SECUENCIA [144](-16)");
        }
        else if(secuencia == 152)
        {
            vect = vect + 16;
            printf("SECUENCIA [152](+16)");
        }
        else if(secuencia == 160)
        {
            printf("SECUENCIA [160](+48)");
            vect = vect + 48;
        }
        else if(secuencia == 168)
        {
            printf("SECUENCIA [168](+16)");
            vect = vect + 16;
        }
        else if(secuencia == 176)
        {
            printf("SECUENCIA [176](-16)");
            vect = vect - 16;
        }
        else if(secuencia == 184)
        {
            printf("SECUENCIA [184](+16)");
            vect = vect + 16;
        }
        else if(secuencia == 192)
        {
            printf("SECUENCIA [192](+48)");
            vect = vect + 48;
        }
        else if(secuencia == 200)
        {
            printf("SECUENCIA [200](+16)");
            vect = vect + 16;
        }
        else if(secuencia == 208)
        {
            printf("SECUENCIA [208](-16)");
            vect = vect - 16;
        }
        else if(secuencia == 216)
        {
            printf("SECUENCIA [216](+16)");
            vect = vect + 16;
        }
        else if(secuencia == 224)
        {
            printf("SECUENCIA [224](+48)");
            vect = vect + 48;
        }
        else if(secuencia == 232)
        {
            printf("SECUENCIA [232](+16)");
            vect = vect + 16;
        }
        else if(secuencia == 240)
        {
            printf("SECUENCIA [240](-16)");
            vect = vect - 16;
        }
        else if(secuencia == 248)
        {
            printf("SECUENCIA [248](+16)");
            vect = vect + 16;
        }
        else if(secuencia == 256)
        {
            vect = 22;
            secuencia = 1;
        }
        sprintf(conv, "%d", vect);
        secuencia++;
        printf("%d -> %02x %s \n",  secuencia - 1, (char)(vect & 0xFFFF), conv);       
           if (keymaster == secuencia - 1)
        {
            printf(" \n \n --------> %02x <-------- \n \n", vect);
            break;
        }
    }
    return 0;
}

  Cantidad de llaves: Abiertas(38)-Cerradas(38) | Lineas Totales: 208
Última edición por wachichorro el 24 Ago 2017 08:16, editado 3 veces en total.
Avatar de Usuario
KRISSTI4N
Junior
Junior
Mensajes: 663
Registrado: 15 Nov 2014 21:14
Ubicación: ¡Chile!
Reputación: 22

02 Ago 2017 23:58

Aun no llego a esta etapa jaja. Disculpe la ignorancia amigo, puede que para pawno y programación web sea algo avanzado pero a la hora de hablar de C, C++, Java, etc. soy demasiado nuevo -laughing, ¿De que serviría esto?
Avatar de Usuario
wachichorro
Aprendiz
Aprendiz
Mensajes: 120
Registrado: 19 Oct 2014 17:28
Reputación: 4

03 Ago 2017 00:40

KRISSTI4N escribió:
02 Ago 2017 23:58
Aun no llego a esta etapa jaja. Disculpe la ignorancia amigo, puede que para pawno y programación web sea algo avanzado pero a la hora de hablar de C, C++, Java, etc. soy demasiado nuevo -laughing, ¿De que serviría esto?
Suponiendo que te intriga como SAMP realiza la conversión de puertos en la cookie de 32 bytes que envía para conectarse a un servidor (Seguida de las consultas / Query), ahí tienes al algoritmo de conversión (El cual mucha gente desconoce, pero no les importa, solo pegan lo que vieron en wireshark y ya son todos unos jakosos)

En el caso por default, del puerto 7777, la cookie lleva el siguiente paquete:
0x08
0x1e
0x77 <-- BIT que varía dependiendo el puerto.
0xda

Si bien puedes contemplar, que servidores con otros puertos, como por ejemplo el puerto 7778.
Utilizan el paquete:
0x08
0x1e
0x74
0xda

En este caso utiliza una tabla de hexadecimales para realizar un conteo desde el número 22, y ahí comienzan las matemáticas.
:0 - 0x16 <- 22
:1 - 0x17 <- 23 |+1
:2 - 0x14 <- 20 | -3
:3 - 0x15 <- 21 |
:4 - 0x12 <- 21 |-3
:5 - 0x13 <- x |+1
:6 - 0x10 <- x |-3
:7 - 0x11 <- x | +1
:8 - 0x1e <- x | +16 (Cada 8 bits realiza un calculo para "intercalar" valores) x =30
:9 - 0x1f <- x | +1 (31)
:10 - 0x1c <-x | -3 (28)
:11 - 0x1d
:12 - 0x1a
:13 - 0x1b
:14 - 0x18
:15 - 0x19
:16 - 0x06 <- x | - 16
HASTA EL>| 256 = 0x16
Última edición por wachichorro el 24 Ago 2017 08:18, editado 1 vez en total.
Avatar de Usuario
aguselec
Aprendiz
Aprendiz
Mensajes: 36
Registrado: 23 Nov 2014 18:29
Ubicación: Corea del Norte
Reputación: 0

03 Ago 2017 13:47

MUCHO ALGORITMO PERO EL QUERY DE LSRP VA SUAVE
Avatar de Usuario
MattHudson
Moderador Global
Moderador Global
Mensajes: 1654
Registrado: 31 Oct 2015 18:16
Ubicación: Argentina, Buenos Aires, San Miguel.
Contactar:
Reputación: 87

03 Ago 2017 14:46

wachichorro escribió: Suponiendo que te intriga como SAMP realiza la conversión de puertos en la cookie de 32 bytes que envía para conectarse a un servidor (Seguida de las consultas / Query), ahí tienes al algoritmo de conversión (El cual mucha gente desconoce, pero no les importa, solo pegan lo que vieron en wireshark y ya son todos unos jakosos)
Cuando usaba WireShark para cositas varias(O.o) usaba mucho todo esto y me preguntaba como se manejaba. Lo averigüe, y encontraba información similar a la que publicaste.
Y sí, efectivamente es mejor para todos que no este publicado(véase hasta donde llego SA-MP...)
Julixparker
Baneado
Baneado
Mensajes: 61
Registrado: 20 Jul 2014 13:29
Reputación: -9

25 Ago 2017 07:05

wachichorro escribió:
24 Ago 2017 08:19
Post reabierto, algoritmo posteado.
Este chaval es un flipao que dice saber mucho de todo y no es capaz ni de tirar una conexion domestica. Este post ya se encuentra posteado en otro foro por otra persona. Buen COPY & PASTE.
Avatar de Usuario
wachichorro
Aprendiz
Aprendiz
Mensajes: 120
Registrado: 19 Oct 2014 17:28
Reputación: 4

25 Ago 2017 11:08

Julixparker escribió:
25 Ago 2017 07:05
wachichorro escribió:
24 Ago 2017 08:19
Post reabierto, algoritmo posteado.
Este chaval es un flipao que dice saber mucho de todo y no es capaz ni de tirar una conexion domestica. Este post ya se encuentra posteado en otro foro por otra persona. Buen COPY & PASTE.
Paso de tí payaso, ve a comprarte un stresser novato.
Avatar de Usuario
MattHudson
Moderador Global
Moderador Global
Mensajes: 1654
Registrado: 31 Oct 2015 18:16
Ubicación: Argentina, Buenos Aires, San Miguel.
Contactar:
Reputación: 87

25 Ago 2017 13:22

Julixparker escribió:
25 Ago 2017 07:05
Este chaval es un flipao que dice saber mucho de todo y no es capaz ni de tirar una conexion domestica. Este post ya se encuentra posteado en otro foro por otra persona. Buen COPY & PASTE.
Si tan seguro estas de tu afirmación, demuestra pruebas de la misma. Sino no te cree ni dios.
Avatar de Usuario
EdinsonWalker
Senior
Senior
Mensajes: 1079
Registrado: 21 Feb 2014 10:34
Ubicación: dios no existe
Contactar:
Reputación: 87

25 Ago 2017 23:55

eslemerapoten$ia
Consumido
Avatar de Usuario
Graber
Ayudante
Ayudante
Mensajes: 139
Registrado: 10 Abr 2016 19:16
Contactar:
Reputación: 19

06 Sep 2018 14:38

ostia has inventado xor (^) desde 0 parece, aunque comento que ya esta implementado en mayoria de los compiladores
OmegaZone Roleplay
IP: s1.omegazone.net

Imagen

Responder