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ú

Mensajes - @XSStringManolo

#771
Cita de: MinusFour en 14 Febrero 2020, 18:40 PM
Código (javascript) [Seleccionar]

["Peliculas"+i]["titulo"]


Lo único que hace esto es crear un arreglo con un string "Peliculas1". No hace referencia a la variable "Peliculas1". Tendrías que usar el objeto global (y solo sí, la variable fue creado en el entorno global) para poder acceder a la variable de manera programática.

Código (javascript) [Seleccionar]

window["Peliculas"+i]["titulo"]


Pero no hagas esto y mejor usa las estructuras apropiadas de tal manera que puedas hacer uso de todas las herramientas asociadas a esas estructuras y ni decir que ya no estás contaminando el entorno global.

No se de donde salio esto, pero el usuario igual puede agregar propiedades no enumerables.

[[Call]] no es una propiedad, por lo tanto no tiene nada que ver con que sea enumerable o no. Mejor olvidarse de [[Call]] por ahora, porque no es algo que un principiante como el OP necesita saber.

No se, pero yo creo que el OP tenía una duda y ahora va a tener miles. No entiendo porque complicar un problema que es tan sencillo.
Exacto, estoy usando películas como propiedad de window y contaminando/polucionando el scope global. Tu dices que con mi respuesta la lio o le añado complejidad a algo sencillo, y tu te pones a hablar de scopes, closures y contaminación global, aclárate.

No quise entrar en más porque personalmente no suelo usar librerías externas y por lo tanto nunca tengo colisiones y por no alargar mi ya largo mensaje. Puede buscar sobre Immediately Invoked Function Expression (IIFE) para crear variables "locales".

Yo recomiendo usar module pattern
IIFE, Closures y Módulos explicados

A cerca de call
No lo has leído todo porque dije que se pueden añadir propiedades no enumerables. Hacerlas enumerables no enumerables, etc.

He dicho que call es un método de una función. Qué es incorrecto?
Te cito de la página oficial de ecmascript https://www.ecma-international.org/ecma-262/5.1/
CitarThe function's Call internal method ( 8.6.2) is called with an empty arguments...
Claramente dice el "método" interno call de la función. Es exactamente lo que dije yo.

Y call sí es una propiedad/metodo no enumerable de una función. Puedes comprobarlo:

Código (javascript) [Seleccionar]
<html>
<body>
<script>
function ObtenerPropiedades( obj ) {
  var props = [];
  do {
    Object.getOwnPropertyNames( obj ).forEach(function ( prop ) {
      if ( props.indexOf( prop ) === -1 ) {
        props.push( prop );
      }
    });
  }
  while ( obj = Object.getPrototypeOf( obj ) );
  return props;
}

function ejemplo(){};
var referencia = eval(ejemplo);

alert(ObtenerPropiedades(referencia));
</script>
</body>
</html>
#772
Seguridad / Re: Ayuda con virus
14 Febrero 2020, 18:41 PM
Ten 2 cuentas bancarias. Una vacia y otra con tu dinero. La del dinero nunca jamás accedas desde internet.
Cuando quieras pagar algo llamas desde el fijo al banco y le dices que quieres hacer una transferencia de X dinero desde la cuenta con dinero a la cuenta vacia. Te hacen la transferencia, pagas y listo. En ningún momento expones la cuenta buena. Mejor usar el fijo que el móvil. El móvil se exponen a ataques de downgrade a 2g y MITM al tráfico móvil, infecciones que puedan grabar tus conversaciones, etc.
#773
Lo del escuchador de eventos es un fallo que se suele cometer. Debes asegurarte que el body está creado previamente cuando se ejecute tu código javascript. Puedes llevar todo el código (o la llamada al archivo) al final del body. O en su defecto escuchar el evento onload del body para llamar a tu javascript. Esto te permite añadir tu javascript en el head, aunque da un poco igual.

El error que tienes es porque estás intentando referenciar tu variable Peliculas1, Peliculas2, etc usando
Código (javascript) [Seleccionar]
Peliculas[i]. En realidad tu lo que quieres es formar las palabras "Peliculas1", "Peliculas2". No acceder como si fuese un array.

Es decir, cambia tu
Código (javascript) [Seleccionar]
Peliculas[i]["titulo"] por
Código (javascript) [Seleccionar]
["Peliculas"+i]["titulo"] o también te vale
Código (javascript) [Seleccionar]
["Peliculas"+i].titulo


Otro fallo que veo, es que estás iterando desde 0. La primera referencia va a ser "Peliculas0" la cual no creaste. Entonces itera desde 1 y no desde 0.

Es decir, cambia tu bucle for de
Código (javascript) [Seleccionar]
(i = 0; i <= Peliculas.length; i++)
a
Código (javascript) [Seleccionar]
(i = 1; i < Peliculas.length; ++i)
El comparador = te sobra porque se detecta el < primero de la forma en que iteras entonces nunca se evalua el condicional ==


Por otro lado, si no conoces el nombre de las claves:
Por ejemplo, imagínate que dejas que el usuario añada sus claves valores.
El usuario podría añadir a la Peliculas1 la clave "UltimaVezQueLaVi": "2018";
Entonces como trabajas tú con "UltimaVezQueLaVi" si tu no sabes de antemano que el usuario iba a añair exactamente esa propiedad?

Para este y otros casos.
Te recomiendo usar Object.entries(elObjeto) para mostrar las propiedades y métodos enumerables de un objeto.

Qué es eso de enumerables o no enumerables?
Los enumerables resumiendo muy muy mucho, son los que normalmente añades tú al objeto.
Hay propiedades y métodos no enumerables en tu objeto, pero entiendo que no te interesa mostrarlos ni saber que existen. Practicamente todo en javascript son objetos (Funciones también aunque no se use el constructor, ejem ejem). Por ejemplo cuando creas una función, en realidad estás creando un objeto que tiene métodos no enumerables como el método
Código (javascript) [Seleccionar]
[[call]] que sirve para poder llamar a la función. Todo esto funciona a nivel interno, asique no te interesa demasiado. Te lo comento para que sepas lo que es un método nó enumerable por si tienes curiosidad y para mayor entendimiento. Estos los puedes mostrar también (de varias formas), modificarlos para ser enumerbles o hacer tus propias propiedades no enumerables.
Incluso con strings o literales que no son objetos(tipos primitivos o no referenciados), cuando utilizas un método como .subString() a nivel interno se crea un wraper(envoltorio) sobre el literal creando un objeto temporal new String, asignándole el valor del literal, aplicándole el método subString() al nuevo objeto temporal string que creó el wraper, destruyendo el objeto String una vez se le aplicó el método subString(), length o cualquier otro, y retornándote el valor del método. Es decir, hasta lo que no es un objeto temporalmente puede que se usen objetos a nivel interno para proveerte acceso a métodos de tipos primitivos que en realidad no se le pueden aplicar métodos porque no son objetos y por lo tanto no tienen ningún método aplicable. Por eso se crea un objeto temporal que si tiene el método que intentas usar.



Para usar el Object.entries(), en navegadores modernos y actualizados, lo usas sin problemas. Pero es "relativamente nuevo".

Es decir, en navegadores no tan modernos, no existe el Object.entries(); Yo mismo estoy usando un navegador ahora mismo con motor javascript del 2015. (Samsung Internet Browser para Android)

Por qué hay gente como yo usando esto? Porque hay Smartphones y portátiles de baja gamma que no tienen suficiente espacio, procesador o ram para correr la última versión de Chrome. Hay otra gente que usa el navegador preinstalado en el teléfono y no sabe ni lo que es Chrome o un navegador, simplemente le dan al icono que pone internet, etc.

Como mínimo recomendable se debería dar soporte a ES6 (EcmaScript 6) que es una "versión" de javascript. Con eso deberías pasar de cubrir desde el 94-95% de navegadores actuales a el 97-98% de navegadores con javascript. Si quieres dar soporte al 99% de navegadores también le das soporte a ES5. Esto significa que no utilizas keywords que no existían de aquella.

Otra opción es dar soporte/incluir tú esas características no soportadas.
Este concepto se conoce como polyfill. Te incluyo uno para Object.entries() de esta forma tu código funcionará sin problemas en navegadores antiguos.

Existe un programa que se llama babel. Es un "transpiler". Le metes tu código, la versión de javascript a la que quieres dar soporte y te genera el código equivalente para esa versión. No es perfecto, pero funciona bastante bien en muchos casos. Tiene versión online, busca por babeljs si te interesa.

No cambies el polyfill que te añadí, hay otros por ahí, pero no funcionan adecuadamente. Este lo testeé en ES5 y ES6.

Código (javascript) [Seleccionar]
<html>
<body>
<script>
/* Polyfill Object.entries ES5 y ES6 */
if(!Object.entries)
 Object.entries = function(obj) {
   return Object.keys(obj).reduce(function(arr, key) {
     arr.push([key, obj[key]]);
     return arr;
   },[]);
 }

/* Creación de objeto de ejemplo */
var Peliculas1 = {};
Peliculas1.titulo="Gladiator";
Peliculas1.descripcion="Ambientado en el coliseo romano, Gladiator es una película ganadora de ...";

/* Obtener todas las propiedades enumerables de un objeto */
alert("TODO: \n\n" + Object.entries(Peliculas1));

/* Obtener las propiedades en grupos valor/clave */
var propiedadesP1 = Object.entries(Peliculas1);

for(var i = 0; i < propiedadesP1.length; ++i)
 alert("Clave/Valor número " + (1+i) + "\n\n" + propiedadesP1[i])

/* Obtener solo las claves/referencias */
for(var i = 0; i < propiedadesP1.length; ++i)
 alert("Esta es la propiedad enumerable número " + (i+1) + "\n\n" + propiedadesP1[i][0])

/* Obtener solo los "valores" */
for(var i = 0; i < propiedadesP1.length; ++i)
 alert("Esta es la data referenciada número " + (i+1) + "\n\n" + propiedadesP1[i][1])

</script>
</body>
</html>


Aquí te hice ejemplos de como acceder a las distintas propiedades. Hay muchas más formas. Esta es bastante sencilla y compatible con ES5+
Si no te queda claro como va, ejecútalo y vas viendo que te imprime cada bucle y como accedo. Recuerda que el polyfill es para navegadores antiguos, a ti te va a ir incluso si lo borras, pero a otros con navegadores antiguos que ejecuten tu código no.

Si no acabas de comprender algo pregunta.

Te recomiendo el libro The principles of object-oriented javascript te explica con más detalle algunos de los conceptos básicos de los objetos en javascript.

#774
Ten cuidado no te joda tu software el av. Los hay muy puñeteros, por ejemplo el kaspersky para android me fundió 5 .apk porque tenías nombres como rat, malware, keylogger, etc. Algunos ni siquiera tenían la funcionalidad de que describían los títulos porque aún estaban en primeras etapas de desarrollo.

Yo para trabajar con malware en windows uso el Free Zone Alarm AV, es compatible con el windows defender, usa el motor del kaspersky, es totalmente gratuito, tiene zona para trabajar con tu malware sin problemas, etc.

Si lo pruebas no lo cambias xD.
#775
Hola! Varias cosas:
1. A qué "valor"? quieres acceder?
Las variables de tipo no referenciado que pertenecen a un objeto se llaman propiedades. Los literales que pertenencen a un objeto también.

Por otro lado las funciones que pertenencen a objetos se llaman métodos.

Para acceder a la propiedad o método de un objeto, necesitas una referencia al objeto y utilizar el operador punto . o los corchetes del array.

Código (javascript) [Seleccionar]
var titul = "titul";
alert(Peliculas6.titulo);
alert(Peliculas6["titulo"]);
alert(Peliculas6[titul+"o"]);


Son las 3 lo mismo, hay bastantes más pero para usos concretos. Puedes usar la última para cuando necesitas recorrer propiedades.

2. Por seguridad debes separar los códigos javascript de los códigos html poniéndolos en archivos separados. También debes añadir una CSP preferiblemente editando las cabeceras del servidor en la respuesta HTTP al cliente (u opcionalmente/adicionalmente usar la meta tag para lo mismo) para todos los recursos externos, javascript, librerías, php, css... Y bloquear el inline javascript en tus documentos HTML. No es la panacea de nada, pero si una buena práctica. También substituir varios caracteres que no quieras interpretar por las entidades HTML correspondientes a dicho caracter.

En concreto en tu código usas el onclick directamente dentro de un atributo de una etiqueta HTML. Remplázalo por obtener el elemento y añadirle un escuchador de eventos.
Código (javascript) [Seleccionar]
var bttnAlq = document.getElementById("alquilar");
bttnAlqEvent = bttnAlq.addEventListener("click", function(){alquilar()})


Puedes hacer encadenamiento de métodos si quieres.

3. No es necesario que añadas un id a cada etiqueta HTML para poder obtener el elemento con el getElementById o para poder aplicarle estilos en el CSS. Puedes usar el querySelector() y el querySelectorAll(). Le pasas como argumento el mismo selector que usarías en CSS. Por ejemplo para una etiqueta usas el nombre de la etiqueta sin más. Para classes usas el punto . . Para ids usas el hash #. Para atributos usas los corchetes [ ], escapas caracteres inválidos con \ etc. Tienes un tuto sencillo en la web de w3schools. Si buscas por google te sale. También tienes otros como
Código (javascript) [Seleccionar]
document.getElementsByClassName('miClase')[3].innerHTML.toString() Te lo pongo con encadenamiento de metodos para que lo veas.

4. Para acceder a las opciones del select puedes usar ids o recorrer todas las opciones.

5. Puedes citar mi mensaje en el foro para ver lo que escribí para colorear el código. Puedes escribir las etiquetas a mano. O puedes seleccionar todo el código y darle al select que pone Código Geshi.

Por cierto creaste el tema en Dudas Generales. Los temas de javascript suelen publicarse bajo el foro de programación web, aunque el javascript no esté relacionado con el desarrollo web ya que no hay un foro específico para javascript.
#776
Utiliza \MountPointManager
infecta:
C:\Program Files\Microsoft\DesktopLayer.exe
Misma Ruta\px4735.tmp

\SystemRoot\AppPatch\sysmain.sdb

C:\Program Files\Internet Explorer\dmlconf.dat

C:\Program Files\7-Zip\7z.exe
C:\Program Files\7-Zip\7zFM.exe
C:\Program Files\7-Zip\7zG.exe

C:\Program Files\Adobe\ Aquí infecta el ReadMeCS.htm y todas las .dll que pilla.

En Program Files\Common Files\microsoft shared\ infecta el office.

También infecta el framework .net

Se ejecuta al inicio en el registro con la key
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Winlogon\UserInit

Cambia las cabeceras PE y se añade al final(infecta) de DesktopLayer.exe, schtasks.exe iexplorer.exe chrome.exe

Después ejecuta el archivo desde la cmd.

Utiliza el método de spread de usbs con autorun. Es decir, es malware de la época del XP xDD

Cómo cojones te infectaste con esto?
#777
Cita de: **Aincrad** en 13 Febrero 2020, 15:54 PM
Hola, bueno Resumo :

Hoy en la mañana cuando enciendo mi PC , note que el proceso Chrome.exe esta abierto y en segundo plano, tambien note que crea otros .exe en el pendrive en una carpeta llamada "Recicle" o algo asi.

al parecer es un stealer de Google Chrome , bueno eso parece , lo raro es que no encontre entradas al registro u alguna manera para que se auto ejecutase al encender mi PC. bueno aqui lo dejo para el que lo quiera analizar :

https://anonfile.com/N6l2B0Y9n2/Virus_rar
Crees que es del propio Chrome? O de algún malware que puedas tener instalado?
Miraste en las carpetas típicas?

Chequeaste el tráfico de red? Será un autoupdater o algo así? Tienes el propio Chrome que se te inicia al arrancar? Igual solo cerraste la ventana de Chrome pero mantiene pocresos en el background?

PD: Lo miraste algo? Ten cuidado a ver si se creó dinámicamente y tiene hardcodeado o embebido movidas personales tuya tipo cookies y demás.
#778
GNU/Linux / Re: No me va el iso...
13 Febrero 2020, 16:14 PM
Cita de: Camilo1998 en 13 Febrero 2020, 11:16 AM
No tengo en mi pc windows
https://unetbootin.github.io/

Está bastante bien explicado.
#779
Puede que sea por el CGNAT. En redes móvies se usa mucho. Es decir, no eres el único que usa una IP pública. La misma ip pública se comparte simultaneamente entre varios móviles. Basta que uno solo esté infectado para que todos salgais como que estais infectados.

Checkea si tu cacharro tiene el mtklogger o el tcpdump en el enginer mode.

Aquí tienes todos los USSD de LG. Para la mayoría de Android es el *#*#3646633#*#* Lo marcas como si fuese para llamar.

Te saca logs del kernel, de radio, del sistema, de la red, de crasheos... Son logs de calidad. No hace falta root.

Si tienes termux puedes usar frida para hacer blackbox de los procesos a partir de su pid utilizando javascript. En los logs del mtklogger vienen los pid asique si algo te llama la atención, puedes mirarlo. Yo me lo bajé para radare2 con el r2pm. Lo tienes también para nodejs, etc.

Desde el PC puedes extraer la apk del smartphone y analizarlas.

Lo mínimo que deberías hacer es montar un proxy/vpn local y sniffear todo el tráfico de tu Android. Puedes meterle un vpn local de firewall al Android. Yo comparto internet de un a otro y le filtro el tráfico con el vpn del cortafuegos sin root a ambos.

Si tienes root, te descargas el titanium backup, haces una copia del sistema y te pones a quitar software preinstalado hasta que te aburras. Te lo deja sacar de la propia imagen de rescate. Asique aunque restaures de fábrica no se reinstala. Después añádele el afwall+.

#780
Te diré 3 palabras que cambiarán tu vida.

usa la lupa

o en dos

windows + (atajo de teclado)


Podrías ir sacando imágenes y cuando se pinche en una pixel de la imagen haces la conversión a la pantalla original.

Igual puedes fakear monitores y unirlos. Virtualbox te deja emular monitores. Podrías formas un super desktop usando 4 monitores fake. Igual hay algo hecho por ahí.

Antes había un bug en SDL que te permitía cambiar la res pero lo fixearon al poco.