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

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


  Mostrar Temas
Páginas: [1] 2
1  Programación / Programación C/C++ / ReadProcessMemory da resultados diferentes w7/XP en: 5 Julio 2010, 02:01 am
Hola, tengo una duda que la verdad me resulta un poco curiosa. El tema es este:

En mi aplicación(C++) tengo el siguiente código:

Código
  1. int x = ReadProcessMemory(....);
  2. int y = ReadProcessMemory(....);
  3. int div = (x*100)/y;
  4.  

Lo compilo (junto con el resto del código. Pongo éste porque se que es donde luego me falla) con VSC++ BETA y, bajo mi entorno w7 x64, me funciona bien. El tema es que cuando ejecuto el mismo exe en mi windows XP x86 el proceso se bloquea y queda colgado... he debugeado un poco y el error es en la parte de código de antes ya que las variables x e y cogen valores que nada tendrían que ser y causan problemas.

Después de ésto me he descargado en el windows xp el VSC++ Express y he puesto ese trozo de código para ver si era cuestión de tamaños de variables y que al leer no leyese lo mismo en x64 que en x86 (cosa que no le hubiera encontrado sentido), pero no, el caso es que el mismo código compilado con el express en windows XP leía correctamente de la memoria...

¿Alguna idea de que puede ser? :S

Gracias de antemano.
2  Programación / Programación C/C++ / Dependencias de aplicaciones MFC en: 3 Julio 2010, 18:26 pm
Hola, resulta que he acabado de hacer una aplicación utilizando las MFC y necesita de DLLs en tiempo de ejecución por lo que en otras maquinas que no tienen instalado VSC++ dará errores con las DLLs. El caso es que me decanté por incluir el visual c++ 2010 redistributable package que proporciona microsoft pero aún instalando esto sigue necesitando mas dlls :S (entre ellas mfc100ud.dll y msvcr100d.dll)

Hay alguna manera de encontrar todas las dlls que se necesitan en un instalador o de "meter" las dependencias en el ejecutable? Lo que quiero evitar es distribuir cada dll por separado... En el último caso creo que tendré que hacer mi propio instalador pero es algo que en un principio me gustaría evitar :S

Gracias!!

Lh: No hagas doble post, usa el botón modificar!

Ok, ya lo he solucionado. Dejo aquí la solución por si alguien tiene el mismo problema:

1) Propiedades->Configuration Properties->General y ponemos MFC static library
2) En el mismo configuration properties->C/C++->Code Generation->Multi-threaded (/MT)
3) Linker->Command Line y añadimos "/NODEFAULTLIB:LIBCMT"

Ahora se nos creará un solo ejecutable con todas sus dependencias. La verdad que me ha costado encontrar esta solución pero al final ha salido como quería  ;)

Saludos!
3  Programación / ASM / [?] call que no llama a quien debería (AT&T) en: 26 Mayo 2009, 19:43 pm
Hola, aquí estoy otra vez con el jodido ASM y la sintaxis AT&T :P El problema ahora es que el call llama a una zona de memoria que se la saca de la manga (se la inventa), el trocito de código es éste:

Código
  1. movl %0, %%eax"::"g"(tem)
  2. movl %%eax,%0"::"g"(buf)
  3. lcall *(%eax)"

tem es una variable que contiene la dirección de un buffer que posteriormente tengo que ejecutar, entonces le paso esa dirección a eax luego para asegurarme que eax contenía tal dirección lo comprobé pasando el valor que tenía a la variable buf y hasta aquí todo correcto, la memoria pues está en eax correctamente (supongamos que la memoria es 0x3d00000)... luego PORQUE cuando hago un call *(%eax) me salta con un error de memoria diciéndome que:
Citar
"La instrucción en "0x00405458" hace referencia a la memoria en "0xffffffff". La memoria no se puede "read".

0x00405458?? Pero si tenía que ser 0x3d00000  :huh: Alguien sabe que estoy haciendo mal? Porque vale que no sepa apenas nada de asm pero madre mía lo que me está dando por culo 4 lineas de nada xD

S4ludos y gracias!!  :-*
4  Programación / ASM / Errores de compilación de pasar de intel a AT&T en: 24 Mayo 2009, 15:38 pm
Buenas :-* Estoy pasando un pequeño código que usa la sintaxis de intel a AT&T pero hay uno que se me resiste:

Código
  1. __asm("movl  dword ptr args, %eax");

El error que me da el compilador del Dev C++ es:

Citar
junk `ptr args' after epresionje

He buscado por google pero no he encontrado nada de momento,

alguien tiene alguna idea?

Gracias!


P.D: No sé porque no sale bien el error :S Debería salir ex-pres-sion pero no sé porque se traduce a epresionje xD
5  Seguridad Informática / Nivel Web / Bypassear uploader en: 8 Mayo 2009, 22:05 pm
Buenas, pues veréis quería preguntaros si sabíais algún método para pasar un uploader que recoge el contenido del fichero imagen y lo envía vía post, al estilo:

-----------------------------24774838029815\r\nContent-Disposition: form-data; name="dsff"\r\n\r\n20\r\n-----------------------------24774838029815\r\nContent-Disposition: form-data; name="sdf"\r\n\r\n20/09/2004\r\n-----------------------------24774838029815\r\nContent-Disposition: form-data; name="dsfgsdf"\r\n\r\n\r\n-----------------------------24774838029815\r\nContent-Disposition: form-data; name="asdasda"\r\n\r\nAQUI UNA NOTICIA POR EJEMPLO.\r\n-----------------------------24774838029815\r\nContent-Disposition: form-data; name="dfgdfg"; filename="nombrearchivo"\r\nContent-Type: text/asp\r\n\r\n<%\nmpat=replace(Request.ServerVariables("PATH_TRANSLATED"),"/","\") Y seguiría con el contenido del archivo    



Como ven no sube el archivo "de golpe" si no que le su contenido y luego el lo renombra a jpg. Alguien sabe alguna manera para bypassear ésto y así subir una shell?

S4ludos!!
6  Seguridad Informática / Nivel Web / SQLI en MS Acces en: 4 Mayo 2009, 01:43 am
Hola, alguien sabe si hay algún método de adivinar las tablas de una BD MS Acces que no tenga information_schema?

Mi consulta actual es esta:
Citar
(SELECT+TOP+1+1+FROM+table)

Pero se me han acabado nombres posibles de tablas.


S4ludos y gracias!
7  Programación / Java / Llamar a una clase con jsp en: 11 Octubre 2008, 11:27 am
Hola, tengo un problema al llamar a una clase desde una página jsp. Aquí esta el código:

Código
  1. <jsp:useBean id="biblioteca" scope="page" class="GestioLlibres"/>
  2. <%
  3. Llibre[] elsllibres = biblioteca.getLlibres(false);
  4. %>
  5. <title>Untitled Document</title>
  6. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  7. </head>
  8.  
  9. <body bgcolor="#FFFFFF" text="#000000">
  10. <p align="center"><font face="Arial, Helvetica, sans-serif" size="2"><b>LLISTA DE LLIBRES DISPONIBLES A LA BIBLIOTECA</b>
  11. </font></p>
  12. <p>&nbsp;</p>
  13. <% if (elsllibres!=null) for (int n=0; n<elsllibres.length; n++) { %>
  14.  <%=elsllibres[n].getAutor()%>;<b><%=elsllibres[n].getTitol()%></b>
  15. <br>
  16. <% } %>
  17. </body>
  18.  
  19. </html>

Estoy utilizando resign por lo tanto la clase la tengo en WEB-INF/Classes. Pues bien siempre me da el mismo error:

[show] /prueba.jsp:2: cannot find symbol
symbol  : class GestioLlibres
location: class _jsp._prueba__jsp
      GestioLlibres biblioteca;
      ^
/prueba.jsp:2: cannot find symbol
symbol  : class GestioLlibres
location: class _jsp._prueba__jsp
      biblioteca = (GestioLlibres) pageContext.getAttribute("biblioteca");
                    ^
/prueba.jsp:2: cannot find symbol
symbol  : class GestioLlibres
location: class _jsp._prueba__jsp
        biblioteca = new GestioLlibres();
                         ^
/prueba.jsp:4: cannot find symbol
symbol  : class Llibre
location: class _jsp._prueba__jsp
Llibre[] elsllibres = biblioteca.getLlibres(false);
^
4 errors

He buscado bastante por google y nada... lo extraño es que es el código de un curso y (acaso que no haya escrito algo mal) no tiene porque haber fallos en la sintaxis.

S4ludos!
8  Programación / .NET (C#, VB.NET, ASP) / Espameando a fotolog en C# en: 22 Agosto 2008, 14:35 pm

  • Presentación
  • Conceptos básicos
  • Resumen de lo que haremos
  • Ver código por funciones
  • Despedida
Presentación
 
Hola a todos, bueno pues en este artículo os voy a intentar mostrar una de las maneras para crear un bot en C#. En este caso nuestra victima será la página fotolog ya que nos puede ser útil para hacer publicidad o cualquier cosa que os ocurra. No se pretende que ahora quede inservible la página o que este llena de bots ya que para eso os tendréis que saltar el captcha y es una cosa que no daremos aquí. Este artículo es, como siempre, de información para asegurar nuestras aplicaciones web contra estos programas. Dicho esto vamos a ver los conceptos básicos para luego entender todo lo que sigue.

Conceptos básicos
 
HTTPWEBREQUEST
 
Según Microsoft, la comenta de la siguiente manera:
 
La clase HttpWebRequest hace que se admitan las propiedades y los métodos definidos en WebRequest y que las propiedades y los métodos adicionales permitan al usuario interactuar directamente con servidores que utilicen HTTP.
 

Tengo que decir que esta clase sin su acompañante HTTPWebResponse no haría mucho en este artículo sólo que por comodidad y estética me referiré únicamente a HttpWebRequest [HWR].
 
Sistema de cookies en HWR
 
Un tema esencial para crear este tipo de bots es utilizar las cookies para navegar por los directorios del dominio logueado. En este punto puede crear confusiones de cómo realmente funcionan las cookies en esta clase por lo que intentaré explicarme lo mejor que pueda.
 
Primero de todo necesitamos declarar un “espacio” para guardar todas las cookies que necesitemos, en HWR es así:
 
Código
  1. CookieContainer misgalletas = new CookieContainer();
   
Ahora imaginemos que “misgalletas” es una jarra vacía, como esta:

Ya tenemos nuestra jarra vacía preparada para llenarla. Ahora tenemos que hacer saber a la petición, que se comunicará con el servidor, que tiene a su disposición una jarra donde puede guardar todas las cookies. Es decir, así:

Código
  1. peticion.CookieContainer = miscookies;

Ahora ya sabe  petición donde tiene que meter las cookies que le mande el servidor. La petición añadirá las cookies a la jarra de esta manera:

Código
  1. misgalletas.Add(peticion.Cookies);

Ahora ya tenemos en la jarra las cookies que nos mando el Server al loguarnos, un dibujo resumen:


Espero que aunque sea “bastante” malo se pueda entender xD Ahora ya sabemos (o eso espero) como se puede trabajar con las cookies.

Argumentos que puedes necesitar en una petición POST

En una petición POST aparte del header de la petición donde se encuentra el user-agent, content-lenght y demás hay a veces que el servidor necesita de argumentos para rellenar las variables[/FONT]. Aunque es algo bastante fácil haré un breve resumen de cómo se pueden obtener dichos argumentos. Ya que la idea es aprender el concepto y en cada servidor te puede pedir a rellenar variables distintas.

En este caso yo usaré mozilla firefox y el addon Tamper Data. El tamper lo podéis descargar de aquí:

https://addons.mozilla.org/en-US/firefox/addon/966

Este programa trabaja como un Proxy, es decir, estará entre el cliente (tu) y el servidor (la página) analizando el trafico http que haya y dando la posibilidad de modificar las cabeceras y los parámetros.

Para activar la herramienta (estando ya delante de su interfaz) le daremos a comenzar modificación y a partir de ahí en cada petición saliente nos dará 3 opciones; modificar, podremos cambiar los parámetros de envío, enviar, se enviará la petición por defecto y abortar petición.

Argumentos para la petición POST de logueo

Ahora necesitamos ponernos en la página de logueo del fotolog, es decir, esta:

http://account.fotolog.com/login


Una vez ahí activaremos nuestro tamper data “Comenzar modificación”. No cal poner ningún valor de momento. Ahora nos saldrán las 3 opciones y le damos a modificar. Dejo una screen para que veáis los datos que tenemos que tener en cuentra:


En verde tenemos el header de la petición, ahí de momento no nos sirve nada. En rojo tenemos los parámetros que tenemos que rellenar y como podemos observar estos son; redirect, u_name y p_word. Esto no hay que olvidar que son variables y que cuando hagamos la petición lo que realmente haremos será:

Código:
account.fotolog.com/login?redirect=&u_name=TUUSUARIO&p_word=TUPASSWORD

Esto lo digo porque después, al comenzar a escribir en C# los argumentos se escribirán de esa manera y lo que tendremos que hacer será formar una string con todo esto, por lo que no hay que olvidar el carácter “&” a partir de la segunda variable.

Argumentos para la petición POST para dejar un mensaje

Vamos a ver que argumentos tenemos que enviar junto con la petición. Dejaré ya directamente la screen del Tamper Data y pasaré a comentar un valor un tanto peculiar.


Vemos que aquí los parámetros son; ajax, t y message. Deducimos que message es el mensaje ya que he escrito “e” en el formulario :P, ajax tiene el valor de true por lo que podemos pensar que será algo así como una “variable boolean” (aunque ya te digo que siempre será true). El parámetro que nos puede resultar algo mas confuso es “t”.

Te explicaré como he hecho yo para sacar el valor y deducir que es así no perdemos tanto tiempo.
Lo primero que hay que hacer es mirar el código fuente de la página. Para eso vamos a mirar cualquier fotolog y observamos en el form de posteo lo siguiente:

Código:
<form id="gb_post_form" action="/gb.post" method="POST">
        <input type="hidden" name="t" value="vPhoYDt86DsIcXowvUvEja2GF+XP55ahtn0jBTqBcny6DkbhDZtEhSmrxVbXlhb6tILleUf4Ezr6LD5IdJ4G3K+0duMa5PaMUanZpRXNWhO25cn2qgW/WjCiMyQQtQGRhme6">
        <h3>Deja un mensaje en el libro de visitas:</h3>
        <div id="counter">&darr; <var>1500</var> caracteres restantes</div>
        <textarea name="message" rows="8" cols="40" id="guestbookMessage">   
        </textarea>       
        <div id="message_limit" class="limit">Límite de 1500 caracteres</div>       
       <div style="margin-top: .4em;">               
       <button class="btSubmit0" type="submit">Dejar tuMensaje</button>               
        <img src="http://si.fotolog.com/i67/images/icon_ajax_bar.gif" id="gbAjaxIndicator">       
</div></form> 

Como podemos observar hay un valor oculto en este form y precisamente se llama “t”. También vemos (yo ya lo he hecho) que si vamos a un fotolog distinto y miramos, tendremos otro valor de “t”, por lo que deducimos que este valor se asocia al fotolog a postear ya que si no el servidor no sabría en cual queremos postear. Cal decir que este valor cambia bastante rápido por lo que necesitaremos sacarlo en el momento del posteo mediante expresiones regulares.

Creo que habiendo leído esto ya entenderemos el código y como trabaja un poco el servidor.

Resumen de lo que haremos

Creo que antes de ponernos a ver código hay que pensar y estructurar un poco como vamos hacer las cosas.[/FONT]
 
La idea principal es que el programa sea autónomo y él solo vaya navegando por el fotolog sin que nosotros tengamos que interferir. Para eso vamos a partir de un fotolog cualquiera y a partir de ahí mediante expresiones regulares sacaremos los amigos de este y haremos esto todo el rato.

Sé que estaréis pensando “¿Y si alguien no tiene amigos agregados?” (Si no lo pensabais ahora tenéis esa duda así que xD) Bien, si alguien no tiene amigos nosotros daremos al programa unos cuantos fotologs de reserva que primeramente habremos mirado que tengan bastantes amigos agregados y en el caso que no encuentre en el fotolog que este mirando pasaremos a usar esos de “reserva”.

Teniendo mas o menos una idea ya creo que podemos pasar a ver el código.

Ver código por funciones:

Vamos a ver la función de logueo:

Código
  1. static CookieContainer sesion(string user, string pass)
  2.          {
  3.              //PASAMOS LAS PROPIEDADES A VARIABLES
  4.              HttpWebRequest peticion;
  5.              HttpWebResponse respuesta=null;
  6.              CookieContainer misgalletas = new CookieContainer();
  7.  
  8.              string url = "http://account.fotolog.com/login"; //Sitio donde enviaremos la petición.
  9.              string argumentos = string.Format("redirect=" + user + "&u_name=" + user + "&p_word=" + pass); //Los argumentos
  10.              byte[] encodearg = Encoding.ASCII.GetBytes(argumentos);//pasamos a bytes los argumentos
  11.              peticion = (HttpWebRequest)WebRequest.Create(url);//Creamos la petición a la url que indiquemos arriba            peticion.Referer = "http://www.fotolog.com"; //Ponemos un refer de fotolog por poner algo xd
  12.              peticion.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13"; //Le decimos al server que navegamos con el explorador Mozilla
  13.              peticion.AllowAutoRedirect = true; //Permitimos que nos redirecione ATENCIÓN aquí puede cambiar según el sistema de logueo pero en este caso si no lo permites no te loguea
  14.              peticion.CookieContainer = misgalletas; //Explicado
  15.              peticion.Method = "POST"; //El metodo sera POST y no GET
  16.              peticion.ProtocolVersion = HttpVersion.Version10; //Usaremos la version10
  17.              peticion.ContentType = "application/x-www-form-urlencoded"; //Códificamos los datos a enviar, aquí tener cuídado según el servidor tmb
  18.              peticion.ContentLength = encodearg.Length; //Calculamos el tamaño de los argumentos
  19.  
  20.              Stream canal = peticion.GetRequestStream();//Creamos un canal para el envio y recibo de datos con el servidor
  21.              canal.Write(encodearg, 0, encodearg.Length); //Enviamos datos
  22.              canal.Flush();
  23.              canal.Close(); //Limpiamos y cerramos
  24.  
  25.              try //INTENTAMOS OBTENER RESPUESTA
  26.              {
  27.                  respuesta = (HttpWebResponse)peticion.GetResponse(); //Cogemos lo que nos ha enviado el servidor
  28.              }
  29.              catch (Exception ex) //EN EL CASO DE NO SER POSIBLE...
  30.              {
  31.                  Console.WriteLine(ex.Message); //DEVOLVEMOS EL MENSAGE DE ERROR
  32.              }
  33.  
  34.              misgalletas.Add(respuesta.Cookies); //AGREGAMOS A LA "JARRA" LAS COOKIES GENERADAS
  35.  
  36.              respuesta.Close(); //Cerramos
  37.              return misgalletas; //Devolvemos las cookies generadas
  38.          }

El código esta comentado lo mejor que he podido, si hay alguna duda se pregunta y ya esta ;).

Ahora la función para sacar el valor de t:

Código
  1. static string t(string urls, CookieContainer miscookies)
  2.          {
  3.              HttpWebRequest hRequest = ((HttpWebRequest)WebRequest.Create("http://www.fotolog.com/"+urls));Creamos la petición al fotolog que nos pasaron como argumentos
  4.              hRequest.CookieContainer = miscookies; //Utilizamos la misma jarra que cuando el logueo ;)
  5.              hRequest.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13";
  6.              StreamReader reader = new StreamReader(hRequest.GetResponse().GetResponseStream()); //El canal para mantener la comunicación con el servidor
  7.              string devuelto = reader.ReadToEnd();//Aquí todo lo que nos ha respondido el servidor lo ponemos en un string
  8.              reader.Close();
  9.  
  10.              try
  11.              {
  12.                  //Conseguimos el valor de t para saber donde postear y mantener la sessión
  13.                  string str = devuelto;
  14.                  int first = str.IndexOf("/gb.post");
  15.                  first += 63;
  16.                  int last = str.LastIndexOf("<h3>Leave a Guestbook Message:");
  17.                  string str2 = str.Substring(first, last - first);
  18.                  last = str2.LastIndexOf(">");
  19.                  string td = str2.Substring(0, last - 1);
  20.  
  21.                  //Remplazar los caracteres especiales a hexadecimales
  22.                  td = td.Replace("+", "%2B").ToString();
  23.                  td = td.Replace("=", "%3D").ToString();
  24.                  td = td.Replace("-", "%27").ToString();
  25.                  td = td.Replace("/", "%2F").ToString();
  26.  
  27.                  return td;
  28.              }catch{
  29.                  return "NADA";
  30.              }
  31.          }

Voy a explicar la parte del código en la que se obtiene el valor:

Código
  1.                  string str = devuelto;
  2.                  int first = str.IndexOf("/gb.post");
  3.                  first += 63;
  4.                  int last = str.LastIndexOf("<h3>Leave a Guestbook Message:");
  5.                  string str2 = str.Substring(first, last - first);
  6.                  last = str2.LastIndexOf(">");
  7.                  string td = str2.Substring(0, last - 1);

Primero de todo en la variable int first conseguimos el número entero que se encuentra la cadena de caracteres “/gb.post”. Pongamos que se ha localizado en el número de carácter 200. Int last contiene tambien un valor de donde se encuentra la cadena <h3>Leave a Guestbook Message:
Pongamos en el ejemplo que se ha encontrado en el numero 100 ( ya que LastIndexOf indica que comience desde el último carácter).

Ahora en str2 lo que hacemos es pasar a string los caracteres que se encuentran entre el primer valor hasta el último. De esta manera obtenemos el valor de t. La otra comparación es para eliminar el carácter “>” que me salía, pero la idea es la misma.

Ahora la función de posteo:

Código
  1. static bool postear(string t, CookieContainer misgalletas, string msg, string name)
  2.          {
  3.              //PASAMOS LAS PROPIEDADES A VARIABLES
  4.              HttpWebRequest peticion;
  5.              HttpWebResponse respuesta;
  6.  
  7.              string url = "http://www.fotolog.com/gb.post"; //Sitio donde enviaremos la petición.
  8.              string argumentos = string.Format("ajax=true&t="+t+"&message="+msg); //Los argumentos
  9.              byte[] encodearg = Encoding.ASCII.GetBytes(argumentos);//pasamos a bytes los argumentos
  10.              peticion = (HttpWebRequest)WebRequest.Create(url); //Creamos la petición a la url que indiquemos arriba
  11.              peticion.Referer = "http://www.fotolog.com"; //Ponemos un refer de fotolog por poner algo xd
  12.              peticion.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13"; //Le decimos al server que navegamos con el explorador Mozilla
  13.              peticion.AllowAutoRedirect = true; //Permitimos que nos redirecione ATENCIÓN aquí puede cambiar según el sistema de logueo pero en este caso si no lo permites no te loguea
  14.              peticion.CookieContainer = misgalletas; //Explicado
  15.              peticion.Method = "POST"; //El metodo sera POST y no GET
  16.              peticion.ProtocolVersion = HttpVersion.Version10; //Usaremos la version10
  17.              peticion.ContentType = "application/x-www-form-urlencoded"; //Códificamos los datos a enviar, aquí tener cuídado según el servidor tmb
  18.              peticion.ContentLength = encodearg.Length; //Calculamos el tamaño de los argumentos
  19.  
  20.              Stream canal = peticion.GetRequestStream(); //explicado
  21.  
  22.              canal.Write(encodearg, 0, encodearg.Length); //Enviamos datos
  23.              canal.Flush();
  24.              canal.Close(); //Limpiamos y cerramos
  25.  
  26.              try //INTENTAMOS OBTENER RESPUESTA
  27.              {
  28.                  respuesta = (HttpWebResponse)peticion.GetResponse(); //Explicado
  29.                  string cojo = new StreamReader(respuesta.GetResponseStream()).ReadToEnd(); //Pasamos a la variable cojo la respuesta del servidor.
  30.                  respuesta.Close(); //Cerramos
  31.                  misgalletas.Add(respuesta.Cookies); //Aportamos las cookies en el caso que haya
  32.                  return true;
  33.              }
  34.              catch
  35.              {
  36.                  return false;
  37.              }
  38.  
  39.          }

Pasemos a obtener los fotologs amigos:

Código
  1. static string fotolog(string foto, string[] anterior)
  2. {
  3.              //CRAWLER
  4.              HttpWebRequest hRequest = ((HttpWebRequest)WebRequest.Create("http://www.fotolog.com/"+foto+"/ff"));
  5.              hRequest.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13";
  6.              StreamReader reader = new StreamReader(hRequest.GetResponse().GetResponseStream());
  7.              string devuelto = reader.ReadToEnd();
  8.              reader.Close();
  9.              string fotos="";
  10.              bool existe=false;
  11.              Regex r;
  12.              //http://www.fotolog.com/
  13.  
  14.              r = new Regex(@"http://www.fotolog.com/\s*([^/]*)\s*>");
  15.              //
  16.              MatchCollection mc = r.Matches(devuelto);
  17.              if (mc.Count > 0)
  18.              {
  19.                  foreach (Match m in mc)
  20.                  {
  21.                      //Console.WriteLine("{0}", m.Result("$1"));
  22.                      string dato = m.Result("$1");
  23.                      dato = dato.Replace("\"", "").ToString();
  24.  
  25.                      if (dato != foto&&dato!=foto+" class="+"goldcamera")
  26.                      {
  27.                          for (int i = 0; i<anterior.Length; i++)
  28.                          {
  29.                              if (dato != anterior[i])
  30.                              {
  31.                                  existe = false;
  32.                              }
  33.                              else
  34.                              {
  35.                                  existe = true;
  36.                                  break;
  37.                              }
  38.                          }
  39.                              if (!existe)
  40.                              {
  41.                                  fotos = dato;
  42.                                  return dato;
  43.                              }
  44.                      }
  45.                  }
  46.              }
  47.              return "hola";
  48.          }

Aquí lo que hacemos es coger el código fuente de la página de amigos del fotolog que estemos viendo y mediante expresiones regulares buscamos coincidencias de las urls:
Código
  1.  r = new Regex(@"http://www.fotolog.com/\s*([^/]*)\s*>");
  2.  
  3.  MatchCollection mc = r.Matches(devuelto);

Luego observé que en los goldcamaras me cogía un valor que no era ningún fotolog por lo que hice una condición para que no cogiera ese valor ni tampoco los fotologs anteriores ( para no repetir):

Código
  1. if (dato != foto&&dato!=foto+" class="+"goldcamera")

Después devolvemos el valor que encontramos y listo.

Ahora pondré el código que nos dirá que nuestra fiesta de posteos se ha terminado  :-(

Código
  1. static bool captcha(CookieContainer misgalletas, string name, string devuelto)
  2.          {
  3.              //AQUÍ NO HABRÁ NINGÚN PROBLEMA PARA ENTENDERLO...
  4.              HttpWebRequest peticion = ((HttpWebRequest)WebRequest.Create("http://www.fotolog.com/" + name));
  5.              peticion.CookieContainer = misgalletas;
  6.              peticion.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13";
  7.  
  8.              try
  9.              {
  10.                  string str = devuelto;
  11.                  int first = str.IndexOf("antibot");
  12.                  first += 100;
  13.                  int last = str.LastIndexOf("antibot_note");
  14.                  last -= 279;
  15.                  string td = str.Substring(first, last - first);
  16.  
  17.                  //Remplazar los caracteres especiales a hexadecimales
  18.                  td = td.Replace("+", "%2B").ToString();
  19.                  td = td.Replace("=", "%3D").ToString();
  20.                  td = td.Replace("-", "%27").ToString();
  21.                  td = td.Replace("/", "%2F").ToString();
  22.                  return true;
  23.              }
  24.              catch
  25.              {
  26.                  return false;
  27.  
  28.              }
  29.          }

Devuelve true si se ha detectado el captcha. Podría decir que sale aproximadamente cada 32 post luego si lo validas desde tu Explorer te da para unos 60 post más… aunque esto me ha variado ligeramente así que puedes activar vuestra imaginación para saltar esto, introducir el captcha cada vez que se detecte, ejecutar el programa con diferentes cuentas y poner un sleep mas grande entre cada post… no sé apañárosla ;)

El main quedaría de esta manera:

Código
  1. using System;
  2.  using System.Collections.Generic;
  3.  using System.Text;
  4.  using System.IO;
  5.  using System.Net;
  6.  using System.Web;
  7.  using System.Text.RegularExpressions;
  8.  using System.Threading;
  9.  
  10.  namespace Fotolog
  11.  {
  12.      class Program
  13.      {
  14.          static void Main(string[] args)
  15.          {
  16.              string blog = args[3];
  17.              bool stat;
  18.              string td;
  19.              string[] anterior;
  20.              anterior = new string[30];
  21.              int post = 0;
  22.              CookieContainer cokies;
  23.              string msg = args[2].Replace("-", " ").ToString();
  24.  
  25.              do
  26.              {
  27.                  Console.WriteLine("Logueando...");
  28.                  cokies = sesion(args[0], args[1]);
  29.              } while (cokies.Count <= 1);
  30.              Console.WriteLine("Logueo exitoso... comenzando el proceso.");
  31.              do
  32.              {
  33.                  Console.WriteLine();
  34.                  Console.WriteLine("------------------------------------------------------------------");
  35.                  Console.WriteLine("Buscando amigos en {0}.", blog);
  36.  
  37.                  if (blog == "")
  38.                  {
  39.                      td = t(args[2], cokies);
  40.                      blog = td;
  41.                  }
  42.                  else
  43.                  {
  44.                      blog = fotolog(blog, anterior);
  45.                      td = t(blog, cokies);
  46.                  }
  47.                  Console.WriteLine("Posteando en {0}.", blog);
  48.  
  49.                  if (postear(td, cokies, msg, args[0]))
  50.                  {
  51.                      post += 1;
  52.                      Console.WriteLine("Post número {1}.Se ha posteado correctamente en {0}.", blog, post);
  53.                      stat = true;
  54.                      Thread.Sleep(20000);
  55.                  }
  56.                  else
  57.                  {
  58.                      Console.WriteLine("No se ha podido postear.");
  59.                      stat = false;
  60.                  }
  61.              } while (stat);
  62.  
  63.              Console.WriteLine("Error en el programa, pusla cualquier tecla para salir.");
  64.              Console.ReadLine();
  65.          }

Bueno pues este es el código entero así que a partir de aquí os dejo solos en el camino entre tú y la imaginación.

Despedida:

Espero que os haya gustado el artículo tanto como a mí escribirlo :D y que almenos hayáis aprendido algo nuevo que de eso se trata. Un saludo y cualquier duda sobre el artículo podéis hacermela.

S4ludos!!!

Nork [NullBytes]
9  Programación / Programación Visual Basic / Cliente MSN, problemas conectando por HTTP en: 30 Abril 2008, 17:55 pm
Hola, pues estoy haciendo un cliente MSN y no llego a pasar el momento en el que me tengo que loguear por HTTP... expongo el código que utilizo:

Código
  1. "GET / HTTP/1.1" + vbCrLf + "Accept: */*" + vbCrLf + "Accept -Language: es" + vbCrLf + "UA -CPU: x86" + vbCrLf + "Accept -Encoding: gzip , deflate" + vbCrLf + "User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; WinuE v6; WinuE v6)" + vbCrLf + "Proxy -Connection: Keep -Alive" + vbCrLf + "Authorization: Passport1.4 OrgVerb=GET,OrgURL=http%3A%2F%2Fmessenger%2Emsn%2Ecom,sign-in=" + Text1.Text + ",pwd=" + Text2.Text + "," + lc(code) + "," + id(code) + "," + tw(code) + "," + fs(code) + "," + wp(code) + "," + ru(code) + "," + rn(code) + "," + ct(code) + "," + kpp(code) + "," + kv(code) + "," + ver(code) + "," + tpf(code) + "Host: login.passport.com"

Donde text1 y text2 son la cuenta y el pass y lo que coge la variable code es para sacar unos valores que me envió antes otro servidor. Al enviar esto lógicamente envío los 2 retorno de carros. Pues cuando me toca enviar esto a login.passport.com 443 el servidor no me envía nada ( de lo que me envíe me interesaría una variable bastante importante).

A ver si alguien me puede echar una mano  :P
10  Programación / Programación Visual Basic / Joiner desde 0 en VB en: 27 Octubre 2007, 16:26 pm
Buenas, pues una tarde que me aburría cree este manual de como hacer un simple Joiner... al final del manual se espera que cada uno tenga su joiner 100% funcional, espero que os guste  ;D

Descarga aquí

Saludooos!  ;)
Páginas: [1] 2
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines