Visitante
Ingresar
Registrarse
Underc0de - Hacking y seguridad informática
Menu
Inicio
Website
Blog
Buscar
Calendario
Ingresar
Registrarse
Underc0de - Hacking y seguridad informática
»
Programación General
»
C / C++
»
Códigos Fuentes
[SRC] andom_access_array - Evitar patrones de lectura/escritura
Imprimir
Páginas: [
1
]
Ir Abajo
« anterior
próximo »
[SRC] andom_access_array - Evitar patrones de lectura/escritura
3 Respuestas
3401 Vistas
0 Usuarios y 1 Visitante están viendo este tema.
Karcrack
Underc0der
Mensajes: 87
Actividad:
0%
Reputación 0
Se siente observado ¬¬'
[SRC] andom_access_array - Evitar patrones de lectura/escritura
en: Septiembre 18, 2013, 04:58:59 pm
Código: C++
#ifndef __RA_ARRAY__
#define __RA_ARRAY__
#include <intrin.h>
#define ULONG unsigned long
template
<
typename
T
>
class
random_access_array
{
const
ULONG elements
;
const
ULONG R
;
ULONG a
;
ULONG c
;
T
*
buffer
;
const
ULONG nextPowerOf2
(
ULONG n
)
const
{
if
(
(
n
&
(
n
-
1
)
)
==
0
)
return
n
;
n
|
=
(
n
>>
1
)
;
n
|
=
(
n
>>
2
)
;
n
|
=
(
n
>>
4
)
;
n
|
=
(
n
>>
<
img src
=
"https://underc0de.org/foro/Smileys/default/cool.gif"
alt
=
"8)"
title
=
"Cool"
class
=
"smiley"
/
>
;
n
|
=
(
n
>>
16
)
;
return
n
+
1
;
}
ULONG LCG
(
ULONG X, ULONG a, ULONG c, ULONG R
)
{
return
(
a
*
X
+
c
)
%
R
;
}
ULONG randmax
(
ULONG max
)
{
return
LCG
(
(
ULONG
)
__rdtsc
(
)
, 0x43FD43FDUL, 0xC39EC3UL, max
)
;
}
size_t
getRealIdx
(
int
index
)
{
ULONG X
=
0
;
while
(
index
--
>=
0
)
while
(
(
X
=
LCG
(
X, a, c, R
)
)
>=
elements
)
{
}
return
X
;
}
public
:
random_access_array
(
T
*
buffer,
size_t
elements
)
:
elements
(
elements
)
, buffer
(
buffer
)
, R
(
nextPowerOf2
(
elements
)
)
{
a
=
2
*
randmax
(
R
/
2
)
+
1
;
c
=
4
*
randmax
(
R
/
4
)
+
1
;
}
random_access_array
(
T
*
buffer,
size_t
elements, ULONG a, ULONG c
)
:
elements
(
elements
)
, buffer
(
buffer
)
, R
(
nextPowerOf2
(
elements
)
)
, a
(
a
)
, c
(
c
)
{
}
T
&
operator
[
]
(
size_t
i
)
{
return
buffer
[
getRealIdx
(
i
)
]
;
}
T operator
[
]
(
const
size_t
i
)
const
{
return
buffer
[
getRealIdx
(
i
)
]
;
}
}
;
#endif//__RA_ARRAY__
Ejemplo de uso:
Código: C++
#define SIZE 573
random_access_array
<
int
>
ra
(
new
int
[
SIZE
]
, SIZE
)
;
for
(
int
i
=
0
;
i
<
SIZE
;
i
++
)
ra
[
i
]
=
i
;
for
(
int
i
=
0
;
i
<
SIZE
;
i
++
)
cout
<<
ra
[
i
]
<<
endl
;
Utilidad real:
Código: C++
#define SIZE sizeof(s) - 1
char
s
[
]
=
"!eru!akklccr !rza"
;
random_access_array
<
char
>
ra
(
s, SIZE,
5
,
25
)
;
for
(
int
i
=
0
;
i
<
SIZE
;
i
++
)
cout
<<
ra
[
i
]
;
Saludos
En línea
I code for
$$$
.
(PGP ID 0xCC050E77)
ASM, C, C++, VB6... skilled [malware] developer
[L]ord [R]NA
Underc0der
Mensajes: 89
Actividad:
0%
Reputación 0
H-Sec
Skype: lordrna
Twitter: lordrna
Re:[SRC] andom_access_array - Evitar patrones de lectura/escritura
en: Septiembre 19, 2013, 10:45:01 am
Pense que lo harias de manera mas inteligente... No validas la longitud del array dentro del template.
En línea
Karcrack
Underc0der
Mensajes: 87
Actividad:
0%
Reputación 0
Se siente observado ¬¬'
Re:[SRC] andom_access_array - Evitar patrones de lectura/escritura
en: Septiembre 19, 2013, 02:46:07 pm
¿Como voy a validar el tamaño del array? Es el usuario quien me lo da.
Si el índice que se pasa es superior al tamaño no importa ya que si te fijas verás que getRealIdx() sólo devuelve un índice dentro del rango.
No habría jamás un buffer overflow.
En línea
I code for
$$$
.
(PGP ID 0xCC050E77)
ASM, C, C++, VB6... skilled [malware] developer
[L]ord [R]NA
Underc0der
Mensajes: 89
Actividad:
0%
Reputación 0
H-Sec
Skype: lordrna
Twitter: lordrna
Re:[SRC] andom_access_array - Evitar patrones de lectura/escritura
en: Septiembre 21, 2013, 10:24:14 am
no habia visto la validación.
En línea
Imprimir
Páginas: [
1
]
Ir Arriba
« anterior
próximo »
Similar topics (1)
[SNIPPET-CONFIG] Lectura de configuración binaria
Iniciado por
Karcrack
Respuestas: 0
Vistas: 2473
Junio 16, 2013, 06:32:03 pm
por
Karcrack
Sponsors
Zerpens
Kali-Linux
Club Hacker
ANTRAX-LABS
Ingresar
×
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
. ¿Perdiste tu
email de activación
?
1 Hora
1 Día
1 Semana
1 Mes
Siempre
Ingresar con nombre de usuario, contraseña y duración de la sesión