<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss'><id>tag:blogger.com,1999:blog-1930365813934817808</id><updated>2009-09-23T20:29:24.526-07:00</updated><title type='text'>Mundo Codes</title><subtitle type='html'>Hola este es mi blog donde hay módulos, códigos, scripts y todo lo que busques o quieras compartir. Comparte tus dudas y lo que sabes con los demas... Tan solo es cuestion de participar.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://mundocodes.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1930365813934817808/posts/default'/><link rel='alternate' type='text/html' href='http://mundocodes.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Emiliano</name><uri>http://www.blogger.com/profile/09995175871429177328</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>12</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1930365813934817808.post-2680712669066582643</id><published>2009-09-08T10:56:00.000-07:00</published><updated>2009-09-08T10:57:39.266-07:00</updated><title type='text'>Don't Question the authority</title><content type='html'>&lt;a href="http://4.bp.blogspot.com/_3qXXKsxjE2c/SqabC3LkIcI/AAAAAAAAAC8/sFPrIBYLb3A/s1600-h/question.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 280px; height: 280px;" src="http://4.bp.blogspot.com/_3qXXKsxjE2c/SqabC3LkIcI/AAAAAAAAAC8/sFPrIBYLb3A/s320/question.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5379157278415135170" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1930365813934817808-2680712669066582643?l=mundocodes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundocodes.blogspot.com/feeds/2680712669066582643/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1930365813934817808&amp;postID=2680712669066582643' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1930365813934817808/posts/default/2680712669066582643'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1930365813934817808/posts/default/2680712669066582643'/><link rel='alternate' type='text/html' href='http://mundocodes.blogspot.com/2009/09/dont-question-authority.html' title='Don&apos;t Question the authority'/><author><name>Emiliano</name><uri>http://www.blogger.com/profile/09995175871429177328</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17507617097001603858'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_3qXXKsxjE2c/SqabC3LkIcI/AAAAAAAAAC8/sFPrIBYLb3A/s72-c/question.jpg' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1930365813934817808.post-605248584732897206</id><published>2009-06-06T04:05:00.000-07:00</published><updated>2009-06-06T04:07:06.023-07:00</updated><title type='text'>Despedida de Fravia, traducida por google y un poquito por mi. (Un poco trade pero en fin...). - Adios a un grande</title><content type='html'>Bueno, por lo que todas las curas que tuve que sufrir durante casi dos años: dos añoscompletos y los ciclos de quimioterapia muy debilitantes, 4 operaciones, muchas biopsias, incontables exploraciones de PET y MRIS, meses pasados dentro de una clínica de ... no funcionó. &lt;br /&gt;La metástasis se escapó de la garganta: mi profesor neerlandés lograron detener todo pero no el tumor del hígado, y mi hígado está implosionando. Por lo tanto,es una cuestión de semanas, no meses. &lt;br /&gt;Mis opciones restantes son para morir en una clínica, a morir en casa, o solicitar la eutanasia (el último, por supuesto, voy a hacer si surgen necesidades ... afortunadamente este es un país civilizado y no posee pensamientos religiosos secos -al menos por ahora- suficientes para anular mis derechos sólo para apaciguar y aplacar los supuestos deseos dudosos de "Godzilla"). &lt;br /&gt;&lt;br /&gt;Voy a ir para casa: al parecer (de nuevo: esta "parece" ubicua ) voy a morir durante el sueño. Voy "sólo" a tenerlos más débiles (amarillentos, caramba: nada como un tumor terminal para ser realmente feo) hasta que un día no voy a despertar más. Si es así, bastante justo: usted va con un suave soplo en su último viaje, una experiencia que suele ser, por cierto, como único e irrepetible :-) &lt;br /&gt;&lt;br /&gt;De todos modos, si el universo y el tiempo son realmente infinito (me queda alguna duda), entonces la combinación casi "idéntica metempsicoticamente" de las neuronas se volverá a aparecer de nuevo en alguna parte, por ejemplo, en otra galaxia y otro planeta ... esperemos que con menos imbéciles. &lt;br /&gt;&lt;br /&gt;Más realista, lamento no tener el tiempo para acompañar a mis hijos cuando entran a la universidad pronto. Una parte de mí que vivo a través de ellos, sin embargo, y creo que no consiguen darles algun potente arma y paracaídas (véase más abajo) para preparar el feo momento que cualquier persona con un cerebro por encima de la berenjena puede ahora ver fácilmente en contra del horizonte: Las facultades que de nuestra sociedad "tan buena" han logrado provocar la pirámide más grande en la historia económica (FMI, 21/04/2009: pérdidas bancarias en EE.UU. casi 3 billones; total mundial de 4 billones las pérdidas bancarias .. . cacahuetes que no pequeña!) con todo el dinero que -ça va sans dire- pobres y  esclavos se han de reparar y devolver! &lt;br /&gt;Como una ventaja adicional en la media de tiempo que también logró destruir irremediablemente-probablemente-la totalidad del ecosistema del planeta :-| &lt;br /&gt;&lt;br /&gt;Ahora, con el coral ensordecedor de sus corruptos políticos y medios de comunicación estática coribantes, la única solución que proponen todos los felices (perdiendo aún más por su propio bien cientos de miles de millones que en realidad le pertenece a usted), es poner en marcha nuevamente el mismo ciclo de moronic forzoso de crédito | forzado consum ... en lugar de cuestionar un modelo de desarrollo totalmente fracasado y que ya está ahora (y con razón) mordiendo todos en el culo. &lt;br /&gt;Pero por desgracia esto no es nada: me temo que las masacres, las guerras y los campos de concentración de las próximas décadas tendrá a nosotros recordar los horrores de la primera mitad del siglo XX con leve nostalgia. Nuestra "tan bonita y tan democrática" sociedad (donde hoy en día sólo soubrettes, el cuerpo de constructores, propietarios de medios de comunicación y "los más ricos en el estanque Bozo" tienden a ser elegidos por una población de esclavos felices y zombificados para correr como conejillos dentro de ruedas) están dirigidos a toda velocidad sobre una empinada pendiente resbaladiza hacia el abismo, donde se llevará a cabo-como de costumbre-a final como un salto mortal de tres y media vueltas invertido, entre los vivas! y viva! de sus medios de comunicación pagados, lacayos ... en voz alta ante las salpicaduras sobre el pavimento debajo de la realidad concreta. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Dulce ~ ~ &lt;br /&gt;&lt;br /&gt;Suficiente mensaje de castigo: para estar enojado, porque su muerte sólo sería infantil. Y, de hecho, ni siquiera estoy enfadado, simplemente analizo y canalizo en voz alta. &lt;br /&gt;De todos modos (aunque débiles) las armas para defenderse a sí mismo, están a la vista de los que, esparcidos en la web profunda, son nuestra insondable cornucopia de conocimientos. &lt;br /&gt;Lo más poderoso, en mi humilde opinión, es un buen conocimiento de la retórica (Nota 2) &lt;br /&gt;Especialmente eufemismos, que en la actualidad puede traicionar hasta una sarcastica historieta  ... y la exégesis, y quizás también algunos escucharon (si es áspero y de fabricación casera) el "Reality Cracking". &lt;br /&gt;La poesía-y, más generalmente, una buena cultura general, son también muy útiles armaduras. &lt;br /&gt;Aprenda a encontrar buenos libros (ver más abajo para algunas sugerencias), usted necesita-al igual que en el medievo, los monjes hicieron una vez un tiempo-mientras que los bárbaros queman todo y todos a la vista fuera de los muros. &lt;br /&gt;Más en general, todas las ciencias nunca subestiman "en decadencia", que a menudo son muy poderosos re, consumir consumir y consumir ... perdiendo toda tu vida con el fin de poder comprar un coche un poco antes, de un color diferente. &lt;br /&gt;&lt;br /&gt;Otros dos son posibles paracaídas, saber utilizar técnicas de ingeniería inversa de software (cuyo papel en nuestras sociedades, y de sus pequeños, está obligado a aumentar de manera espectacular los intentos de censuras), y un sonido de más, de aprendizaje "de sólo una" lengua extranjera. Estos "paracaídas" podría permitir a muchos lectores (quizás) estar en los pies. &lt;br /&gt;Buena suerte de todos modos. Yo deseo todo lo mejor a cualquier persona con un cerebro. &lt;br /&gt;&lt;br /&gt;Sin embargo, mis más queridos asesoramiento a todos los amigos es la siguiente: aprender a disfrutar de su contingente actual, no se obsesione por el futuro. Carpe diem, disfrutar de lo actual y las emociones: un cielo estrellado, un nuevo viento, los depósitos a la orilla del mar, su amor a su lado en la noche, una larga charla en la noche de penumbra con un amigo, la sonrisa de sus hijos. * * Que sustituir con un TV o una pantalla de computadora-es una muy mala negociación ... que es una de las pocas cosas que ahora estoy bastante seguro . &lt;br /&gt;&lt;br /&gt;Adiós a todos mis lectores, un fuerte abrazo a los muchos amigos que hice en todo el mundo. Una gran experiencia para mí! Voy a continuar como lo que yo manejo, voy a intentar incluso celebrar una última charla en Colonia a finales de mayo, pero dudo que voy a manejar, de todos modos y pronto mis sitios no se actualizará más, a menos que mis amigos cuidará y elaboraran algún tipo de wiki / blog (y la vigilancia y las instalaciones correccionales) para permitir esto. Vamos a ver. &lt;br /&gt;Pero no se preocupe en lo más mínimo: si no aprenden a búsqueda encontrará otros buenos recursos de todos modos. Hay abundancia de todo, después de todo. &lt;br /&gt;Sí! Hay buena información en la web, aunque oculto y enterrado detrás o debajo de viscosa morasses de adornos inútiles, se desplazan las dunas de basura comercial y una increíble cantidad de contenido vacío y totalmente inútil "cebo" sitios de publicidad. &lt;br /&gt;Sin embargo, la estructura misma web se hizo para compartir, no para la acumulación y seguramente no para "vender", que nunca olvidará! Por lo tanto, los usuarios pueden tomar ventaja de este ... Un buen conocimiento de los principales protocolos de la Web, un buen navegador y nuestra confianza Wireshark y nadie va a detener de un poderoso buscador para encontrar lo que fantaseas :-) &lt;br /&gt;&lt;br /&gt;Concedido hay de hecho un montón de cosas sobre searchlores obsoletos, y-como ya se ha dicho-la-bizantino laberíntica estructura del sitio que se han racionalizado desde hace mucho tiempo. &lt;br /&gt;Sin embargo, aunque en parte obsoleto (pero rara vez es verdadero conocimiento obsoleto, ¿no?) He decidido dejar en línea todos los que se reunieron y ofrecieron a lo largo de muchos años como es, y en la medida en que permanecerá en la web, porque creo que aún hay una gran riqueza de conocimiento libre de la búsqueda aquí, a la espera de esos entre mis visitantes que estén interesados en aprender y dominar el difícil arte de dos búsquedas en la web y la inversión de todo lo que encuentran. &lt;br /&gt;&lt;br /&gt;Si-como dicen algunos-la gente de todo nuestro planeta hizo uso de aprender lo que ofrece, mi vida no se desperdicia: =) &lt;br /&gt;&lt;br /&gt;http://penelope.uchicago.edu/Thayer/E/Roman/Texts/Rhetorica_ad_Herennium/home.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1930365813934817808-605248584732897206?l=mundocodes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundocodes.blogspot.com/feeds/605248584732897206/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1930365813934817808&amp;postID=605248584732897206' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1930365813934817808/posts/default/605248584732897206'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1930365813934817808/posts/default/605248584732897206'/><link rel='alternate' type='text/html' href='http://mundocodes.blogspot.com/2009/06/despedida-de-fravia-traducida-por.html' title='Despedida de Fravia, traducida por google y un poquito por mi. (Un poco trade pero en fin...). - Adios a un grande'/><author><name>Emiliano</name><uri>http://www.blogger.com/profile/09995175871429177328</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17507617097001603858'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1930365813934817808.post-2903441538245712466</id><published>2009-04-09T09:38:00.000-07:00</published><updated>2009-04-09T10:09:30.362-07:00</updated><title type='text'>De nuevo aqui con el brute</title><content type='html'>Hola gente aqui dejo el brute force que habia posteado hace un tiempo, si bien no lo he mejorado mucho, algo le he cambiado... debido a mi falta de tiempo y un poco de vagancia ja... le he mejorado un poco al brute en si y le he agregado un port scanner.&lt;br /&gt;Bueno el port scanner esta mas o menos comentado, creo que ya sabran que es un escaneador de puertos... en fin andar anda ja, eh hecho las siguientes pruebas y me han dado resultados. Probe con mi router la velocidad de respuesta, aunque parezca ilogico fue mas lenta que la velocidad de respuesta del server de mi isp :S... eso no lo entiendo todavia... Probe con el server de mi isp.. o sea para probar con 1 salto (o sea mi router), y luego con un server de cti para probar con mas de un salto. En todos logre respuesta en algunos puertos dandome los siguientes resultados:&lt;br /&gt;&lt;br /&gt;Victima: Mi router&lt;br /&gt;Puertos abiertos: 23,21,80&lt;br /&gt;Respuesta:&lt;br /&gt;21 : login&lt;br /&gt;&lt;br /&gt;23 : Welcom to Vulcan ....&lt;br /&gt;&lt;br /&gt;80: sin respuesta (esta bloqueado por configuración)&lt;br /&gt;--------------------------------------------------------------&lt;br /&gt;Victima: ns1.riotel.com.ar&lt;br /&gt;&lt;br /&gt;Puertos abiertos:&lt;br /&gt;&lt;br /&gt;22 Respuesta: SSH-2.0-OpenSSH_3.6.1p2&lt;br /&gt;&lt;br /&gt;25 Respuesta: 220 smtp.riotel.com.ar ESMTP Postfix (Debian/GNU)&lt;br /&gt;&lt;br /&gt;53 Sin Respuesta&lt;br /&gt;&lt;br /&gt;80 no revise bien pero me dio sin respuesta a simple vista&lt;br /&gt;&lt;br /&gt;110 Respuesta: +OK Hello there.&lt;br /&gt;&lt;br /&gt;------------------------------------------------------------&lt;br /&gt;Victima: claro.com.ar&lt;br /&gt;&lt;br /&gt;Puertos abiertos:&lt;br /&gt;21 y 80 &lt;br /&gt;Respuesta:&lt;br /&gt;&lt;br /&gt;21: sin respuesta&lt;br /&gt;&lt;br /&gt;80: pagina web&lt;br /&gt;&lt;br /&gt;------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;En fin aca les dejo la descarga:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe scrolling="no" marginheight="0" marginwidth="0" frameborder="0" style="width:240px;height:26px;margin:3px;padding:0;border:1px solid #dde5e9;background-color:#ffffff;" src="http://cid-03eedad641125919.skydrive.live.com/embedrow.aspx/P%c3%bablico/brute.rar"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1930365813934817808-2903441538245712466?l=mundocodes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundocodes.blogspot.com/feeds/2903441538245712466/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1930365813934817808&amp;postID=2903441538245712466' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1930365813934817808/posts/default/2903441538245712466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1930365813934817808/posts/default/2903441538245712466'/><link rel='alternate' type='text/html' href='http://mundocodes.blogspot.com/2009/04/de-nuevo-aqui-con-el-brute.html' title='De nuevo aqui con el brute'/><author><name>Emiliano</name><uri>http://www.blogger.com/profile/09995175871429177328</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17507617097001603858'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1930365813934817808.post-6474056132342036540</id><published>2009-02-17T07:58:00.000-08:00</published><updated>2009-04-03T08:33:10.575-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='recursos'/><category scheme='http://www.blogger.com/atom/ns#' term='algorítmica'/><category scheme='http://www.blogger.com/atom/ns#' term='poo'/><category scheme='http://www.blogger.com/atom/ns#' term='orientada a objetos'/><category scheme='http://www.blogger.com/atom/ns#' term='Programación'/><title type='text'>Algunos articulos y manuales de algoritmica, programacion, compiladores y programación orientada a objetos</title><content type='html'>&lt;b&gt;Bueno aqui dejo algunos artículos y tutoriales que vi en un espacio:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe scrolling="no" marginheight="0" marginwidth="0" frameborder="0" style="width:240px;height:26px;margin:3px;padding:0;border:1px solid #dde5e9;background-color:#ffffff;" src="http://cid-03eedad641125919.skydrive.live.com/embedrow.aspx/P%c3%bablico/Libros/Algor%c3%adtmica%20y%20programaci%c3%b3n%20para%20ingenieros.pdf"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe scrolling="no" marginheight="0" marginwidth="0" frameborder="0" style="width:240px;height:26px;margin:3px;padding:0;border:1px solid #dde5e9;background-color:#ffffff;" src="http://cid-03eedad641125919.skydrive.live.com/embedrow.aspx/P%c3%bablico/Libros/Articulos%20de%20www.programacion.net.pdf"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe scrolling="no" marginheight="0" marginwidth="0" frameborder="0" style="width:240px;height:26px;margin:3px;padding:0;border:1px solid #dde5e9;background-color:#ffffff;" src="http://cid-03eedad641125919.skydrive.live.com/embedrow.aspx/P%c3%bablico/Libros/Engineering%20a%20compiler.pdf"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe scrolling="no" marginheight="0" marginwidth="0" frameborder="0" style="width:240px;height:26px;margin:3px;padding:0;border:1px solid #dde5e9;background-color:#ffffff;" src="http://cid-03eedad641125919.skydrive.live.com/embedrow.aspx/P%c3%bablico/Libros/Estructuras%20de%20datos,%20especificaci%c3%b3n,%20dise%c3%b1o%20e%20implementaci%c3%b3n.pdf"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe scrolling="no" marginheight="0" marginwidth="0" frameborder="0" style="width:240px;height:26px;margin:3px;padding:0;border:1px solid #dde5e9;background-color:#ffffff;" src="http://cid-03eedad641125919.skydrive.live.com/embedrow.aspx/P%c3%bablico/Libros/Historia%20de%20los%20lenguajes%20de%20programaci%c3%b3n.pdf"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe scrolling="no" marginheight="0" marginwidth="0" frameborder="0" style="width:240px;height:26px;margin:3px;padding:0;border:1px solid #dde5e9;background-color:#ffffff;" src="http://cid-03eedad641125919.skydrive.live.com/embedrow.aspx/P%c3%bablico/Libros/Proceso%20de%20desarollo%20de%20software.PDF"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe scrolling="no" marginheight="0" marginwidth="0" frameborder="0" style="width:240px;height:26px;margin:3px;padding:0;border:1px solid #dde5e9;background-color:#ffffff;" src="http://cid-03eedad641125919.skydrive.live.com/embedrow.aspx/P%c3%bablico/Libros/Programaci%c3%b3%20fonamental,%20problemes.pdf"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe scrolling="no" marginheight="0" marginwidth="0" frameborder="0" style="width:240px;height:26px;margin:3px;padding:0;border:1px solid #dde5e9;background-color:#ffffff;" src="http://cid-03eedad641125919.skydrive.live.com/embedrow.aspx/P%c3%bablico/Libros/Programaci%c3%b3n%20orientada%20a%20objetos.pdf"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;Bueno esto son la introducción para aprender a programar, luego ire posteando lenguajes y un poco mas avanzados.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1930365813934817808-6474056132342036540?l=mundocodes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundocodes.blogspot.com/feeds/6474056132342036540/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1930365813934817808&amp;postID=6474056132342036540' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1930365813934817808/posts/default/6474056132342036540'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1930365813934817808/posts/default/6474056132342036540'/><link rel='alternate' type='text/html' href='http://mundocodes.blogspot.com/2009/02/algunos-articulos-y-manuales-de.html' title='Algunos articulos y manuales de algoritmica, programacion, compiladores y programación orientada a objetos'/><author><name>Emiliano</name><uri>http://www.blogger.com/profile/09995175871429177328</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17507617097001603858'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1930365813934817808.post-3518660619383602074</id><published>2009-02-16T10:49:00.000-08:00</published><updated>2009-02-17T06:13:57.728-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='E-zines'/><title type='text'>Mi colección de E-Zines</title><content type='html'>&lt;b&gt;Bueno aca dejo mi colección de e-zines que he ido recolectando con el paso de los años:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;aqui dejo los links:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://rapidshare.com/files/192676769/ezines.part1.rar"&gt;Parte 1&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://rapidshare.com/files/192721546/ezines.part2.rar"&gt;Parte 2&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Bueno aqui posteo la lista de e-zines que contiene mi colección:&lt;br /&gt;&lt;br /&gt;0ri0n Team Venezuela  ---&gt; 1 a 4&lt;br /&gt;7a69 ---&gt; 1 a 15&lt;br /&gt;ACID KLAN ---&gt; 1 a 4&lt;br /&gt;CDLR - Proyecto R ---&gt; 1 a 11&lt;br /&gt;CDT - Cultura Digital Team ---&gt; 0 a 3&lt;br /&gt;CIA ---&gt; 1 a 7&lt;br /&gt;DisidentS! Hack Journal ---&gt; 1 a 8&lt;br /&gt;EKO - EZKRACHO SECURITY TEAM ---&gt; 1 a 4&lt;br /&gt;Electron security team ---&gt; 1 a 4&lt;br /&gt;FIH - FOROS INFORMATICOS HISPANOS ---&gt; 1 a 3&lt;br /&gt;Gedzac ---&gt; 1 a 3&lt;br /&gt;HACKERSS ---&gt; 1 a 3&lt;br /&gt;HACKMEX ---&gt; 1&lt;br /&gt;HH - Hack Hispano ---&gt; 1 a 3&lt;br /&gt;Hispabyte ---&gt; 1 a 4&lt;br /&gt;HVEN - Hackers Venezuela ---&gt; 1 a 3&lt;br /&gt;IH - INSANE HACKERS ---&gt; 1 a 3&lt;br /&gt;MHM - MEXICAN HACKERS MAFIA ---&gt; 1 a 7&lt;br /&gt;NetSearch ---&gt; 1 a 8&lt;br /&gt;Phrack ---&gt; 65 en español&lt;br /&gt;RAREGAZZ ---&gt; 1 a 19&lt;br /&gt;Raza Mexicana ---&gt; 1 a 20&lt;br /&gt;RTM - Essentials ---&gt; 1 a 5&lt;br /&gt;SAQUEADORES ---&gt; 1 a 35 + bonus&lt;br /&gt;Sinmoney ---&gt; 1&lt;br /&gt;SWP - Security Wari Project ---&gt; 1 a 6&lt;br /&gt;WEET_DEVILS HACK TEAM ---&gt; 1&lt;br /&gt;&lt;br /&gt;Bueno esta es mi coleccion que esta creciando desde 1999, si bien no estan todas las que existen y existieron desde esa epoca pues de a poquito seguire buscando y agregando. Si alguien quiere aportar Bienvenido sea ;)&lt;br /&gt;Saludos&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1930365813934817808-3518660619383602074?l=mundocodes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundocodes.blogspot.com/feeds/3518660619383602074/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1930365813934817808&amp;postID=3518660619383602074' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1930365813934817808/posts/default/3518660619383602074'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1930365813934817808/posts/default/3518660619383602074'/><link rel='alternate' type='text/html' href='http://mundocodes.blogspot.com/2009/02/mi-coleccion-de-e-zines.html' title='Mi colección de E-Zines'/><author><name>Emiliano</name><uri>http://www.blogger.com/profile/09995175871429177328</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17507617097001603858'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1930365813934817808.post-2322914074730263184</id><published>2009-01-18T10:55:00.000-08:00</published><updated>2009-02-17T06:14:46.068-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vb6'/><category scheme='http://www.blogger.com/atom/ns#' term='Anti debug'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Basic 6'/><category scheme='http://www.blogger.com/atom/ns#' term='Programación'/><title type='text'>Códigos anti debug para VB6</title><content type='html'>&lt;b&gt; &lt;br /&gt;Pues eso aca dejo algunos codigos antidebugging que se usar para mis aplicaciones:&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;Para VB6:&lt;br /&gt;&lt;br /&gt;Debug.Print 1 / 0&lt;br /&gt;&lt;br /&gt;Esta sentencia genera una exepción de división por cero cuando la aplicación es debugueda.&lt;br /&gt;&lt;br /&gt;____________________________________________________________________________&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Public Declare Function IsDebuggerPresent Lib "kernel32" () As Long&lt;br /&gt;Private Sub Form_Load()&lt;br /&gt;If IsDebuggerPresent Then &lt;br /&gt;........&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;Ejemplo de como detectar un debugger con la rutina de kernel32, IssDebuggerPresent&lt;br /&gt;&lt;br /&gt;____________________________________________________________________________&lt;br /&gt;&lt;br /&gt;Public Declare Function OutputDebugStringA Lib "kernel32" (ByVal lpString As String) As Long&lt;br /&gt;&lt;br /&gt;Private Sub Form_Load()&lt;br /&gt;Dim AA As String&lt;br /&gt;Dim i As Integer&lt;br /&gt;&lt;br /&gt;For i = 1 To 200&lt;br /&gt;AA = AA &amp; "%s"&lt;br /&gt;Next i&lt;br /&gt;&lt;br /&gt;MsgBox OutputDebugStringA(AA)&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;Este code genera una exepción de desbordamiento de pila en algunos debuggers, mas específicamente el olly 1.10.Lo hace entrar en Deadlock&lt;br /&gt;____________________________________________________________________________&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;'---------------------------------------------------------------------------------------&lt;br /&gt;' Module : mGetProcAddress&lt;br /&gt;' DateTime : 06/10/2008 20:06&lt;br /&gt;' Author : Cobein&lt;br /&gt;' Mail : cobein27@hotmail.com&lt;br /&gt;' WebPage : http://www.advancevb.com.ar&lt;br /&gt;' Member of : http://hackhound.org/&lt;br /&gt;' Purpose : GetProcAddress alternative function&lt;br /&gt;' Usage : At your own risk&lt;br /&gt;' Requirements: None&lt;br /&gt;' Distribution: You can freely use this code in your own&lt;br /&gt;' applications, but you may not reproduce&lt;br /&gt;' or publish this code on any web site,&lt;br /&gt;' online service, or distribute as source&lt;br /&gt;' on any media without express permission.&lt;br /&gt;'&lt;br /&gt;' Reference : Based on ExtremeCoder sample [http://www.rohitab.com/discuss/lofiversion/index.php/t30773.html]&lt;br /&gt;'&lt;br /&gt;' History : 06/10/2008 First Cut....................................................&lt;br /&gt;' 06/10/2008 Minor change in buffer size to increase speed................&lt;br /&gt;'---------------------------------------------------------------------------------------&lt;br /&gt;Option Explicit&lt;br /&gt;&lt;br /&gt;Private Declare Function LoadLibraryA Lib "kernel32" (ByVal lpLibFileName As String) As Long&lt;br /&gt;Private Declare Sub GetMem4 Lib "msvbvm60" (ByVal Addr As Long, RetVal As Long)&lt;br /&gt;Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As String) As Long&lt;br /&gt;Private Declare Function SysAllocString Lib "oleaut32.dll" (ByVal pOlechar As Long) As String&lt;br /&gt;&lt;br /&gt;Public Function GetProcAddressAlt(ByVal sLib As String, ByVal sMod As String) As Long&lt;br /&gt;Dim lLib As Long&lt;br /&gt;Dim i As Long&lt;br /&gt;&lt;br /&gt;lLib = LoadLibraryA(sLib)&lt;br /&gt;&lt;br /&gt;If Not lLib = 0 Then&lt;br /&gt;Dim dwNumberOfNames As Long&lt;br /&gt;Dim dwNamesOffset As Long&lt;br /&gt;Dim dwNameRVAs As Long&lt;br /&gt;Dim dwFuncOffset As Long&lt;br /&gt;Dim dwFuncRVAs As Long&lt;br /&gt;&lt;br /&gt;GetMem4 (lLib + &amp;H3C), i&lt;br /&gt;GetMem4 (lLib + i + &amp;H78), i&lt;br /&gt;&lt;br /&gt;GetMem4 (lLib + i + &amp;H18), dwNumberOfNames&lt;br /&gt;GetMem4 (lLib + i + &amp;H20), dwNamesOffset&lt;br /&gt;GetMem4 (lLib + i + &amp;H1C), dwFuncOffset&lt;br /&gt;&lt;br /&gt;Dim sBuff As String * 128&lt;br /&gt;Dim sName As String&lt;br /&gt;&lt;br /&gt;For i = 0 To dwNumberOfNames - 1&lt;br /&gt;GetMem4 (lLib + dwNamesOffset + i * &amp;H4), dwNameRVAs&lt;br /&gt;GetMem4 (lLib + dwFuncOffset + i * &amp;H4), dwFuncRVAs&lt;br /&gt;&lt;br /&gt;sBuff = SysAllocString(lLib + dwNameRVAs)&lt;br /&gt;sName = Left$(sBuff, lstrlen(sBuff))&lt;br /&gt;&lt;br /&gt;If sName = sMod Then&lt;br /&gt;GetProcAddressAlt = lLib + dwFuncRVAs&lt;br /&gt;Exit Function&lt;br /&gt;End If&lt;br /&gt;Next&lt;br /&gt;End If&lt;br /&gt;&lt;br /&gt;End Function&lt;br /&gt;&lt;br /&gt;Este modulo sirve para buscar nombre de procesos tales como: ollydbg, snd, etc.&lt;br /&gt;Con el pueden saber si se ha cargado X programa, se puede mejorar el modulo para que detecte si la cadena ingresada se encuentra en una porción del modulo con el cual esta siendo comprobada, en ese caso detectaria algunas variantes de olly, ya que la mayoria agregan por ejemplo: Yoda's - olldbg. Entonces si comparamos con olly nos daría que son distintas pero si lo hacemos como si fuera un Like, o sea q sea igual o este contenida nos devolvería ese proceso sospechoso tbn.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;____________________________________________________________________________&lt;br /&gt;Private Declare Function OutputDebugStringA Lib "kernel32" (ByVal lpString As String) As Long&lt;br /&gt;&lt;br /&gt;Private Sub Form_Load()&lt;br /&gt;If IsDebuggerActive Then&lt;br /&gt;MsgBox "Debugger Present"&lt;br /&gt;End If&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;Private Function IsDebuggerActive() As Boolean&lt;br /&gt;IsDebuggerActive = Not (OutputDebugStringA("=)") = 1)&lt;br /&gt;End Function&lt;br /&gt;&lt;br /&gt;Otro ejemplo con OutputDebugStringA pero en este caso genera una exepción.&lt;br /&gt;&lt;br /&gt;____________________________________________________________________________&lt;br /&gt;&lt;br /&gt;Option Explicit&lt;br /&gt;&lt;br /&gt;Private Declare Function CheckRemoteDebuggerPresent Lib "kernel32.dll" (ByVal hProcess As Long, fResult As Long) As Long&lt;br /&gt;&lt;br /&gt;Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long&lt;br /&gt;Private Declare Function GetCurrentProcessId Lib "kernel32" () As Long&lt;br /&gt;Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long&lt;br /&gt;&lt;br /&gt;Private Const PROCESS_ALL_ACCESS As Long = &amp;H1F0FFF&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Private Sub Form_Load()&lt;br /&gt;&lt;br /&gt;Dim fResult As Long&lt;br /&gt;Dim hProcess As Long&lt;br /&gt;&lt;br /&gt;hProcess = OpenProcess(ByVal PROCESS_ALL_ACCESS, ByVal 0&amp;, ByVal GetCurrentProcessId)&lt;br /&gt;Call CheckRemoteDebuggerPresent(hProcess, fResult)&lt;br /&gt;CloseHandle hProcess&lt;br /&gt;.........&lt;br /&gt;&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;En este caso testeamos remotamente q nuestro programa no sea debuggeado, si es debuggeado fResult nos dara 1 como valor.&lt;br /&gt;____________________________________________________________________________&lt;br /&gt;&lt;br /&gt;'IsDbgCrss&lt;br /&gt;Private Declare Function CsrGetProcessId Lib "ntdll.dll" () As Long&lt;br /&gt;Private Declare Function OpenProcess Lib "kernel32.dll" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long&lt;br /&gt;&lt;br /&gt;'---------------------------------------------------------------------------------------&lt;br /&gt;' Procedure : IsDbgCsrss&lt;br /&gt;' Author : Karcrack&lt;br /&gt;' Date : 30/12/2008&lt;br /&gt;' Purpose : Check if our app is being debugged&lt;br /&gt;' Usage : If IsDbgCrss = True Then MsgBox "I'm Debugged"&lt;br /&gt;' Tested On : OllyDbg v2.0 ß&lt;br /&gt;' Reference : http://www.piotrbania.com/all/articles/antid.txt&lt;br /&gt;'---------------------------------------------------------------------------------------&lt;br /&gt;'&lt;br /&gt;Public Function IsDbgCsrss() As Boolean&lt;br /&gt;IsDbgCsrss = CBool(OpenProcess(&amp;H1F0FFF, 0, CsrGetProcessId)) '&amp;H1F0FFF = PROCESS_ALL_ACCESS&lt;br /&gt;End Function&lt;br /&gt;&lt;br /&gt;Este codigo detecta si se esta debugueando nuestra aplicación.&lt;br /&gt;____________________________________________________________________________&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Option Explicit&lt;br /&gt;&lt;br /&gt;Private Const ANYSIZE_ARRAY = 1&lt;br /&gt;Private Const TOKEN_ADJUST_PRIVILEGES = &amp;H20&lt;br /&gt;Private Const TOKEN_QUERY = &amp;H8&lt;br /&gt;Private Const SE_PRIVILEGE_ENABLED = &amp;H2&lt;br /&gt;&lt;br /&gt;Private Type LUID&lt;br /&gt;LowPart As Long&lt;br /&gt;HighPart As Long&lt;br /&gt;End Type&lt;br /&gt;Private Type LUID_AND_ATTRIBUTES&lt;br /&gt;pLuid As LUID&lt;br /&gt;Attributes As Long&lt;br /&gt;End Type&lt;br /&gt;Private Type TOKEN_PRIVILEGES&lt;br /&gt;PrivilegeCount As Long&lt;br /&gt;Privileges(ANYSIZE_ARRAY) As LUID_AND_ATTRIBUTES&lt;br /&gt;End Type&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Private Declare Function AdjustTokenPrivileges Lib "advapi32.dll" (ByVal TokenHandle As Long, ByVal DisableAllPrivileges As Long, NewState As TOKEN_PRIVILEGES, ByVal BufferLength As Long, PreviousState As TOKEN_PRIVILEGES, ReturnLength As Long) As Long&lt;br /&gt;Private Declare Function LookupPrivilegeValue Lib "advapi32" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As String, lpLUID As LUID) As Long&lt;br /&gt;Private Declare Function GetCurrentProcess Lib "kernel32" () As Long&lt;br /&gt;Private Declare Function OpenProcessToken Lib "advapi32.dll" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Public Const SE_DEBUG_NAME As String = "SeDebugPrivilege"&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Public Declare Function RtlSetProcessIsCritical Lib "ntdll.dll" (ByVal NewValue As Boolean, ByVal OldValue As Boolean, ByVal WinLogon As Boolean)&lt;br /&gt;&lt;br /&gt;Public Function ObtenerPrivilegios(ByVal privilegio As String) As Long&lt;br /&gt;&lt;br /&gt;Dim lpLUID As LUID&lt;br /&gt;Dim lpToken As TOKEN_PRIVILEGES&lt;br /&gt;Dim lpAntToken As TOKEN_PRIVILEGES&lt;br /&gt;Dim hToken As Long&lt;br /&gt;Dim hProcess As Long&lt;br /&gt;Dim res As Long&lt;br /&gt;&lt;br /&gt;hProcess = GetCurrentProcess()&lt;br /&gt;res = OpenProcessToken(hProcess, TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY, hToken)&lt;br /&gt;If res = 0 Then&lt;br /&gt;Exit Function&lt;br /&gt;End If&lt;br /&gt;res = LookupPrivilegeValue(vbNullString, privilegio, lpLUID)&lt;br /&gt;If res = 0 Then&lt;br /&gt;Exit Function&lt;br /&gt;End If&lt;br /&gt;With lpToken&lt;br /&gt;.PrivilegeCount = 1&lt;br /&gt;.Privileges(0).Attributes = SE_PRIVILEGE_ENABLED&lt;br /&gt;.Privileges(0).pLuid = lpLUID&lt;br /&gt;End With&lt;br /&gt;&lt;br /&gt;res = AdjustTokenPrivileges(hToken, False, lpToken, Len(lpToken), lpAntToken, Len(lpAntToken))&lt;br /&gt;If res = 0 Then&lt;br /&gt;Exit Function&lt;br /&gt;End If&lt;br /&gt;ObtenerPrivilegios = res&lt;br /&gt;End Function&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;'*************************************************************************&lt;br /&gt;'*************************************************************************&lt;br /&gt;' Uso de RtlSetProcessIsCritical para setear nuestro proceso, como proceso&lt;br /&gt;' critico del sistema: del mismo modo que csrss.exe o winlogon&lt;br /&gt;' XcryptOR - Made In Colombia&lt;br /&gt;'**************************************************************************&lt;br /&gt;'*************************************************************************&lt;br /&gt;Private Sub Form_Load()&lt;br /&gt;On Error Resume Next&lt;br /&gt;ObtenerPrivilegios SE_DEBUG_NAME ' obtiene privilegios de Debugeo&lt;br /&gt;Call RtlSetProcessIsCritical(0, 0, 1) ' setea nuestro proceso como Proceso Critico&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Bueno como dice el comentario para setear a nuestra aplicación privilegios.&lt;br /&gt;&lt;br /&gt;____________________________________________________________________________&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Y por ultimo algunos trucos para dificultar un poco mas:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;App.TaskVisible = False&lt;br /&gt;&lt;br /&gt;App.Title = ""&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Saludos&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1930365813934817808-2322914074730263184?l=mundocodes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundocodes.blogspot.com/feeds/2322914074730263184/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1930365813934817808&amp;postID=2322914074730263184' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1930365813934817808/posts/default/2322914074730263184'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1930365813934817808/posts/default/2322914074730263184'/><link rel='alternate' type='text/html' href='http://mundocodes.blogspot.com/2009/01/pues-eso-aca-dejo-algunos-codigos.html' title='Códigos anti debug para VB6'/><author><name>Emiliano</name><uri>http://www.blogger.com/profile/09995175871429177328</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17507617097001603858'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1930365813934817808.post-7835826438131686763</id><published>2008-11-25T16:08:00.000-08:00</published><updated>2009-02-16T10:39:42.804-08:00</updated><title type='text'>Modulos utiles a la hora de programar en vb6</title><content type='html'>&lt;b&gt; &lt;br /&gt;Hola aca dejo algunos módulos que son bastantes útiles a la hora de programar, modificar registro de windows, detectar version de windows, capturas de pantalla y escalar privilegios en win XP, NT, etc:&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;====================================================================================&lt;br /&gt;Detectar versión, devolver revisión y compilación:&lt;br /&gt;&lt;br /&gt;====================================================================================&lt;br /&gt;Option Explicit&lt;br /&gt;Private Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (lpVersionInformation As OSVERSIONINFO) As Long&lt;br /&gt;Private Const VER_PLATFORM_WIN32s = 0&lt;br /&gt;Private Const VER_PLATFORM_WIN32_WINDOWS = 1&lt;br /&gt;Private Const VER_PLATFORM_WIN32_NT = 2&lt;br /&gt;Private Type OSVERSIONINFO&lt;br /&gt;    dwOSVersionInfoSize As Long&lt;br /&gt;    dwMajorVersion As Long&lt;br /&gt;    dwMinorVersion As Long&lt;br /&gt;    dwBuildNumber As Long&lt;br /&gt;    dwPlatformId As Long&lt;br /&gt;    szCSDVersion As String * 128&lt;br /&gt;    wSPMajor As Integer&lt;br /&gt;End Type&lt;br /&gt;&lt;br /&gt;Public Enum EnumWinVer&lt;br /&gt;     Win95 = 0&lt;br /&gt;     Win95OSR2 = 1&lt;br /&gt;     Win98 = 2&lt;br /&gt;     Win98SE = 3&lt;br /&gt;     WinME = 4&lt;br /&gt;     WinNT3_0 = 5&lt;br /&gt;     WinNT3_1 = 6&lt;br /&gt;     WinNT3_5 = 7&lt;br /&gt;     WinNT4 = 8&lt;br /&gt;     WinNT5 = 9&lt;br /&gt;     Win2k = 10&lt;br /&gt;     WinXP = 11&lt;br /&gt;     WinVista = 12&lt;br /&gt;End Enum&lt;br /&gt;     &lt;br /&gt;&lt;br /&gt;Public Function Winversion(param As Integer) As EnumWinVer&lt;br /&gt;    Dim myVer As OSVERSIONINFO&lt;br /&gt;    Dim dl&amp;&lt;br /&gt;    myVer.dwOSVersionInfoSize = 148&lt;br /&gt;    dl&amp; = GetVersionEx&amp;(myVer)&lt;br /&gt;    If param = 1 Then 'param=1 devuelve la versiòn de Windows (95, 98,ME, 2000, XP, Vista)&lt;br /&gt;     If myVer.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS Then&lt;br /&gt;         If myVer.dwMajorVersion = 4 And myVer.dwMinorVersion = 0 Then&lt;br /&gt;             If myVer.dwBuildNumber = 950 Then&lt;br /&gt;                 GetVersion = Win95&lt;br /&gt;             Else&lt;br /&gt;                 GetVersion = Win95OSR2&lt;br /&gt;             End If&lt;br /&gt;         ElseIf myVer.dwMajorVersion = 4 And myVer.dwMinorVersion = 10 Then&lt;br /&gt;             If myVer.dwBuildNumber = 1998 Then&lt;br /&gt;                 GetVersion = Win98&lt;br /&gt;             Else&lt;br /&gt;                 GetVersion = Win98SE&lt;br /&gt;             End If&lt;br /&gt;         ElseIf myVer.dwMajorVersion &gt;= 4 And myVer.dwMinorVersion &gt; 10 Then&lt;br /&gt;             GetVersion = WinME&lt;br /&gt;         End If&lt;br /&gt;     ElseIf myVer.dwPlatformId = VER_PLATFORM_WIN32_NT Then&lt;br /&gt;         If myVer.dwMajorVersion = 3 And myVer.dwMinorVersion = 0 Then&lt;br /&gt;             GetVersion = WinNT3_0&lt;br /&gt;         ElseIf myVer.dwMajorVersion = 3 And myVer.dwMinorVersion = 1 Then&lt;br /&gt;             GetVersion = WinNT3_1&lt;br /&gt;         ElseIf myVer.dwMajorVersion = 3 And myVer.dwMinorVersion = 5 Then&lt;br /&gt;             GetVersion = WinNT3_5&lt;br /&gt;         ElseIf myVer.dwMajorVersion = 4 Then&lt;br /&gt;             GetVersion = WinNT4&lt;br /&gt;         ElseIf myVer.dwMajorVersion = 5 And myVer.dwMinorVersion = 0 Then&lt;br /&gt;             GetVersion = Win2k&lt;br /&gt;         ElseIf myVer.dwMajorVersion = 5 And myVer.dwMinorVersion = 1 Then&lt;br /&gt;             GetVersion = WinXP&lt;br /&gt;         ElseIf myVer.dwMajorVersion = 6 And myVer.dwMinorVersion = 1 Then&lt;br /&gt;             GetVersion = WinVista&lt;br /&gt;         End If&lt;br /&gt;     End If&lt;br /&gt;    Else&lt;br /&gt;     If param = 2 Then 'param=2 devuelve la Compilación&lt;br /&gt;      Winversion = osvi.dwBuildNumber&lt;br /&gt;     Else&lt;br /&gt;      If param = 3 Then 'Param=3 devuelve la revisión&lt;br /&gt;       Winversion = osvi.szCSDVersion&lt;br /&gt;      Else&lt;br /&gt;       If param = 4 Then&lt;br /&gt;        Winversion = Str(osvi.dwMajorVersion) + "." + Trim(Str(osvi.dwMinorVersion))&lt;br /&gt;       Else&lt;br /&gt;        Winversion = MsgBox("El identificador seleccionado no es válido.", vbCritical, "Error #1Ver")&lt;br /&gt;       End If&lt;br /&gt;      End If&lt;br /&gt;     End If&lt;br /&gt;    End If&lt;br /&gt;End Function&lt;br /&gt;&lt;br /&gt;====================================================================================&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Funciones para el Registro de Windows:&lt;br /&gt;====================================================================================&lt;br /&gt;Option Explicit&lt;br /&gt;&lt;br /&gt;Global Const REG_SZ As Long = 1&lt;br /&gt;Global Const REG_DWORD As Long = 4&lt;br /&gt;Global Const REG_BINARY As Long = 3&lt;br /&gt;&lt;br /&gt;Global Const HKEY_CLASSES_ROOT = &amp;H80000000&lt;br /&gt;Global Const HKEY_CURRENT_USER = &amp;H80000001&lt;br /&gt;Global Const HKEY_LOCAL_MACHINE = &amp;H80000002&lt;br /&gt;Global Const HKEY_USERS = &amp;H80000003&lt;br /&gt;&lt;br /&gt;Global Const ERROR_NONE = 0&lt;br /&gt;Global Const ERROR_BADDB = 1&lt;br /&gt;Global Const ERROR_BADKEY = 2&lt;br /&gt;Global Const ERROR_CANTOPEN = 3&lt;br /&gt;Global Const ERROR_CANTREAD = 4&lt;br /&gt;Global Const ERROR_CANTWRITE = 5&lt;br /&gt;Global Const ERROR_OUTOFMEMORY = 6&lt;br /&gt;Global Const ERROR_INVALID_PARAMETER = 7&lt;br /&gt;Global Const ERROR_ACCESS_DENIED = 8&lt;br /&gt;Global Const ERROR_INVALID_PARAMETERS = 87&lt;br /&gt;Global Const ERROR_NO_MORE_ITEMS = 259&lt;br /&gt;&lt;br /&gt;Global Const KEY_ALL_ACCESS = &amp;H3F&lt;br /&gt;&lt;br /&gt;Global Const REG_OPTION_NON_VOLATILE = 0&lt;br /&gt;&lt;br /&gt;Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long&lt;br /&gt;Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions As Long, ByVal samDesired As Long, ByVal lpSecurityAttributes As Long, phkResult As Long, lpdwDisposition As Long) As Long&lt;br /&gt;Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long&lt;br /&gt;Declare Function RegQueryValueExString Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As String, lpcbData As Long) As Long&lt;br /&gt;Declare Function RegQueryValueExLong Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Long, lpcbData As Long) As Long&lt;br /&gt;Declare Function RegQueryValueExNULL Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As Long, lpcbData As Long) As Long&lt;br /&gt;Declare Function RegSetValueExString Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByVal lpValue As String, ByVal cbData As Long) As Long&lt;br /&gt;Declare Function RegSetValueExLong Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpValue As Long, ByVal cbData As Long) As Long&lt;br /&gt;Declare Function RegSetValueExBinary Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByVal lpValue As String, ByVal cbData As Long) As Long&lt;br /&gt;Private Declare Function RegDeleteKey&amp; Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String)&lt;br /&gt;Private Declare Function RegDeleteValue&amp; Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String)&lt;br /&gt;&lt;br /&gt;Public Function DeleteKey(lPredefinedKey As Long, sKeyName As String)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    Dim lRetVal As Long&lt;br /&gt;    Dim hKey As Long&lt;br /&gt;    &lt;br /&gt;   &lt;br /&gt;    lRetVal = RegDeleteKey(lPredefinedKey, sKeyName)&lt;br /&gt;  &lt;br /&gt;End Function&lt;br /&gt;&lt;br /&gt;Public Function DeleteValue(lPredefinedKey As Long, sKeyName As String, sValueName As String)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;       Dim lRetVal As Long&lt;br /&gt;       Dim hKey As Long&lt;br /&gt;&lt;br /&gt;       &lt;br /&gt;       lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)&lt;br /&gt;       lRetVal = RegDeleteValue(hKey, sValueName)&lt;br /&gt;       RegCloseKey (hKey)&lt;br /&gt;End Function&lt;br /&gt;&lt;br /&gt;Public Function SetValueEx(ByVal hKey As Long, sValueName As String, lType As Long, vValue As Variant) As Long&lt;br /&gt;    Dim lValue As Long&lt;br /&gt;    Dim sValue As String&lt;br /&gt;    Dim bValue As String&lt;br /&gt;&lt;br /&gt;    Select Case lType&lt;br /&gt;        Case REG_SZ&lt;br /&gt;            sValue = vValue&lt;br /&gt;            SetValueEx = RegSetValueExString(hKey, sValueName, 0&amp;, lType, sValue, Len(sValue))&lt;br /&gt;        Case REG_DWORD&lt;br /&gt;            lValue = vValue&lt;br /&gt;            SetValueEx = RegSetValueExLong(hKey, sValueName, 0&amp;, lType, lValue, 4)&lt;br /&gt;        Case REG_BINARY&lt;br /&gt;            bValue = vValue&lt;br /&gt;            SetValueEx = RegSetValueExString(hKey, sValueName, 0&amp;, lType, bValue, Len(bValue))&lt;br /&gt;        End Select&lt;br /&gt;&lt;br /&gt;End Function&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Function QueryValueEx(ByVal lhKey As Long, ByVal szValueName As String, vValue As Variant) As Long&lt;br /&gt;    Dim cch As Long&lt;br /&gt;    Dim lrc As Long&lt;br /&gt;    Dim lType As Long&lt;br /&gt;    Dim lValue As Long&lt;br /&gt;    Dim sValue As String&lt;br /&gt;    Dim bValue As String&lt;br /&gt;&lt;br /&gt;    On Error GoTo QueryValueExError&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    lrc = RegQueryValueExNULL(lhKey, szValueName, 0&amp;, lType, 0&amp;, cch)&lt;br /&gt;    If lrc &lt;&gt; ERROR_NONE Then Error 5&lt;br /&gt;&lt;br /&gt;    Select Case lType&lt;br /&gt;        ' Cadenas&lt;br /&gt;        Case REG_SZ:&lt;br /&gt;            sValue = String(cch, 0)&lt;br /&gt;            lrc = RegQueryValueExString(lhKey, szValueName, 0&amp;, lType, sValue, cch)&lt;br /&gt;            If lrc = ERROR_NONE Then&lt;br /&gt;                vValue = Left$(sValue, cch)&lt;br /&gt;            Else&lt;br /&gt;                vValue = Empty&lt;br /&gt;            End If&lt;br /&gt;            &lt;br /&gt;        ' Binario&lt;br /&gt;        Case REG_BINARY:&lt;br /&gt;            sValue = String(cch, 0)&lt;br /&gt;            lrc = RegQueryValueExString(lhKey, szValueName, 0&amp;, lType, bValue, cch)&lt;br /&gt;            If lrc = ERROR_NONE Then&lt;br /&gt;                vValue = Left$(bValue, cch)&lt;br /&gt;            Else&lt;br /&gt;                vValue = Empty&lt;br /&gt;            End If&lt;br /&gt;            &lt;br /&gt;        ' DWORDS&lt;br /&gt;        Case REG_DWORD:&lt;br /&gt;            lrc = RegQueryValueExLong(lhKey, szValueName, 0&amp;, lType, lValue, cch)&lt;br /&gt;            If lrc = ERROR_NONE Then vValue = lValue&lt;br /&gt;        Case Else&lt;br /&gt;            'Otros tipos&lt;br /&gt;            lrc = -1&lt;br /&gt;    End Select&lt;br /&gt;&lt;br /&gt;QueryValueExExit:&lt;br /&gt;&lt;br /&gt;    QueryValueEx = lrc&lt;br /&gt;    Exit Function&lt;br /&gt;&lt;br /&gt;QueryValueExError:&lt;br /&gt;&lt;br /&gt;    Resume QueryValueExExit&lt;br /&gt;&lt;br /&gt;End Function&lt;br /&gt;Public Function CreateNewKey(lPredefinedKey As Long, sNewKeyName As String)&lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;br /&gt;    Dim hNewKey As Long&lt;br /&gt;    Dim lRetVal As Long&lt;br /&gt;    &lt;br /&gt;    lRetVal = RegCreateKeyEx(lPredefinedKey, sNewKeyName, 0&amp;, vbNullString, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, 0&amp;, hNewKey, lRetVal)&lt;br /&gt;    RegCloseKey (hNewKey)&lt;br /&gt;End Function&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Sub Main()&lt;br /&gt;    'Ejemplos para llamar a cada función:&lt;br /&gt;    'CreateNewKey HKEY_CURRENT_USER, "Prueba\Rama1\Rama2"&lt;br /&gt;    'SetKeyValue HKEY_CURRENT_USER, "Prueba\Rama1", "Prueba", "Probando, Probando", REG_SZ&lt;br /&gt;    'MsgBox QueryValue(HKEY_CURRENT_USER, "Prueba\Rama1", "Prueba")&lt;br /&gt;    'DeleteKey HKEY_CURRENT_USER, "Prueba\Rama1|Rama2"&lt;br /&gt;    'DeleteValue HKEY_CURRENT_USER, "Prueba\Rama1", "Prueba"&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Public Function SetKeyValue(lPredefinedKey As Long, sKeyName As String, sValueName As String, vValueSetting As Variant, lValueType As Long)&lt;br /&gt;&lt;br /&gt;       Dim lRetVal As Long&lt;br /&gt;       Dim hKey As Long&lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;&lt;br /&gt;       lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)&lt;br /&gt;       lRetVal = SetValueEx(hKey, sValueName, lValueType, vValueSetting)&lt;br /&gt;       RegCloseKey (hKey)&lt;br /&gt;&lt;br /&gt;End Function&lt;br /&gt;&lt;br /&gt;Public Function QueryValue(lPredefinedKey As Long, sKeyName As String, sValueName As String)&lt;br /&gt;       Dim lRetVal As Long&lt;br /&gt;       Dim hKey As Long&lt;br /&gt;       Dim vValue As Variant&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;       lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)&lt;br /&gt;       lRetVal = QueryValueEx(hKey, sValueName, vValue)&lt;br /&gt;       QueryValue = vValue&lt;br /&gt;       RegCloseKey (hKey)&lt;br /&gt;End Function&lt;br /&gt;&lt;br /&gt;====================================================================================&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Funciones para hacer una captura de pantalla y guardarla:&lt;br /&gt;====================================================================================&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Option Explicit&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Public Enum GpStatus&lt;br /&gt;   Ok = 0&lt;br /&gt;   GenericError = 1&lt;br /&gt;   InvalidParameter = 2&lt;br /&gt;   OutOfMemory = 3&lt;br /&gt;   ObjectBusy = 4&lt;br /&gt;   InsufficientBuffer = 5&lt;br /&gt;   NotImplemented = 6&lt;br /&gt;   Win32Error = 7&lt;br /&gt;   WrongState = 8&lt;br /&gt;   Aborted = 9&lt;br /&gt;   FileNotFound = 10&lt;br /&gt;   ValueOverflow = 11&lt;br /&gt;   AccessDenied = 12&lt;br /&gt;   UnknownImageFormat = 13&lt;br /&gt;   FontFamilyNotFound = 14&lt;br /&gt;   FontStyleNotFound = 15&lt;br /&gt;   NotTrueTypeFont = 16&lt;br /&gt;   UnsupportedGdiplusVersion = 17&lt;br /&gt;   GdiplusNotInitialized = 18&lt;br /&gt;   PropertyNotFound = 19&lt;br /&gt;   PropertyNotSupported = 20&lt;br /&gt;End Enum&lt;br /&gt;&lt;br /&gt;Public Type GdiplusStartupInput&lt;br /&gt;   GdiplusVersion As Long&lt;br /&gt;   DebugEventCallback As Long&lt;br /&gt;   SuppressBackgroundThread As Long&lt;br /&gt;                                       &lt;br /&gt;   SuppressExternalCodecs As Long&lt;br /&gt;                                       &lt;br /&gt;End Type&lt;br /&gt;&lt;br /&gt;Public Type CLSID&lt;br /&gt;   Data1 As Long&lt;br /&gt;   Data2 As Integer&lt;br /&gt;   Data3 As Integer&lt;br /&gt;   Data4(0 To 7) As Byte&lt;br /&gt;End Type&lt;br /&gt;&lt;br /&gt;Public Enum ImageCodecFlags&lt;br /&gt;   ImageCodecFlagsEncoder = &amp;H1&lt;br /&gt;   ImageCodecFlagsDecoder = &amp;H2&lt;br /&gt;   ImageCodecFlagsSupportBitmap = &amp;H4&lt;br /&gt;   ImageCodecFlagsSupportVector = &amp;H8&lt;br /&gt;   ImageCodecFlagsSeekableEncode = &amp;H10&lt;br /&gt;   ImageCodecFlagsBlockingDecode = &amp;H20&lt;br /&gt;&lt;br /&gt;   ImageCodecFlagsBuiltin = &amp;H10000&lt;br /&gt;   ImageCodecFlagsSystem = &amp;H20000&lt;br /&gt;   ImageCodecFlagsUser = &amp;H40000&lt;br /&gt;End Enum&lt;br /&gt;&lt;br /&gt;Public Type ImageCodecInfo&lt;br /&gt;   ClassID As CLSID&lt;br /&gt;   FormatID As CLSID&lt;br /&gt;   CodecName As Long&lt;br /&gt;   DllName As Long&lt;br /&gt;   FormatDescription As Long&lt;br /&gt;   FilenameExtension As Long&lt;br /&gt;   MimeType As Long&lt;br /&gt;   flags As ImageCodecFlags&lt;br /&gt;   Version As Long&lt;br /&gt;   SigCount As Long&lt;br /&gt;   SigSize As Long&lt;br /&gt;   SigPattern As Long&lt;br /&gt;   SigMask As Long&lt;br /&gt;End Type&lt;br /&gt;&lt;br /&gt;Public Enum EncoderParameterValueType&lt;br /&gt;   EncoderParameterValueTypeByte = 1&lt;br /&gt;   EncoderParameterValueTypeASCII = 2&lt;br /&gt;                                                   &lt;br /&gt;   EncoderParameterValueTypeShort = 3&lt;br /&gt;   EncoderParameterValueTypeLong = 4&lt;br /&gt;   EncoderParameterValueTypeRational = 5&lt;br /&gt;                                                                                              &lt;br /&gt;   EncoderParameterValueTypeLongRange = 6&lt;br /&gt;                                                                                          &lt;br /&gt;   EncoderParameterValueTypeUndefined = 7&lt;br /&gt;   EncoderParameterValueTypeRationalRange = 8&lt;br /&gt;                                                   &lt;br /&gt;End Enum&lt;br /&gt;&lt;br /&gt;Public Type EncoderParameter&lt;br /&gt;   GUID As CLSID&lt;br /&gt;   NumberOfValues As Long&lt;br /&gt;   type As EncoderParameterValueType&lt;br /&gt;   value As Long&lt;br /&gt;End Type&lt;br /&gt;&lt;br /&gt;Public Type EncoderParameters&lt;br /&gt;   count As Long&lt;br /&gt;   Parameter As EncoderParameter&lt;br /&gt;End Type&lt;br /&gt;&lt;br /&gt;Public Const EncoderQuality           As String = "{1D5BE4B5-FA4A-452D-9CDD-5DB35105E7EB}"&lt;br /&gt;Public Declare Function GdiplusStartup Lib "gdiplus" (token As Long, inputbuf As GdiplusStartupInput, Optional ByVal outputbuf As Long = 0) As GpStatus&lt;br /&gt;Public Declare Sub GdiplusShutdown Lib "gdiplus" (ByVal token As Long)&lt;br /&gt;Public Declare Function GdipCreateBitmapFromHBITMAP Lib "gdiplus" (ByVal hbm As Long, ByVal hpal As Long, bitmap As Long) As GpStatus&lt;br /&gt;Public Declare Function GdipSaveImageToFile Lib "gdiplus" (ByVal image As Long, ByVal filename As String, clsidEncoder As CLSID, encoderParams As Any) As GpStatus&lt;br /&gt;Public Declare Function GdipDisposeImage Lib "gdiplus" (ByVal image As Long) As GpStatus&lt;br /&gt;Public Declare Function GdipGetImageEncodersSize Lib "gdiplus" (numEncoders As Long, size As Long) As GpStatus&lt;br /&gt;Public Declare Function GdipGetImageEncoders Lib "gdiplus" (ByVal numEncoders As Long, ByVal size As Long, encoders As Any) As GpStatus&lt;br /&gt;Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)&lt;br /&gt;Private Declare Function lstrlenW Lib "kernel32" (ByVal psString As Any) As Long&lt;br /&gt;Private Declare Function lstrlenA Lib "kernel32" (ByVal psString As Any) As Long&lt;br /&gt;Private Declare Function CLSIDFromString Lib "ole32.dll" (ByVal lpszProgID As Long, pCLSID As CLSID) As Long&lt;br /&gt;Private token As Long&lt;br /&gt;&lt;br /&gt;Public Function SaveAsJPEG(pb As PictureBox, ByVal filename As String, Optional ByVal Quality As Long = 80) As Long&lt;br /&gt;    Dim stat As GpStatus&lt;br /&gt;    Dim bm As Long&lt;br /&gt;    Dim encoderCLSID As CLSID&lt;br /&gt;    Dim encoderParams As EncoderParameters&lt;br /&gt;    Dim lQuality As Long&lt;br /&gt;   &lt;br /&gt;    stat = GdipCreateBitmapFromHBITMAP(pb.Picture.Handle, pb.Picture.hpal, bm)&lt;br /&gt;&lt;br /&gt;    Call GetEncoderClsid("image/jpeg", encoderCLSID)&lt;br /&gt;   &lt;br /&gt;    If (stat = Ok) Then&lt;br /&gt;        lQuality = Quality&lt;br /&gt;        encoderParams.count = 1&lt;br /&gt;        With encoderParams.Parameter&lt;br /&gt;            .NumberOfValues = 1&lt;br /&gt;            .type = EncoderParameterValueTypeLong&lt;br /&gt;       &lt;br /&gt;            .GUID = DEFINE_GUID(EncoderQuality)&lt;br /&gt;            .value = VarPtr(lQuality)&lt;br /&gt;        End With&lt;br /&gt;&lt;br /&gt;        stat = GdipSaveImageToFile(bm, StrConv(filename, vbUnicode), encoderCLSID, encoderParams)&lt;br /&gt;       &lt;br /&gt;    End If&lt;br /&gt;   &lt;br /&gt;    SaveAsJPEG = stat&lt;br /&gt;   &lt;br /&gt;    Call GdipDisposeImage(bm)&lt;br /&gt;End Function&lt;br /&gt;&lt;br /&gt;Public Function gdipLoad() As Boolean&lt;br /&gt;   &lt;br /&gt;    Dim GpInput As GdiplusStartupInput&lt;br /&gt;   &lt;br /&gt;    gdipLoad = False&lt;br /&gt;    GpInput.GdiplusVersion = 1&lt;br /&gt;    If GdiplusStartup(token, GpInput) = Ok Then&lt;br /&gt;        gdipLoad = True&lt;br /&gt;    End If&lt;br /&gt;   &lt;br /&gt;End Function&lt;br /&gt;&lt;br /&gt;Public Sub gdipUnLoad()&lt;br /&gt;    Call GdiplusShutdown(token)&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;Public Function GetEncoderClsid(strMimeType As String, ClassID As CLSID)&lt;br /&gt;   Dim num As Long, size As Long, i As Long&lt;br /&gt;   Dim ICI() As ImageCodecInfo&lt;br /&gt;   Dim buffer() As Byte&lt;br /&gt;   &lt;br /&gt;   GetEncoderClsid = -1&lt;br /&gt;&lt;br /&gt;   Call GdipGetImageEncodersSize(num, size)&lt;br /&gt;   If size = 0 Then Exit Function&lt;br /&gt;&lt;br /&gt;   ReDim ICI(1 To num) As ImageCodecInfo&lt;br /&gt;   ReDim buffer(1 To size) As Byte&lt;br /&gt;&lt;br /&gt;   Call GdipGetImageEncoders(num, size, buffer(1))&lt;br /&gt;&lt;br /&gt;   Call CopyMemory(ICI(1), buffer(1), (Len(ICI(1)) * num))&lt;br /&gt;  &lt;br /&gt;   For i = 1 To num&lt;br /&gt;      &lt;br /&gt;      If StrComp(PtrToStrW(ICI(i).MimeType), strMimeType, vbTextCompare) = 0 Then&lt;br /&gt;         ClassID = ICI(i).ClassID&lt;br /&gt;         GetEncoderClsid = i&lt;br /&gt;         Exit For&lt;br /&gt;      End If&lt;br /&gt;   Next&lt;br /&gt;&lt;br /&gt;   Erase ICI&lt;br /&gt;   Erase buffer&lt;br /&gt;End Function&lt;br /&gt;&lt;br /&gt;Public Function DEFINE_GUID(ByVal sGuid As String) As CLSID&lt;br /&gt;   Call CLSIDFromString(StrPtr(sGuid), DEFINE_GUID)&lt;br /&gt;End Function&lt;br /&gt;&lt;br /&gt;Public Function PtrToStrW(ByVal lpsz As Long) As String&lt;br /&gt;    Dim sOut As String&lt;br /&gt;    Dim lLen As Long&lt;br /&gt;&lt;br /&gt;    lLen = lstrlenW(lpsz)&lt;br /&gt;&lt;br /&gt;    If (lLen &gt; 0) Then&lt;br /&gt;        sOut = StrConv(String$(lLen, vbNullChar), vbUnicode)&lt;br /&gt;        Call CopyMemory(ByVal sOut, ByVal lpsz, lLen * 2)&lt;br /&gt;        PtrToStrW = StrConv(sOut, vbFromUnicode)&lt;br /&gt;    End If&lt;br /&gt;End Function&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;====================================================================================&lt;br /&gt;&lt;br /&gt;Algo muy importante a la hora de hacer programas q requieran reiniciar windows, escribir un ejecutable cargado ya en memoria y otras cosas que necesiten que el programa escale privilegios:&lt;br /&gt;====================================================================================&lt;br /&gt;&lt;br /&gt;Option explicit&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Private Type LUID&lt;br /&gt;         UsedPart As Long&lt;br /&gt;         IgnoredForNowHigh32BitPart As Long&lt;br /&gt;      End Type&lt;br /&gt;&lt;br /&gt;      Private Type TOKEN_PRIVILEGES&lt;br /&gt;         PrivilegeCount As Long&lt;br /&gt;         TheLuid As LUID&lt;br /&gt;         Attributes As Long&lt;br /&gt;      End Type&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Private Declare Function GetCurrentProcess Lib "kernel32" () As Long&lt;br /&gt;Private Declare Function OpenProcessToken Lib "advapi32" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long&lt;br /&gt;Private Declare Function LookupPrivilegeValue Lib "advapi32" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As String, lpLuid As LUID) As Long&lt;br /&gt;Private Declare Function AdjustTokenPrivileges Lib "advapi32" (ByVal TokenHandle As Long, ByVal DisableAllPrivileges As Long, NewState As TOKEN_PRIVILEGES, ByVal BufferLength As Long, PreviousState As TOKEN_PRIVILEGES, ReturnLength As Long) As Long&lt;br /&gt;&lt;br /&gt;Public Sub AdjustToken()&lt;br /&gt;         Const TOKEN_ADJUST_PRIVILEGES = &amp;H20&lt;br /&gt;         Const TOKEN_QUERY = &amp;H8&lt;br /&gt;         Const SE_PRIVILEGE_ENABLED = &amp;H2&lt;br /&gt;         Dim hdlProcessHandle As Long&lt;br /&gt;         Dim hdlTokenHandle As Long&lt;br /&gt;         Dim tmpLuid As LUID&lt;br /&gt;         Dim tkp As TOKEN_PRIVILEGES&lt;br /&gt;         Dim tkpNewButIgnored As TOKEN_PRIVILEGES&lt;br /&gt;         Dim lBufferNeeded As Long&lt;br /&gt;&lt;br /&gt;         hdlProcessHandle = GetCurrentProcess()&lt;br /&gt;         OpenProcessToken hdlProcessHandle, (TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY), hdlTokenHandle&lt;br /&gt;         &lt;br /&gt;         LookupPrivilegeValue "", "SeShutdownPrivilege", tmpLuid&lt;br /&gt;&lt;br /&gt;         tkp.PrivilegeCount = 1&lt;br /&gt;         tkp.TheLuid = tmpLuid&lt;br /&gt;         tkp.Attributes = SE_PRIVILEGE_ENABLED&lt;br /&gt;&lt;br /&gt;        &lt;br /&gt;        &lt;br /&gt;         AdjustTokenPrivileges hdlTokenHandle, False, tkp, Len(tkpNewButIgnored), tkpNewButIgnored, lBufferNeeded&lt;br /&gt;&lt;br /&gt;      End Sub&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;====================================================================================&lt;br /&gt;okas por ahora publico eso nomas.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1930365813934817808-7835826438131686763?l=mundocodes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundocodes.blogspot.com/feeds/7835826438131686763/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1930365813934817808&amp;postID=7835826438131686763' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1930365813934817808/posts/default/7835826438131686763'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1930365813934817808/posts/default/7835826438131686763'/><link rel='alternate' type='text/html' href='http://mundocodes.blogspot.com/2008/11/modulos-utiles-la-hora-de-programar-en.html' title='Modulos utiles a la hora de programar en vb6'/><author><name>Emiliano</name><uri>http://www.blogger.com/profile/09995175871429177328</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17507617097001603858'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1930365813934817808.post-8433254126407832529</id><published>2008-11-04T15:51:00.000-08:00</published><updated>2009-04-03T08:35:26.281-07:00</updated><title type='text'>Brute force Codigo fuente en vb6</title><content type='html'>Cita un post viejo que vi por alli:&lt;br /&gt;&lt;b&gt; Bueno aqui os dejo un proyecto que se me ocurrio debido a mi proveedor de internet... &lt;/b&gt;Pes comenzemos por la historia... me remota a un par de semanas atras...&lt;br /&gt;Pess bueno en aquellos dias me dedique a hacerme una pagina web para subirla... (antigüamente tenia subida a un host) pero queria que mi maquina se convirtiera en servidor web y bueno configure mysql y un server apache para dicho fin luego en mi cuenta de no ip cree un host y deje todo listo para subir mi pagina, probe en mi red interna ... en mi casa je, y funcaba todo de diez pero a la hora deconfigurar la redireccion de puertos en el modem router que me da la empresa (riotel) pesss me veo en que le han sacado el sistema de configuración web... (interno del modem) asi que decidi preguntar a mi isp que puertos tenia habilitados y bue me dijeron que tenia el 4889,5800 y 5900 para el uso de VNC o simil, 4662 y 4672UDP para emule, ares etc...&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;en fin como no me senti conforme entre a una web y me hice un port scan y me encuentro con el puerto 23 abierto chan?¿?¿?¿? O sea todos los modem routers poseen la cualidad de que se puede acceder a la configuración por web (http://192.168.1.1 por lo general), y por medio de TELNET jeje (en la consola de comandos se escribe telnet 192.168.1.1) pes bueno ... jejeje no tengo nada contra eso, cuando hice un trace con una pagina me listó todas las ips (públicas)de maquinas que tienen este servicio.. mmm que bueno probe entonces con una ip de la lista que me salio que no era la mia y bue... chachannnn entre en la pantalla de login de un modem de algun vecino de mi ciudad que posee la misma conexion que yo... psss como mi isp se tomo la modestia de comprarse unos modems y borrarle de la carcasa la marca y modelo, etc.. pss me puse a snifear con cain y que me tirara la lista de adaptadores en mi red y bue me dio que era de marca xavi... pss tonces en base a eso me guie por las fotos hasta que encontre un par que eran iguales ... mmm lei sus características y bue llegue a que el sistema de config a travez de telnet es similar.. usan chipsets de conexant corp... en esos chipsets contienen dos tipos de sistema uno es el viking y el que esta en mi modem es el vulcan... asi que estudie un poco el sistema y bue hice un par de pruebas con winsock y funco... pesss no he probado por ftp ... es un poco mas complicado segun estuve viendo jejeje. En fin aqui explico un poco lo que he programado y luego pondre el link del proyecto que hice y que voy a ir mejorando.&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;Pues bueno utilize un winsock una msflegrid las wordlist que trae el brutus ae y bue tambien utiliza el mscomctl.ocx y otros ocx... psss con tiempo los ire agregando.. aqui va el link y mas explicaciones&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;Link:&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe scrolling="no" marginheight="0" marginwidth="0" frameborder="0" style="width:94px;height:94px;margin:3px;padding:0;border:1px solid #dde5e9;background-color:#ffffff;" src="http://cid-03eedad641125919.skydrive.live.com/embedrow.aspx/P%c3%bablico/brute.rar"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1930365813934817808-8433254126407832529?l=mundocodes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundocodes.blogspot.com/feeds/8433254126407832529/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1930365813934817808&amp;postID=8433254126407832529' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1930365813934817808/posts/default/8433254126407832529'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1930365813934817808/posts/default/8433254126407832529'/><link rel='alternate' type='text/html' href='http://mundocodes.blogspot.com/2008/11/brute-force-codigo-fuente-en-vb6.html' title='Brute force Codigo fuente en vb6'/><author><name>Emiliano</name><uri>http://www.blogger.com/profile/09995175871429177328</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17507617097001603858'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1930365813934817808.post-5734375986696290701</id><published>2008-10-23T16:59:00.001-07:00</published><updated>2009-02-16T10:37:31.204-08:00</updated><title type='text'>Definición de Ingeniería Inversa</title><content type='html'>&lt;b&gt; La ingeniería inversa se ha definido como el proceso de construir especificaciones de un mayor nivel de abstracción partiendo del código fuente de un sistema software o cualquier otro producto (se puede utilizar como punto de partida cualquier otro elemento de diseño, etc)...&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;Estas especificaciones pueden volver ser utilizadas para construir una nueva implementación del sistema utilizando, por ejemplo, técnicas de ingeniería directa.&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;La aplicación de ingeniería inversa nunca cambia la funcionalidad del software sino que permite obtener productos que indican cómo se ha construido el mismo. Se realiza permite obtener los siguientes beneficios:&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;Reducir la complejidad del sistema.&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;Generar diferentes alternativas.&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;Recuperar y/o actualizar la información perdida (cambios que no se documentaron en su momento).&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;Detectar efectos laterales.&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;Facilitar la reutilización.&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;La ingeniería inversa puede ser de varios tipos:&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;Ingeniería inversa de datos: Se aplica sobre algún código de bases datos (aplicación, código SQL, etc) para obtener los modelos relacionales o sobre el modelo relacional para obtener el diagrama entidad-relación&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;Ingeniería inversa de lógica o de proceso: Cuando la ingeniería inversa se aplica sobre código de un programa para averiguar su lógica o sobre cualquier documento de diseño para obtener documentos de análisis o de requisitos.&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;Ingeniería inversa de interfaces de usuario: Se aplica con objeto de mantener la lógica interna del programa para obtener los modelos y especificaciones que sirvieron de base para la construcción de la misma, con objeto de tomarlas como punto de partida en procesos de ingeniería directa que permitan modificar dicha interfaz.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1930365813934817808-5734375986696290701?l=mundocodes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundocodes.blogspot.com/feeds/5734375986696290701/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1930365813934817808&amp;postID=5734375986696290701' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1930365813934817808/posts/default/5734375986696290701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1930365813934817808/posts/default/5734375986696290701'/><link rel='alternate' type='text/html' href='http://mundocodes.blogspot.com/2008/10/definicin-de-ingeniera-inversa.html' title='Definición de Ingeniería Inversa'/><author><name>Emiliano</name><uri>http://www.blogger.com/profile/09995175871429177328</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17507617097001603858'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1930365813934817808.post-5918929282890839289</id><published>2008-10-17T10:28:00.000-07:00</published><updated>2009-02-16T10:36:24.956-08:00</updated><title type='text'>Bios, passwords y otras hierbas</title><content type='html'>&lt;b&gt; Bueno aqui publico como se resetean los bios , no exactamente es todo código sino mas bien metodos, si bien tambien posteare algunos codigos implementados en c, Pascal, Delphi, Ensamblador y otros lenguajes. &lt;/b&gt;&lt;b class="switch"&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Bueno aqui va:&lt;br /&gt;Cómo desactivar la contraseña de una BIOS &lt;br /&gt;&lt;br /&gt;Hay tres formas de desactivar una contraseña. Dos de estas formas son relativamente sencillas de llevar a cabo:&lt;br /&gt;&lt;br /&gt;La primera consiste en abrir la CPU y quitar la pila de la placa base, esperar de 3 a 5 segundos y volverla a colocar. Al quitar la pila los datos de la CMOS se pierden, incluida la contraseña. La mayoría de las placas base incluyen unos jumpers que permiten resetear la CMOS sin necesidad de extraer la pila.&lt;br /&gt;&lt;br /&gt;La segunda forma consiste en eliminar la contraseña provocando un error en la BIOS del sistema. Cuando se guarda la configuración de una BIOS, esta (casi todas las versiones lo hacen) genera un CRC en la que intervienen los parámetros de dicha configuración. Cuando se accede a la BIOS, dicho programa realiza de nuevo la operación del CRC y lo compara con el resultado que tenía previamente almacenado. De esta forma verifica que no se ha cambiado ningún dato de manera intencionada o por error. Si así sucediera, la BIOS reinicia los datos de la CMOS y con ellos el password, el cual deja de estar activo y permite el acceso a la BIOS.&lt;br /&gt;&lt;br /&gt;El problema de estas dos formas de desactivación de un password reside en que en los dos casos se pierde la configuración del sistema.&lt;br /&gt;&lt;br /&gt;La tercera forma es específica, mediante programación.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Codificación de un password de la BIOS Award&lt;br /&gt;&lt;br /&gt;El algoritmo en cuestión es bastante deficiente y el resultado de dicho algoritmo es un dato de tipo word sin signo (2 bytes) que se guarda en una posición de la CMOS que puede variar con respecto a la versión de esta. Algunas versiones de esta BIOS guardan dos passwords pero usan el mismo método de codificación.&lt;br /&gt;&lt;br /&gt;La codificación es bien simple. Consiste en sumar el código ASCII de cada una de las letras que forman el password, pero antes de pasar a sumar la siguiente letra, multiplica el resultado por 4. Es decir, coge una letra, lo multiplica por 4, le suma la segunda, multiplica este resultado por 4 y así hasta sumar la última letra del password (máximo 8 caracteres). Como he dicho, el resultado se almacena en 2 bytes, el número entero sin signo más alto que se puede representar en 2 bytes es 65535. Si el resultado del algoritmo es mayor a 65535, se divide ese resultado entre 65536. Toma el resultado entero obtenido de esa división y lo suma al resto de dicha división. Ese dato obtenido será el entero sin signo (2 bytes) que se almacenará en la CMOS.&lt;br /&gt;&lt;br /&gt;La verdad es que a nivel de código de máquina es más sencillo. Trabaja sobre un registro de tipo word, tamaño de dos bytes. Realiza la suma del ASCII de cada letra y hace un desplazamiento de bits dos posiciones hacia la izquierda. Al final, si el flag de acarreo está activado, es decir, si en cualquiera de los desplazamientos a la izquierda, se escapa algún bit, le suma al resultado un 1. &lt;br /&gt;&lt;br /&gt;Por ejemplo... Si el password en cuestión es Dragon&lt;br /&gt;El código ASCII de estas letras es: D = 68 r =114 a = 97 g =103 o = 111 n =110&lt;br /&gt;Teniendo el cuenta que inicialmente el resultado = 0, sumamos y multiplicamos por 4 cada resultado:&lt;br /&gt;(4 * 68) + 114 = 386&lt;br /&gt;(4 * 386) + 97 = 1641&lt;br /&gt;(4 * 1641) + 103 = 6667&lt;br /&gt;(4 * 6667) + 111 = 26779&lt;br /&gt;(4 * 26779) + 110 = 107226&lt;br /&gt;&lt;br /&gt;Lo que hay que hacer en este caso es dividir 107226 entre 65536, quedarnos con el resto, y al resto sumarle el nº de múltiplos de 65536 obtenido:&lt;br /&gt;107226 / 65536 = 1 , resto = 41690 &gt;&gt; 41690 + 1 = 41691. &lt;br /&gt;&lt;br /&gt;Para no complicarse la existencia, como las operaciones de suma y multiplicación no van a dar un resultado cuyo tamaño en memoria sea superior a 3 bytes, no sería necesario hacer divisiones. Bastaría con restar al nº obtenido 65535, va a dar lo mismo 107226 - 65535 = 41691. En definitiva, es truncar el resultado si es mayor de 65535.&lt;br /&gt;&lt;br /&gt;El resultado es 41691 que separado en 2 bytes es 162 y 219 ((162 * 256) + 219).&lt;br /&gt;&lt;br /&gt;Este algoritmo es deficiente porque este resultado se puede obtener con mas de una (mas de 200000) combinaciones de caracteres diferentes.&lt;br /&gt;&lt;br /&gt;Sabiendo esto, es fácil implementar un programa que codifique o descodifique dicho password para poder acceder así a cualquier BIOS. De todas formas también se puede implementar un programa que descodifique el password por fuerza bruta, pero eso... es otra historia ^_^.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Cómo acceder a la CMOS&lt;br /&gt;&lt;br /&gt;A la CMOS de cualquier placa base (PC) se accede mediante 2 puertos físicos:&lt;br /&gt;&lt;br /&gt;El puerto 112 (70h) de escritura, en el que se indica la dirección o posición del dato que se va a leer o escribir en la CMOS. El tamaño máximo de una CMOS suele ser de 256 bytes y cada BIOS usa un nº determinado de estos bytes, normalmente hasta 128. Luego el rango de escritura en ese puerto va de 0 a 255. &lt;br /&gt;El puerto 113 (71h) de lectura/escritura en el que se lee o escribe el dato de la posición indicada en el puerto 112. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Códigos de ejemplo para resetear la CMOS ya sea Award, Ami Bios o la que sea&lt;br /&gt;&lt;br /&gt;Para causar un error de CRC en la BIOS solo es necesario cambiar uno de los datos que intervienen el la operación de dicho CRC o el resultado en si. Si no se sabe cuál es la posición en la que se encuentra dicho resultado o los datos que intervienen en esa verificación lo más seguro es reescribir toda la CMOS con un dato aleatorio. El siguiente código logra nuestro propósito.&lt;br /&gt;&lt;br /&gt;Lenguaje C++ &lt;br /&gt;&lt;br /&gt;#pragma hdrstop&lt;br /&gt;#include &lt;condefs.h&gt;&lt;br /&gt;#include &lt;stdio.h&gt;&lt;br /&gt;#include &lt;conio.h&gt;&lt;br /&gt;&lt;br /&gt;#pragma argsused&lt;br /&gt;int main(int argc, char **argv)&lt;br /&gt;{&lt;br /&gt; char buffer[83];&lt;br /&gt; char *p;&lt;br /&gt;&lt;br /&gt; printf("Programado por Emiliano Traba");&lt;br /&gt; buffer[0] = 1;&lt;br /&gt; p = cgets(buffer);&lt;br /&gt; asm&lt;br /&gt;    {&lt;br /&gt;    mov  dx, 70h&lt;br /&gt;    mov  al, 00000&lt;br /&gt;    out  dx, al&lt;br /&gt;    int  21h&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Lenguaje Pascal/Delphi&lt;br /&gt;&lt;br /&gt;procedure ResetCMOS;&lt;br /&gt;var intPos: integer;&lt;br /&gt;begin&lt;br /&gt;   for intPos := 0 to255 do&lt;br /&gt;   begin&lt;br /&gt;      port[112] := intPos;&lt;br /&gt;      port[113] := 1;&lt;br /&gt;   end;&lt;br /&gt;end&lt;br /&gt; &lt;br /&gt; Lenguaje Ensamblador&lt;br /&gt;&lt;br /&gt;MOV CX, 00FFh;&lt;br /&gt;@Bucle:&lt;br /&gt;   MOV DX, 70h;&lt;br /&gt;   MOV AX, CX;&lt;br /&gt;   OUT DX, AX;&lt;br /&gt;   MOV DX, 71h;&lt;br /&gt;   MOV AX, 1h;&lt;br /&gt;   OUT DX, AX;&lt;br /&gt;LOOP @Bucle;&lt;br /&gt;&lt;br /&gt;o bien&lt;br /&gt;&lt;br /&gt;mov dx, 070h&lt;br /&gt;mov al, 02Eh&lt;br /&gt;out dx, al&lt;br /&gt;inc dx&lt;br /&gt;xor al, al&lt;br /&gt;out dx, al&lt;br /&gt;&lt;br /&gt;Con el debug de DOS&lt;br /&gt;&lt;br /&gt;* debug&lt;br /&gt;* o 70 2E&lt;br /&gt;* o 71 FF&lt;br /&gt;* Q&lt;br /&gt;&lt;br /&gt;o bien&lt;br /&gt;&lt;br /&gt;* debug&lt;br /&gt;* o 70 17&lt;br /&gt;* o 71 17&lt;br /&gt;* Q &lt;br /&gt;&lt;br /&gt;Con QBasic o Basic&lt;br /&gt;&lt;br /&gt;* 10 OUT &amp;H70,17&lt;br /&gt;* 20 OUT &amp;H71,0&lt;br /&gt; &lt;br /&gt;o bien&lt;br /&gt;&lt;br /&gt;* OUT &amp;H70,&amp;H17 UT &amp;H71,&amp;H17&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;Una vez ejecutado ese código y reiniciado el ordenador la BIOS presentará un mensaje de error de CRC, reseteará los datos de la CMOS y entrará automáticamente en la BIOS para configurar de nuevo el sistema. En ese momento el sistema ya es nuestro. Podemos reactivar disquetera, anular otros dispositivos etc...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Códigos de ejemplo sobre codificación del pass de una BIOS Award y AmiBios&lt;br /&gt;&lt;br /&gt;Con unos mínimos conocimientos en programación, a partir de la descripción dada sobre la codificación de un password en una BIOS Award podemos generar un código que haga dicha función. El propósito de este código sería devolver un entero a partir de un password que nosotros tecleemos. Damos por validado que ese password no es mayor de 8 letras.&lt;br /&gt;&lt;br /&gt;Código en Pascal para bios Award:&lt;br /&gt;&lt;br /&gt;function EncodePass(strPass: string): integer;&lt;br /&gt;var   intPos: integer;&lt;br /&gt;         LngRes: longint;&lt;br /&gt;begin&lt;br /&gt;      intPos := 1;&lt;br /&gt;      lngRes := 0;&lt;br /&gt;      while intPos &lt;= ord(strPass[0]) do&lt;br /&gt;      begin&lt;br /&gt;             lngRes := (lngRes * 4) + ord(strPass[intPos]);&lt;br /&gt;             inc(intPos);&lt;br /&gt;      end;&lt;br /&gt;      if lngRes &gt; 65535 then&lt;br /&gt;             lngRes := (lngRes div 65536) + (lngRes mod 65536);&lt;br /&gt;      Result := lngRes;&lt;br /&gt;end;  &lt;br /&gt;&lt;br /&gt;El resultado de esta función es un entero de 2 bytes. Para separar el resultado de la función en 2 bytes no hay mas que dividir ese dato por 256, quedarnos con el número de múltiplos obtenido en esa división y su resto. De tal forma que un entero esta compuesto por (múltiplos*256)+resto)&lt;br /&gt;&lt;br /&gt;Nota: Delphi dispone de las funciones Hi() y Lo() para separar ambos bytes.&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;Una vez resuelta esta función, sólo quedaría saber en qué posición de la CMOS se guarda ese resultado, observar si guarda primero el byte de mayor peso o biceversa y hallar de qué manera afecta ese dato en la operación de CRC para generar un CRC válido. Esta operación es sencilla y no tiene mas complicación que realizar comparaciones de los passwords introducidos en la BIOS con los datos modificados en la CMOS.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Descodificación del pass de una BIOS Award&lt;br /&gt;&lt;br /&gt;Hay dos formas de conseguir el password de una Award. Directamente por ingeniería inversa, o por fuerza bruta. A continuación se detallan las dos formas.&lt;br /&gt;&lt;br /&gt;Por Fuerza bruta:&lt;br /&gt;&lt;br /&gt;Este método consiste en realizar constantemente comparaciones de una cadena literal generada por software y codificada (ver función EncodePass) con el resultado existente en la CMOS, hasta encontrar aquella cadena cuya codificación coincida con dicho resultado. No necesariamente debe terminar cuando encuentre una cadena literal válida. Se puede continuar el escaneo para observar que el número de contraseñas válidas es inmenso, demostrando la deficiencia del algoritmo empleado por estas BIOS. Como contrapunto señalar que este método es bastante lento.&lt;br /&gt;&lt;br /&gt;El siguiente ejemplo muestra una función a la que se le pasa el entero que hay en la CMOS (intCmos) y devuelve solamente una cadena válida, si la hay:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Lenguaje Delphi:&lt;br /&gt;&lt;br /&gt;function GetPass(intCmos: integer): string;&lt;br /&gt;var   arrCadena: array[0..7] of char;&lt;br /&gt;         intPos: byte;&lt;br /&gt;         bfound, bOk, bTop: Boolean;&lt;br /&gt;         strResultado: string;&lt;br /&gt;begin&lt;br /&gt;      bFound := False;&lt;br /&gt;      bTop := False;&lt;br /&gt;      strResultado := '';&lt;br /&gt;      strPCopy(arrCadena, '        '); // Llenamos el buffer con espacios&lt;br /&gt;      while (not bFound) and (not bTop) do&lt;br /&gt;      begin&lt;br /&gt;             intPos := 0;&lt;br /&gt;             bOk := False;&lt;br /&gt;             repeat // Generamos cadena literal&lt;br /&gt;                   if ord(arrCadena[intPos]) = 255 then&lt;br /&gt;                   begin&lt;br /&gt;                         arrCadena[intPos] := chr(32);&lt;br /&gt;                         inc(intPos);&lt;br /&gt;                         if intPos = 8 then bTop := True; // Todas las cadenas evaluadas...&lt;br /&gt;                   end else&lt;br /&gt;                   begin&lt;br /&gt;                         arrCadena[intPos] := chr(ord(arrCadena[intPos]) + 1);&lt;br /&gt;                         bOK := True;&lt;br /&gt;                   end;&lt;br /&gt;             until bOk or bTop;&lt;br /&gt;             if bOK then&lt;br /&gt;             begin&lt;br /&gt;                   bFound := (EncodePass(string(arrCadena)) = intCmos);&lt;br /&gt;                   if bFound then strResultado := string(arrCadena);&lt;br /&gt;             end;&lt;br /&gt;      end;&lt;br /&gt;      Result := strResultado;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Por ingeniería inversa:&lt;br /&gt;&lt;br /&gt;Este método consiste en tratar de conseguir un password válido realizando para ello el proceso contrario a  la operación de codificación (y = x + 2 &gt;&gt; x = y - 2). Para ello lo que se trata de hacer es restar del dato de la CMOS un valor, dividirlo entre 4, y así sucesivamente procurando que el ultimo resto sea mayor de 32 y menor de 122, asegurando así que ese password no contiene caracteres especiales. Si el último valor no se encuentra en ese rango hay que retroceder y probar con otro valor. Así hasta encontrar un password válido, que no tiene por qué ser el introducido en un principio (de hecho, es improbable que lo sea). La ventaja del método de ingeniería inversa sobre la fuerza bruta es indudable. El resultado es instantáneo.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;En el siguiente código pasamos el entero que contiene la CMOS y la función devolverá un password válido generado por el método de ingeniería inversa. Este código no verifica la existencia de caracteres especiales en el password generado pero no es difícil implementarlo.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;function GetPassAward(intCmos:integer): string;&lt;br /&gt;var strTexto: string;&lt;br /&gt;       intLetra: integer;&lt;br /&gt;begin&lt;br /&gt;      strTexto := '';&lt;br /&gt;      while intCmos &gt; 123 do&lt;br /&gt;      begin&lt;br /&gt;             intLetra := 122;&lt;br /&gt;             while ((intCmos - intLetra) mod 4) &lt;&gt; 0 do&lt;br /&gt;                  dec (intLetra);&lt;br /&gt;             strTexto := chr(intLetra) + strTexto;&lt;br /&gt;             intCmos := (intCmos - intLetra) div 4;&lt;br /&gt;      end;&lt;br /&gt;      strTexto := chr(intCmos) + strTexto;&lt;br /&gt;      Result := strTexto;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Notas:&lt;br /&gt;&lt;br /&gt;Las BIOS AWARD dependiendo de la versión, guardan 1 o 2 contraseñas.&lt;br /&gt;&lt;br /&gt;La primera contraseña se encuentra en las posiciones 28 (1Ch) y 29 (1Dh) de la CMOS, siendo 1Ch el byte menos significativo.&lt;br /&gt;&lt;br /&gt;El CRC para la primera contraseña consiste en sumar los bytes desde la posición 16 (10h) a la 45 (2Dh) inclusive de la CMOS y el resultado de dos bytes los guarda en las posiciones 46 (2Eh) y 47 (2Fh), siendo 2Fh el byte menos significativo.&lt;br /&gt;&lt;br /&gt;El byte de la posición 17 (11h) de la CMOS (concretamente los dos primeros bits) contiene la información que indica que el password está activado (bits a 1) o desactivado (bits a 0). Para ponerlos a 0 solo habría que aplicar la máscara AND 0x11111100 (FCh) a dicho byte.&lt;br /&gt;&lt;br /&gt;La segunda contraseña se encuentra en las posiciones 96 (60h) y 97 (61h) de la CMOS, siendo 60h el byte menos significativo. El CRC y los bits de des/activación del password no los he comprobado.&lt;br /&gt;&lt;br /&gt;Decodificación del pass de una bios Ami&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Lenguaje QBasic:&lt;br /&gt;&lt;br /&gt;seed = reg(0) AND &amp;HF0 &lt;br /&gt;&lt;br /&gt;PRINT "Calculating." &lt;br /&gt;FOR count = 1 TO 6 &lt;br /&gt;PRINT "."; &lt;br /&gt;bioschar = reg(count) &lt;br /&gt;decchar = 0 &lt;br /&gt;IF bioschar &lt;&gt; 0 THEN &lt;br /&gt;DO &lt;br /&gt;decchar = decchar + 1 &lt;br /&gt;pass = 0 &lt;br /&gt;FOR bit = 0 TO 7 &lt;br /&gt;IF (&amp;HC3 AND 2 ^ bit) = 2 ^ bit AND (seed AND 2 ^ bit) = 2 ^ bit THEN &lt;br /&gt;pass = (pass + 1) MOD 2 &lt;br /&gt;END IF &lt;br /&gt;NEXT bit &lt;br /&gt;seed = INT(seed / 2) + pass * 128 &lt;br /&gt;LOOP WHILE seed &lt;&gt; bioschar &lt;br /&gt;bpass$ = bpass$ + CHR$(decchar) &lt;br /&gt;ELSE &lt;br /&gt;count = 6 &lt;br /&gt;END IF &lt;br /&gt;NEXT count &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Award:&lt;br /&gt;* 01322222&lt;br /&gt;* 1EAAh&lt;br /&gt;* 256256&lt;br /&gt;* 589589&lt;br /&gt;* 589721&lt;br /&gt;* ?award&lt;br /&gt;* admin&lt;br /&gt;* alfarome&lt;br /&gt;* aLLy&lt;br /&gt;* aPAf&lt;br /&gt;* award&lt;br /&gt;* award_?&lt;br /&gt;* award.sw&lt;br /&gt;* AWARD SW&lt;br /&gt;* AWARD_SW&lt;br /&gt;* AWARD_PW&lt;br /&gt;* award_ps&lt;br /&gt;* AWARD?SW&lt;br /&gt;* awkward&lt;br /&gt;* BIOS&lt;br /&gt;* bios*&lt;br /&gt;* biostar&lt;br /&gt;* biosstar&lt;br /&gt;* CONCAT&lt;br /&gt;* CONDO&lt;br /&gt;* condo&lt;br /&gt;* djonet&lt;br /&gt;* efmukl&lt;br /&gt;* g6PJ&lt;br /&gt;* h6BB&lt;br /&gt;* HELGA-S&lt;br /&gt;* HEWITT RAND &lt;br /&gt;* HLT&lt;br /&gt;* j09F&lt;br /&gt;* j256&lt;br /&gt;* j262&lt;br /&gt;* j322&lt;br /&gt;* j64&lt;br /&gt;* lkw peter&lt;br /&gt;* lkwpeter&lt;br /&gt;* PASSWORD&lt;br /&gt;* SER&lt;br /&gt;* setup&lt;br /&gt;* SKY_FOX&lt;br /&gt;* SWITCHES_SW&lt;br /&gt;* Sxyz&lt;br /&gt;* SZYX&lt;br /&gt;* t0ch88&lt;br /&gt;* t0ch20x&lt;br /&gt;* ttptha&lt;br /&gt;* TTPTHA&lt;br /&gt;* TzqF&lt;br /&gt;* wodj&lt;br /&gt;* ZAAADA&lt;br /&gt;* zbaaaca&lt;br /&gt;* zjaaadc&lt;br /&gt;* zjaaade&lt;br /&gt;&lt;br /&gt;Ami:&lt;br /&gt;* ami&lt;br /&gt;* amidecod&lt;br /&gt;* amipswd&lt;br /&gt;* AMIPSWD&lt;br /&gt;* AMI&lt;br /&gt;* A.M.I.&lt;br /&gt;* aammii&lt;br /&gt;* AMI~&lt;br /&gt;* amiami&lt;br /&gt;* AMI.KEY&lt;br /&gt;* AMISETUP&lt;br /&gt;* AMI?SW&lt;br /&gt;* AMI!SW &lt;br /&gt;* AMI_SW&lt;br /&gt;* bios310&lt;br /&gt;* BIOSPASS&lt;br /&gt;* CMOSPWD&lt;br /&gt;* KILLCMOS&lt;br /&gt;* 589589&lt;br /&gt;* ami.kez&lt;br /&gt;*ami°&lt;br /&gt;* helgaßs&lt;br /&gt;* HEWITT RAND &lt;br /&gt;&lt;br /&gt;Vobis:&lt;br /&gt;* merlin&lt;br /&gt;&lt;br /&gt;Advance Integration:&lt;br /&gt;* Advance&lt;br /&gt;&lt;br /&gt;ALDI (Medion):&lt;br /&gt;* medion&lt;br /&gt;&lt;br /&gt;Amptron:&lt;br /&gt;* Polrty&lt;br /&gt;&lt;br /&gt;AST:&lt;br /&gt;* SnuFG5&lt;br /&gt;&lt;br /&gt;Biostar:&lt;br /&gt;* Biostar&lt;br /&gt;* Q54arwms&lt;br /&gt;&lt;br /&gt;Concord:&lt;br /&gt;* last&lt;br /&gt;&lt;br /&gt;CTX International:&lt;br /&gt;* CTX_123&lt;br /&gt;&lt;br /&gt;CyberMax:&lt;br /&gt;* Congress&lt;br /&gt;&lt;br /&gt;Daytek und Daewoo:&lt;br /&gt;* Daytec&lt;br /&gt;* Daewuu&lt;br /&gt;&lt;br /&gt;DELL:&lt;br /&gt;* DELL&lt;br /&gt;&lt;br /&gt;Digital Equipment:&lt;br /&gt;* komprie&lt;br /&gt;&lt;br /&gt;Enox:&lt;br /&gt;* xo11nE&lt;br /&gt;&lt;br /&gt;Epox:&lt;br /&gt;* central&lt;br /&gt;&lt;br /&gt;Freetech:&lt;br /&gt;* Posterie&lt;br /&gt;&lt;br /&gt;HP Vectra Serie:&lt;br /&gt;* hewlpack&lt;br /&gt;&lt;br /&gt;IBM:&lt;br /&gt;* IBM&lt;br /&gt;* MBIUO&lt;br /&gt;* sertafu&lt;br /&gt;&lt;br /&gt;Iwill&lt;br /&gt;* iwill&lt;br /&gt;&lt;br /&gt;Jet Way:&lt;br /&gt;* spoom1&lt;br /&gt;&lt;br /&gt;Joss Technology:&lt;br /&gt;* 57gbz6&lt;br /&gt;* Technolgi&lt;br /&gt;&lt;br /&gt;MachSpeed:&lt;br /&gt;* sp99dd&lt;br /&gt;&lt;br /&gt;Magic-Pro:&lt;br /&gt;* prost&lt;br /&gt;&lt;br /&gt;Megastar:&lt;br /&gt;* Star&lt;br /&gt;&lt;br /&gt;Micron:&lt;br /&gt;* sldkj754&lt;br /&gt;* xyzall&lt;br /&gt;&lt;br /&gt;Micronics:&lt;br /&gt;* dn_04rjc&lt;br /&gt;&lt;br /&gt;M Technology:&lt;br /&gt;* mMmM&lt;br /&gt;&lt;br /&gt;Nimble:&lt;br /&gt;* xdfk9874t3&lt;br /&gt;&lt;br /&gt;Packard Bell:&lt;br /&gt;* Bell9&lt;br /&gt;&lt;br /&gt;QDI:&lt;br /&gt;* QDI&lt;br /&gt;&lt;br /&gt;Quantex:&lt;br /&gt;* teX1&lt;br /&gt;* xljlbj&lt;br /&gt;&lt;br /&gt;Research:&lt;br /&gt;* Col2ogro2&lt;br /&gt;&lt;br /&gt;Shuttle:&lt;br /&gt;* Spacve&lt;br /&gt;&lt;br /&gt;Siemens Nixdorf:&lt;br /&gt;* SKY_FOX&lt;br /&gt;&lt;br /&gt;Speedeasy:&lt;br /&gt;* lesarot1&lt;br /&gt;&lt;br /&gt;SuperMicro:&lt;br /&gt;* ksdjfg934t&lt;br /&gt;&lt;br /&gt;TMC:&lt;br /&gt;* BIGO&lt;br /&gt;&lt;br /&gt;Toshiba:&lt;br /&gt;* 24Banc81&lt;br /&gt;* Toshiba&lt;br /&gt;* toshy99&lt;br /&gt;&lt;br /&gt;Vextrec Technology:&lt;br /&gt;* Vextrec&lt;br /&gt;&lt;br /&gt;WIMBIOSnbsp BIOS v2.10:&lt;br /&gt;* Compleri&lt;br /&gt;&lt;br /&gt;Zenith:&lt;br /&gt;* 3098z&lt;br /&gt;* Zenith&lt;br /&gt;&lt;br /&gt;Zeos:&lt;br /&gt;* zeosx&lt;br /&gt;&lt;br /&gt;Compaq:&lt;br /&gt;*compaq&lt;br /&gt;&lt;br /&gt;Tinys:&lt;br /&gt;*Tiny&lt;br /&gt;&lt;br /&gt;METHOD _____ SYSTEM&lt;br /&gt;&lt;br /&gt;* Del during boot _____ AMI, Award&lt;br /&gt;* Esc during boot _____ Toshiba&lt;br /&gt;* F1 during boot _____ Toshiba; Phoenix; Late model PS/1 Value Point and 330s&lt;br /&gt;* F2 during boot _____ NEC&lt;br /&gt;* F10 when square in top RH corner of screen _____ Compaq&lt;br /&gt;* Ins during boot _____ IBM PS/2s w/ Reference Partition&lt;br /&gt;* Reset twice _____ Some Dells&lt;br /&gt;* Alt Enter _____ Dell&lt;br /&gt;* Alt ? _____ Some PS/2s&lt;br /&gt;* Ctrl-Esc _____ General&lt;br /&gt;* Ctrl Ins _____ Some PS/2s when pointer at top right of screen&lt;br /&gt;* Ctrl Alt Esc _____ AST Advantage, Award, Tandon&lt;br /&gt;* Ctrl Alt + _____ General&lt;br /&gt;* Ctrl Alt S _____ Phoenix&lt;br /&gt;* Ctrl Alt Ins _____ Zenith, Phoenix&lt;br /&gt;* Ctrl S _____ Phoenix&lt;br /&gt;* Ctrl Shift Esc _____ Tandon 386&lt;br /&gt;* Shift Ctrl Alt + Num Pad Del _____ Olivetti PC Pro&lt;br /&gt;* Setup disk _____ Old Compaqs, Epson (Gemini), IBM, IBM PS/2, Toshiba, most old 286s&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1930365813934817808-5918929282890839289?l=mundocodes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundocodes.blogspot.com/feeds/5918929282890839289/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1930365813934817808&amp;postID=5918929282890839289' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1930365813934817808/posts/default/5918929282890839289'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1930365813934817808/posts/default/5918929282890839289'/><link rel='alternate' type='text/html' href='http://mundocodes.blogspot.com/2008/10/bios-passwords-y-otras-hierbas.html' title='Bios, passwords y otras hierbas'/><author><name>Emiliano</name><uri>http://www.blogger.com/profile/09995175871429177328</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17507617097001603858'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1930365813934817808.post-2897154232733407268</id><published>2008-10-17T10:18:00.000-07:00</published><updated>2009-02-16T10:35:32.289-08:00</updated><title type='text'>Regiones para tus forms en vb6</title><content type='html'>&lt;b&gt; Hola ahora voy a postear como dibujar regiones para derle la forma que quieras a tus forms en vb6, es un antigüo codigo que tengo generado por Arturo Guzman Guerra, que me ha servido en algunos programas que he hecho.&lt;/b&gt;&lt;b class="switch"&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;En fin aqui va el codigo con explicación:&lt;br /&gt;&lt;br /&gt;Declaraciones de constantes , tipos y funciones:&lt;br /&gt;&lt;br /&gt;'Región con las partes que se interpolan entre dos regiones&lt;br /&gt;Public Const RGN_AND = 1&lt;br /&gt;'Región mediante la copia de una de las regiones origen&lt;br /&gt;Public Const RGN_OR = 2&lt;br /&gt;'Región con las partes de dos regiones que no se solapan&lt;br /&gt;Public Const RGN_XOR = 3&lt;br /&gt;'Región con las partes de una región que no interseccionan con la otra&lt;br /&gt;Public Const RGN_DIFF = 4&lt;br /&gt;'Región mediante la copia de una de las regiones origen&lt;br /&gt;Public Const RGN_COPY = 5&lt;br /&gt;'Redundantes pero bueno&lt;br /&gt;Public Const RGN_MAX = RGN_COPY&lt;br /&gt;Public Const RGN_MIN = RGN_AND&lt;br /&gt;&lt;br /&gt;'Tipo de dato RECT&lt;br /&gt;Public Type RECT&lt;br /&gt;        Left As Long&lt;br /&gt;        Top As Long&lt;br /&gt;        Right As Long&lt;br /&gt;        Bottom As Long&lt;br /&gt;End Type&lt;br /&gt;&lt;br /&gt;Public Type POINTAPI&lt;br /&gt;        x As Long&lt;br /&gt;        y As Long&lt;br /&gt;End Type&lt;br /&gt;&lt;br /&gt;'Región eliptica o circular mediante 4 coordenadas&lt;br /&gt;Public Declare Function CreateEllipticRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long&lt;br /&gt;'Región eliptica o circular mediante una estructura RECT&lt;br /&gt;Public Declare Function CreateEllipticRgnIndirect Lib "gdi32" (lpRect As RECT) As Long&lt;br /&gt;'Región poligonal&lt;br /&gt;Public Declare Function CreatePolygonRgn Lib "gdi32" (lpPoint As POINTAPI, ByVal nCount As Long, ByVal nPolyFillMode As Long) As Long&lt;br /&gt;'Región consistente en una serie de poligonos&lt;br /&gt;Public Declare Function CreatePolyPolygonRgn Lib "gdi32" (lpPoint As POINTAPI, lpPolyCounts As Long, ByVal nCount As Long, ByVal nPolyFillMode As Long) As Long&lt;br /&gt;'Región rectangular&lt;br /&gt;Public Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long&lt;br /&gt;'Región rectangular con una estructura RECT&lt;br /&gt;Public Declare Function CreateRectRgnIndirect Lib "gdi32" (lpRect As RECT) As Long&lt;br /&gt;'Región rectangular con los bordes redondeados&lt;br /&gt;Public Declare Function CreateRoundRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal X3 As Long, ByVal Y3 As Long) As Long&lt;br /&gt;'Para convinar varias regiones en una&lt;br /&gt;Public Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long&lt;br /&gt;'Establece la región en la ventana correspondiente&lt;br /&gt;Public Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long&lt;br /&gt;&lt;br /&gt;Forma de uso, en este caso se toma la forma rectangular con bordes redondeados, el cual lleva 6 valores el primer par son X1 e Y1, los cuales son lado izquierdo y parte superior del form, X2 e Y2, lado derecho y parte posterior del form, y por último X3 e Y3, este ultimo par da el grado de redondeo de cada esquina es un valor para los cuatro vertices , solo que con un valor separado para las X y otro para las Y, en fin aca va su aplicación:&lt;br /&gt;&lt;br /&gt;Public Sub EstablecerRegionPruebas()&lt;br /&gt;  Dim Retorno As Variant&lt;br /&gt;  Dim RGN, RGN2 As Long&lt;br /&gt;  RGN = CreateRoundRectRgn(10, 0, 320, 190, 40, 40)&lt;br /&gt;  Retorno = SetWindowRgn(frmPruebas.hWnd, RGN, True)&lt;br /&gt;End Sub&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1930365813934817808-2897154232733407268?l=mundocodes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundocodes.blogspot.com/feeds/2897154232733407268/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1930365813934817808&amp;postID=2897154232733407268' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1930365813934817808/posts/default/2897154232733407268'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1930365813934817808/posts/default/2897154232733407268'/><link rel='alternate' type='text/html' href='http://mundocodes.blogspot.com/2008/10/regiones-para-tus-forms-en-vb6.html' title='Regiones para tus forms en vb6'/><author><name>Emiliano</name><uri>http://www.blogger.com/profile/09995175871429177328</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17507617097001603858'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1930365813934817808.post-3046938507572161280</id><published>2008-10-16T10:57:00.000-07:00</published><updated>2009-04-03T08:39:04.486-07:00</updated><title type='text'>Apariencia de Windows XP y Vista en tu programa VB6</title><content type='html'>Cito un post que vi:&lt;br /&gt;&lt;br /&gt;Hola este es mi primer post y aqui posteo este módulo que tengo guardado de hace mucho tiempo.&lt;br /&gt;&lt;br /&gt;El módulo que postearé es el que utilizo para que mis programas en vb6 se vean con el formato de Windows XP y Vista. Para ello deben tildar alguno de los componentes "Microsoft Windows Common Controls X.X"&lt;br /&gt;&lt;br /&gt;Luego crean el siguiente modulo, el cual tendra el proceso principal (Void Main o Sub Main depende del lenguaje):&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Option Explicit&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Public Type tagInitCommonControlsEx&lt;br /&gt;lngSize As Long&lt;br /&gt;lngICC As Long&lt;br /&gt;End Type&lt;br /&gt;&lt;br /&gt;Public Declare Function InitCommonControlsEx Lib "comctl32.dll" (iccex As tagInitCommonControlsEx) As Boolean&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Public Const ICC_USEREX_CLASSES = &amp;amp;H200&lt;br /&gt;&lt;br /&gt;Public Sub Main()&lt;br /&gt;&lt;br /&gt;On Error Resume Next&lt;br /&gt;&lt;br /&gt;Dim iccex As tagInitCommonControlsEx&lt;br /&gt;With iccex&lt;br /&gt;.lngSize = LenB(iccex)&lt;br /&gt;.lngICC = ICC_USEREX_CLASSES&lt;br /&gt;End With&lt;br /&gt;InitCommonControlsEx iccex&lt;br /&gt;Form1.Show&lt;br /&gt;On Error GoTo 0&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;Por último agregan el archivo de recursos que aqui les dejo para descargar, el cual deben agregarlo en "Documentos Relacionados"&lt;br /&gt;&lt;iframe scrolling="no" marginheight="0" marginwidth="0" frameborder="0" style="width:94px;height:94px;margin:3px;padding:0;border:1px solid #dde5e9;background-color:#ffffff;" src="http://cid-03eedad641125919.skydrive.live.com/embedgrid.aspx/P%c3%bablico/manifest.res"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1930365813934817808-3046938507572161280?l=mundocodes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mundocodes.blogspot.com/feeds/3046938507572161280/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1930365813934817808&amp;postID=3046938507572161280' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1930365813934817808/posts/default/3046938507572161280'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1930365813934817808/posts/default/3046938507572161280'/><link rel='alternate' type='text/html' href='http://mundocodes.blogspot.com/2008/10/algunos-mdulos.html' title='Apariencia de Windows XP y Vista en tu programa VB6'/><author><name>Emiliano</name><uri>http://www.blogger.com/profile/09995175871429177328</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17507617097001603858'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry></feed>