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

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


  Mostrar Mensajes
Páginas: 1 ... 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 ... 287
171  Comunicaciones / Hacking Mobile / Re: Xiaomi Hard brick, solo vibra, no fastboot, etc SOLUCION Actualizada en: 31 Marzo 2021, 18:51 pm
Muy bueno! El bypass también sirve para otros SmartPhones que usen el mismo chip MediaTek.
Probaste antes con cable a hacer Deep-Flash?
172  Foros Generales / Foro Libre / Re: Son realmente necesarias las matemáticas para la programación? en: 31 Marzo 2021, 18:35 pm
Yo se 0 matemáticas. Un adolescente de 14-15 años sabe bastantes más matemáticas que yo y hasta el momento no me encontré ningún obstáculo programando por culpa del inmenso socabón de skills que tengo en matemáticas.

Pobablemente aunque no supiese ni sumar, podría programar sin limitaciones. La propia programación es una herramienta que entre otras cosas permite realizar operaciones matemáticas. Asique aun sin saber sumar podría programar una función que lo haga por mi.

Las matemáticas te serán útiles si el propio programa que desarrollas las necesita. Por ejemplo si estás programando el gps de un coche, es obvio que necesitas trigonometría para triangular la posición, calcular el tiempo que tarda la señal para crear un area en todas direcciones en base a la velocidad que va el vehículo y por tanto el area en el que sí o sí se va a encontrar, etc.

Entonces depende de lo que programes si te es útil o no.
Si vas a hacer un programa para decorar casas, pues probablemente necesites aprender algo de decoración...
Puedes programar sin saber decoración? Depende de que programa hagas...

Es imprescindible saber matemáticas para programar? No.
Es imprescindible saber matemáticas para programar el sistema de un avión? Sí.
Es imprescindible saber matemáticas para hacer una red social como facebook y hacerte billonario? No.

La exigencia del autocambiante mundo de la programación te hace desarrollar aptitudes para la adquisición de nuevas habilidades con más facilidad y en menos tiempo de forma constante.

El mundo del desarrollo está lleno de gente con maestría en matemáticas. Hay muchos más ámbitos en el que un desarrollador puede brillar. Si el tiempo invertido por otros en matemáticas tu lo invertiste en diseño y programación de interfaces...
173  Programación / Desarrollo Web / Re: [javascript] Métodos map, reduce y filter explicados. Extendiendo String para añadirle map. en: 31 Marzo 2021, 05:11 am
Ohhh, es bastante más smart usar un solo map en forma de función para cada tipo de dato. Por qué no harían eso?
174  Comunicaciones / Android / Crear APKs en Termux en: 31 Marzo 2021, 04:18 am
Crear APKs en Termux
Siempre he querido programar apks (el .exe de android) directamente en Android. Tras varias búsquedas a lo largo del tiempo encontré una forma de crear apks usando comandos. Tanto Java como Kotlin son lenguajes que no me entusiasman precisamente asique he desarrollado un script en javascript y un par de repos para poder construir la apk a partir de una url o una carpeta con archivos html, css, js y demás de tal forma que no tengas que tocar ni una sola linea de código de java, kotlin, xml, etc. No es nada complejo, solo tienes que correr 2 comandos.

Instalación
Mi script utiliza unos cuantos paquetes de Termux:
  Quickjs
  Git
  Aapt
  Apksigner
  Dx
  Ecj
  Curl
  buildAPKs

Hice un commando para que simplemente lo copies y pegues, te deja todo listo. Si acabas de descargarte termux, corre termux-setup-storage antes de nada. Si ya tenías acceso a la carpeta storage no hace falta.

Aquí el comando:
Código:
yes | pkg install quickjs git aapt apksigner dx ecj curl; curl -O https://raw.githubusercontent.com/BuildAPKs/buildAPKs/master/setup.buildAPKs.bash && yes | bash setup.buildAPKs.bash && cp ~/buildAPKs/scripts/bash/build/build.one.bash ~/../usr/bin/ && chmod +775 ~/../usr/bin/build.one.bash; git clone https://github.com/StringManolo/APKGenerator && cd APKGenerator
La instalación va a crear un par de apks para comprobar que todo funciona. Si te pide permisos para poder levantar termux en segundo plano, te recomiendo aceptarlo ya que te puede ser útil en el futuro cuando hagas o corras algún programa que lo necesita. Cuando finalice la instalación ya podrás crear tu app de Android utilizando APKGenerator

Creando la apk
El método de creación es muy sencillo. Tienes 2 comandos para elegir la fuente que se utilizará para generar la app, desde una url o desde una carpeta con tu index.html, estilos.css, codigo.js, etc.
Para crear desde una url, corre el comando
Código:
qjs --std APKGenerator.js -u https://example.com -n com.example.miApp -t Example
Para crear desde carpeta pon
Código:
qjs --std APKGenerator.js -a myAssets -n com.example.miApp -t Example
En este caso se usará la carpeta myAssets que ya se descargó con un index.html, un archivo css y uno javascript para que no tengas que crearlos a mano en caso de que vayas a programar una web de 0. El único requisito es que el archivo se llame index.html.
La única diferencia entre ambos comandos es el primer agumento, que indica si usar una url o una carpeta.

El argumento -n es el nombre del paquete. Es una convención usar un dominio si tienes uno. Esto sirve para que Android sepa diferenciar entre apps que se llamen igual. Puedes poner el nombre que quieras en caso de no tener un dominio.

El argumento -t es el título de la app. Será el nombre que vea el usuario al instalar la app.

Creando desde url
Cuando creas la apk desde una url, se crea un navegador sin barra de direcciones (webview) que va a visitar esa url al abrirla. Todas las peticiones realizadas por el webview incluyen la cabecera HTTP X-Request-With: nombre.del.paquete asique puedes utilizar esta información para servir una versión especial de tu sitio web cuando se te solicite al servidor la web con esta cabecera. Obviamente necesitas internet para que funciones la app. En futuras versiones añadiré caché al webview y un script para cachear tu sitio, así podrás cargar tu sitio web sin conexión a internet.

Creando desde carpeta
Cuando creas desde carpeta esta es añadida a la apk por lo que funciona totalmente offline. Tendrás que manejar tu las actualizaciones de la app para que el usuario pueda actualizar la web. También puedes añadir un script online a la web para encargarte de ello. Recomendado también que utilices la push notifications api de javascript si provees otra forma de actualizarla.

Cambiando archivos de la apk
Cuando realices cualquier tipo de cambio tendrás que generar una nueva apk. Para ello ve a la carpeta de tu proyecto por ejemplo com.example.miApp/src/main y corre el comando build.one.bash
La apk generada se incluye en la carpeta del proyecto (para debug con herramientas si lo necesitas) y en la carpeta Download/builtAPKs para instalar/distribuir. Puedes visitar el repositorio del proyecto en github si desear ver el código, reportar algún fallo, solicitar alguna característica o contribuir en el proyecto. APKGenerator
175  Programación / Desarrollo Web / [javascript] Métodos map, reduce y filter explicados. Extendiendo String para añadirle map. en: 31 Marzo 2021, 02:46 am
Map, reduce y filter
A muchos programadores les cuesta entender o encontrar uso para el método
Código
  1. .map()
En este post vamos a programar el método, así podrás entender exactamente que es.

map
Para no ensuciar el array de javascript, vamos a crear una nueva versión del array extendiendo la clase.
Código
  1. class CustomArray extends Array {
  2.  map() {
  3.    return "metodo custom";                                              
  4.  }
  5. }

Ahora tenemos 2 clases array iguales. La de javascript y la nuestra. La nuestra es casi igual que la de javascript, solo cambia el método map.
Puedes comprobar que funciona con el siguiente código
Código
  1. class CustomArray extends Array {
  2.  map() {
  3.    return "metodo custom";
  4.  }
  5. }
  6.  
  7. let numeros = new CustomArray(1, 2, 3); // Crea un array custom
  8. let numeros2 = [1, 2, 3]; // Crea un array normal
  9. numeros.map( num => num + 1); // "metodo custom"
  10. numeros2.map( num => num + 1); // 2, 3, 4

En la primera llamada a map (nuestro método custom) no pasa nada especial porque nuestro método no tiene definido que acepte ningún parámetro, asique se ejecuta el método sin más ignorando los parámetros. En cambio en la segunda llamada a map (el .map() original de javascript) se toma la función como argumento y se le suma 1 a cada elemento del array.

Una función que se pasa por parámetro a otra función/método (con intención de que se ejecute dentro de la función llamada) se le conoce como callback.                                                               
Vamos a hacer que nuestro método acepte una función y la llame:
Código
  1. class CustomArray extends Array {
  2.  map(callback) { // acepta un parametro cualquiera
  3.    return callback("metodo custom"); // llamalo pasandole el texto como argumento
  4.  }
  5. }
  6.  
  7. let numeros = new CustomArray(1, 2, 3); // Crea un array custom
  8. let numeros2 = new Array(1, 2, 3); // Crea un array normal
  9.  
  10. numeros.map( num => num + 1 ); // "metodo custom1"
  11. numeros2.map( num => num + 1 ); // 2, 3, 4

Así añadimos el callback. Aceptamos que se pase una función como argumento de map, llamamos la función que se pasa usando nombreArgumento(); y le pasamos al argumento un argumento en la llamada tal que nombreArgumento("método custom");
Actualmente nuestro map solo añade 1 a nuestro texto, pero el objetivo es que sume 1 a todos los elementos del array. Para ello usaremos this para acceder al CustomArray y sus elementos:
Código
  1. class CustomArray extends Array {
  2.  map(callback) {
  3.    return callback(this);
  4.  }
  5. }
  6.  
  7. let numeros = new CustomArray(1, 2, 3);
  8. let numeros2 = new Array(1, 2, 3);
  9.  
  10. numeros.map( num => num + 1 ); // "1, 2, 31"
  11. numeros2.map( num => num + 1 ); // 2 , 3, 4

Al usar this como parámetro del callback accedemos al array y como no.se pueden sumar arrays y números, javascript opta por un tipo intermedio entre ambos que se pueda sumar, sumándose los strings "1, 2, 3" + "1". Lo que hace map es llamar a la función que le pasamos sobre cada elemento y nos retorna un array con los resultados. Asique acabamos el map con:
Código
  1. class CustomArray extends Array {
  2.  map(callback) {
  3.    for (let i = 0; i < this.length; ++i) {
  4.      this[i] = callback(this[i])
  5.    }
  6.    return this;
  7.  }
  8. }
  9.  
  10. let numeros = new CustomArray(1, 2, 3);
  11. let numeros2 = new Array(1, 2, 3);
  12.  
  13. numeros.map( num => num + 1 ); //2, 3, 4
  14. numeros2.map( num => num + 1); //2, 3, 4
Ya conseguimos crear nuestra versión del método map. Map es un método de los arrays, por lo que no puedes usarlo con otras clases como String.
Puedes modificar el código para extender la clase String y añadirle el método map:
Código
  1. class CustomString extends String {
  2.  map(callback) {
  3.    let aux = "";
  4.    for (let i = 0; i < this.length; ++i) {
  5.      aux += callback(this[i])
  6.    }
  7.    return aux;
  8.  }
  9.  
  10. }
  11.  
  12. const texto = new CustomString("hola");
  13.  
  14. texto.map(letra => letra + 1) // "h1o1l1a1"

Creo que queda claro que hace exactamente map. Aplica la funcion que le pasamos a cada elemento y nos retorna el resultado.
Es el mismo efecto que si hiciésemos:
Código
  1. let arr = [1, 2, 3];
  2. let auxiliar = [];
  3. const suma1 = argumento => argumento + 1;
  4.  
  5. auxiliar.push( suma1(arr[0]) );
  6. auxiliar.push( suma1(arr[1]) );
  7. auxiliar.push( suma1(arr[2]) );
  8.  
  9. console.log(auxiliar) // 2, 3, 4


reduce
El método reduce es prácticamente igual que map, pero en lugar de devolver todos los elementos devuelve solo el resultado de operar con ellos.
Código
  1. let numeros = [1, 2, 3];
  2. numeros.reduce( (res, num) => res + num); // 6
El código también es muy similar al de map, trata de realizar tu propia implementación y jugar pásandole distintos parámetros. Recuerda que estos ejemplos son básicos. Los métodos map, reduce y similares son más completos que estas implementaciones, puedes consultar algunos polyfills para hacerte una idea más cercana a todo lo que hace cada método.

filter
Con filter en lugar de retornar el resultado, se retorna o no el elemento del array dependiendo de si la condición que indiques se cumple o no. Por ejemplo puedes filtrar los elementos de un array para obtener solo los números pares:
Código
  1. let numeros = [1, 2, 3];
  2. numeros.filter( num => num % 2 == 0 ); // 2

Recuerda que se retorna un nuevo array, el original no es modificado.
176  Comunicaciones / Android / Como hacer público un servidor web express sobre node en arch linux termux android sin root. en: 31 Marzo 2021, 01:51 am
Como hacer público un servidor web express sobre node en arch linux termux android sin root.

1 - Instalar termux.
Puedes instalar termux directamente desde la PlayStore https://play.google.com/store/apps/details?id=com.termux

Si tu dipositivo no tiene PlayStore puedes descargar Termux en el siguiente enlace https://apps.evozi.com/apk-downloader/?id=com.termux

2 - Configurar Termux
Abre la app, escribe el comando termux-setup-storage y dale enter.
Te recomiendo también instalar los siguientes paquetes que utilizo para facilitar la instalación:
Código:
pkg install vim
pkg install quickjs
pkg install g++
pkg install nodejs                                                    
pkg install git
pkg install make
                                                                                                                         
Y también instalar el repo pointless donde se da soporte a paquetes como mongodb que no están disponibles directamente en los repos de Termux.
Código:
curl https://raw.githubusercontent.com/its-pointless/its-pointless.github.io/master/setup-pointless-repo.sh -o ~/../usr/spr.sh && cd ~/../usr/ && chmod +775 spr.sh && ./spr.sh && rm spr.sh
                     

3 - Instalar Arch Linux usando proot                                  
Proot emula las carpetas y utiliza algunos trucos para poder instalar una distribución de Linux sin necesidad de rootear. Escribe el siguiente comando y dale enter.                                                
Código:
pkg install proot && pkg install proot-distro && proot-distro install archlinux && proot-distro login archlinux
Aquí tienes más información si tienes curiosidad. https://wiki.termux.com/wiki/PRoot

4 - Añadir extensión a la Shell                                        
Nota: Este paso es totalmente prescindible. Es un programa que hice yo para manejar de forma más cómoda la shell y diferenciarla de otras. Vete al punto 5 si no te interesa.

Veras que cambia el mensaje de consola indicando que ya estás en Arch Linux [root@localhost]. El siguiente paso que voy a realizar es descargar una extensión para bash que trae atajos y otras utilidades. Este paso es opcional. Para instalar la extensión corre el comando:
Código:
curl https://raw.githubusercontent.com/StringManolo/SMBSE/main/.bashrc -o .bashrc && source .bashrc
Como utilizo este programa en distintos sistemas, incluyendo el propio termux, voy a modificar el archivo para que me muestre el nombre del sistema actual para el usuario root.
Corre el comando
Código:
v .bashrc && source .bashrc
Para que se abra el archivo a editar
Si ahora escribes /PS1 y presionas enter, se te movera el archivo a la parte del documento donde hay un código tal que:
Código:
PS1='\n\n${underlinedarkgray}${darkgray}(${blue}$(date +%H${darkgray}:${blue}%M${darkgray}:${blue}%S${darkgray}:${blue}%4N)${darkgray}) ${gree
n}$(pwd)${endc}\n> ';

Ahí voy a sustituir ${underlinegray} por ${darkblue}Arch Linux ${endc}
Si no sabes usar vim puedes borrar esa linea y pegar esto:
Código:
PS1='\n\n${darkblue}Arch Linux ${endc}${darkgray}(${blue}$(date +%H${darkgray}:${blue}%M${darkgray}:${blue}%S${darkgray}:${blue}%4N)${darkgray}) ${green}$(pwd)${endc}\n> ';

Para borrar la linea con vim posiciona el cursor encima del primer PS1=... y presiona dos veces la tecla d
Después manten pulsado el botón en el centro de la pantalla para que salga la opción de pegar.
El resultado tiene que quedar tal que:
Código:
# Custom Console                                                      
SMBSE_LOGME 'Setting PS1 and PS2 terminal indicators'
PS1='\n\n${darkblue}Arch Linux ${endc}${darkgray}(${blue}$(date +%H${darkgray}:${blue}%M${darkgray}:${blue}%S${darkgray}:${blue}%4N)${darkgray}) ${green}$(pwd)${endc}\n> ';
#PS1='\n\n[${blue}$(date +%H${endc}:${blue}%M${endc}:${blue}%S${endc}:${blue}%4N)${endc}] ${green}$(pwd)${endc}\n${blue}>${endc} '
PS2='${blue}.${endc}  ';

Una vez está así escribe :x
Y presiona enter para guardar los cambios.
Te quedará el mensaje de consola tal que:
Código:
Arch Linux (17:41:26:1553) /root
>

5 - Crear servidor con express y node.
Crea una carpeta para el servidor.
Código:
mkdir /srv/http/myNodeServer && cd /srv/http/myNodeServer
Crea el proyecto del servidor con el comando npm init
Rellena los datos que quieras. Yo solo he puesto archnode y presionado enter repetidamente.

Añade express al proyecto con el comando
Código:
npm install express

Modifica el código del servidor remplazando stringmanoloarch.tk por tu dominio en el siguiente comando (si es un comando) antes de correrlo:
Código:
echo 'const fs = require("fs");
const http = require("http");
const https = require("https");
const privateKey  = fs.readFileSync("/etc/letsencrypt/live/stringmanoloarch.tk/privkey.pem", "utf-8");
const certificate = fs.readFileSync("/etc/letsencrypt/live/stringmanoloarch.tk/fullchain.pem", "utf-8");
const ca = fs.readFileSync("const ca = fs.readFileSync("/etc/letsencrypt/live/stringmanoloarch.tk/chain.pem", "utf8");



const credentials = {key: privateKey, cert: certificate, ca: ca};
const express = require("express");
const app = express();

const cli = {};
for (let i in process.argv) {
  switch(process.argv[i]) {
    case "-p":
    case "--port-http":
      cli.port = process.argv[1 + +i];
    break;

    case "-p2":
    case "--port-https":
      cli.portHttps = process.argv[1 + +i];
    break;

    case "--host":
      cli.host = process.argv[1 + +i];
    break;
  }
}


if (!cli.port) cli.port = 8080;
if (!cli.portHttps) cli.portHttps = 8443;
if (!cli.host) cli.host = "127.0.0.1";

app.use(express.static("public"));

const httpServer = http.createServer(app);
const httpsServer = https.createServer(credentials, app);

httpServer.listen(cli.port);
httpsServer.listen(cli.portHttps);' > index.js

Crea también la carpeta desde la cual se serviran los archivos con el comando mkdir public y mete dentro una web de ejemplo tal que:
Código:
mkdir public && echo 'Hello!' > public/index.html

6 - Crea un dominio con freenom.
Ve a la web https://my.freenom.com/clientarea.php?action=domains registrate y crea un nuevo dominio.
Una vez loggeado dentro vete al apartado dominios https://my.freenom.com/domains.php e introduce ahí el nombre de dominio que quieras. Por ejemplo yo usaré stringmanoloarch.tk muchos nombres ya están siendo utilizados o no se pueden registrar gratuitamente, pero si poner tu nombre y una palabra por ejemplo, seguro que está disponible. Dale a chekout para confirmar la adquisición del nuevo dominio y en el menu desplegable donde dice 3 Months free cámbialo a 12 Months free. Marca la casilla para aceptar condiciones y términos y dale a Complete Order.
Ahora si vas al apartado https://my.freenom.com/clientarea.php?action=domains ahí tienes tu nuevo dominio para gestionarlo.

7 - Crear certificado.
Actualiza el sistema y los paquetes con el comando
Código:
pacman -Syu
Di que sí a las opciones de remplazo que te pregunte escribiendo y
Instala certbot
Código:
pacman -S certbot
Acepta la instalación escribiendo y

Genera un certificado manualmente con el comando
Código:
certbot certonly --manual --preferred-challenges dns
Te pedira el dominio, pon el que registrate en freenom.
Es posible que te pida el correo, introduce tu correo.
Escribe y para aceptar los terminos de uso
Escribe n para no compartir tu email publicamente

Entonces te saldrá un mensaje diciendo que demuestres que tienes control sobre el dominio de freenom con un registro TXT.
Para ello haces lo siguiente:
Ve a https://my.freenom.com/clientarea.php?action=domain
Pincha en manage freenom dns.
Pincha en edit nameservers.
Selecciona use default nameservers y pulsa en change nameservers.
Vuelve otra vez a darle en manage nameservers y ahora podrás agregar registros DNS a los servidores de freenom.

En el primer apartado pon el nombre del registro que indica certbot. En mi caso es _acme-challenge.stringmanoloarch.t
En el segundo apartado selecciona TXT como tipo de registro.
El tercer apartado (3600) no hace falta que lo cambies.
En el cuarto y último, debes añadir la cadena de caracteres que indica el certbot, en mi caso algo tal que 0V8MBE1iGEcgljH3PIox8Od_XaI-7FvjJi-BkM3beJY

Dale a save changes.

Antes de darle a enter al certbot, espera unos segundos para que se haga el registro público.

Tras dar enter recibirás un mensaje tal que:
Código:
Waiting for verification...
Cleaning up challenges

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/stringmanoloarch.tk/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/stringmanoloarch.tk/privkey.pem
   Your certificate will expire on 2021-05-23. To obtain a new or
   tweaked version of this certificate in the future, simply run
   certbot again. To non-interactively renew *all* of your
   certificates, run "certbot renew"
 - If you like Certbot, please consider supporting our work by:


8 - Usando freenom como ddns.

Haz clone y make del siguiente script que renueva dominios y actualiza la ip dinámica
Código:
git clone https://github.com/mkorthof/freenom-script.git && cd freenom-script

Edita el archivo freenom.conf y añade tu email y contraseña de la cuente de freenom
Código:
v freenom.conf

Una vez finalices corre el siguiente comando con tu dominio, en mi caso es:
Código:
./freenom.sh -c freenom.conf -u stringmanoloarch.tk

Si vas a los registros de freenom podras comprobar que se generó un registro A para tu dominio.

Pon live tu servidor volviendo a la carpeta anterior con cd ../ y corriendo el comando:
Código:
node index.js

Por defecto usa el puerto 8080 para http y 8443 para https.

Puedes pasar los puertos como argumentos del commando, por ejemplo.
Código:
node index.js -p 8081 -p2 8444

Si tienes los puertos abiertos podrás ver la web en el puerto correspondiente y tu dominio, si usas https verás el candadito verde. En mi caso: https://stringmanoloarch.tk:8443/

Si los configuraste y no puedes ver la web, utiliza el comando nmap para comprabar si están abiertos o no:
Código:
nmap tuIp -p80,443

9 - Apertura de puertos.
La forma de abrir puertos difiere entre routers o tipos de redes. Por lo cual no te puedo decir exactamente como debes hacerlo tu.
Si usas wifi: La forma usual de hacerlo es revisando la parte inferior del router donde vienen el usuario, contraseña y la dirección del panel de administración del router. Suelen ser http://192.168.0.1 o http://192.168.1.1
Una vez consigas acceder, dentro tendrás que buscar el apartado que te permita abrir los puertos. El apartado suele tener varias opciones. Puerto externo, Puerto interno, protocolo del puerto, dirección ip local...
El puerto externo es el puerto que deben poner los usuarios que quieran ver tu web. El navegador omite los puertos 80 y 443 para http y https en las urls, asique son esos los que probablemente te interese abrir. En el protocolo del puerto selecciona TCP si tienes la opción. En dirección ip te pide la dirección ip local del computador. Esta opción es para que el router sepa a que dispositivo de tu red enviar la conexión. Puedes buscarlo en el propio panel del router o usar el comando ipconfig para ver la dirección. Suele empezar por 192... Ponla, guarda los cambios y debería estar todo listo.

En caso de que uses datos móviles tienes 2 opciones. Preguntar a tu operador o buscar por internet si es posible (en tu compañía) abrir puertos con datos. O utilizar el programa ngrok.
Sigue los pasos de configuración del programa en su web, crea cuenta y añade el identificador que te dan en la web al ngrok. Depués solo tienes que correr el servidor web (dejarlo abierto) y correr el comando
Código:
ngrok http 80
177  Comunicaciones / Hacking Mobile / Re: Xiaomi Hard brick, solo vibra, no fastboot, etc SOLUCION en: 30 Marzo 2021, 23:53 pm
La solución es quitarle la batería. O como está integrada si no quieres perder la garantía simplemente esperas hasta que se descarge totalmente y se apague por si solo. Una vez totalmente descargado le das un par de minutos más pa que se vacie la RAM y ya arranca solo.

De todas formas no es recomendable Rootear porque se pierde la garantía y porque se rompe la seguridad del sistema. Si necesitas Root para una aplicación te recomiendo abrir un post preguntando para una alternativa No-Root de esa aplicación y en la gran mayoría de casos se te podrá recomendar una alternativa que no suponga ningún riesgo.

PD: Aquí no hay rankings, esto no es stackoverflow ni se gana nada por contribuir en mayor o menos medida. Los que contribuimos lo hacemos por mantener la rueda del conocimiento girando y por agradecimiento con el sitio y la comunidad. Igual que el que recicla en su casa. No todos nos movemos por interés aunque cueste de creer.
178  Comunicaciones / Hacking Mobile / Re: Xiaomi Hard brick, solo vibra, no fastboot, etc SOLUCION en: 30 Marzo 2021, 14:26 pm
Por qué no lo pones directamente aquí en lugar de usar mesajes privados? Estás intentando infectar o estafar a usuarios del foro o cual es el motivo?

179  Foros Generales / Foro Libre / Re: 8.500 universitarias buscan su 'sugar daddy': "No es prostitución, es dar un braguetazo" en: 30 Marzo 2021, 02:03 am
Vive y deja vivir. A mi no me molestan. Si ambas partes son felices, yo que me alegro.
180  Programación / Desarrollo Web / Re: PHP pishing en: 28 Marzo 2021, 19:46 pm
Es obvia tu intención. Aquí no ayudamos a elaborar o perpetrar delitos. Aquí se enseña para dar herramientas al resto de usuarios del foro para protegerse a si mismos o a los demás. Ya que, si no sabes hacer una pistola, no puedes probar la efectividad de un chaleco antibalas con el objetivo de mejorarlo o añadir más medidas de protección que reduzcan el riesgo.
Páginas: 1 ... 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 ... 287
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines