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

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


  Mostrar Mensajes
Páginas: 1 ... 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 ... 287
601  Comunicaciones / Android / Scraper cutre de los mensajes recientes del foro.Java, Js, Ncat, WebView, Termux en: 2 Mayo 2020, 08:43 am
Código
  1. package com.stringmanolo.elhrecent;
  2.  
  3. import android.app.Activity;
  4. import android.os.Bundle;
  5. import android.webkit.WebView;
  6. import android.webkit.WebChromeClient;
  7. import android.webkit.JsResult;
  8. import android.os.Handler;
  9. import com.stringmanolo.elhrecent.R;
  10.  
  11. /*
  12.  
  13. Este código ha sido desarrollado y probado en el siguiente entorno:
  14.  
  15. Sistema: Android.
  16.  
  17. IDE: Java N-IDE.
  18.  
  19. Software adicional: Termux/netcat y google chrome.
  20.  
  21. */
  22.  
  23.  
  24. /*
  25.  
  26. Como funciona?
  27. Pones un servidor a la escucha y abres esta aplicación.
  28.  
  29. Como compilar?
  30. Debes crear un nuevo proyecto para Android y añadir el codigo.
  31.  
  32. Este es el MainActivity.java
  33.  
  34. Añade también el permiso de acceso a internet en el manifest y añade un webview en el activity_main.xml con id navegador
  35. android:id="@+id/navegador"
  36.  
  37. */
  38.  
  39. public class MainActivity extends Activity {
  40.  @Override
  41.  protected void onCreate(Bundle savedInstanceState) {
  42.    super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
  43.  
  44. /* id.navegador definido en activity_main.xml */
  45.    final WebView Navegador;
  46.    Navegador = (WebView)findViewById(R.id.navegador);
  47.  
  48. /* Habilita javascript */ Navegador.getSettings().setJavaScriptEnabled(true);
  49.  
  50. /* Utiliza chrome de cliente HTTP. */
  51.    Navegador.setWebChromeClient(new WebChromeClient() {
  52.      @Override
  53.      public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
  54. /* Habilita el alert */
  55.        return super.onJsAlert(view, url, message, result);
  56.      }  
  57.    });
  58.  
  59. /* Cambia el userAgent para que no salga el confirm de tapatalk */ Navegador.getSettings().setUserAgentString("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36");
  60.  
  61. /* Carga la página con mensajes recientes del foro. */ Navegador.loadUrl("https://foro.elhacker.net/recent.html");
  62.  
  63. /* Handler para zumbar el script en el contexto de la página del foro. Con espera asíncrona. */
  64.    final Handler jsh = new Handler();
  65.    jsh.postDelayed(new Runnable() {
  66.      @Override
  67.      public void run() {
  68.  
  69. /* Código desglosado:
  70.  
  71. javascript:
  72. Pseudoprotocolo. Permite ejecutar el script en el contexto de la página actual.
  73.  
  74. document.querySelectorAll(\".bordercolor\");
  75. Obtiene todos los elementos de la página con la clase bordercolor.
  76.  
  77. tags+=links[i].outerHTML;tags+=\"<p></p>\";
  78. Obtiene el código de todos los elementos en un string y los separa utilizando etiquetas <p>.
  79.  
  80. return \"SFRUUC8xLjEgMjAwIE9LDQoNCg==\" +''+btoa(tags);
  81. En la llamada a la funcion Scrap() retorna un ok status 200 codificado en base64 y codifica a base64 el código de todos los elementos obtenidos de la página.
  82.  
  83. r.open('GET','http://127.0.0.1:8080/q?codigo='+Scrap(), 1);
  84. Envia una petición GET a la dirección 127.0.0.1 puerto 8080 el parámetro y en la propia url el retorno de la función Scrap()
  85.  
  86. */
  87. Navegador.loadUrl("javascript:function Scrap(){var links=document.querySelectorAll(\".bordercolor\");var tam=links.length;var tags=\"\";for(var i=1;i<tam;++i){tags+=links[i].outerHTML;tags+=\"<p></p>\";}return \"SFRUUC8xLjEgMjAwIE9LDQoNCg==\" +''+btoa(tags)}r=new XMLHttpRequest();r.open('GET','http://127.0.0.1:8080/q?codigo='+Scrap(), 1);r.send();r.onreadystatechange=function(){r.readyState==4&&r.status==200?alert(r.responseText):1}");  
  88.      }
  89.    }, 15000); /* Esperar 15 segundos para conexiones lentas. */
  90.  }
  91. }
  92. /* Se debe poner a la escucha previamente un servidor en la dirección y puerto que asignes en el script.
  93.  
  94. Yo utilizo el siguiente comando:
  95.  
  96. $ netcat -l -v 127.0.0.1 8080 | grep -Po '(?<=(codigo=)).*(?=HTTP)' | base64 -d > codigoH.html | netcat -l -k 127.0.0.1 8081 < codigoH.html | echo -e "\r\n\r\n\r\n"
  97.  
  98. Comando desglosado:
  99.  
  100. netcat -l -v 127.0.0.1 8080
  101. Pone a la escucha y logea la actividad en la ip 127.0.0.1 y puerto 8080. Según tu versión de netcat puede cambiar la sintaxis.
  102.  
  103. | grep -Po '(?<=(codigo=)).*(?=HTTP)'
  104. Obtiene solo el string entre codigo= y HTTP. Es decir, solo el 200 ok status y el código extraido de la página codificado en base64.
  105.  
  106. | base64 -d > codigoH.html
  107. Decodifica de base64 y guarda el stream en un archivo codigoH.html
  108.  
  109. | netcat -l -k 127.0.0.1 8081 < codigoH.html
  110. Pone a la escucha el netcat también en la dirección 127.0.0.1 con puerto 8081 y responde con una petición y el contenido html. De esta forma netcat actual de servidor válido para el navegador. Al poner http://127.0.0.1:8081 recibes el código. Según tu navegador puede que necesites preformatear el documento en un html válido y añadirle algunas cabeceras o etiquetas meta para la codificación.
  111.  
  112. echo -e "\r\n\r\n\r\n"
  113. Añade el fin de la petición para que el navegador carge la página y rompe el netcat.
  114.  
  115. */


Hice un scraper cutre para ver los últimos mensajes del foro en el Android.

Se le puede meter el runable como servicio y arrancar al inicio para tenerlo 24/7. Hacer un intento desde un broadcast reciber, meterle un systemclock.pause, cambiar el netcat y demás por sockets, mostrar el código en una preview con notificaciones o en plan widget o ventana... También podeis meterle una interfaz de javascript y controlar el navegador desde el netcat con la interfaz, el pseudoprotocolo, el xhr y el eval. Por ejemplo podrías darte un llama cuelga automáticamente desde un Android a otro cuando alguien publique un nuevo tema en un foro que te interesa xD

Puedes también enchufarle por pseudoprotocolo etiquetas style a lo bruto después del for
tags+=\"<style>td{border-left: 3px solid red;background-color:lightgrey;}</style>\";

Puede reusar la misma metodología para enviar forms, o hacer otras tareas con javascript en otras páginas.

Igual más alante lo mejoro para que se pueda automatizar con interfaz en múltiples páginas.
602  Programación / Desarrollo Web / Re: javascript Number.isInteger(10.0) retorna false en: 1 Mayo 2020, 22:36 pm
En tu ejemplo no tienes posPx definido en ningún sitio.

Haz un: alert(typeof(this.posPx[1])); justo antes del if, a ver si es un número o un objeto, o algo distinto.
Si usas por ejemplo new Number(10) estás creando un objeto, no un tipo number primitivo.
Ten cuidado con tu código y las conversiones implícitas. Estaría bien que pusieras todo el código si no es excesivamente grande para poder ver cual es el problema.


Probablemente si haces esto:
posPy[1] = +(posPy[1].toFixed(1));
se te solucione.
603  Programación / Desarrollo Web / Usar react offline? en: 1 Mayo 2020, 19:11 pm
Hola, estoy intentando correr React offline y no tengo nada claro cual es el problema.

En su web tienen estos script src:
<script src="https://unpkg.com/react@16/umd/react.development.js" crossorigin></script>

<script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js" crossorigin></script>

Entonces accedí a cada link y usando este programa:
https://github.com/StringManolo/Smpider/blob/master/shortVersion.js

seleccioné el innerHTML de los pre tag de los links y me los descargué como 2 archivos. reactDev.js y reactDevDom.js

Utilicé un ejemplo que tienen en la web y substituí los valores de ambos atributos src por la ruta de los nuevos archivos.

Por último hice un servidor en node.js para responder al navegador con los content-type en la cabecera.

Hago un url.parse con el módulo url y en base a la extensión escribi el content type adecuado.
Algo así:
Código
  1. if (pathname.substr(pathname.length-3 == ".js") {
  2. response.writeHead(200, { "Content-Type": "text/html"});
  3. } else {
  4. response.writeHead(200, { "Content-Type": "text/javascript"});
  5. }
  6. response.write(contenidoArchivo);

Probé varios content-type en lugar de text/javascript, no sé si estará ahí el error.


Cuando cargo el index.html simplemente no carga el botón que se supone que tiene que cargar.

El ejemplo es este de carga react en un minuto con las etiquetas script.
https://reactjs.org/docs/add-react-to-a-website.html



Básicamente quiero poder desarrollar offline y cachear las libs para que con mi caca internet no tarde 5 minutos en descargar las libs cada vez que abra una app en el navegador.
 
604  Comunicaciones / Redes / Re: ¿Estoy abriendo los puertos? en: 1 Mayo 2020, 06:23 am
Hola, para comprobar si abriste los puertos puedes utilizar el netcat.

Instalas el netcat, abres la consola de comandos o la terminal y escribes:
netcat -v -l ipPublica/ipLocal -p puerto

Minimizas, vas al navegador y escribes:
ip:puerto

Por ejemplo:
consola:
netcat -v -l -k 192.168.30.1 -p 9191

navegador:
http://192.168.30.1:9191

Tras escribir en el navegador, debería llegarte al netcat(consola) info sobre el navegador como el idioma, el userAgent, etc.

Pd: Algunos proveedores de internet no te habilitan a abrir puertos por seguridad. A mi lla me pasó que abrí los puertos correctamente en el router y poniendo un programa a la escucha en dicho puerto y dirección ip, y tras analizar con varios scanner se mostraban como cerrados. Tuve que llamar al servicio técnico para que me permitieran abrir cualquier puerto.
Ya hace de esto, me imagino que ahora ya no lo hacen, pero nunca se sabe.
605  Programación / Desarrollo Web / Re: Agregar evento onlick via javascript en: 1 Mayo 2020, 06:15 am
Tal y como me vendes react te lo compro!
Me gustaría masterizar vanilla primero, tiene muchísima API que aún no toqué casi nada o nada, como la de de audio, funciones en smartphones como la de vibrar... También estaba dando prioridad a webassembler porque se me empiezan a quedar los programas muy cortos de rendimiento. El DOM va mal mal a poco que haces. Incluso con un simple requestAnimationFrame escribiendo en un textarea letras con colores, a los 200 caracteres ya me caen los frames a la mitad. No puedo escribir en el DOM archivos de pocos megas... Me limita bastante en mis proyectos.
606  Programación / Scripting / Re: ¿Como hacer para corregir lineas de texto extraidas de un pdf? en: 1 Mayo 2020, 05:46 am
No la probé pero creo que la forma de unsigned es mejor.

Te hice un código para que guardes como html y lo uses para quitar los espacios. Copias el código, lo guardas como espacios.html y lo abres en el navegador. Pengas dentro del area el texto, de das al botón y ya te los quita. Después click derecho y seleccionar todo.
También te dejé entre comentarios /* */ para quitar los saltos de linea. Si borras /* */ ya te quita también los saltos de línea. Si tiene más de 10 espacios consecutivos dale varias veces al botón xD.

Código
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <style>
  6. textarea {
  7.  width: 99%;
  8.  height: 600px;
  9.  overflow: scroll;
  10. }
  11. </style>
  12. </head>
  13. <body>
  14. <button type="button" id="xD2">Quita Espacios</button>
  15. <br />
  16. <textarea id="xD" placeholder="Pon aquí tu texto">          10
  17.         9
  18.        8
  19.       7
  20.      6
  21.     5
  22.    4
  23.   3
  24.  2
  25. 1
  26. 0</textarea>
  27. <script>
  28. var ta=document.querySelector("#xD");
  29. document.querySelector("#xD2").onclick=function(){ta.value=Formatear(ta.value)};
  30.  
  31. function Formatear(texto) {
  32.  return texto/*.replace(/(\r\n|\n|\r)/gm,"")*/
  33. .replace("          "," ")
  34. .replace("         "," ")
  35. .replace("        "," ")
  36. .replace("       "," ")
  37. .replace("      "," ")
  38. .replace("     "," ")
  39. .replace("    "," ")
  40. .replace("   "," ")
  41. .replace("  "," ")
  42.  
  43. }</script>
  44. </body>
  45. </html>
607  Programación / Desarrollo Web / Re: Agregar evento onlick via javascript en: 1 Mayo 2020, 05:11 am
Yo llevo 1 mes entrándole a vue.js de forma esporádica y la impresión que tengo hasta el momento es que es prácticamente un lenguaje nuevo. A mi personalmente no me gustan nada los frameworks, son muy a alto nivel para mi gusto.
Probablemente puedas aprender a programar en vue directamente sin manejar nada de javascript. Entiendo todas las ventajas que ofrece, sobre todo en enfoque comercial.
608  Programación / Desarrollo Web / Re: Conversiones/casteos y coerciones de tipos en javascript por StringManolo en: 1 Mayo 2020, 05:07 am
Muchas gracias. Coincido con lo que dices. Yo me animaría mas a probar un set más pequeño que un superset. Ya tiene bastante chicha js de por sí, aunque typescript parece que añade cosas bastante útiles para quien venga de otros lenguajes.


Una de las cosas que peor llevo es distribuir bien los programas. Suelo acabar mezclando todo a pesar de hacer mucha función pura o encapsular la funcionalidad. Creo que el lenguaje invita bastante a atajar en lugar de escribir más código para que quede todo más isolado.
609  Programación / Desarrollo Web / Re: Agregar evento onlick via javascript en: 1 Mayo 2020, 04:54 am
Es mejor usar addEventListener. Te permite elegir como manejar la dispersión del evento y al contrario que onclick puedes adjuntar un evento a cualquier elemento del DOM. addEventListener también te permite añadir múltiples eventos iguales en un bucle o en una llamada recursiva utilizando la sintaxis de la función anónima flecha para definir el callback en lugar de una función anónima clásica. En caso de que usases la función anónima clásica, se descartarán totalmente los eventos añadidos a posteriori por considerar que ya se añadieron.
A parte que, si volvieses a asignarle al evento onclick una función, sobrescribirías el evento anterior. Ej:
Código
  1. btnlevel.onclick=function(){alert(1)};
  2. btnlevel.onclick=function(){alert(2)};

Se imprime solo el alert(2) porque sobrescribes/reasignas el método onclick del botón.


Código
  1. btnlevel.onclick=function(){alert(1)};
  2. btnlevel.addEventListener("click", function(){alert(2)});

Ahora en cambio se ejecutan alert(1) y alert(2) porque ya no sobrescribiste el evento onclick, si no que añadiste un nuevo evento.

Lo mejor es utilizar siempre que tengas dudas addEventListener para no sobrescribir eventos sin querer dada la naturaleza de que es sencillo que por hoisting de alguna referencia se te ejecute primero un addEventListener y después el onclick sobrescribiendo todo evento asignado al boton.
También es la opción más segura a la hora de trabajar con librerías y código de tercera y también es la forma recomenda por diversos estandares.

En caso de que forzosamente necesites pasar una función sin que se ejecute auto en el onclick sin wrapear en funciones anónimas, puedes pasarle una referencia.

Código
  1. function AlPulsarBoton() {
  2. alert(1);
  3. alert(2);
  4. }
  5.  
  6. bttnlevel.onclick=AlPulsarBoton;


PD: espero que sea solo por practica o fines didacticos, porque en el mundo real nadie usa js asi a tan bajo nivel, para eso estan los frameworks frontend, como Vue, React, Angular o Svelte. Si nunca usaste uno y te interesa dar el siguiente paso, te recomiendo empezar por Vue.
Qué es javascript a bajo nivel aquí?

js bajo nivel en navegador para mi sería compilar en runtime a webassembler, crear gráficos con webgl, manejo de video en canvas, paralelismo con workers...

No sé que es tan complejo de crear un elemento, ponerle un string de id y arrancar un juego pasándole como paramátro un string xD
610  Programación / Programación C/C++ / Re: error en lectura de un txt en c++ en: 1 Mayo 2020, 02:25 am
Pon el error exacto. getline está definido en la biblioteca std string. #include <string>
Páginas: 1 ... 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 ... 287
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines