elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ofuscación
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ofuscación  (Leído 3,333 veces)
Caster


Desconectado Desconectado

Mensajes: 786


Ver Perfil WWW
Ofuscación
« en: 9 Noviembre 2013, 22:22 pm »

Buenas, he estado leyendo sobre ofuscación del código y lo único que he leído es lo que viene en la wikipedia, que supongo que será lo más básico sobre esto, según la wikipedia:
Código
  1. int int_;

Estaríamos definiendo una variable entera, hasta ahí bien.

Código
  1. _int-_int;

Esto sería = 0

Código
  1. (_int-_int)!;
Y esto sería = 1, y aqui llega lo que no entiendo, por qué el resultado de la siguiente línea es 10:
Código
  1. (((!(int_-int_)<<!(int_-int_))<<(!(int_-int_)<<!(int_-int_)))|(!(int_-int_)<<!(int_-int_)));

Saludos.


En línea

$trunk

Desconectado Desconectado

Mensajes: 22



Ver Perfil WWW
Re: Ofuscación
« Respuesta #1 en: 9 Noviembre 2013, 22:31 pm »

Porque el operador << lo que hace es desplazar bits a la izquierda. Tiene la siguiente sintaxis:
Código:
variable << num_bits_a_desplazar
Es decir, que si haces, 1 << 1 lo que estás haciendo es desplazar un bit a la izquierda, es decir que pasarias de 0001 a 0010. El resultado sería 2 (0010).

Esa sentencia en primer lugar lo que hace es desplazar 4 bits a la izquierda: 1 << 1 << 1 << 1. O sea que lo que está haciendo es: 0001 -> 0010 -> 0100 -> 1000. El resultado es 8 (1000).

Luego, a ese resultado le aplica un OR (|). 1000 | 0010 sería 1010.

En resumen, hace lo siguiente:

(1 << 1 << 1 << 1) | (1 << 1)

(1000) | (0010) = 8 | 2

1010 = 10


En línea




"A la persona no se le conoce por lo que sabe, sino por lo que hace con lo que sabe" - Martin Luther King
Caster


Desconectado Desconectado

Mensajes: 786


Ver Perfil WWW
Re: Ofuscación
« Respuesta #2 en: 9 Noviembre 2013, 22:41 pm »

Vale, el desplazamiento de bits lo entiendo, y por lógica supongo que el operador que utiliza OR (|) no tendrá nada que ver con el operador de comparación sino que este será a nivel de bits, ¿qué función tiene?

Saludos y gracias.
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Ofuscación
« Respuesta #3 en: 10 Noviembre 2013, 02:44 am »

Es un operador de bits donde el bit resultante es 1 si los bits son distintos y 0 si son iguales. Una pagina con una explicación a detalle de esos operadores (en general, no especifico de C) es Wikipedia: Bitwise operation.

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
csp

Desconectado Desconectado

Mensajes: 35


Ver Perfil
Re: Ofuscación
« Respuesta #4 en: 10 Noviembre 2013, 08:57 am »

Buenas,

Te explico según lo entiendo. La primera parte del código (antes del OR), lo que hace es desplazar 3 bits a la derecha.

Entonces, la parte de la línea (Puede que esté mal la cantidad de paréntesis):
Código
  1. (((!(int_-int_)<<!(int_-int_))<<(!(int_-int_)<<!(int_-int_)))

Sería lo mismo que poner:
Código
  1. 1<<1<<1<<1;

Código:
1
10 --> Primer desplazamiento.
100 --> Segundo desplazamiento.
1000 --> Tercer desplazamiento.
La segunda parte del código:
Código
  1. (!(int_-int_)<<!(int_-int_)));
Sería:
Código
  1. 1<<1;
Código:
  1
10 --> Primer desplazamiento.

Y ahora realiza la operación OR. Está es una operación lógica que devuelve verdadero (en este caso 1) cuando uno de los operandos o ambos, sean verdaderos (o 1). Entonces:

Código
  1. 1000 | 10

Hace la siguiente comparación (bit a bit):

1 OR 1 = 1
0 OR 0 = 0
0 OR 1 = 1
0 OR 0 = 0

Dando como resultado 1010. 10 en decimal.

Un saludo.
En línea

Caster


Desconectado Desconectado

Mensajes: 786


Ver Perfil WWW
Re: Ofuscación
« Respuesta #5 en: 10 Noviembre 2013, 11:22 am »

Es un operador de bits donde el bit resultante es 1 si los bits son distintos y 0 si son iguales. Una pagina con una explicación a detalle de esos operadores (en general, no especifico de C) es Wikipedia: Bitwise operation.

Un saludo

Según la explicación que ha dado csp el resultado es 1 si alguno de los dos bits es 1, no tienen porque ser los dos, y asi si que ya tiene sentido la operación, ya lo he entendido todo.

Gracias.
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Ofuscación
« Respuesta #6 en: 10 Noviembre 2013, 15:16 pm »

Cierto, la definición que di fue la del operador XOR '^'. Mea culpa.

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Introduccion a la ofuscacion de codigo c#
.NET (C#, VB.NET, ASP)
aixeiger 3 4,362 Último mensaje 30 Agosto 2012, 15:34 pm
por Keyen Night
ofuscación
Scripting
CodeSource 2 2,879 Último mensaje 5 Marzo 2013, 20:58 pm
por CodeSource
Ofuscacion de codigo
Ingeniería Inversa
Hackkemate 6 5,500 Último mensaje 14 Mayo 2013, 00:18 am
por mr.blood
ofuscacion de programa en visual c6.0
Ingeniería Inversa
caracha 0 1,535 Último mensaje 5 Febrero 2014, 17:26 pm
por caracha
Tecnicas de Ofuscación
Ingeniería Inversa
SteelHern 1 3,134 Último mensaje 19 Enero 2015, 16:04 pm
por MCKSys Argentina
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines