Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - @XSStringManolo

#91
Lo iba a subir al foro directamente, pero como el WAF es un troll con javascript y me saltaba con muchos scripts...
Lo bueno es que al subirlo a un hosting puedo meter los ejemplos en vivo.

Utilizo 2 ejemplos:
Pinto un canvas con WebGL.
Pinto un triángulo sobre el lienzo.

Ya le iré metiendo más cosas tipo hacer un cono 3D a base de triángulos. Tema cámaras, planos, proyecciones, sombras, iluminación, frameworks, libs...
http://stringmanolo.byethost12.com/webgl.html

#92
Desarrollo Web / Sugerencias para tutorial WebGL?
14 Octubre 2019, 15:49 PM
Estoy haciendo un tutorial en español para aprender a usar WebGL (Librería de gráficos 3D).

Qué te interesaría aprender a hacer? O qué debería incluir?
#93
Desarrollo Web / Saltarse sandbox de navegador?
13 Octubre 2019, 16:30 PM
Conoceis alguna app o lib con la que pueda obtener acceso de escritura lectura sin confirmación del usuario multiplataforma?


https://stackoverflow.com/questions/371875/local-file-access-with-javascript

#94
Como puedo instalar mi extensión de forma autónoma?
De forma que el usuario no necesite ir a about:extensions ni chrome//debugginge e instalarla manualmente. Así yo tampoco necesito subir la extensión a una store.

A parte de eso necesitaría que el usuario aceptase los permisos de la extensión, (acceder a local storage, ver urls, nuevas pestañas...) porque no hay una forma conocida de saltárselo sin utilizar software para que imite la interacción del usuario no?
Es para un C&C que estoy diseñando 100% con javascript.
#95
Estoy haciendo un proyecto en el que para aumentar la seguridad me decidí a diseñar e implementar mi propio cifrado de 0 sin guiarme por nada.
Por casualidad(o por sencillez) llegué a la misma conclusión que a la que llegó Vernan con su cifrado hace años. Asique en gran parte del proceso reinventé la rueda.
Entonces se puede considerar este código como una implementación del cifrado de Vernan.
Las funciones no están muy debugeadas ni testeadas. De momento me funcionan bien en los códigos que utilicé. Comenté su funcionamiento y varios factores a tener en cuenta para utilizar el cifrado de forma segura en el propio código.

El cifrado lo tengo todo diseñado en papel. Parte implementada en javascript y ahora lo estoy rescribiendo en PHP.
Publicaré en el foro otras partes del cifrado como el CSPRNG que estoy acabando de mejorar para obtener numerosas fuentes de entropia a partir de la propia clave. La implementación del método de transposición, etc.

Cualquier error en el código, duda, sugerencia, comentario u opinion es bienvenida.

Descripción breve:
SMTaD($stringCipherText);
-Pasa el texto de un string a su posición decimal en el abecedario.
Retorna un array con las posiciones.
"abcdefg" -> [1,2,3,4,5,6,7]
"hola" -> [8,16,12,1]

SMDpD($arrayDecimalDeTextoPorCifrar, $arrayContraseñaDecimal);
-Suma los valores de cada posición de ambos arrays.
Retorna un nuevo array con la suma de ambos.
La contraseña debe ser el mismo o mayor tamaño.
[8,16,12,1] + [1,2,3,4,5,6,7] -> [9,18,15,5]

SMDaT($arrayDecimal)
-Transforma cada grupo de decimales al texto correspondiente a esa posición en el abecedario.
Retrona un nuevo array con los caracteres correspondientes.
[9,18,15,5] -> ['i','q','ñ','e']

Se usan diccionarios para definir el "abecedario".


 
Código (php) [Seleccionar]
function SMTaD($cipherText)
  {

  $cipherTextTam = strlen($cipherText);
  $cipherText = strtolower($cipherText);
  $diccionario = array('a','b','c','d','e','f','g','h','i','j','k','l',
'm','n','ñ','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C',
'D','E','F','G','H','I','J','K','L','M','N','Ñ','O','P','Q','R','S',
'T','U','V','W','X','Y','Z','1','2','3','4','5','6','7','8','9','0','.',
':','/',' ');
  $diccionarioTam = count($diccionario);
  $cipherTextDec = [];


  $y = 0;
     for($i = 0; $i < $cipherTextTam; ++$i)
     {
        for($x = 0; $x < $diccionarioTam; ++$x)
        {
           if($cipherText[$i] == $diccionario[$x])
           {
           $cipherTextDec[$y] = 1+$x;
           ++$y;
           }

           else
           {
           /*Caracter no está en el diccionario*/
           }
        }
     }
  return $cipherTextDec;
  }
/*StringManolo Texto a Decimal.
Esta función toma como argumento un
string $cipherText.

*Se recorre todo el string y se compara cada
caracter con los caracteres que contiene el diccionario.

*En el caso de que el caracter a comprobar del
$cipherText coincida con alguno de los caracteres
del diccionario, se añade a un array la posición de
ese caracter+1 (alfabéticamente) en el diccionario.

*Finalmente se retorna este array que hace referencia
al orden alfabético de cada caracter.

*EJEMPLO:
-Si $cipherText contiene la frase "Me van a cifrar".

1) -Se busca el caracter M en el diccionario.

-La letra 'M' ocupa la posición 40 en el diccionario.

-En el array diccionario 'M' en realidad corresponde al
índice 39. Debido a que el array utiliza el 0 como
primer índice y no el 1. Debido a esto se suma +1 para
obtener 40.

-Si no se encuentra 'M' en el diccionario o si
ya se añadio el numero 40 se pasa a la siguiente letra.

2) Se repite el proceso anterior para la letra 'e'.

3) El resultado final de pasar el string "Me van a cifrar"
seria el mismo que al hacer:
$TextoEnDecimal = array('40','5','68','23','1','14','68','1','68','3','9','6','19','1','19');
Hace referencia a: array('M','e',' ','v','a','n',' ','a',' ','c','i','f','r','a','r');

*Utilizo strToLower para convertir todas las letras mayúsculas
a minúsculas. Comenta o borra esa línea si te interesa mantener la
información original.

*Asegurate que todos los caracteres del
texto a cifrar estén contemplados en el diccionario.
Puedes crear una funcion para obtener todos los caracteres
distintos del texto a cifrar y crear el diccionario en base a ellos.
Así evitas comprobaciones innecesarias con caracteres que
sabes de antemano que no vas a encotrar.
Por ejemplo si aplicas base64 antes de la función, puedes
eliminar ' ',':','.' del diccionario y añadir '+','=' ya que sabes de
antemano que un texto cifrado en base64 no puede contener
espacios, dos puntos o puntos.

**Obtener una referencia numérica de las letras tiene entre
otras utilidades poder operar matemáticamente con los caracteres.
*/



  function SMDpD($decimal1, $decimal2)
  {
   
  $diccionario = array('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');
  $diccionarioTam = count($diccionario);
  $decimal1Tam = count($decimal1);
  $decimal2Tam = count($decimal2);
  $cipherTextSum = [];

     $y = 0;
     for($i = 0; $i < $decimal1Tam; ++$i)
     {
        for($x = 0; $x < $diccionarioTam; ++$x)
        {
           if($decimal1[$i] == $diccionario[$x])
           {
           $cipherTextSum[$y] = $decimal1[$i] + $decimal2[$y];
           ++$y;
           }
        }
     }
  return $cipherTextSum;
  }
/*StringManolo Decimal plus Decimal.
StringManolo Decimal + Decimal.
Esta función toma como argumentos 2 arrays
que contienen numeros y los suma.

Durante el diseño de este cifrado llegué a la
conclusión de que esta suma modular de 2 caracteres
ya se utilizaba por el Cifrado Vernan. El Cifrado Vernan
sentó las bases para otros cifrados de uso frecuente
a lo largo de la historia. Uno de los principios más
seguros es el conocido como Libreta De Un Solo Uso.
https://es.m.wikipedia.org/wiki/Libreta_de_un_solo_uso

IMPORTANTE:
Este cifrado está probado como irrompible bajo ciertas
condiciones. Esta implementación deja a cargo del
usuario de estas condiciones. Y algunas
consideraciones. Paso a comentar estos puntos a
continuación:
1)Se espera que se utilize como uno de los parámetros
de la función una cadena *Aleatoria del mismo o mayor
tamaño que el texto a cifrar.

En computación (sin entrar propiedades cuánticas)
es imposible generar un número totalmente aleatorio.

Para suplir este inconveniente se
recurre a utilizar algoritmos para generar numeros
pseudoaleatorios resistentes a criptoanálisis.
Estos algoritmos son conocidos como CSPRNG.
Algunos de los provados como más seguros son
aquellos que generan secuencias pseudoaleatorias
utilizaneo como entropia el "ruido de fondo" o "ruido"
ambiente captado por el micrófono.
En realidad puedes escribir letras aleatoria como clave
para el cifrado siempre y cuando:
-No sigas ningún patrón que se pueda replicar para
genear la clave que vas a utilizar.
-El cifrado lo debes generar en un equipo offline únicamente
dedicado para ello. En caso de que el equipo se conecte
a otros equipos, un atacante podría llegar a infiltrarse
en el sistema y obtener la clave utilizada.
El cifrado de la Libreta De Un Solo Uso se basa en que una
vez utilizada la clave esta se destruya.


2) El tamaño de la clave debe ser igual o mayor que el tamaño
del texto a cifrar.

Consideraciones:
-No deja de ser un cifrado de substitución. Si la
clave es insegura "aaaaaaaaa" o se tienen indicios del
idioma en el que se escribió el texto a cifrar, se pueden realizar
diversos analisis de frecuencia. Para eliminar esta posibilidad
recomiendo utilizar algún cifrado de transposición para desordenar
el texto a cifrar. Mas adelante recomiendo cual utilizar.

-No debe reutilizarse la clave ni dejar a un usuario cifrar con la misma
clave. Si estas utilizando la misma clave, por ejemplo
"abcdefghijk..." para cifrar un texto. Si dejas a un usuario
cifrar con ella, podría cifrar el texto "aaaaaaaaaaaaa..." y así
generar la clave +1 para cada caracter.

Siguiendo estos principios se espera que el primer parámetro de la
función sea un array con los decimales del texto a cifrar.
Y que el segundo parámetro sea la contraseña tambien en decimal.
Se pueden pasar strings a la función SMTaD(); para obtener el array
en decimal correspondiente.
Ejemplo:

$Saludo = "Hola";
$Contraseña = "ceaf";

$Saludo = SMTaD($Saludo);
$Contraseña = SMTaD($Contraseña);

$SaludoCifrado = SMDpD($Saludo, $Contraseña);

$SaludoCifrado = SMDaT($SaludoCifrado);

Sucede lo siguiente:
SMTaD($Saludo); devuelve el array 8,16,12,1
SMTaD($Contraseña); devuelve el array 3,5,1,6
SMDpD($Saludo, $Contraseña); devuelve el array 11,21,13,7

La siguiente función SMDaT($array); utiliza un diccionario para
convertir los decimales a texto.

SMDaT($SaludoCifrado); devuelve el array k,t,m,g

Puedes usar:
Un diccionario de 27 caracteres (a-z) y usar el operador módulo
o restar el tamaño del diccionario. En este caso a+z seria 28.
28-27 es 1.
1 es igual a 'a'.

Un diccionario de 54 caracteres (a-Z).
Un diccionario de 64 caracteres (a-9).

O un diccionario que contemple las máximas posibilidades.
En caso de solo operar con minúsuculas tanto en la clave
como en la contraseña (a-z) tendrías un valor máximo posible
de z+z (27+27). Es decir, puedes representar todos
los resultados en un diccionario de 54 caracteres.
Por ejemplo (a-Z). Así z+a = 28. que sería 'A'.
Esta última opción puede ser menos o más segura criptográficamente.
Pero sigue siendo irrompible si se siguen todas las pautas.
Ya que 'A' puede ser a+z, b+y, c+x, d+w, e+v, f+u ...
En conclusión 'A' puede ser cualquier letra del abecedario
en conjunto con otra letra opuesta (en relación con su orden alfabético).
Es difícil analizar que método es mejor.
Teoricamente ninguno da información relevante en el supuesto de
utilizar una clave aleatoria y cifrando por transposición el texto.

Debido a que la seguridad del cifrado se basa en el desconocimiento de la clave
por parte del atacante, recomiendo utilizar la propia clave para aplicar transposición
al texto que se va a cifrar, o al propio resultado del cifrado.
Siguiendo el ejemplo anterior:
texto -> h o l a
contraseña -> c e a f
resultado -> k t m g

Puedes utilizar el propio orden alfabético de la clave para reordenar el resultado:
c e a f -> 1c=2, 2e=3, 3a=1, 4f=4
k t m g -> 1k pos2, 2t pos3, 3m pos1, 4g pos4
resultado -> m k t g

*Esta funcion puede ser utilizada sin modificaciones para cifrar utilizando varios
cifrados comunes.
Por ejemplo para cifrar con cifrado Cesar introduce como clave la letra
que corresponda alfabéticamente al numero de vueltas.
$Saludo = "Hola";
$Contraseña = "bbbb";
$Saludo = SMTaD($Saludo);
$Contraseña = SMTaD($Contraseña);
$SaludoCifrado = SMDpD($Saludo, $Contraseña);
$SaludoCifrado = SMDaT($SaludoCifrado);
El resultado de cifrar hola con bbbb es j q n c.

Para cifrar con vigenere:
$Saludo = "Hola";
$Contraseña = "abcd";
$Saludo = SMTaD($Saludo);
$Contraseña = SMTaD($Contraseña);
$SaludoCifrado = SMDpD($Saludo, $Contraseña);
$SaludoCifrado = SMDaT($SaludoCifrado);
El resultado de cifrar hola con abcd es iqñe
en el diccionario incluí la ñ. Si la eliminas el
resultado seria el mismo que en el diccionario
inglés de uso común resultado -> iqoe.
Se obtiene el mismo resultado que cifrando hola
con vigenere y la clave bcde.
Con un par de modificaciones se puede conseguir el
mismo resultado.

Si quieres imprimir el contenido del array puedes usar:
foreach($SaludoCifrado as $value)
{
echo "$value" ;
}

Y para imprimirlo en un documento de texto:
file_put_contents("carpeta/resultado.txt", $SaludoCifrado, FILE_APPEND);

*/


  function SMDaT($cipherText)
  {
  $cipherTextTam = count($cipherText);

  $diccionario = array('a','b','c','d','e','f','g','h','i','j','k','l',
'm','n','ñ','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C',
'D','E','F','G','H','I','J','K','L','M','N','Ñ','O','P','Q','R','S',
'T','U','V','W','X','Y','Z','1','2','3','4','5','6','7','8','9','0','.',
':','/','-','!','@','^','&','*','+','=','<','>','{','}','[',']','€','%','?','_','|',
'a','b','c','d','e','f','g','h','i','j','k','l','m','n','ñ','o','p','q','r','s',
't','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L',
'M','N','Ñ','O','P','Q','R','S','T','U','V','W','X','Y','Z'); $diccionarioTam = count($diccionario);

  $diccionario2 = array('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');
  $diccionario2Tam = count($diccionario2);

  $cipherTextText = [];

$z=0;
     for($i = 0; $i < $cipherTextTam; ++$i)
     {
        for($x =0; $x<$diccionarioTam; ++$x)
        {
           if($cipherText[$i] == $diccionario2[$x])
           {
           $cipherTextText[$z] = $diccionario[$x];
           ++$z;
           }
        }
     }
  return $cipherTextText;
  }



#96
Estaba pensando en nuevos métodos de device fingerprinting y se me ocurrió saturar el stack de llamadas.

1)Cual es el número más grande que se te muestra al final del documento?

2)Se muestra el mismo número en distintos navegadores?

3)Siempre se repite el mismo resultado de forma consistente en el mismo navegador?

Código (javascript) [Seleccionar]
<html>
<body>
/*Pon etiqueta script*/

var i =0;
stack();

function stack()
{
++i;
document.write(i+" ");
return overflow();
}

function overflow()
{
return stack();
}
/*Pon etiqueta /script */
</body>
</html>


A ver que resultados obtiene cada uno.
Yo con Android con un smartphone gama baja en Samsung Browser obtengo 10505 iteraciones hasta que se llena el stack.

No tengo ahora mismo más dispositivos disponibles. A ver que resultados obteneis vosotros y si podemos sacar conclusiones en base a ellos de si es un método que pueda ser útil para hacer fingerprint.
#97
Código (javascript) [Seleccionar]
function dividir(num1, num2)
{

   if ( num1 !=0 && num2 !=0 && num1>=num2)
   {
   return num1/num2;
   }


return;
}

var resultado = dividir(parseInt(prompt("Pon Numero")), parseInt(prompt("Pon Numero")));

if(resultado)
{
alert(resultado);
}

else
{
alert("No se puede dividir");
}


En la línea 10 hago return explícito. Me surgen varias dudas.
Hay alguna diferencia entre que escriba el return o no lo escriba en esta línea 10? En teoría lo que hago es retornar un undefined, que es una representación de un valor no definido. Si borro la línea 10 del código, yo lo que me esperaría por lógica es que se retornase un null. Es decir, que se retornase una representación de un valor vacio.

1) ¿Por qué se retorna un undefined si yo no espero que la funcion me retorne un valor? No es más coherente que se retorne un null haciendo referencia a que no se retorna ningún valor en vez de hacer referencia a que se espera un valor que no se definió?

2) ¿Sirve el return de la línea 10 en este caso de algo? Es diferente al return implícito en la función al finalizar las instrucciones del cuerpo sin encontrarse ningún return? Si hago un break; tras el break se hace el return implícito? Es el return simplemente un break más eficiente o tiene alguna funcionalidad?

3) Es una buena práctica utilizar el undefined en un if como un false? Por ejemplo en la línea 15 podría poner if(!resultado){document.write("No se puede dividir");}
#98
PHP / Ocultar contraseña en archivo PHP?
1 Octubre 2019, 05:57 AM
Os pongo en contexto con un caso hipotético.

Yo soy el administrador de un servidor al que acceden multiples usuarios socios de la misma empresa e introducen su cuenta bancaria y su PIN.

Yo estes datos quiero guardarlos cifrados en un documento de texto accesible públicamente. Así cualquiera usuario que no esté registrado pero tenga la contraseña puede tener acceso a las cuentas.

Entonces hice un script en PHP con una función cifrado($parámetro1, parámetro2); Esta función cifrado acepta dos parámetros; $arrayBancoPin y $StringContraseña y retorna un string con todos los datos cifrados.

Entonces la función la llamo como:
Código (php) [Seleccionar]
$UsuarioBancoPin = Unir($UsuarioBanco, $UsuarioPin);
$Contraseña = '123';

$DatosCifrados = cifrado($UsuarioBancoPin, $Contraseña);


Finalmente lo guardo en un archivo.
Código (php) [Seleccionar]
file_put_contents("banco/informacionCifrada.txt", $DatosCifrados, FILE_APPEND);

Hasta aquí todo bien.

El problema surge si alguien hackea el servidor y obtiene el cifrador.php
Este hacker tendría acceso a:
Contraseña en texto plano. Modificar PHP. Imprimir variables o usar funciones. Ver el código del cifrado...

La opción más lógica es usar un cifrado asimétrico para cifrar el contenido del archivo con clave pública. El problema surge en que el propio servidor en otro script .php necesita tener la clave privada para descifrar y hacer transferencias automatizadas. A parte de que varios usuarios también necesitarían acceso a la clave privada. Ya que el servidor no puede descifrar para ellos. Deben ser ellos quienes descifren offline.

Qué se puede hacer al respecto?




Mod: OBLIGATORIO EL USO DE ETIQUETAS GESHI.
#99
Código (php) [Seleccionar]
$vacio = [];
$vacio2 = array();


Cual es mejor? O son iguales?
#100
Hola, estoy diseñando mi propio cifrado.

Lo que hago es:
Pido al usuario el texto a cifrar.
Pido al usuario la clave para el cifrado.

Obtengo el equivalente según mi diccionario de 7bits (127 caracteres) en decimal de los caracteres del texto plano y la clave.
Por ejemplo el usuario introduce:
Texto a cifrar:abcd
Clave:bbcc

Entonces lo que hago es obtener el equivalente decimal en base a un diccionario en un string:

abcd -> 1 2 3 4
bbcc -> 2 2 3 3

Entonces realizo operaciones con la clave y la sumo al texto:
b -> 2

2*2=4
4*(4+4)*5=160

Resto el tamaño de la clave al numero obtenido para poder representarlo en 7bits:
160-127 = 33

Sumo la clave + la contraseña -> a+33 = 34

a + b = 34

34 en mi diccionario es el caracter G.

Para descifrar hago:
G -> 34

2*2 =4
4*(4+4)*5=160
160-127=33

34-33=1

Caracter G descifrado con clave b -> a

El problema que tengo es que si el usuario introduce por ejemplo:
Texto:
abcdefghijklmnñopqrstuvwxyz
Clave:
aaaaaaaaaaaaaaaaaaaaaaaaa

El texto cifrado sería:
bcdefghijklmnñopqrstuvwzyzA

Por lo que sería extremadamente sencillo averiguar que el texto original era el abecedario en español sin saber la clave.

Tengo un diccionario de 127 caracteres donde los últimos 27 se repiten.

Cómo soluciono este problema de que el usuario introduzca una clave insegura y que el texto plano sigue correlacionado?

Se me ocurren muchas maneras a mi rollo de hacerlo. Busco ideas que tengais propias. No la "mejor manera" de hacerlo. Si no estaría usando números primos enormes y otros esquemas más apropiados para un sistema simétrico por clave donde el algoritmo de bastante igual.

El cifrado va a ser seguro independientemente del algoritmo que use ya que esto solo es una capa, usaré en otras capas bloques de 4096b y block chain entre otras cosas que me recomendó Kub0x y que tenía pensadas yo.

Solo quiero mejorar esta capa con algun algoritmo chulo y funcional. Este algoritmo que uso son 4 lineas tontas de código asique algo chulo no cuesta meterlo nada.

A mi se me ocurren ideas de medias aritméticas, geometrías básica y transposición de orden + bits con encoding en el propio cifrado. Esto último algo así como funciona la asimétrica. Indicar el orden cifrado con clave pública en el propio cifrado y descifrarla con la clave privada.

Qué se os ocurre? Ideas locas me gustan.  :D
#101
Busco fuentes de criptominers que estén funcionando.
#102
Quiero almacenar muchos teras de información recabada por bots y spiders y no sé donde podría almacenar toda la info y manejarla cómodamente sin tener que pagar.
Debería ser un sitio al que pueda acceder de forma automatizada.

Básicamente quiero poner varios bots/spiders a rondar por la web siguiendo unos parámetros y que vayan cifrando, comprimiendo y almacenando automáticamente toda la info interesante.
Después un bot debería poder acceder a esa base de datos, descomprimirla, descifrarla con la clave y obtener lo que se le indique.

Mi idea es algo así como un spider que se ponga a buscar perfiles públicos de personas distintas y almacenar toda la info pública que se encuentre.
Al bot se le dice por ejemplo: Dame un perfil de un hombre entre 25-35 años que visite páginas de concesonarios.

Me surgen varios problemas, dónde meto tanta info y que pueda acceder y guardarla ahí de forma automatizada? Es legal si es info pública no?
#103
Foro Libre / Qué os parece el nuevo Spot de Pascual?
12 Septiembre 2019, 08:49 AM
Quería hacer una mención merecida al nuevo anuncio de la lechera Pascual. Muy guapo el spot tocándole el piano a las vacas.
Este tipo de spots me encantan. Un anuncio sin tanto ruido, que se entiende a la perfección hasta sin texto ni narrador, con un simple: Lechera Pascual sobraba. Pero va dirigido a todo el mundo, probablemente enfocado principalmente a la gente más joven.

Vende una imagen muy buena de la marca y con un mensaje muy coherente y claro.
En el spot sale una toma larga al piano, varios planos a las vacas y el entorno, para de tocar cuando las vacas se duermen. Increhíble la calidad de la imagen y el entorno acogedor con las escenas y la iluminación de todas las escenas y junto a la música y el silencio.
A parte la voz del narrador y su tonalidad muy bien elegidas para el entorno.

El mensaje muy al día de la sociedad y enfocado a las nuevas generaciones y potenciales consumidores. Un spot para el presente y los consumidores del futuro.
Tanto la duración como las horas predominantes a las que se emite el spot están muy bien elegidas. Es un anuncio de extensa duración y a horario de mucha audiencia. En TV una campaña así se paga a precio de oro.
Estas empresas son las que pagan la televisión. Por tanto podrían hacer un ***** anuncio más, o el típico anuncio con un famoso de prime time como los de los yogures y que saben que iba a funcionar de todas formas y ser más corto. Es lo que se hace hoy en día en base a rentabilidad. Pero han ido mucho más allá.
Otros anunciantes jamás meterían silencio o música sin más en sus anuncios, es una locura! Pagar por no decir nada.
En cambio han pasado de una ***** anuncio cometarros a regalarnos arte.
Sí, es un regalo. Podrían perfectamente reducir la duración a 1/4 de la duración actual, que se entendiera el mensaje, etc. Pero han decidido no hacerlo y me alegro de ello.

Seguramente más tarde cuando ya prácticamente todos viesen el spot ya tendrán la campaña contratada (pillarían un pack para reducir el precio) para sacar la versión reducida del spot con un trocito de la toma final del piano, el plano de las vacas durmiéndose y la voz del narrador. Hacía tiempo que no veía un spot tan bueno, trabajado y cuidado. Arte. 10/10.
#104
Hacking / Hacking y tracking con imágenes?
11 Septiembre 2019, 20:01 PM
Me interesa muchísimo el tema y ando picoteando un poco de aquí y un poco de allí.
Me gustaría encontrar info detallada, libros, etc. Sobre lo que se puede hacer con imágenes. XSS, Beacons, Exploits... También me interesa el tracking en general.
No encuentro recursos buenos y extensos que traten este tema y muchas de sus variantes, lo qie enlentece el proceso de aprendizaje en gran medida.
Teneis algo útil para aprender?
#105
Hacking / Qué exploit kits OpenSource recomendais?
11 Septiembre 2019, 16:12 PM
Pa automatizar pentest a varios clientes y avisarles de que vulns deben reparar.
#106
Android / Aplicaciones útiles para Android.
10 Septiembre 2019, 16:39 PM
Apps útiles para Android.

-AFWALL+
Tiene firewall, logs, filtros, reglas, poner scripts custom, widget,  dns proxy, cargar ip tables desde binario o BusyBox, perfiles, precarga desde rom y un montón de ajustes hasta para si usas el Android de servidor. También tienes una UI super sencilla para configurar aplicación por aplicación para bloquearles internet por cable, datos, wi-fi y el bluetooth.

-ZoneAlarm Mobile Security.
Antivirus, te escanea en segundo plano.
Muestra toda la info de seguridad que debes revisar. Por ejemplo:
CitarSu dispositivo está rooteado. El rooteado expone su dispositivo a muchos errores y vulnerabilidades de seguridad. Se recomienda que siga las intrucciones para respaldar y restaurar el dispositivo. Incluso si ha rooteado el dispositivo a propósito se recomienda seguir estos lineamientos para reducir los riesgos para la seguridad:
...
Se permiten aplicaciones de origen desconocido, el modo de depuración de USB está activado. Etc.

Te escanea todas las apps en busca de malware, aplicaciones fraudulentas, suplantaciones de identidad y ransomware...
También protección para la red.
CitarSe ha examinado la red para ver fugas tráfico a terceros.
Se ha comprobado la red para ver posibles vulnerabilidades.
Su conexión actual a zona Wi-Fi está cifrada.
Navegación Segura, se requieren permisos de VPN para protegerte ante ataques de phishing y sitios dañinos.
Te trae historial de actividad. Etc.

-Titanium Backup
Copias de seguridad de todo tipo. De aplicaciones, datos del sistema, copias automáticas, rehacer copias si un archivo se modifica, copiar nuevas instalaciones y updates. Restaurar lo que quieres de todo lo anterior, integrar apps en la ROM, congelar applicaciones, desvincular una aplicación del sistema y del Play Store, borrar cache, datos del usuario, rollback diario, WAL, desinstalar aplicaciones del usuario o del sistema, eliminar copias de seguridad, cifrar todo, programar tareas, almacenamiento en la nube, HyperShell, perfiles de datos por si quieres deshabilitar apps o updates a la nube, forzar respaldos...

Microsoft Launcher. (No es lo más privativo del mundo, pero se puede limitar con otras apps, el launcher de bundled mandaba datos a terceros de dudosa reputación y era bastante limitado.)
Fondo de pantalla, temas, paquetes de iconos, notificaciones, noticias(puedes poner las fuentes tú) linea de tiempo, widgets, gestos, accesos directos, explorador, motor de búsqueda, busqueda por voz, Cortana, idioma, reloj, integrado con cuenta de microsoft, wunderlist y office 365... Vista rápida con calendario, documentos de las cuentas, escaner QR, busqueda por voz en el motor de búsqueda, actividades recientes, aplicaciones usadas frecuentemente. Buscar y agregar contactos. Notas rápidas con OneNote, notificaciones y sugerencias, tareas. Desinstalar aplicaciones directamente desde el launcher...

-Floating Apps
Te permite abrir apliaciones en una ventana nueva sin cerrarla. Herramientas únicas que trae la app como scanner de código de barras, navegador, calculadora, brújula, teclado para llamar, linterna, google imagenes, google search, magnifier, espejo(camara frontal),  notas, lector de pdf, cronómetro, información de uso de ram, memoria usada, velocidad de descarga y subida, twitter, facebook, buscador en la wiki, youtube...
Puedes por ejemplo leer un libro en pdf, mientras tienes un videoclip de youtube de fondo, y vas tomando apuntes. Simplemente te abre una ventana nueva por cada aplicación, puedes minimizar, arrastrar, maximizar o cerrarlas.

-PhotoEditor (es de dev.mcgyvert)
Tiene todo lo necesario el mejor de Android para hacer las cosas a mano.

-DoubleApp.
Multiplica las apps de usuario que quieras. Por ejemplo para usar varias cuentas distintas en una aplicación sin necesidad de tener que borrar los datos cada vez que quieras cambiar de cuenta.

-Notepad++
Este es muy conocido. Es como un bloc de notas que te resalta el texto a colores según el tipo lenguaje de programación que uses.

-CPP N-IDE
Muy util para hacer programas y todo tipo de herramientas. Puedes escribir el texto directamente. Resalta el texto a colores para un montón de lenguajes, muchisimas codificaciones posibles, tiene una terminal de comandos, trae ejemplos de codigo en C y C++, trae SDL y OpenGL integrados y con ejemplos para que compiles y pruebes. Una burrada de módulos y paquetes para el IDE con todo tipo de funcionalidades y puedes descargar más complementos o librerías.
Por poner ejemplos de los más conocidos se le puede meter Curl, git, make, gcc y gcc para AVR, openssl, pkgman, sqlite, wget expat, fastjar, binutils y binutils con soporte para Atmel avr, cppcheck...
Tiene el problema de que crashea muy de vez en cuando algunas partes, depende del dispositivo. Pero muy útil.

-Drastic NDS.
Emulador para Nintendo DS que funciona de marabilla y es cómodo, con muchas opciones de todo tipo.
#107
También se recompensan reportes de aplicaciones que vendan datos a terceros de forma fraudulenta sin consentimiento del usuario de la app.
https://android-developers.googleblog.com/2019/08/expanding-bug-bounties-on-google-play.html

Será una manera de protegerse ante Apple tras el reporte público de los hackeos a iPhone? El buen beef!
Deberían cambiar el logotipo de Google a un gusano jejeje.
#108
http://stringmanolo.byethost12.com/an.php

Tengo un problemón.

Lo que intento hacer:
Tengo en la variable $SC el SourceCode de google.es
Estoy mostrando el source en la web e intento implementar un link para que el usuario se lo descarge.
Se me ocurrio meterlo en un archivo externo hacer un echo y descargar el archivo como .txt
El archivo se descarga correctamente.

Lo que sucede: Al abrir el archivo dentro me encuento el código fuente del aes.js
En el hosting que utilizo, muy de vez en cuando aparece este código fuente de aes.js y otras veces el mío.
Código (javascript) [Seleccionar]
/*
* aes.js: implements AES - Advanced Encryption Standard
* from the SlowAES project, http://code.google.com/p/slowaes/
*
* Copyright (c) 2008 Josh Davis ( http://www.josh-davis.org ),
* Mark Percival ( http://mpercival.com ),
*
* Ported from C code written by Laurent Haan ( http://www.progressive-coding.com )
*
* Licensed under the Apache License, Version 2.0
* http://www.apache.org/licenses/
*/

var slowAES = {
/*
* START AES SECTION
*/
aes:{
// structure of valid key sizes
keySize:{
SIZE_128:16,
SIZE_192:24,
SIZE_256:32
},

// Rijndael S-box
sbox:[
0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76,
0xca, 0x8...


Código (php) [Seleccionar]
<?php 
header
("Content-type: application/octet-stream"); 
header("Content-Disposition: attachment; filename=\"source-code.txt\""); 
echo 
$SC;
?>


Código (php) [Seleccionar]
<?php
echo "$SC;
?>

</p>
</div>
<a href="php/download.php">Download Source Code!</a>
<p>
<h4>Links</h4>
<?php






Mod: Obligatorio el uso de etiquetas GeSHi.
#109
Quiero poner un botón debajo de un div para que se descargue el contenido que hay dentro como archivo.txt
No quiero que el archivo se guarde en el servidor.

Estoy escribiendo el contenido del div desde PHP. Sé que hay una forma de hacerlo con javascript puro pero no me acuerda como era y no lo encuentro.
#110
Estoy escribiendo un libro teórico/técnico sobre la ingeniería social el cual va a ser extremadamente extenso. Lo he estado reflexionando y me gustaría hacer una especie de 3 libros en 1 unificado. Teoría apollada en bases científicas como estudios psicològicos, neurológicos y de ciencias políticas entre otros. Práctica exponiendo técnicas reconocidas, técnicas de uso popular y técnicas teóricas. Ética y legislación un análisis exaustivo de la ingeniería social, su uso, como aplicarla siguiendo la legalidad, etc.

Me gustaría saber que os interesa, que os llama la atención, sobre que os gustaría leer...

#111
Es legal que en mi sitio muestre el fuente de otro? Tipo:
Código (php) [Seleccionar]
$data = file_get_contents("https://www.google.es/");
$SC = "<xmp>".$data."</xmp>" ;
echo "$SC" ;


Entre otras cosas quiero obtener todas las url realcionadas al dominio, ordenar su contenido, ordenar las url y mostrarselas al usuario de mi web de cualquier dominio que introduzcan. Tamaño de archivos, etc.

Hasta que punto es legal que ofrezca este servicio o que un usuario de la web lo utilice? Dónde está el límite de scannear solo el fuente de la url o scannear todos los fuentes de todas las urls y a su vez las urls de esas fuentes?
#112
Estoy buscando algún sitio que funcione para obtener el código fuente de una url.

Algo así:
Código (javascript) [Seleccionar]
var url = "http://anyorigin.com/go?url=" + encodeURIComponent("https://www.google.es/");
$.get(url, function(response) { document.write(response); alert(response);});


Estoy probando con varias y ninguna me funciona  :-(
Conoceis alguna?

El objetivo es conseguir el código fuente de cualquier URL en una variable para hacer análisis de sitios a mi bola con javascript sin recurrir a mi propio server de forma portable. Es decir, que haga copia y pega en cualquier hosting gratuito (o no) y funcione.

A ver si me podeis ayudar.  :)
#113
GNU/Linux / Configurar webmin en servidor SSH?
23 Agosto 2019, 21:50 PM
Tengo el SSH configurado. No puedo acceder a webmin desde el navegador al poner ip:10000. El apache si que se me ve por HTTP que aun no lo puse por HTTPS pero al webmin no me deja entrar diciéndome que tengo que usar SSH. Cómo lo configuro? Normalemente instalo el SSH desde la propia interfaz de webmin una vez que ya accedí por el 10000, pero claro, ahora no puedo acceder. Ando buscando info pero no encuentro y casi todo es con interfaz. Yo uso cli para el server.
#114
Desarrollo Web / SVG responsive?
23 Agosto 2019, 03:36 AM
Ando aprendiendo SVG y me encuentro haciendo una toolbar. Al hacer zoom, y dependiendo de la configuración del cliente el tamaño varía. Asique por ejemplo si se hace mucho zoom o la resolución de la pantalla es muy pequeña o muy grande va a cambiar el tamaño de la toolbar hasta el punto de que no se vea otra cosa en pantalla.

Lo que quiero es fijar el tamaño para que sea el mismo independientemente de la resolución. Podría setear el tamaño usando viewport y ajustar el tamaño trás hacer zoom a la inversa de la escala para redibujar la toolbar cada vez que se haga zoom, pero me parece una burrada de operaciones y hay que redibujar la toolbar tras cada zoom. En android es horrible como funciona porque no se redibujan los gráficos hasta que sueltas la pantalla y se ve como la toolbar desaparece un cacho hasta que le dejas redibujarse. Es una tontería pero queda muy feo. SVG no se redimensiona como un elemento HTML a pesar de poder manejarlo como tal.

Sabeis como se podría hacer:
-Que la imagen se adapte a la resolución en todo momento. (Importante para que se adapte cuando se gire la pantalla en Android)
-Que siempre ocupe lo mismo ante zooms. (Qué permaneza fija sin aumentar de tamaño)

A ver si me podeis hechar una mano que no consigo hacerlo.

El código:
Código (xml) [Seleccionar]
<div class = "RectangulosFijos">
<svg style ="display: block" width="100%" height="40">

<rect width="100%" height="42" style="fill:rgb(0,0,0);stroke-width:2;stroke:rgb(0,0,0)" id="Rectangulo1"
onclick="MatrizRectánguloCirculo();"/>
</svg>
</div>

<style>
.RectangulosFijos{
position: fixed;
left: 0;
right: 0;
bottom: 0;
}
</style>
#115
Redes / Traceroute con icmp deshabilitado?
21 Agosto 2019, 22:17 PM
Alguna forma de obtener los puntos con icmp deshabilitado?

Quiero hacer un herramienta para traceroute y mostrar todos los saltos con flechas/líneas y geoloc en un mapa con d3.js three.js o svg.

Pero claro, no me salen todos los puntos según estén configurados. Alguna alternativa o workaround?
#116
Hay pocas menciones a SVG asique vengo a hacer una corta intro para resaltar sus cualidades y presentar esta herramienta a quien no la conozca.
SVG Scalable Vector Graphics es un deribado de XML que podemos incluir directamente en nuestro documento HTML entre las etiquetas <svg> </svg>

SVG nos permite mostrar figuras gráficamente. Lo mejor es que veas un ejemplo para que compruebes como funciona:

Código (xml) [Seleccionar]
<!DOCTYPE html>
<svg>
<circle class="target" style="fill: #69b3a2" stroke="black" cx=50 cy=50 r=40>
</circle>
</svg>

Copia el código anterior y guárdalo como nombredetuarchivo.html ahora ábrelo en el navegador y podrás ver el restultado.

También podemos moverlo por la pantalla, aplicarle atributos CSS, también seleccionar los colores de relleno y borde con el nombre del color en inglés:

Código (html4strict) [Seleccionar]
<svg width="100" height="100">
<circle cx="50" cy="50"r="40" stroke="green" stroke-width="4" fill="yellow" /></svg>

Se pueden hacer todo tipo de figuras y dibujos, ya sea para hacer banners, o elementos interactivos par tu web, ya que puede usar handlers en javascript para hacer efectos, cambiar de figura y más cosas con eventos.

En el siguiente link os dejo varias etiquetas con sus links para SVG
https://developer.mozilla.org/es/docs/Web/SVG/Element

Si lo que te interesa son temas de ciberseguridad...
SVG ha sido y es usado para fabricar desde Keylogger que puede correr bajo extensiones como noscript para por ejemplo desanonimizar usuarios de Tor hasta escondes payloads en javascript para enviar por correo. Ya que muchos servidores bannean el "truquito" del attachment de la doble extensión para mandar documentos con javascript. Hay mucho malware que se ha "desechado" y que puede volver a ser útil con cambios realmente pequeños.

Una herramienta muy útil y sencilla de utilizar.
#117
Hola, estaba pensando en actualizar el portafolios profesional orientado a otro tipo de software con mis conocimientos actuales y proyectos en los que e participado. La idea que tengo en mente es una presentación en texto bastante sencilla y directa, en una web acerca de mis conocimientos, experiencia, metodología de trabajo y cualidades junto a mi nombre, que tipo de proyectos realizo y datos de contacto junto a un formulario. En la misma página añadir un botón para saltar abajo como si fuese un libro en formato pdf en el que cambias de página. En esta otra "pagina" (es el mismo index.html, opto por esta opción para que cargen todas las aplicaciones mientras el visitante lee el texto) me gustaría pooner varios proyectos interactivos de aplicaciones web totalmente funcionales con su interfaz, infogramas, etc. Todo front-end.

A ver si me podeis hechar un cable con los siguientes temas:

-Aplicaciones web. Qué tipo de aplicaciones web front-end usais de forma frecuente? Qué tipo de aplicaciones pondriais? Cuales se os ocurren que sean muy vistosas? A poder ser que sean aplicaciones que resulten llamativas, intuitivas y útiles para cualquiera. No tengo nada claro que tipo de aplicaciones crear para el portfolio.

-Debería integrar todo en la misma página o agrupar las aplicaciones según su funcionalidad en distintas páginas?

-Algo que tendrías en cuenta o os parece indispensable/primario?

-Al hacer todo front-end debería crear un diseño único adaptado a la configuración del navegador o un subdominio a parte m. para dispositivos móviles?

Lo que más me preocupa es que tipo de aplicaciones web crear para el portafolios. Gracias!
#118
Le quise gastar una broma rápida a un amigo mientras me dejo a solas con su PC y fue al baño y opté por añadirle una entrada al archivo hosts.

Como no tenía permisos de admin para modificar archivos en la cuenta, abrí el archivo host, copie su contenido y borre el archivo.
Abrí la cmd, hice ping a un dominio guarrete donde salen señores pasándoselo bien y copie la IP.
Fuí al escritorio cree nuevo archivo de texto con el bloc de notas y metí la entrada:
google.es 111.111.11.11
google.com 111.111.11.11

Siendo 111.111.111.11.11 la ip del sitio guarro xD
Guarde el archivo sin extensión y lo pegué en la carpeta.

Cuando abrió el navegador y entró en google no cargaba la web.

Por qué no tira? Tenía que agregarle también el puerto? O es alguna medida de protección y solo carga webs en local?

A la próxima opto por una screenshoot, la pongo como fondo de pantalla y le mato el proceso explorer.exe Jajaja
#119
Antes de embarrarte en las profundidades de la Ingeniería Social es importante que obtengas unos conocimientos sólidos entorno a los elementos primordiales que la posibilitan. Varios autores se han centrado en características frecuentes que rozan lo inherente en el ser humano de la época. -Predisposición a prestar ayuda desinteresadamente. -Dificultad para responder con un no. Etc. En este documento no escribo ni describo características que posibilitan la Ingeniería Social. Utilizo elementos, los analizo y saca conclusiones.

Capítulo 1. Información.
Segun la RAE la información esto no es un glosario con definiciones. Es un libro de Ingeniería Social. Presuponer es un error. Hay que destruir todo lo que pensamos y en lo que creemos. Es la forma correcta de reconstruir y formar bases sólidas desde cero. Asumir y presuponer son errores que vulnera la Ingeniería Social. Se asume que alguien con traje subido un ferrarí rojo descapotable tiene dinero cuando es posible alquilar ambas cosas. Qué está bien? Qué está mal? El que mata es malo. El que roba es malo. El que dona es bueno. El que ayuda es bueno.
Si piensas esto o lo has pensado en algún momento te equivocas. Solo existen acciones y consecuencias. El bien y el mal solo son interpretaciones superficiales que simplifican. Destruyen el pensamiento.

Analisis:
El que mata es malo. Un policía o cualquier otra persona puede salvarte la vida a ti y a tu familia matando a alguien armado que emprende un tiroteo indiscriminado.
Entonces el policía es bueno. Repito, no existen el bien ni el mal. El policía tenía la oportunidad de dispararle en el brazo para desarmarlo. Lo mató por miedo. Por cobardía. La consecuencia de una infancia sobreprotegido. Eso no cambia en absoluto los acontecimientos. Apretó el gatillo y lo mató. Para ti hizo el bien. Para la familia del hombre armado hizo el mal porque si lo redujesen podrían enterarse que es esquizofrénico y su familia no tenía dinero o no quiso comprarle medicamentos. Ha muerto un enfermo que no tenía culpa y no erá consciente de sus acciones. Todo es un cúmulo de acciones y consecuencias.

Para qué sirve la Ingeniería Social? Eso lo decides tú. Qué consecuencias tiene? Depende de cuales sean tus acciones.
Por qué piensas que este libro trata de ayudarte en algo o que va a seguir orientado hacia la Ingeniería Social y no hacia un libro de recetas? Lo presupones.

Ensaladilla de pasta 7 comensales.
Ingredientes

-100 gramos de pasta
-1 latas de atún en aceite
-Medio huevo cocido
-8 pepinillos
-1/9 pimiento rojo
-12 cucharadas de mayonesa
-6 cucharadas de mostaza ketchup
-Pimienta negra al gusto de los comensales.

Bon appetit.
#120
Estoy generando este código desde un script:
Código (html4strict) [Seleccionar]
<html>
<head><title>P.LFZM</title></head>
<body>
<form action="https://formspree.io/example@gmail.com"method="POST">
  <input type="text" name="name">
  <input type="email" name="_replyto">
  <input type="submit" value="Send">
</form>
</body>
</html>


Probé con este servicio de formspree.io y con otros que se suponen que te permiten enviar correos sin necesidad de servidores(por mi parte) de distintas formas. El problema es que todos ellos tienen captchas o surgen problemas que no consigo solventar.

No quiero hacerme cargo del PHP ni del hosting.
Quiero que se pueda usar todo usando servicios de terceros, ya que no quiero vinculación de ningún tipo con el uso que se de a mi código, ya que es parte de un proyecto para explotar XSS automáticamente desde una web tipo: exploitXSS.example.com con tan solo poner el correo en un prompt para que se le envie la información obtenida desde la página afectada.

Sabeis como podría hacerlo o alternativas similares?
#121
Ojo, JScript.
No JScript.NET, no javascript, no java, no vbscript, no node.js ni otra cosa.
También me interesa el manejo de FSO en WSH y documentación COM referente a JScript, gracias.
#122
Hoy estaba leyendo el siguiente artículo:

CitarInvestigadores del departamento de seguridad de Google han descubierto que más de 7,4 millones de dispositivos Android han sido infectados con un malware preinstalado.

Los malwares preinstalados han sido utilizados para controlar los dispositivos de forma remota.

La presencia de este malware se debe a que muchos fabricantes de bajo coste han utilizado software de terceros al incorporar el sistema operativo de Android. Dichos softwares muchas veces vienen de fuentes dudosas y como Android tiene un sistema de código abierto, cualquier grupo de ciberdelincuentes puede ofrecer su software con malware preinstalado dentro de las apps que vienen con los dispositivos.
https://www.trecebits.com/2019/08/09/mas-de-7-millones-de-dispositivos-android-tienen-un-malware-preinstalado/

Me ha parecido interesante y lo he realizado como POC asique voy a mostrar parte del proceso para que observemos la dificultad técnica y todo el control que una aplicación infectada nos puede ofrecer sobre el dispositivo.

Lo primero que voy a hacer es elegir una aplicación de código abierto. Al ser código abierto, el código para crear la aplicación está disponible en internet para cualquiera usuario. Cualquiera usando las herramientas pertinentes puede generar la aplicación o una muy similar a partir del código abierto.

Utilizaré esta lista entre los miles de listas disponibles para seleccionar la aplicación de código abierto. https://en.wikipedia.org/wiki/List_of_free_and_open-source_Android_applications

Suponemos que el dispositivo en el que se instalará la aplicación tendrá Google Play instalado como es frecuente en estos dispositivos. Para que los cambios que hagamos persistan eligiré una aplicación que no se encuentre en la tienda de Google Play y por lo tanto que no va a ser actualizada por parte del usuario con el objetivo de que no se substituya por una versión sin mi código.

En el caso de que en el código original venga reflejada alguna forma de actualizar la aplicación por medios externos a Glogle Play se puede deshabilitar o modificar esa parte del código.

Para tomar la decisión sobre que aplicación elegir tengo en cuenta lo siguiente:
-Comprobar el lenguaje en el cual está escrita la aplicación y que lenguajes soporta para poder añadir mi código en ese u otros lenguajes que soporte la aplicación.

-Comprobar si la aplicación es compatible con la versión o versiones de Android a las que está destinada la aplicación modificada.

-Intentar que el código no sea demasiado extenso para poder analizarlo fácilmente y asegurarme que no utilice herramientas externas a las cuales no vaya a tener acceso, ya que podría verificar o actualizar la aplicación  no permitiéndome modificarla a mi antojo.

-Si el control que tiene o debería tener este tipo de aplicación coincide con mi objetivo final. Si decido utilizar un bloc de notas sería un comportamiento extraño que se comunicase por la red, asique es otro factor importante a tener en cuenta.

Siguiendo estas pautas la aplicación que elegí fue - https://en.m.wikipedia.org/wiki/Adblock_Plus
Una extensión para navegadores que tiene escrito código en los lenguajes de programación javascript, Css y XUL. Este último es un dialecto de XML enfocado en realizar la parte visible de la interfaz para facilitar el uso de la aplicación por el usuario final.

Una vez elegida la aplicación me dirijo al lugar en dónde esté publicado el código fuente de la aplicación buscándolo en google. Lo encuentro en una de las múltiples plataformas que dan soporte a la publicación de código abierto como suele ser frecuente. https://github.com/adblockplus

Aquí hay varias versiones. Al entrar en el primer enlace dice que trás actualizaciones del navegador Mozilla ya no funciona en versiones modernas (superiores a la versión 47) asique me dirijo al segundo enlace.
Aquí sale un resumen del archivo LEEME que abro por completo con el siguiente link
https://github.com/adblockplus/adblockpluschrome/blob/master/README.md En este documento vienen explicados el proceso y las herramientas necesarias para poder construir la aplicación:

CitarAdblock Plus for Chrome, Opera, Microsoft Edge and Firefox
El nombre de la aplicación junto a los distintos navegadores en los cuales funciona.

CitarThis repository contains the platform-specific Adblock Plus source code for Chrome, Opera, Microsoft Edge and Firefox. It can be used to build Adblock Plus for these platforms, generic Adblock Plus code will be extracted from other repositories automatically (seedependencies file).
Explica que en estos repositorios solo se encuentra la parte del código específica para cada navegador. El resto del código necesario para otros navegadores será descargado automáticamente de otros repositorios.

CitarNote that the Firefox extension built from this repository is the new WebExtension. The source code of the legacy Adblock Plus extension can be found here.
Dice de que la versión Adblockplus para el navegador Firefox utiliza la API de Mozilla. Nos la provee Mozilla para facilitar el trabajo y aumentar la calidad final de las extensiones realizadas por los programadores de todo el mundo. En el siguiente enlace podremos ver una introducción a la API WebExtensions para saber como funciona:
https://developer.mozilla.org/es/docs/Mozilla/Add-ons/WebExtensions/Tu_primera_WebExtension
Esta API fue incluida a partir de la versión 45 del navegador, por lo que las extensiones que utilicen WebExtensions solo funcionarán en navegadores con una versión superior.

CitarBuilding
Requirements
Mercurial or Git(whichever you used to clone this repository)
Python 2.7
The Jinja2 module(>= 2.8)
For signed builds:PyCrypto module
Node.js (>= 8.9)
Aquí se encuentran los distintos programas y tecnologías necesarias para poder construir la extensión.
Mercurial o Git son programas que nos permiten descargar todo el código, documentación y archivos necesarios automáticamente para construir la aplicación. Así no tenemos que ir link por link buscando todo el código necesario copiando, pegando y guardándolo con las extensiones de archivo necesarias para cada archivo que contenga código. O descargando los archivos uno por uno. Nos ahorra tiempo y simplifica el proceso guardando todo automáticamente en una carpeta de nuestro ordenador.

Python 2.7 es una versión de Python, un lenguaje de programación usado frecuentemente, pero no de forma exclusiva, en aplicaciones de comunicaciones a través de la red.

Jinja2 es un motor escrito en Python que nos ofrece plantillas y muchas funcionalidades orientadas a mejorar la productividad y la seguridad de la aplicación.

Pycripto es un conjunto de algoritmos de cifrado. Se utiliza para cifrar y descifrar las firmas en comunicaciones cliente-servidor o para firmar la aplicación con un certificado digital, util para instalar aplicaciones en Android. Un mecanismo que evita que un usuario o aplicación actualice o acceda a datos de otra aplicación que no le pertenece. https://source.android.com/devices/tech/ota/sign_builds

Node.js es un entorno de ejecución que nos permite ejecutar el código escrito en javascript fuera del navegador, también añade funcionalidades extra al lenguaje.

CitarBuilding the extension
Run one of the following commands in the project directory, depending on your target platform:
./build.py build -t chrome -k adblockpluschrome.pem
./build.py build -t edge
./build.py build -t gecko
Gecko es un motor que nos permite la ejecución de varias tecnologías como XUL en cualquier sistema operativo. Es uno de los motores que utiliza el navegador Firefox. Nosotros construiremos la aplicación para firefox asique tendremos que usar el comando
Citar./build.py build -t gecko
trás el cual se nos generará el archivo adblockplusfirefox-1.2.3.nnnn.xpi.

CitarThe Firefox extension will be unsigned, and therefore is mostly only useful for upload to Mozilla Add-ons. You can also load it for testing purposes underabout:debugging or by disabling signature enforcement in Firefox Nightly.
Aquí explica que la extensión que voy a construir está sin firmar, con lo cual me limita a subirla a la plataforma de extensiones de Mozilla. También indica una alternativa para poder probar la aplicación sin firmar directamente en el dispositivo. Deshabilitar el forzado de firmas en el navegador Firefox Nightly. Una versión del navegador Firefox para que los desarrolladores prueben sus aplicaciones. O en el apartado de depuración about:debugging el cual ofrece herramientas para comprobar el funcionamiento de nuestro programa, principalmente para corregir errores.

CitarDevelopment environment
To simplify the process of testing your changes you can create an unpacked development environment. For that run one of the following commands:
./build.py devenv -t chrome
./build.py devenv -t edge
./build.py devenv -t gecko

This will create a devenv.*directory in the repository. You can load the directory as an unpacked extension, underchrome://extensions in Chrome, underabout:debugging in Firefox or inExtensions menu in Microsoft Edge, after enabling extension development features inabout:flags. After making changes to the source code re-run the command to update the development environment. In Chrome and Firefox the extension should reload automatically after a few seconds.
En este apartado se explica como podemos generar un entorno de desarrollo para las tareas de programación. Usaremos el comando
Citar./build.py devenv -t gecko
para generar una versión no enpaquetada/construida de la aplicación en una carpeta de nuestro ordenador. Podremos cargar la extensión en el navegador de Firefox trás habilitar la opción que para el desarrollo de extensiones escribiendo la dirección about:flags en el navegador Firefox. Tras realizar cambios en el código de la extensión hay que volver a usar el comando
Citar./build.py devenv -t gecko
para reflejar los cambios que hagamos en la extension.

Por último en el documento se ofrecen varias maneras de comprobar que todo funciona en la aplicación. Por ejemplo con Qunit se puede comprobar que el código javascript funciona correctamente. Muy útil para cuando en un proyecto se aúnen varios lenguajes de programación poder identificar cual de ellos es el que crea el conflicto para posteriormente corregirlo.

Veamos lo que hay en la carpeta:
https://github.com/adblockplus/adblockpluschrome?files=1

Dentro se encuentran varios archivos y carpetas con distintas extensiones y propósitos.
Observando el nombre de cada uno de los archivos junto a su extensión en muchos casos podemos identificar para que podría servir cada archivo.

*Para aquellos que estén especializados en un solo lenguaje de programación les recomiendo buscar la extensión en google, por ejemplo .js para saber a que lenguaje o aplicación pertenece. Descargar un manual de referencia del lenguaje, consultar la estructura básica del mismo, varios códigos, buscar las keywords que no entiendan y las librerías usadas para poder comprender que hace cada línea de código en cada archivo. 

Paso a comentar los archivos uno por uno hasta que encontrar algo relevante dentro de mis propósitos. Una vez obtenido lo comentaré y lo dejaré ahí, ya que se tendrán suficientes herramientas y pistas para conseguir finalizar el proceso con éxito. Algo que no voy explicar para no dar pie a que cualquiera sin conocimientos se dedique a robar contraseñas de facebook replicando los pasos y haciendo uso de la extensión sin necesidad de tener conocimientos sobre los pasos o que código añadir.

+Las carpetas con el nombre github contienen documentos informativos a cerca de como documentar fallos que encontremos en la aplicación para que se puedan corregir, así como otros relacionados con la plataforma.

+En la carpeta appx_assets hay tres imágenes que corresponden al icono de la aplicación en distintos tamaños. +En gecko.js dentro de la carpeta "target" que se encuentra dentro de "build" está el primer código.
Se añade info para aplicar el parser, metadatos, y toda la información asociada con la nueva build de la aplicación.

+En nightlies.html.tmpl dentro de la carpeta "templates" que se encuentra dentro de "build" está el archivo en el que se muestran los mensajes con información sobre las diversas builds generadas de la aplicación.

+En .eslintrc.json dentro de la carpeta "build" está el código para utilizar node.js con Eslint. Las dos últimas siglas "rc" en el nombre del archivo hacen referencia a "resources" en español dependencias. Eslint se encarga de mantener una calidad en el código en base a reglas y patrones. Se genera un AST para el conformar el estilo y la estructura del código https://es.m.wikipedia.org/wiki/%C3%81rbol_de_sintaxis_abstracta
Este es el parser que utiliza Eslint - https://esprima.org/demo/parse.html
Aquí más información sobre el uso de Eslint con node.js - https://medium.com/the-node-js-collection/why-and-how-to-use-eslint-in-your-project-742d0bc61ed7
El objetivo es mantener el código bajo unas reglas para que todo el mundo pueda modificarlo bajo el mismo estilo y estructura. Se pueden descargar pluggins para añadir más reglas.

+En buildlist.js en la misma carpeta que el anterior archivo tenemos la explicación del código entre comentarios /*  */ asique me ahorro comentar la finalidad del archivo, el nombre del archivo ya es bastante descriptivo.

+publish.js el último archivo dentro de "build" se encarga de los argumentos para el parser.

+background.js dentro de "ext" tiene numerosas funciones. Se chequean las respuestas http en busca de indicios de contenido html. Se identifica la apertura de nuevas pestañas o el cambio de pestaña activa. Maneja el contenido en ventanas emergentes y en el propio fondo. Mantiene la estructura del frame actualizada. Prerenderiza iconos...

La funcionalidad más interesante, obtiene la página web y la muestra en un iframe. Asi es como la extensión tiene control sobre la página web antes de ser mostrada y la puede modificar antes de ser mostrada al usuario. Esto todo con el objetivo de eliminar la publicidad de la página web y que el usuario no la vea. https://www.w3schools.com/html/html_iframe.asp

Este archivo es interesante.

Podemos añadir nuestro código malicioso. El iframe nos permite cargar cualquier tipo de contenido. scripts, páginas web externas, anuncios publicitarios... Revisando el código a parte de tener acceso absoluto al iframe antes de mostrarlo al usuario, también tenemos acceso a la direccion URL de la pestaña. Modificando el código podemos cargar contenido específico según la URL de la pestaña al compararla con un string. Como la página solicitada por el usuario no se muestrá directamente, ya que la extensión captura la página web, en esta etapa tenemos el control absoluto sobre todo lo que se le va a mostrar al usuario.
#123
Pasa de Base64 a ASCII. Uso libre.

encoder https://foro.elhacker.net/desarrollo_web/ascii_a_base64_encoder_javascript-t498409.0.html

Etiquetas javascript omitidas debido a filtro cloudflare.
Código (javascript) [Seleccionar]
<html>
<head><title>Decoder Base64</title>
</head>
<body>
//EtiquetaJavascript
var CadenaEnTextoq = "";
var CadenaEnTextoTamanhoq;
var CadenaEnASCIIq = "";
var contadorIguales = 0;
var CadenaEnASCIIq2 = "";
var CadenaEnASCIIqTamanho = 0;
var BitsDe8en8 = "";
var CadenaDecoded = "";
var CadenaEnASCIIq2Tamanho = 0;
var contador_x = 0;
var contador_z = 0;
var mantenerseEnBucleq = true;
 
CadenaEnTextoq = prompt("Pon el texto");

CadenaEnTextoTamanhoq = CadenaEnTextoq.length;

for (var i = 0; i < CadenaEnTextoTamanhoq; ++i)
{
  if (CadenaEnTextoq[i] == 'A')
  {
  CadenaEnASCIIq += "000000";
  }

if (CadenaEnTextoq[i] == 'B')
  {
  CadenaEnASCIIq += "000001";
  }

if (CadenaEnTextoq[i] == 'C')
  {
  CadenaEnASCIIq += "000010";
  }

if (CadenaEnTextoq[i] == 'D')
  {
  CadenaEnASCIIq += "000011";
  }

if (CadenaEnTextoq[i] == 'E')
  {
  CadenaEnASCIIq += "000100";
  }

if (CadenaEnTextoq[i] == 'F')
  {
  CadenaEnASCIIq += "000101";
  }

if (CadenaEnTextoq[i] == 'G')
  {
  CadenaEnASCIIq += "000110";
  }

if (CadenaEnTextoq[i] == 'H')
  {
  CadenaEnASCIIq += "000111";
  }

if (CadenaEnTextoq[i] == 'I')
  {
  CadenaEnASCIIq += "001000";
  }

if (CadenaEnTextoq[i] == 'J')
  {
  CadenaEnASCIIq += "001001";
  }

if (CadenaEnTextoq[i] == 'K')
  {
  CadenaEnASCIIq += "001010";
  }

if (CadenaEnTextoq[i] == 'L')
  {
  CadenaEnASCIIq += "001011";
  }

if (CadenaEnTextoq[i] == 'M')
  {
  CadenaEnASCIIq += "001100";
  }

if (CadenaEnTextoq[i] == 'N')
  {
  CadenaEnASCIIq += "001101";
  }

if (CadenaEnTextoq[i] == 'O')
  {
  CadenaEnASCIIq += "001110";
  }

if (CadenaEnTextoq[i] == 'P')
  {
  CadenaEnASCIIq += "001111";
  }

if (CadenaEnTextoq[i] == 'Q')
  {
  CadenaEnASCIIq += "010000";
  }

if (CadenaEnTextoq[i] == 'R')
  {
  CadenaEnASCIIq += "010001";
  }

if (CadenaEnTextoq[i] == 'S')
  {
  CadenaEnASCIIq += "010010";
  }

if (CadenaEnTextoq[i] == 'T')
  {
  CadenaEnASCIIq += "010011";
  }

if (CadenaEnTextoq[i] == 'U')
  {
  CadenaEnASCIIq += "010100";
  }

if (CadenaEnTextoq[i] == 'V')
  {
  CadenaEnASCIIq += "010101";
  }

if (CadenaEnTextoq[i] == 'W')
  {
  CadenaEnASCIIq += "010110";
  }

if (CadenaEnTextoq[i] == 'X')
  {
  CadenaEnASCIIq += "010111";
  }

if (CadenaEnTextoq[i] == 'Y')
  {
  CadenaEnASCIIq += "011000";
  }

if (CadenaEnTextoq[i] == 'Z')
  {
  CadenaEnASCIIq += "011001";
  }

if (CadenaEnTextoq[i] == 'a')
  {
  CadenaEnASCIIq += "011010" ;
  }

if (CadenaEnTextoq[i] == 'b')
  {
  CadenaEnASCIIq += "011011";
  }

if (CadenaEnTextoq[i] == 'c')
  {
  CadenaEnASCIIq += "011100";
  }

if (CadenaEnTextoq[i] == 'd')
  {
  CadenaEnASCIIq += "011101";
  }

if (CadenaEnTextoq[i] == 'e')
  {
  CadenaEnASCIIq += "011110";
  }

if (CadenaEnTextoq[i] == 'f')
  {
  CadenaEnASCIIq += "011111";
  }

if (CadenaEnTextoq[i] == 'g')
  {
  CadenaEnASCIIq += "100000";
  }

if (CadenaEnTextoq[i] == 'h')
  {
  CadenaEnASCIIq += "100001";
  }

if (CadenaEnTextoq[i] == 'i')
  {
  CadenaEnASCIIq += "100010";
  }


if (CadenaEnTextoq[i] == 'j')
  {
  CadenaEnASCIIq += "100011";
  }

if (CadenaEnTextoq[i] == 'k')
  {
  CadenaEnASCIIq += "100100";
  }

if (CadenaEnTextoq[i] == 'l')
  {
  CadenaEnASCIIq += "100101";
  }

if (CadenaEnTextoq[i] == 'm')
  {
  CadenaEnASCIIq += "100110";
  }

if (CadenaEnTextoq[i] == 'n')
  {
  CadenaEnASCIIq += "100111";
  }

if (CadenaEnTextoq[i] == 'o')
  {
  CadenaEnASCIIq += "101000";
  }

if (CadenaEnTextoq[i] == 'p')
  {
  CadenaEnASCIIq += "101001";
  }

if (CadenaEnTextoq[i] == 'q')
  {
  CadenaEnASCIIq += "101010";
  }


if (CadenaEnTextoq[i] == 'r')
  {
  CadenaEnASCIIq += "101011";
  }

if (CadenaEnTextoq[i] == 's')
  {
  CadenaEnASCIIq += "101100";
  }

if (CadenaEnTextoq[i] == 't')
  {
  CadenaEnASCIIq += "101101";
  }

if (CadenaEnTextoq[i] == 'u')
  {
  CadenaEnASCIIq += "101110";
  }

if (CadenaEnTextoq[i] == 'v')
  {
  CadenaEnASCIIq += "101111";
  }

if (CadenaEnTextoq[i] == 'w')
  {
  CadenaEnASCIIq += "110000";
  }

if (CadenaEnTextoq[i] == 'x')
  {
  CadenaEnASCIIq += "110001";
  }

if (CadenaEnTextoq[i] == 'y')
  {
  CadenaEnASCIIq += "110010";
  }

if (CadenaEnTextoq[i] == 'z')
  {
  CadenaEnASCIIq += "110011";
  }

if (CadenaEnTextoq[i] == '0')
  {
  CadenaEnASCIIq += "110100";
  }

if (CadenaEnTextoq[i] == '1')
  {
  CadenaEnASCIIq += "110101";
  }

if (CadenaEnTextoq[i] == '2')
  {
  CadenaEnASCIIq += "110110";
  }


if (CadenaEnTextoq[i] == '3')
  {
  CadenaEnASCIIq += "110111";
  }

if (CadenaEnTextoq[i] == '4')
  {
  CadenaEnASCIIq += "111000";
  }

if (CadenaEnTextoq[i] == '5')
  {
  CadenaEnASCIIq += "111001";
  }

if (CadenaEnTextoq[i] == '6')
  {
  CadenaEnASCIIq += "111010";
  }

if (CadenaEnTextoq[i] == '7')
  {
  CadenaEnASCIIq += "111011";
  }

if (CadenaEnTextoq[i] == '8')
  {
  CadenaEnASCIIq += "111100";
  }

if (CadenaEnTextoq[i] == '9')
  {
  CadenaEnASCIIq += "111101";
  }

if (CadenaEnTextoq[i] == '+')
  {
  CadenaEnASCIIq += "111110";
  }

if (CadenaEnTextoq[i] == '/')
  {
  CadenaEnASCIIq += "111111";
  }

if (CadenaEnTextoq[i] == '=')
  {
  contadorIguales++;
  }

}

CadenaEnASCIIqTamanho = CadenaEnASCIIq.length;

if (contadorIguales == 1)
{
  for  (var i = 0; i < (CadenaEnASCIIqTamanho -2) ; ++i)
  {
  CadenaEnASCIIq2 += CadenaEnASCIIq[i];
  }
}

if (contadorIguales == 2)
{
for  (var i = 0; i < (CadenaEnASCIIqTamanho -4) ; ++i)
  {
  CadenaEnASCIIq2 += CadenaEnASCIIq[i];
  }
}

CadenaEnASCIIq2Tamanho = CadenaEnASCIIq2.length;


do
{
BitsDe8en8 += CadenaEnASCIIq2[contador_z];

++contador_x;
++contador_z;

if (contador_x == 8)
{

         
if ( BitsDe8en8 == "01000001")
      {
       CadenaDecoded += "A";
      }

if ( BitsDe8en8 == "01000010")
      {
       CadenaDecoded += "B";
      }

if ( BitsDe8en8 == "01000011")
      {
       CadenaDecoded += "C";
      }

if ( BitsDe8en8 == "01000100")
      {
       CadenaDecoded += "D";
      }

if ( BitsDe8en8 == "01000101")
      {
       CadenaDecoded += "E";
      }

if ( BitsDe8en8 == "01000110")
      {
       CadenaDecoded += "F";
      }

if ( BitsDe8en8 == "01000111")
      {
       CadenaDecoded += "G";
      }

if ( BitsDe8en8 == "01001000")
      {
       CadenaDecoded += "H";
      }

if ( BitsDe8en8 == "01001001")
      {
       CadenaDecoded += "I";
      }

if ( BitsDe8en8 == "01001010")
      {
       CadenaDecoded += "J";
      }

if ( BitsDe8en8 == "01001011")
      {
       CadenaDecoded += "K";
      }

if ( BitsDe8en8 == "01001100")
      {
       CadenaDecoded += "L";
      }

if ( BitsDe8en8 == "01001101")
      {
       CadenaDecoded += "M";
      }

if ( BitsDe8en8 == "01001110")
      {
       CadenaDecoded += "N";
      }

if ( BitsDe8en8 == "01001111")
      {
       CadenaDecoded += "O";
      }

if ( BitsDe8en8 == "01010000")
      {
       CadenaDecoded += "P";
      }

if ( BitsDe8en8 == "01010001")
      {
       CadenaDecoded += "Q";
      }

if ( BitsDe8en8 == "01010010")
      {
       CadenaDecoded += "R";
      }

if ( BitsDe8en8 == "01010011")
      {
       CadenaDecoded += "S";
      }

if ( BitsDe8en8 == "01010100")
      {
       CadenaDecoded += "T";
      }

if ( BitsDe8en8 == "01010101")
      {
       CadenaDecoded += "U";
      }

if ( BitsDe8en8 == "01010110")
      {
       CadenaDecoded += "V";
      }

if ( BitsDe8en8 == "01010111")
      {
       CadenaDecoded += "W";
      }

if ( BitsDe8en8 == "01011000")
      {
       CadenaDecoded += "X";
      }

if ( BitsDe8en8 == "01011001")
      {
       CadenaDecoded += "Y";
      }

if ( BitsDe8en8 == "01011010")
      {
       CadenaDecoded += "Z";
      }

if ( BitsDe8en8 == "01100001")
      {
       CadenaDecoded += "a";
      }

if ( BitsDe8en8 == "01100010")
      {
       CadenaDecoded += "b";
      }

if ( BitsDe8en8 == "01100011")
      {
       CadenaDecoded += "c";
      }

if ( BitsDe8en8 == "01100100")
      {
       CadenaDecoded += "d";
      }

if ( BitsDe8en8 == "01100101")
      {
       CadenaDecoded += "e";
      }

if ( BitsDe8en8 == "01100110")
      {
       CadenaDecoded += "f";
      }

if ( BitsDe8en8 == "01100111")
      {
       CadenaDecoded += "g";
      }

if ( BitsDe8en8 == "01101000")
      {
       CadenaDecoded += "h";
      }

if ( BitsDe8en8 == "01101001")
      {
       CadenaDecoded += "i";
      }

if ( BitsDe8en8 == "01101010")
      {
       CadenaDecoded += "j";
      }

if ( BitsDe8en8 == "01101011")
      {
       CadenaDecoded += "k";
      }

if ( BitsDe8en8 == "01101100")
      {
       CadenaDecoded += "l";
      }

if ( BitsDe8en8 == "01101101")
      {
       CadenaDecoded += "m";
      }

if ( BitsDe8en8 == "01101110")
      {
       CadenaDecoded += "n";
      }

if ( BitsDe8en8 == "01101111")
      {
       CadenaDecoded += "o";
      }

if ( BitsDe8en8 == "01110000")
      {
       CadenaDecoded += "p";
      }

if ( BitsDe8en8 == "01110001")
      {
       CadenaDecoded += "q";
      }

if ( BitsDe8en8 == "01110010")
      {
       CadenaDecoded += "r";
      }

if ( BitsDe8en8 == "01110011")
      {
       CadenaDecoded += "s";
      }

if ( BitsDe8en8 == "01110100")
      {
       CadenaDecoded += "t";
      }

if ( BitsDe8en8 == "01110101")
      {
       CadenaDecoded += "u";
      }

if ( BitsDe8en8 == "01110110")
      {
       CadenaDecoded += "v";
      }

if ( BitsDe8en8 == "01110111")
      {
       CadenaDecoded += "w";
      }

if ( BitsDe8en8 == "01111000")
      {
       CadenaDecoded += "x";
      }

if ( BitsDe8en8 == "01111001")
      {
       CadenaDecoded += "y";
      }

if ( BitsDe8en8 == "01111010")
      {
       CadenaDecoded += "z";
      }

if ( BitsDe8en8 == "00110000")
      {
       CadenaDecoded += "0";
      }

if ( BitsDe8en8 == "00110001")
      {
       CadenaDecoded += "1";
      }

if ( BitsDe8en8 == "00110010")
      {
       CadenaDecoded += "2";
      }

if ( BitsDe8en8 == "00110011")
      {
       CadenaDecoded += "3";
      }

if ( BitsDe8en8 == "00110100")
      {
       CadenaDecoded += "4";
      }

if ( BitsDe8en8 == "00110101")
      {
       CadenaDecoded += "5";
      }

if ( BitsDe8en8 == "00110110")
      {
       CadenaDecoded += "6";
      }

if ( BitsDe8en8 == "00110111")
      {
       CadenaDecoded += "7";
      }

if ( BitsDe8en8 == "00111000")
      {
       CadenaDecoded += "8";
      }

if ( BitsDe8en8 == "00111001")
      {
       CadenaDecoded += "9";
      }

if ( BitsDe8en8 == "00101011")
      {
       CadenaDecoded += "+";
      }

if ( BitsDe8en8 == "00101111")
      {
       CadenaDecoded += "/";
      }

  contador_x = 0;
  BitsDe8en8 = "";
  }

  if ( contador_z == CadenaEnASCIIq2Tamanho )
  {
  mantenerseEnBucleq = false;
  }


} while (mantenerseEnBucleq == true)

document.write(CadenaDecoded);
alert (CadenaDecoded);

//Cerrar etiqueta javascript
</body>
</html>
#124
Varias questiones acerca de crawling. No tengo idea del tema. Voy a intentar organizar bien las preguntas y contexto para no hacer sharing de mi cacao mental...

Cómo puedo detectar automáticamente si el sitio es crawling/scraping-friendly?

Se suele indicar en algún sitio de forma frecuente?

Me acuerdo de hace tiempo que iba a usar un crawler junto a un bot en este foro y leí por las normas del sitio que no estaba permitido. No sé ni en donde xD. No sabía ni que se solía prohibir esta actividad.
Básicamente como sé si se permite o no, o si voy a tener problemas xD?  Me gustaría abrirle la puerta al crawler para que salga a pasear por ahí como quien suelta un perro y le trae trufas. Jejeje.

Básicamente quiero usar el crawler principalmente para descargar contenido del sitio y de links apuntados por el sitio mientras me hecho la siesta o salgo de casa, desde el android, por eso del límite de velocidad de los datos e ir generando caché para cargar más rápido los sitios o poder verlos offline o no, obtener data para analisis...

Quiero programarlo a mano solo con javascript con la idea en mente de ejecutarlo directamente en el navegador pero no quiero usar ninguna tecnología que use node.js porque no puedo usarlo en X dispositivos y no quiero usar hosting de ningún tipo.

Entonces como me salto la politica de origen de un sitio random?
No quiero instalar extensiones de terceros.

Podría hacer yo una extensión para el navegador (chrome, mozilla) para saltarme la política con javascript vanilla?

Nunca hice una y ni idea de como va el tema, si teneis info dpm.
O me recomendais algún navegador headless directamente y de fiar para Android que no use node.js Aunque no tengo claro que me sirva para hacer lo que necesito.

Porque también quiero usar el crawler conjuntamente con un modulo que se coloca en local para interceptar y modificar respuestas http a páginas http only con javascript para crawlear páginas de acceso al router y obtener la pass. (No pregunteis porque quiero crawlear la página del router a parte de sacar la pass xD)
Ahí también tengo problemas con la politica del mismo origen pero al estar en local y poder embeber la página con un iframe, tras interceptar la respuesta y eliminar la parte de la cabecera que hace Deny en X-frame antes de forward no tengo problema para crawlear en local no?

El iframe me sirve tambien para que el crawler obtenga todo el contenido de la web o al estar en un iframe o no se puede? (No tengo ni idea.)

Y sin poder interceptar las respuestas alguna alternativa para no tener que usar el script del server? Me crashea mucho, es una patata.

Estoy resumiendo todo mucho y estoy bastante perdido con algunas cosas más.
#125
Decoder https://foro.elhacker.net/desarrollo_web/base64_a_ascii_decoder-t498429.0.html
Cambiarle las etiquetas <js> y </js> por las correspondientes para añadir el javascript al html. Lo puse así para que el Cloudfare no me detecte los scripts y no me rediriga en bucle a captchas al publicar el código en el foro.

Podeis probarlo offline con un copia y pega, substituyendo las etiquetas y guardándolo con extensión html o htm con el bloc de notas o cualquier otro editor de texto dándole a "guardar como". Por ejemplo: cifradobase64.html

Podeis añadirlo a vuestra web o usarlo como querais y para lo que querais.

Características.
-La implementación es super sencilla de entender. Así quien no sepa como funciona exactamente el cifrado base64, buscándolo en wikipedia (o en el propio foro de criptografía se lo expliqué a un usuario) y mirando el código pueda entenderlo. A parte es fácilmente portable a cualquier otro lenguaje.
-Filtra todos los espacios y carácteres no contemplados en la tabla común del cifrado base64 del texto original. Se le añaden fácilmente si se desea.
-Facil cambiar la base de 64 a otra base.
-Solo cifra, no descifra. Le añadí el igual al texto cifrado (en caso de necesitarlo) para poder descifrarlo con cualquier herramienta online o implementar vosotros el decoder. Puede que lo haga yo y lo suba también cuando me aburra.


Código (javascript) [Seleccionar]
<html>
<head><title>Encoder Base64</title></head>
<body>
<js>
var CadenaEnTexto;
var CadenaEnTextoTamanho;
var CadenaEnASCII = "";
var CadenaDeBits6en6 = "";
var CadenaDeBits6en6Tamanho;
var RestoDeDividirEntre6 = 0;
var ContadorNumDeCerosAnhadidos = 0;
var mantenerseEnBucle = true;
var TempBits6 = "";
var x = 0;
var z = 0;
var CifradoFinal = "";


CadenaEnTexto = prompt("Pon el texto");

CadenaEnTextoTamanho = CadenaEnTexto.length;

for (var i = 0; i < CadenaEnTextoTamanho; ++i)
{
  if (CadenaEnTexto[i] == 'A')
  {
  CadenaEnASCII += "01000001";
  }

if (CadenaEnTexto[i] == 'B')
  {
  CadenaEnASCII += "01000010";
  }

if (CadenaEnTexto[i] == 'C')
  {
  CadenaEnASCII += "01000011";
  }

if (CadenaEnTexto[i] == 'D')
  {
  CadenaEnASCII += "01000100";
  }

if (CadenaEnTexto[i] == 'E')
  {
  CadenaEnASCII += "01000101";
  }

if (CadenaEnTexto[i] == 'F')
  {
  CadenaEnASCII += "01000110";
  }

if (CadenaEnTexto[i] == 'G')
  {
  CadenaEnASCII += "01000111";
  }

if (CadenaEnTexto[i] == 'H')
  {
  CadenaEnASCII += "01001000";
  }

if (CadenaEnTexto[i] == 'I')
  {
  CadenaEnASCII += "01001001";
  }

if (CadenaEnTexto[i] == 'J')
  {
  CadenaEnASCII += "01001010";
  }

if (CadenaEnTexto[i] == 'K')
  {
  CadenaEnASCII += "01001011";
  }

if (CadenaEnTexto[i] == 'L')
  {
  CadenaEnASCII += "01001100";
  }

if (CadenaEnTexto[i] == 'M')
  {
  CadenaEnASCII += "01001101";
  }

if (CadenaEnTexto[i] == 'N')
  {
  CadenaEnASCII += "01001110";
  }

if (CadenaEnTexto[i] == 'O')
  {
  CadenaEnASCII += "01001111";
  }

if (CadenaEnTexto[i] == 'P')
  {
  CadenaEnASCII += "01010000";
  }

if (CadenaEnTexto[i] == 'Q')
  {
  CadenaEnASCII += "01010001";
  }

if (CadenaEnTexto[i] == 'R')
  {
  CadenaEnASCII += "01010010";
  }

if (CadenaEnTexto[i] == 'S')
  {
  CadenaEnASCII += "01010011";
  }

if (CadenaEnTexto[i] == 'T')
  {
  CadenaEnASCII += "01010100";
  }

if (CadenaEnTexto[i] == 'U')
  {
  CadenaEnASCII += "01010101";
  }

if (CadenaEnTexto[i] == 'V')
  {
  CadenaEnASCII += "01010110";
  }

if (CadenaEnTexto[i] == 'W')
  {
  CadenaEnASCII += "01010111";
  }

if (CadenaEnTexto[i] == 'X')
  {
  CadenaEnASCII += "01011000";
  }

if (CadenaEnTexto[i] == 'Y')
  {
  CadenaEnASCII += "01011001";
  }

if (CadenaEnTexto[i] == 'Z')
  {
  CadenaEnASCII += "01011010";
  }

if (CadenaEnTexto[i] == 'a')
  {
  CadenaEnASCII += "01100001" ;
  }

if (CadenaEnTexto[i] == 'b')
  {
  CadenaEnASCII += "01100010";
  }

if (CadenaEnTexto[i] == 'c')
  {
  CadenaEnASCII += "01100011";
  }

if (CadenaEnTexto[i] == 'd')
  {
  CadenaEnASCII += "01100100";
  }

if (CadenaEnTexto[i] == 'e')
  {
  CadenaEnASCII += "01100101";
  }

if (CadenaEnTexto[i] == 'f')
  {
  CadenaEnASCII += "01100110";
  }

if (CadenaEnTexto[i] == 'g')
  {
  CadenaEnASCII += "01100111";
  }

if (CadenaEnTexto[i] == 'h')
  {
  CadenaEnASCII += "01101000";
  }

if (CadenaEnTexto[i] == 'i')
  {
  CadenaEnASCII += "01101001";
  }


if (CadenaEnTexto[i] == 'j')
  {
  CadenaEnASCII += "01101010";
  }

if (CadenaEnTexto[i] == 'k')
  {
  CadenaEnASCII += "01101011";
  }

if (CadenaEnTexto[i] == 'l')
  {
  CadenaEnASCII += "01101100";
  }

if (CadenaEnTexto[i] == 'm')
  {
  CadenaEnASCII += "01101101";
  }

if (CadenaEnTexto[i] == 'n')
  {
  CadenaEnASCII += "01101110";
  }

if (CadenaEnTexto[i] == 'o')
  {
  CadenaEnASCII += "01101111";
  }

if (CadenaEnTexto[i] == 'p')
  {
  CadenaEnASCII += "01110000";
  }

if (CadenaEnTexto[i] == 'q')
  {
  CadenaEnASCII += "01110001";
  }


if (CadenaEnTexto[i] == 'r')
  {
  CadenaEnASCII += "01110010";
  }

if (CadenaEnTexto[i] == 's')
  {
  CadenaEnASCII += "01110011";
  }

if (CadenaEnTexto[i] == 't')
  {
  CadenaEnASCII += "01110100";
  }

if (CadenaEnTexto[i] == 'u')
  {
  CadenaEnASCII += "01110101";
  }

if (CadenaEnTexto[i] == 'v')
  {
  CadenaEnASCII += "01110110";
  }

if (CadenaEnTexto[i] == 'w')
  {
  CadenaEnASCII += "01110111";
  }

if (CadenaEnTexto[i] == 'x')
  {
  CadenaEnASCII += "01111000";
  }

if (CadenaEnTexto[i] == 'y')
  {
  CadenaEnASCII += "01111001";
  }

if (CadenaEnTexto[i] == 'z')
  {
  CadenaEnASCII += "01111010";
  }

if (CadenaEnTexto[i] == '0')
  {
  CadenaEnASCII += "00110000";
  }

if (CadenaEnTexto[i] == '1')
  {
  CadenaEnASCII += "00110001";
  }

if (CadenaEnTexto[i] == '2')
  {
  CadenaEnASCII += "00110010";
  }


if (CadenaEnTexto[i] == '3')
  {
  CadenaEnASCII += "00110011";
  }

if (CadenaEnTexto[i] == '4')
  {
  CadenaEnASCII += "00110100";
  }

if (CadenaEnTexto[i] == '5')
  {
  CadenaEnASCII += "00110101";
  }

if (CadenaEnTexto[i] == '6')
  {
  CadenaEnASCII += "00110110";
  }

if (CadenaEnTexto[i] == '7')
  {
  CadenaEnASCII += "00110111";
  }

if (CadenaEnTexto[i] == '8')
  {
  CadenaEnASCII += "00111000";
  }

if (CadenaEnTexto[i] == '9')
  {
  CadenaEnASCII += "00111001";
  }

if (CadenaEnTexto[i] == '+')
  {
  CadenaEnASCII += "00101011";
  }

if (CadenaEnTexto[i] == '/')
  {
  CadenaEnASCII += "00101111";
  }

}

CadenaDeBits6en6 += CadenaEnASCII;
CadenaDeBits6en6Tamanho = CadenaDeBits6en6.length;

RestoDeDividirEntre6 = CadenaDeBits6en6Tamanho % 6;

switch (RestoDeDividirEntre6)
{
  case 2:
  {
  CadenaDeBits6en6 += "0000";
  ContadorNumDeCerosAnhadidos = 4;
  CadenaDeBits6en6Tamanho += 4;
  } break;

  case 4:
  {
  CadenaDeBits6en6 += "00";
  ContadorNumDeCerosAnhadidos = 2;
  CadenaDeBits6en6Tamanho += 2;
  } break;

  default:
  {
 
  } break;
}


do
{

TempBits6 += CadenaDeBits6en6[z];

x++;
z++;


  if (x == 6 )
  {
 
   
if ( TempBits6 == "000000")
      {
      CifradoFinal += "A";
      }
         
if ( TempBits6 == "000001")
      {
      CifradoFinal += "B";
      }

if ( TempBits6 == "000010")
      {
      CifradoFinal += "C";
      }
         
if ( TempBits6 == "000011")
      {
      CifradoFinal += "D";
      }

if ( TempBits6 == "000100")
      {
      CifradoFinal += "E";
      }
         
if ( TempBits6 == "000101")
      {
      CifradoFinal += "F";
      }

if ( TempBits6 == "000110")
      {
      CifradoFinal += "G";
      }
         
if ( TempBits6 == "000111")
      {
      CifradoFinal += "H";
      }

if ( TempBits6 == "001000")
      {
      CifradoFinal += "I";
      }
         
if ( TempBits6 == "001001")
      {
      CifradoFinal += "J";
      }

if ( TempBits6 == "001010")
      {
      CifradoFinal += "K";
      }
         
if ( TempBits6 == "001011")
      {
      CifradoFinal += "L";
      }

if ( TempBits6 == "001100")
      {
      CifradoFinal += "M";
      }
         
if ( TempBits6 == "001101")
      {
      CifradoFinal += "N";
      }

if ( TempBits6 == "001110")
      {
      CifradoFinal += "O";
      }
         
if ( TempBits6 == "001111")
      {
      CifradoFinal += "P";
      }

if ( TempBits6 == "010000")
      {
      CifradoFinal += "Q";
      }
         
if ( TempBits6 == "010001")
      {
      CifradoFinal += "R";
      }

if ( TempBits6 == "010010")
      {
      CifradoFinal += "S";
      }
         
if ( TempBits6 == "010011")
      {
      CifradoFinal += "T";
      }

if ( TempBits6 == "010100")
      {
      CifradoFinal += "U";
      }
         
if ( TempBits6 == "010101")
      {
      CifradoFinal += "V";
      }

if ( TempBits6 == "010110")
      {
      CifradoFinal += "W";
      }
         
if ( TempBits6 == "010111")
      {
      CifradoFinal += "X";
      }

if ( TempBits6 == "011000")
      {
      CifradoFinal += "Y";
      }
         
if ( TempBits6 == "011001")
      {
      CifradoFinal += "Z";
      }

if ( TempBits6 == "011010")
      {
      CifradoFinal += "a";
      }
         
if ( TempBits6 == "011011")
      {
      CifradoFinal += "b";
      }

if ( TempBits6 == "011100")
      {
      CifradoFinal += "c";
      }
         
if ( TempBits6 == "011101")
      {
      CifradoFinal += "d";
      }

if ( TempBits6 == "011110")
      {
      CifradoFinal += "e";
      }
         
if ( TempBits6 == "011111")
      {
      CifradoFinal += "f";
      }

if ( TempBits6 == "100000")
      {
      CifradoFinal += "g";
      }
         
if ( TempBits6 == "100001")
      {
      CifradoFinal += "h";
      }

if ( TempBits6 == "100010")
      {
      CifradoFinal += "i";
      }
         
if ( TempBits6 == "100011")
      {
      CifradoFinal += "j";
      }

if ( TempBits6 == "100100")
      {
      CifradoFinal += "k";
      }
         
if ( TempBits6 == "100101")
      {
      CifradoFinal += "l";
      }

if ( TempBits6 == "100110")
      {
      CifradoFinal += "m";
      }
         
if ( TempBits6 == "100111")
      {
      CifradoFinal += "n";
      }

if ( TempBits6 == "101000")
      {
      CifradoFinal += "o";
      }
         
if ( TempBits6 == "101001")
      {
      CifradoFinal += "p";
      }

if ( TempBits6 == "101010")
      {
      CifradoFinal += "q";
      }
         
if ( TempBits6 == "101011")
      {
      CifradoFinal += "r";
      }

if ( TempBits6 == "101100")
      {
      CifradoFinal += "s";
      }
         
if ( TempBits6 == "101101")
      {
      CifradoFinal += "t";
      }

if ( TempBits6 == "101110")
      {
      CifradoFinal += "u";
      }
         
if ( TempBits6 == "101111")
      {
      CifradoFinal += "v";
      }

if ( TempBits6 == "110000")
      {
      CifradoFinal += "w";
      }
         
if ( TempBits6 == "110001")
      {
      CifradoFinal += "x";
      }

if ( TempBits6 == "110010")
      {
      CifradoFinal += "y";
      }
         
if ( TempBits6 == "110011")
      {
      CifradoFinal += "z";
      }

if ( TempBits6 == "110100")
      {
      CifradoFinal += "0";
      }
         
if ( TempBits6 == "110101")
      {
      CifradoFinal += "1";
      }

if ( TempBits6 == "110110")
      {
      CifradoFinal += "2";
      }
         
if ( TempBits6 == "110111")
      {
      CifradoFinal += "3";
      }

if ( TempBits6 == "111000")
      {
      CifradoFinal += "4";
      }
         
if ( TempBits6 == "111001")
      {
      CifradoFinal += "5";
      }

if ( TempBits6 == "111010")
      {
      CifradoFinal += "6";
      }
         
if ( TempBits6 == "111011")
      {
      CifradoFinal += "7";
      }

if ( TempBits6 == "111100")
      {
      CifradoFinal += "8";
      }
         
if ( TempBits6 == "111101")
      {
      CifradoFinal += "9";
      }

if ( TempBits6 == "111110")
      {
      CifradoFinal += "+";
      }
         
if ( TempBits6 == "111111")
      {
      CifradoFinal += "/";
      }


  x = 0;
  TempBits6 = "";
  }

  if ( z == CadenaDeBits6en6Tamanho )
  {
  mantenerseEnBucle = false;
  }

} while ( mantenerseEnBucle == true )


switch (ContadorNumDeCerosAnhadidos)
{
  case 2:
  {
  CifradoFinal += "=";
  } break;

  case 4:
  {
   CifradoFinal += "==";
  } break;
}

document.write(CifradoFinal);
alert (CifradoFinal);
</js>
</body>
</html>


Comentarios del código:
Los 2 switchs es parte necesaria del cifrado base64. Básicamente lo que hago es usar el operador módulo (%) para obtener el resto de dividir el tamaño del texto que se quiere cifrar entre 6 (los bits, ceros y unos, se agrupan de 6 en 6 en el cifrado base64) Como puede ser que al agrupar de 6 en 6 te queden bits sueltos, es necesario añadirle el símbolo = por cada 2bits. Con un ejemplo se ve mejor:
Si tengo los bits 1 0 0 0 1 0 1 1 y los quiero agrupar de 6 en 6. Tendré dos grupos. 100010 y 11. Lógicamente me faltan bits en el segundo grupo para tener 6 bits en ambos grupos. Entonces le añado ceros hasta tener 6 bits: 11 -> 110000
Y los simbolos igual entonces para que?
Para identificar si al número se le añadieron ceros o el número ya era así, ya que si no usamos los iguales, no podrías diferenciar cuando el texto a cifrar fue 1 0 0 0 1 0 1 1 de cuando el texo a cifrar fue 1 0 0 0 1 0 1 1 0 0 0 0.
Al no poder diferenciar tendríamos un serio problema al descifrar el cifrado y por eso se añade un igual por cada grupo de 2 bits añadidos.

Y por qué por cada 2 bits 1 igual y no por cada bit un igual? Porque solo existen 2 posibilidades. Que falten 2 bits para llegar a tener los 6 bits, o que falten 4 bits para llegar a tener los 6 bits. No tendría sentido usar 2 iguales y 4 iguales cuando podemos representar lo mismo con 1 igual y 2 iguales.

Si te parece complejo en realidad es una tontería, leete la entrada sobre el cifrado en wikipedia y lo acabarás entendiendo. Yo aprendí a implementar el cifrado usando como único recurso la wikipedia y un cifrador online psra ver si lo estaba haciendo bien.
Cuando pone case 2 en el switch del resto significa que sobraron 2 bits, por eso hay que añadirle 4 bits más para llegar a los 6.

El código dentro del bucle do while lo único que hace es añadir bits a una variable y en cuanto tiene 6 bits guarda en otra variable ese número binario pasado a caracter usando la tabla comun de base64. 000000 = A, 000001 = B, etc.
Tras obtener la cadena, vuelve a tomar los 6 siguientes bits repitiendo este proceso hasta que no queden bits que tomar.

Pueden usarse arrays para la comparación y breaks en los if para mejorar el rendimiento y reducir drásticamente las líneas del código. Pero así es más visual y fácil de entender para newbies. Lo mismo con reducir el uso de variables, etc.

Si no entendeis algo comentarlo.
#126
Qué tipo de profesiones y como se desarrollan?
Qué títulos se requieren? Qué suma puntos? Qué actividades se realizan?

Me comentaron que se puede estudiar y los gastos están pagados dentro del ejército o algo así. Que hay gente que se saca carreras en parte de jornada laboral. Etc.

Alguien está informado?
#127
Hola, un grupo de amigos desempleados jovenes con gran afición a la tecnología y a la informática estamos intentando informarnos a cerca de beneficios fiscales y subenciones así como todas las opciones disponibles para el tipo de proyecto que tenemos en mente.
Me gustaría que si teneis conocimientos en el tema o podeis aportar, publicaseis información, opinión y orientación a cerca de cual sería la opción que menos gastos y más beneficios nos aportaría en forma de rebajas fiscales, pago de autónomos/seguridad social, etc.

Somos un grupo amplio de jóvenes con especializaciones muy diversas en el ámbito de la informática, comunicaciones, etc.
Uno se dedica al montaje y reparación de equipos, otro a gestión y contabilidad de empresas del sector tecnológico, otro a la telefonía móvil y montaje de antenas, otro ejerce de relaciones públicas, otro al diseño de páginas web, otro al hosting, otro a montaje de redes y software de gestión y bases de datos, otro al desarrollo de aplicaciones android, etc.

El caso es que si estamos todos independientemente como autónomos ejerciendo en lo nuestro, podemos obtar a subenciones del estado para cursos de gestión y desarrollo empresarial así como ayudas para jóvenes emprendedores.

Tenemos un grupo de whatsapp y nos pasamos clientes, colaboramos entre todos, etc.

Cual sería la mejor opción para este caso?
Lógicamente si cada uno alquila un local, luz, agua, gestión, vehículos... es una burrada de dinero cuando todo se podría unificar en un solo sitio con una o dos personas atendiendo a los clientes en un solo local y atendiendo llamadas e así ahorrar muchísimos gastos, tiempo y tener una imagen más profesional pudiendo distribuir propaganda de la empresa con todos los servicios.

Muchas gracias.
#128
Dudas Generales / Ingeniería social. (SE)
20 Julio 2019, 10:02 AM
    
INGENIERÍA SOCIAL por String Manolo

  • Definición

  • Qué es?

  • Para qué sirve

  • Quién lo utiliza

  • Técnicas y ejemplos

  • Principales Motivaciones

  • Por qué deberías informarte


-Definicion
Existen múltiples definiciones, prácticamente una por cada autor. Todos la utilizamos y la hacemos nuestra, por lo que queremos dar nuestra visión y por lo tanto una definición que se ajuste a nuestro criterio.

-Qué es?
La ingeniería social es el arte de usar  nuestras capacidades para cumplir un objetivo a través de una persona o cualquier agrupación social. Véase  una empresa, una organización, una familia, un grupo de amigos, un empleado...

-Para qué sirve?
La ingeniería social sirve para ayudarnos en nuestros propósitos. Conseguir un trabajo, pedir un préstamo, una invitación a una fiesta, una cita, cambiar la imagen que los demás tienen de nosotros...

-Quien la utiliza?
La utilizan los niños llorando para mamar, un comercial para venderte un aspirador, un agente de la autoridad para forzar una confesión de un delincuente, un psicólogo para obtener información y poder hacer un diagnóstico, un cibercriminal para obtener tus datos bancarios, tu mujer para decidir que mueble vas a poner en el salón jeje.
En mayor o menor medida todos utilizamos la ingeniería social y todos somos víctimas de ella.

-Por qué deberías informarte?
Es una de las herramientas más comunes y frecuentes. Principalmente deberías informarte para que no sea utilizada en tu contra.


Desde la creación de internet los cibercriminales han desarrollado muchas técnicas de ingeniería social (algunas más sofisticadas y otras realmente sencillas) como herramientas para obtener acceso a equipos remotos y a información sensible; correos electrónicos, cuentas bancarias, perfiles en redes sociales, u obligarte/convencerte de hacer pagos al delincuente.

Las principales motivicaciones de estos criminales son:

  • Lucrarse económicamente
  • Obtener equipos y dispositivos electrónicos que puedan controlar remotamente
  • Intereses políticos, empresariales, personales o ideológicos
  • Venganza
  • Obtención de recursos como software, material pornográfico, escritos, pruebas de delitos...
Muchas veces con el fin de utilizarlos ilícitamente en pos de saciar sus inquietides o para su satisfación personal. Véanse el chantaje y la extorsión para conseguir favores de todo tipo, o la venta a terceros en el caso de que la víctima no ceda al chantaje.


Las técnicas son numerosas y muy diversas. Todo pasa por la información que expongamos o que sea de cualquier modo accesible a terceros e igual de importante es la información que no sabemos que existe y pueda ser usada en nuestra contra.




Ejemplos de ténicas más comunes y frecuentes:
Una de las más interesantes por su alta efectividad y de la que todos podemos ser víctimas es el llamado Trashing o Dumping Diver(buscar en la basura) que convinado con phising(correos electrónicos suplantando a una entidad) puede ser altamente peligroso para nuestra seguridad:
Tiras a la basura tus informes o citas médicas. Números de teléfono. Tickets de la compra. Es algo frecuente que todos hacemos alguna vez. O dejamos algo que se puede ver perfectamente desde una ventana con un telescopio.

Cualquier criminal podría vigilarte y obtener tu bolsa de basura de dentro contendor. Leer tu informe médico y llamarte por teléfono suplantando la identidad del centro de salud que figura en el documento:

Hola buenos días, Paco Martinez Perez? Llamaba para informsrle que la cita para realizar la resonancia magnética con motivo de su lesión lumbar a sido asignada el día 12 en el hospital Juan Gutierrez. Cómo? Seguro que no es correcto? No se preocupe. Debe ser un error informático. Tiene una dirección de correo electrónico para que pueda usted cotejar su historial médico con el sistema informático de salud? Vale, muchas gracias don Paco.

En el correo, suplantando el centro hospitalario se enviará un archivo malicioso que infecte el computador de don Paco adjunto a un informe médico creado a partir del que se obtuvo tras buscar en los desechos.



Otra técnica que utilizan se basa en colocar estratégicamente un teléfono móvil infectado con programas espía o un pen-drive cerca de la residencia de la víctima. El delincuente vigila a la víctima durante un breve periodo y aprende su rutina. Dónde aparca. A qué hora sale a trabajar. A que hora vuelve...

No sería extraño que la víctima se quedase con el teléfono móvil y se conectase a su router utilizando la clave del wi-fi. El atacante podría tirar la red fácilmente obteniendo la ip del router tras mandarse un ping a su servidor, obligando a la víctima a resetear el router y por lo tanto reseteando la contraseña de administración del router en el proceso. Dándole acceso inmediato e ilimato al router y consecuentemente a todos los sistemas conectados al router. Obtendría facilmente fotos, videos, correos, contraseñas, historiales, conversaciones, datos bancarios, contactos...

La más mínima información podría llevar a un ataque exitoso de ingienería social por parte del criminal.



Una de las técnicas más comunes realizadas por personas de todo tipo es el catfishing.
Esta técnica se basa en enamorar y manipular a una persona para "enamorarla" usando un perfil falso. Este tipo de perfiles suelen tener grandes dotes para la seducción. Por si eso no fuera suficiente, es frecuente el uso de fotos de algún modelo que encuentran por internet.
El objetivo principal de estos delincuentes es conseguir toda la información posible. Dirección, vínculos familiares, imágenes, audios y vídeos de caracter sexual lo más explícitos posibles, audios que averguencen a la víctima, confesiones de delitos, información sobre infidelidades, exparejas, etc.

Trás tener suficiente información el delincuente pasará a pedir favores económicos por una extrema necesidad: "Siento no haber podido hablarte esta semana. Estoy muy preocupado/a. Mi padre necesita un transplante de riñon y el único que se lo puede dar es mi hermano y no tiene dinero para el billete de avión. He estado moviéndome día y noche para conseguir el dinero. Intenté pedir préstamos, pero como la casa donde vivo nos la dejó mi madre en herencia a mi hermano y a mi, no la aceptan como aval para concerme el crédito sin su firma. Todo por 700 cochinos euros. Como si la vida de mi padre no valiese eso. Soy un/a hijo/a horrible. Si no bebiese alcohol de joven".

Como podemos ver, ese mensaje intenta tocar varias fibras sensibles y manipular a la víctima.
Vamos a analizarlo en profundidad, un mensaje que a priori puede parecer algo muy sencillo y una historia de la que se podría llegar incluso a desconfiar en algún momento. Pero en realidad tiene mucha carga emocional detrás y algo de psicología:

-Primero el criminal muestra una depresión y se dirige a la víctima sin un hola, ni un amor, ni cariño, como era frecuente. Mostrándole a la víctima que hasta que el problema se solucione la relación entre ellos no va a ser la misma. Menos contacto, menos afecto...

-El criminal muestra preocupación intentando buscar la empatía de la víctima.

-Después monta una historia falsa. Probablemente durante todo el proceso de manipulación, le irá mostrando antecedentes para hacer la historia totalmente veraz a los ojos de la víctima. Por ejemplo: "Hola amor, mira las fotos que me envió mi hermano." "Es en China, un lugar precioso, algún día iremos a visitarlo". "Mira esta foto con mi padre. Está hecho un toro, no se que haría sin él, es un hombre marabilloso, dile algo". "Dice que eres muy guapa y que está deseando conocerte". "Estoy deseando que pueda tener nietos jeje". Así se crea un vínculo afectivo entre la víctima y el falso padre para que la importancia sea mayor, teniéndolo ya en su mente idealozado como el abuelo de su futuro nieto.

-Toda la historia de la firma del hermano, y el aval de la casa es solo para reafirmar la historia y aumentar su credibilidad.

-La frase de "todo por 700 cochinos euros" es clave en la etapa final. Desvaloriza lo material influyendo en la perspectiva de la víctima y pensando para sí que en efecto, solo son 700 euros. No es nada en comparación con todo lo negativo de la situación. Abre la puerta pensamientos como: "Si se muere su padre por no prestarle tan solo 700 euros, me lo recordará durante toda la vida." "No quiero verlo/a así de triste". "Yo también me siento mal". Cómo vemos, cualquiera podría caer en una relación idílica de este tipo y ser estafados por un criminal.

Pero el problema no acaba aquí. Si la victima no accediese a ofrecerse psra pagar los 700 euros voluntariamente, el criminal se los pediría de la siguiente forma:
"Me dejas los 700 euros?" Pregunta directa, intentando esquivar el no y que la víctima ceda y se derrumbe ante la presión.

En caso de seguir la negativa se pasaría directamente al chantaje emocional:
"No pensé que fueras así". "Me alegro de saberlo ahora". "No entiendo por qué me haces daño"...

Si la victima no accede tras una agotadora insistencia y manipulación por todos los medios, el criminal podría dejarse de sutilezas y empezar a soltar la artillería que ha acumulado intentando dejar en shock a la víctima y causarle terror, miedo, verguenza...
"Ingrésame el dinero". "Tengo fotos íntimas tuyas y te prometo que se las mandaré a todo el mundo". "Sé dónde vives". "Lo sé todo sobre ti". "Todos sabrán como eres". "Todos sabrán que robastes en aquella tienda". "Todos sabrán donde vives". "En que habitación duermes". "Sé dónde trabajas y no van a querer a nadie dando tan mala imagen". "Toda tu familia verá lo que haces por la noches y en la cama de tus padres, das asco, ahora mismo lo envío todo".

Muy pocas víctimas denuncian en el momento por miedo y acaban siendo humilladas y cada vez más y más controladas.

Toda esta situación podría evitarse con algo tan simple como pedirle un vídeo al criminal con el pulgar hacia abajo. Así se confirmaría si es la misma persona de la fotos. En caso de no enviar el vídeo o no ser la misma persona que en las foros sería obvio que era un engaño desde el principio. Y en caso de que utilizase las fotos y vídeos de un conocido, sería fácil para la policía identificar al criminal.



Medidas para protegernos:
-Tener cuidado con nuestra información. Por ejemplo no cubriendo encuestas ni tests de persobalidad online, y demás aplicaciones. Limitar el acceso a nuestras redes sociales solo a amigos. Y no aceptar a nadie desconocido sin verificar previamente su identidad.

-Asegurarnos que con quien nos comunicamos es quien dice ser en todo momento.

-No utilizar dispositivos que nos encontremos mágicamente por ahí.

-Nadie regala dinero. Ponernos en todo momento en el lugar del ofertante para saber si nosotros haríamos algo así y con que fin.

-No creer todo lo que vemos, escuchamos o leemos a primera.

Los criminales parten con más experiencia, en necesario estar informados en Ingeniería Social para poder protegernos.[/list]
#129
Pago con monero, barato y que no tenga problema con que monte el nodo de salida de tor así como varios dns y ftp.

Conoceis alguno?
#130
Me pasó hoy cuando el servidor dejó de estar disponible. Intuyo que la cache se quedó corrupta en medio de la descarga. Con borrar el caché del navegador todo vuelve a funcionar.
#131
Es un error o es a propósito para reducir la carga del foro?
Están haciendo DOS y el cloudflare decide cerrar el acceso al servidor en vez de repartir la carga? O se están haciendo cambios, updates y esas cosas?
Aviso por si es un error que no afecta a moderadores y sí a usuarios y entonces no lo veis.
#132
La próxima vez que veas una araña colgando del techo de tu habitación, o sientas la tentación de apuntar con el aspirador hacia sus telarañas, piénsatelo dos veces.

La biología nos dice que nunca deberías matar una araña en tu casa. Las arañas son beneficiosas para tu hogar, y para tu salud.

Es natural tener miedo a las arañas, un pánico ancestral que algunos estudios achacan a la forma de sus patas, y cómo se mueven. La aracnofobía es un terror irracional bastante extendido, incluso entre los entomólogos (los biólogos que estudian los insectos y las arañas). Pero hay que vencerlo o ignorarlo, por nuestro propio interés.

Las arañas han vivido en nuestras casas desde el principio de los tiempos. Algunas se quedan atrapadas pero hay especies, como las arañas de bodega o fólcidos, que les gusta vivir en nuestros sótanos, áticos, o en cuaquier rincón sin mucha luz.

¿Por qué nunca deberías matar una araña en tu casa?

En primer lugar, las arañas son depredadores que se ocupan de las plagas y de insectos molestos como los mosquitos, cochinillas, pulgas, etc. Incluso cazan otras arañas. Si tienes algún insecto de este tipo en casa las arañas se encargarán de ellos, y no solo con sus telarañas, ya que algunas salen a cazar.

Desde el punto de vista de la salud, es mucho mejor tener en casa un par de arañas, que mosquitos o pulgas...

Casi todas las arañas son venenosas, pero muy pocas tienen la fuerza suficiente para atravesar la piel, incluso aunque nos piquen. Y desde luego no las arañas comunes. Nunca atacan a los humanos, e intentan evitarnos siempre que pueden. Si te cruzas con una araña es porque la has pillado en algún desplazamiento, no porque te considere su presa, como si hacen los mosquitos, las pulgas, y otros insectos.

No se trata de llenar la casa de telarañas, pero si ves una o dos arañas en el techo de tu casa, no te conviene matarlas.

Si aún así no puedes evitarlo, y es superior a tí verlas colgando de las paredes, siempre puedes meterlas en algún recipiente y liberarlas en la calle o en un jardín, ya que se adaptan fácilmente y no tardarán en encontrar un nuevo hogar.




Mod: Fuente: https://computerhoy.com/noticias/life/que-nunca-deberias-matar-arana-tu-casa-262047

(Obligatorio poner fuentes)
#133
Quiero aprovechar que tengo una burrada de smarthphones antiguos con versiones de Android antiguas por ejemplo android 2.1 para usarlos de servidores. Conoceis alguna app para correr javascript en Android que me funcione en estos dispositivos? Estuve probando con aplicaciones como Termux, pero son incompatibles con estos dispositivos. Conoceis alguna? Gracias.
#134
El Manuscrito Voynich es un libro ilustrado, de contenidos desconocidos, escrito por un autor anónimo en un alfabeto no identificado y un idioma incomprensible, el denominado voynichés. Aunque no se sabe cuándo fue escrito, según pruebas del carbono 14, el pergamino en el cual está escrito fue fabricado entre 1404 y 1438.
https://es.m.wikipedia.org/wiki/Manuscrito_Voynich

Está en versión digital para que podais analizarlo. Es muy curioso. Se sabe que está escrito en un lenguaje humano y poco más. Se cree que tiene varias capasnde cifrado, que podría ser una interpretación fonética de un lenguaje antiguo, o que son anagramas y cifrados.
#135
La única forma que se me ocurre es haciendo arrays con las posibles convibaciones, pero sería una locura hacer un array para cada convinación posible. Tiene quer haber alguna forma de saber que cartas me sirven.

Mi idea es pedir al usuario sus cartas y las cartas en la mesa, y que me de todas las combinaciones posibles relevantes y su porcentaje de obtener cada convinación.
No se me ocurre como hacerlo sin tirarme semanas escribiendo combinaciones a mano xD

El programa debería ser en plan:
Dime las cartas de tu mano:
Trebol1, Picas1

Tienes pareja de ases.
Introduce apuesta en la mesa.
La apuesta son 20$ recomendado ver 10 a 1.

PrimeraCartaDestapada = Corazones5;

CartasRestantesEnElMazo = 40;

Manos posibles:
Escalera Real: 0'00%
...
...
Poker: 0'008%
Corazones1 0'02%
Rombos1 0'02%

Trio: 0'04%
Corazones1 0'02%
Rombos1 0'02%


Posibilidad media de ganar: 73%
Odds de bote: 27%
Recomendado:
Subir 24€


Como podría obtener automáticamente las cartas que me sirven?
Por ejemplo si tengo Picas1, Trebol1 y en la mesa hay Corazones1, PicasRey. Como calculo las cartas validas tipo:
Cartas que sirven:
Poker: Rombos1
FullHouse: CorazonesRey, RombosRey, TrebolRey.
Escalera: ...
Dobles Parejas: ...
Parejas: ...
Cartas Inútiles...

CartasMazo = 40
CartasValidasEnMazo = 22
CartasInvalidasEnMazo = 18

Probabilidades de poker: 0'008%
Probabilidades de ganar con poker: 97'63%

Probabilidades de FullHouse 0'1%
Probabilidades de ganar con FullHouse: 94'78%

.......

Probabilidades de sacar una mano con más 90%winrate = 0'12%

Probabilidad final de victoria = 73%
...