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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Comunicaciones
| |-+  Dispositivos Móviles (PDA's, Smartphones, Tablets)
| | |-+  Android
| | | |-+  Scraper cutre de los mensajes recientes del foro.Java, Js, Ncat, WebView, Termux
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Scraper cutre de los mensajes recientes del foro.Java, Js, Ncat, WebView, Termux  (Leído 1,805 veces)
@XSStringManolo
Hacker/Programador
Colaborador
***
Desconectado Desconectado

Mensajes: 2.399


Turn off the red ligth


Ver Perfil WWW
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.


En línea

Mi perfil de patrocinadores de GitHub está activo! Puedes patrocinarme para apoyar mi trabajo de código abierto 💖

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Número de mensajes recientes...
Sugerencias y dudas sobre el Foro
Bijomaru 4 2,524 Último mensaje 22 Julio 2007, 18:20 pm
por T0rete
Quitar offtopic de mensajes recientes -parte inferior del foro
Sugerencias y dudas sobre el Foro
usuario oculto 2 2,906 Último mensaje 13 Octubre 2010, 19:14 pm
por invisible_hack
Uso webview android
Programación General
kakashi20 3 2,674 Último mensaje 23 Agosto 2014, 07:57 am
por vladek
scraper
Desarrollo Web
matti 2 1,941 Último mensaje 25 Febrero 2018, 11:58 am
por srWhiteSkull
¿Link a Mensajes recientes?
Sugerencias y dudas sobre el Foro
Tachikomaia 7 4,166 Último mensaje 17 Febrero 2021, 15:09 pm
por el-brujo
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines