Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - .:UND3R:.

#226
Hola como podría tracear desde ollyscript con la condición 1 tildada es decir eip esta en el rango de 580000 y 7FFFFF

Gracias
#227
Ingeniería Inversa / [Script]HBP bypass excepciones
23 Septiembre 2011, 07:14 AM
Hola a todos, les dejo un simple script para aquellos que se inician en esto, consiste en un script para colocar HBP tanto como read access execute, la gran ventaja es que estos HBP son borrados si se producen excepciones con el fin de no ser detectados una vez retomada la excepción se vuelven a colocar:

Código (asm) [Seleccionar]
var AUX
VAR TIPO
var KIUSER
var ZWCONT
var HBP
gpa "KiUserExceptionDispatcher", "ntdll.dll"
mov KIUSER, $RESULT
bp KIUSER
gpa "ZwContinue", "ntdll.dll"
mov ZWCONT, $RESULT
bp ZWCONT
ADDRESS:
ask "Dirección del HBP"
cmp $RESULT, 0
je ERROR
mov HBP, $RESULT
PREGUNTA:
ASK "Tipo de HBP,r-w-x"
MOV TIPO,$RESULT
CMP TIPO, "r"
JE INICIO
CMP TIPO, "w"
JE INICIO
CMP TIPO, "x"
JE INICIO
JMP ERROR2
INICIO:
EVAL "{TIPO}"
bphws HBP, $RESULT
TRABAJO:
eob COMPROBAR
run
COMPROBAR:
cmp eip,KIUSER
je QUITAR
cmp eip,ZWCONT
je BREAKPOINT
cmp eip,AUX
je RESTAURAR
jmp SALIR

QUITAR:
bphwc HBP
jmp TRABAJO

BREAKPOINT:
mov AUX,esp
add AUX,4
mov AUX,[AUX]
add AUX,0b8
mov AUX,[AUX]
bp AUX
jmp TRABAJO
RESTAURAR:
bc AUX
jmp INICIO

ERROR:
msg "Dirección incorrecta"
jmp ADDRESS
SALIR:
msgyn "HBP encontrado,intentar nuevamente?"
cmp $RESULT,1
je INICIO
ret
ERROR2:
MSG "Tipo de HBP incorrecto"
JMP PREGUNTA


Es muy básico por lo que si a alguien se le ocurre alguna idea la integramos de inmediato, Saludos
#228
Ingeniería Inversa / quien me puede subir ildams??
23 Septiembre 2011, 03:15 AM
Muchas gracias, por su ayuda
#229
Ingeniería Inversa / Net reflector?
23 Septiembre 2011, 03:13 AM
Quién tiene la 7.5?, con serial mejor si me pueden mandar un privado

Saludos y gracias
#230
pues eso, cada vez que descargo aplicaciones o programas firefox nunca me ha detectado algo en su análisis y a ustedes?
#231
Crackeando Atom email studio
Nombre:Atom email studio
versión:7.10
Página web:http://www.email-masivo.com

Abrimos el programa para analizarlo de manera visual y notamos que en la parte superior aparece que no estamos registrados:


Ahora cargamos el programa con OllyDbg y buscamos las referencias de texto:


Notaremos que estamos muy abajo (OllyDbg ordena las referencias por address)
por lo que lo más probable es que el programa una vez lanzado se dirija a address de menor valor, por ello vayamos al inicio de la primera referencia de texto y buscamos register:


Se detiene aquí:


Notamos una string interesante [Registered version], hagamos doble click en ella verla en el desamblador:


Si subimos un poco más arriba notaremos algunos saltos interesantes:


Ensamblemos con NOP los saltos encontrados para que cuando el programa pase por ahí no salte y pase por la string [Registered version]


Le damos RUN(F9) y si nos fijamos en la parte de arriba notaremos que nos aparece que estamos registrado:


Nos vamos a Help->Registration Status y notaremos que no estamos registrado (Tenemos 9 programas sin registrar),tan solo cambiamos el texto:


Reiniciemos el programa (Ctrl+F2) sin guardar los cambios. Vamos adonde ensamblamos NOP, notaremos que anteriormente hay un call coloquemos un BP en el y demos RUN:


Dentro del call vemos que hay un llamado a 9 calls que podrían ser la comprobación de los programas si es que están Registrados o en modo DEMO:


Entremos al primer call:


encontramos otra call, entremos a ella:
Citar00638285  |.  E8 06FFFFFF   CALL AtomicEm.00638190

Dentro de ella notaremos una string vayamos hacia ella:
006381EB lkey


Siguiente a la string veremos una call, entremos hacia ella:


Nuevamente veremos otra call, si entramos a ella notaremos un llamado a la API:
RegQueryValueExW

Citarfunction retrieves the type and data for a specified value name associated with an open registry key

encargada de devolver el tipo y los datos de un valor especificado, en este caso de
HKEY_CURRENT_USER\Software\AtomPark\Atomic Mail Sender\lkey:




Nos devolverá en EAX y EDX el valor 2h


Cerremos todo e intentemos crear un valor alfanumérico en:


Entramos en: Atomic Mail Sender\ y en todos los subdirectorios y creamos un valor alfanumérico llamado lkey


(Son exáctamente 9 subdirectorios en donde se debe crear el valor alfanumérico)

Iniciamos el programa y notaremos en la ventana principal que estamos registrados, sin necesidad de haber modificado el programa:


y si nos vamos a Help->Registration Status notaremos que tenemos nuestro programa registrado sin ninguna limitación:

#232
Representante profesional

Nombre:Representante profesional
Version:7.0
Autor del tutorial:UND3R
Dificultad:1

Abrimos el programa y nos muestra lo siguiente:


Si introducimos DEMO, podemos entrar de manera gratuita, Si ingresamos un serial falso nos muestra lo siguiente:


Si intentamos arrancar el programa desde Ollydbg nos muestra lo siguiente:


Si notamos la primera API que se llama es CommandLineA, por lo que necesita parámetros para que el programa arranque bien, intentemos ver las propiedades del acceso directo que creo el programa:


Como OllyDbg no nos da la posibilidad de agregar comandos al momento de ejecutar, generaremos un error forzado en el programa para luego poder depurarlo (Just in time debugging):


Lo iniciamos y nos muestra el siguiente error (Alerta del manejador de excepciones genérico que posee windows):


Presionamos Depurar y dejamos nuestro programa como antes:


Ahora si buscamos Name (Label) In current Module encontraremos dos APIS interesantes CompareStringA y CompareStringW, coloquemos un BP en ambas, si presionamos RUN y colocamos caulquier serial se detendrá en el BP pudiendo ver en el stack la comparación con mi serial falso y el serial verdadero, probemos:


La limitación de este software era la creación de clientes, intentemos crear clientes:


#233
Desarrollo Web / Reposicionar el título de mi blog
15 Septiembre 2011, 04:14 AM
Hola a todos, bueno les cuento hoy me hice un blog y estoy teniendo problemas con el título, ya que está muy arriba y topa con el logo del blog que es una llave,pueden verlo por ustedes mismos:
http://licensesolutions.blogspot.com

No sé nada de desarrollo web, por eso me hice un blog, por eso mi pregunta es como podría reposicionar el título de mi blog un poco más abajo para que no se viera sobre puesto con la llave?, gracias

adjunto el source de la web:

Código (html4strict) [Seleccionar]
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html expr:dir='data:blog.languageDirection' xmlns='http://www.w3.org/1999/xhtml' xmlns:b='http://www.google.com/2005/gml/b' xmlns:data='http://www.google.com/2005/gml/data' xmlns:expr='http://www.google.com/2005/gml/expr'>
  <head>
    <b:include data='blog' name='all-head-content'/>
    <title><data:blog.pageTitle/></title>
    <b:skin><![CDATA[/*
-----------------------------------------------
Blogger Template Style
Name:     Rock My World
Author:   Klodian
URL:      www.deluxetemplates.net
Date:     July 2009
License:  This free Blogger template is licensed under the Creative Commons Attribution 3.0 License, which permits both personal and commercial use.
However, to satisfy the 'attribution' clause of the license, you are required to keep the footer links intact which provides due credit to its authors. For more specific details about the license, you may visit the URL below:
http://creativecommons.org/licenses/by/3.0/
----------------------------------------------- */
#navbar-iframe {
display: none !important;
}
/* Variable definitions
   ====================
   <Variable name="bgcolor" description="Page Background Color"
             type="color" default="#fff" value="#ffffff">
   <Variable name="textcolor" description="Text Color"
             type="color" default="#333" value="#333333">
   <Variable name="linkcolor" description="Link Color"
             type="color" default="#58a" value="#5588aa">
   <Variable name="pagetitlecolor" description="Blog Title Color"
             type="color" default="#666" value="#666666">
   <Variable name="descriptioncolor" description="Blog Description Color"
             type="color" default="#999" value="#999999">
   <Variable name="titlecolor" description="Post Title Color"
             type="color" default="#c60" value="#cc6600">
   <Variable name="bordercolor" description="Border Color"
             type="color" default="#ccc" value="#cccccc">
   <Variable name="sidebarcolor" description="Sidebar Title Color"
             type="color" default="#999" value="#999999">
   <Variable name="sidebartextcolor" description="Sidebar Text Color"
             type="color" default="#666" value="#666666">
   <Variable name="visitedlinkcolor" description="Visited Link Color"
             type="color" default="#999" value="#999999">
   <Variable name="bodyfont" description="Text Font"
             type="font" default="normal normal 100% Georgia, Serif" value="normal normal 100% Georgia, Serif">
   <Variable name="headerfont" description="Sidebar Title Font"
             type="font"
             default="normal normal 78% 'Trebuchet MS',Trebuchet,Arial,Verdana,Sans-serif" value="normal normal 78% 'Trebuchet MS',Trebuchet,Arial,Verdana,Sans-serif">
   <Variable name="pagetitlefont" description="Blog Title Font"
             type="font"
             default="normal normal 200% Georgia, Serif" value="normal normal 200% Georgia, Serif">
   <Variable name="descriptionfont" description="Blog Description Font"
             type="font"
             default="normal normal 78% 'Trebuchet MS', Trebuchet, Arial, Verdana, Sans-serif" value="normal normal 78% 'Trebuchet MS', Trebuchet, Arial, Verdana, Sans-serif">
   <Variable name="postfooterfont" description="Post Footer Font"
             type="font"
             default="normal normal 78% 'Trebuchet MS', Trebuchet, Arial, Verdana, Sans-serif" value="normal normal 78% 'Trebuchet MS', Trebuchet, Arial, Verdana, Sans-serif">
   <Variable name="startSide" description="Side where text starts in blog language"
             type="automatic" default="left" value="left">
   <Variable name="endSide" description="Side where text ends in blog language"
             type="automatic" default="right" value="right">
*/

/* Use this with templates/template-twocol.html */

body {
-moz-background-clip:border;
-moz-background-inline-policy:continuous;
-moz-background-origin:padding;
background:transparent url(http://r00t-pssw.webcindario.com/images/BlogLicensesolution/background.jpg) repeat scroll 0 0;
color:#333333;
font-family:Georgia Serif;
font-size:small;
font-size-adjust:none;
font-stretch:normal;
font-style:normal;
font-variant:normal;
font-weight:normal;
line-height:normal;
margin:0;
text-align:center;
}
a:link {
border-bottom:1px solid #777777;
color:#754C24;
text-decoration:none;
}
a:visited {
border-bottom:1px solid #888888;
color:#754C24;
text-decoration:none;
}
a:hover {
color:#000000;
text-decoration:none;
}
a img {
border-width:0;
}
#header-wrapper {
margin-left:auto;
margin-right:auto;
padding-top:32px;
width:820px;
}
#header-inner {
background-position:center center;
margin-left:auto;
margin-right:auto;
}
#header {
color:#D7D1BD;
margin:5px;
text-align:center;
}
#header h1 {
font-family:Georgia,Serif;
font-size:48px;
font-size-adjust:none;
font-stretch:normal;
font-style:normal;
font-variant:normal;
font-weight:normal;
letter-spacing:-2px;
line-height:normal;
margin:5px 5px 1px;
padding:15px 20px 2px;
text-transform:uppercase;
}
#header a {
border-bottom:medium none;
color:#D7D1BD;
text-decoration:none;
}
#header a:hover {
color:#D7D1BD;
}
#header .description {
color:#D7D1BD;
font-family:georgia;
font-size:16px;
font-size-adjust:none;
font-stretch:normal;
font-style:normal;
font-variant:normal;
font-weight:normal;
letter-spacing:1px;
line-height:normal;
margin:0 5px 5px;
padding-left:20px;
padding-right:20px;
padding-top:0;
text-transform:none;
}
#header img {
margin-left:auto;
margin-right:auto;
}
#outer-wrapper {
-moz-background-clip:border;
-moz-background-inline-policy:continuous;
-moz-background-origin:padding;
background:transparent url(http://r00t-pssw.webcindario.com/images/BlogLicensesolution/wrap.jpg) no-repeat scroll 0 0;
font-family:Georgia,Serif;
font-size:100%;
font-size-adjust:none;
font-stretch:normal;
font-style:normal;
font-variant:normal;
font-weight:normal;
line-height:normal;
margin:-35px auto 0;
padding:10px;
text-align:left;
width:960px;
}
#main-wrapper {
float:left;
overflow:hidden;
width:550px;
word-wrap:break-word;
}
#sidebar-wrapper {
color:#000000;
float:right;
margin-top:39px;
overflow:hidden;
width:220px;
word-wrap:break-word;
}
h2 {
border-bottom:1px solid;
color:#31281A;
font-family:georgia;
font-size:16px;
font-size-adjust:none;
font-stretch:normal;
font-style:normal;
font-variant:normal;
font-weight:normal;
letter-spacing:0;
line-height:1.4em;
margin:1.5em 0 0.75em;
text-transform:none;
}
h2.date-header {
border:medium none;
color:#666666;
font-size:12px;
margin-left:0;
margin-right:0;
margin-top:1.5em;
}
.post {
margin:0.5em 0 1.5em;
padding-bottom:1.5em;
}
.post h3 {
color:#000000;
font-family:arial;
font-size:22px;
font-weight:bold;
line-height:1.4em;
margin:-5px 0 0;
padding:0 0 4px;
}
.post h3 a, .post h3 a:visited, .post h3 strong {
border-bottom:medium none;
color:#000000;
display:block;
font-weight:bold;
text-decoration:none;
}
.post h3 strong, .post h3 a:hover {
color:#333333;
}
.post-body {
color:#000000;
font-family:arial;
font-size:20px;
line-height:9.6em;
margin:0 0 0.90em;
}
.post-body blockquote {
line-height:9.9em;
}
.post-footer {
border-top:9px solid #998E72;
color:#31281A;
font-family:georgia;
font-size:20px;
font-size-adjust:none;
font-stretch:normal;
font-style:normal;
font-variant:normal;
font-weight:normal;
letter-spacing:0;
margin:0.90em 0;
padding-bottom:10px;
padding-left:20px;
padding-top:20px;
text-align:left;
text-transform:none;
}
.comment-link {
margin-left:0.6em;
}
.post img {
border:9px solid #CCCCCC;
padding:9px;
}
.post blockquote {
font-family:georgia;
font-style:italic;
margin:1em 20px;
}
.post blockquote p {
margin:0.99em 0;
}
.comment-author {
}
#comments h4 {
color:#666666;
font-weight:bold;
letter-spacing:0.2em;
line-height:1.4em;
margin:1em 0;
text-transform:none;
}
#comments-block {
line-height:1.6em;
margin:1em 0 1.5em;
}
#comments-block .comment-author {
border:1px solid #EEEEEE;
font-size:15px;
font-weight:normal;
margin-right:20px;
padding:5px;
}
#comments .blogger-comment-icon, .blogger-comment-icon {
-moz-background-clip:border;
-moz-background-inline-policy:continuous;
-moz-background-origin:padding;
background:#998E72 none repeat scroll 0 0;
border-color:#998E72;
border-style:solid;
border-width:2px 1px 1px;
line-height:16px;
padding:5px;
}
#comments-block .comment-body {
border-left:1px solid #998E72;
border-right:1px solid #998E72;
margin-left:0;
margin-right:20px;
padding:7px;
}
#comments-block .comment-footer {
border-bottom:1px solid #998E72;
border-left:1px solid #998E72;
border-right:1px solid #998E72;
font-size:11px;
line-height:1.4em;
margin:-0.25em 20px 2em 0;
padding:5px;
text-transform:none;
}
#comments-block .comment-body p {
margin:0 0 0.75em;
}
.deleted-comment {
color:gray;
font-style:italic;
}
#blog-pager-newer-link {
float:left;
}
#blog-pager-older-link {
float:right;
}
#blog-pager {
text-align:center;
}
.feed-links {
clear:both;
line-height:2.5em;
}
.sidebar {
color:#000000;
line-height:1.5em;
}
.sidebar ul {
list-style-image:none;
list-style-position:outside;
list-style-type:none;
margin:0;
padding:0;
}
.sidebar li {
line-height:1.5em;
margin:0;
padding:0 0 0.25em 15px;
text-indent:-15px;
}
.sidebar .widget, .main .widget {
margin:0 0 1.5em;
}
.main .Blog {
border-bottom-width:0;
}
.profile-img {
border:1px solid #CCCCCC;
float:left;
margin:0 5px 5px 0;
padding:4px;
}
.profile-data {
color:#999999;
font-family:'Trebuchet MS',Trebuchet,Arial,Verdana,Sans-serif;
font-size:78%;
font-size-adjust:none;
font-stretch:normal;
font-style:normal;
font-variant:normal;
font-weight:bold;
letter-spacing:0.1em;
line-height:1.6em;
margin:0;
text-transform:uppercase;
}
.profile-datablock {
margin:0.5em 0;
}
.profile-textblock {
line-height:1.6em;
margin:0.5em 0;
}
.profile-link {
font-family:'Trebuchet MS',Trebuchet,Arial,Verdana,Sans-serif;
font-size:78%;
font-size-adjust:none;
font-stretch:normal;
font-style:normal;
font-variant:normal;
font-weight:normal;
letter-spacing:0.1em;
line-height:normal;
text-transform:uppercase;
}
#footer {
clear:both;
color:#EEEEEE;
font-family:arial;
letter-spacing:0;
line-height:1.6em;
margin:0 auto 10px;
padding-left:30px;
text-align:left;
text-transform:none;
width:861px;
}
#content {
-moz-background-clip:border;
-moz-background-inline-policy:continuous;
-moz-background-origin:padding;
background:transparent url(http://r00t-pssw.webcindario.com/images/BlogLicensesolution/content.jpg) repeat-y scroll 0 0;
margin:20px auto 5px;
width:860px;
}
.wrapper {
-moz-background-clip:border;
-moz-background-inline-policy:continuous;
-moz-background-origin:padding;
background:transparent url(http://r00t-pssw.webcindario.com/images/BlogLicensesolution/top.jpg) no-repeat scroll center top;
padding:20px;
width:820px;
}
.menu {
-moz-background-clip:border;
-moz-background-inline-policy:continuous;
-moz-background-origin:padding;
background:transparent url(http://r00t-pssw.webcindario.com/images/BlogLicensesolution/menu.jpg) repeat-x scroll 0 0;
color:#A67C52;
height:47px;
width:820px;
}
.menuleft {
float:left;
width:600px;
}
.menuright {
float:right;
width:200px;
}
ul.menulist, ul.menulist-r {
list-style-type:none;
margin:0;
padding:0;
}
ul.menulist li {
border-right:1px solid #502C09;
display:block;
float:left;
font-size:11px;
padding:0 20px 5px;
}
ul.menulist li a, ul.menulist-r a {
display:block;
font-size:14px;
letter-spacing:-1px;
line-height:12px;
padding:10px 0 0;
text-transform:uppercase;
}
ul.menulist-r li {
border-left:1px solid #502C09;
display:block;
font-size:11px;
padding:0 15px 5px;
}
ul.menulist li:hover, ul.menulist-r li:hover {
-moz-background-clip:border;
-moz-background-inline-policy:continuous;
-moz-background-origin:padding;
background:transparent url(http://r00t-pssw.webcindario.com/images/BlogLicensesolution/menu-hover.jpg) repeat-x scroll 0 0;
}
.menu a {
border-bottom:medium none;
color:#FFFFFF;
text-decoration:none;
}
.rss {
-moz-background-clip:border;
-moz-background-inline-policy:continuous;
-moz-background-origin:padding;
background:transparent url(http://r00t-pssw.webcindario.com/images/BlogLicensesolution/rss.png) no-repeat scroll 0 2px;
padding:0 0 10px 33px;
}
.rssd {
padding:0 0 0 33px;
}
.banner {
margin:0;
padding:0;
width:820px;
}
.sidebar a {
border-bottom:medium none;
}
.post-footer a {
border-bottom:medium none;
}
.comment-author a {
color:#FFFFFF;
}
.comment-author {
color:#FFFFFF;
}
#search {
float:right;
margin:0 0 5px;
padding:10px 0 5px;
width:220px;
}
#search input#searchsubmit {
-moz-background-clip:border;
-moz-background-inline-policy:continuous;
-moz-background-origin:padding;
background:#EDEDD4 none repeat scroll 0 0;
border:1px solid #AAA380;
font-family:Georgia;
font-size:11px;
margin:0 0 10px 2px;
padding:3px 5px;
}
#search input#s {
-moz-background-clip:border;
-moz-background-inline-policy:continuous;
-moz-background-origin:padding;
background:#EDEDD4 none repeat scroll 0 0;
border:1px solid #AAA380;
font-family:Georgia;
font-size:11px;
padding:4px 5px;
width:130px;
}
#search-page {
margin:0 0 5px;
padding:10px 0 5px;
}
#search-page input #searchsubmit {
-moz-background-clip:border;
-moz-background-inline-policy:continuous;
-moz-background-origin:padding;
background:#EDEDD4 none repeat scroll 0 0;
border:1px solid #AAA380;
font-family:Georgia;
font-size:11px;
margin:0 0 10px 2px;
padding:3px 5px;
}
#search-page input#s {
-moz-background-clip:border;
-moz-background-inline-policy:continuous;
-moz-background-origin:padding;
background:#EDEDD4 none repeat scroll 0 0;
border:1px solid #AAA380;
font-family:Georgia;
font-size:11px;
padding:4px 5px;
width:260px;
}
#footer a {
color:#eee;
}
#footer a:hover {
color:#fff;
}


]]></b:skin>
  </head>

  <body>
  <div id='outer-wrapper'><div id='wrap2'>

    <!-- skip links for text browsers -->
    <span id='skiplinks' style='display:none;'>
      <a href='#main'>skip to main </a> |
      <a href='#sidebar'>skip to sidebar</a>
    </span>

    <div id='header-wrapper'>
      <b:section class='header' id='header' maxwidgets='1' showaddelement='no'>
<b:widget id='Header1' locked='true' title='.:License Solutions:. (cabecera)' type='Header'/>
</b:section>
    </div>
<div id='content'>
<div class='wrapper'>

                                <div class='menu'><!--start of menu-->

                                        <div class='menuleft'>
                                        <ul class='menulist'>
                                        <li><a expr:href='data:blog.homepageUrl'>Principal</a><span>Pagina principal</span></li>
                                        <li><a href='http://licensesolutions.blogspot.com/2011/09/acerca-de-license-solutions.html'>Acerca de</a><span>License solutions</span></li>
                                        <li><a href='http://licensesolutions.blogspot.com/2011/09/contacta-nuestra-empresa.html'> Contactenos </a><span>Realizar pedidos</span></li>
                                        </ul>
                                        </div>

                                </div><!--end of menu-->


                                <div class='banner'><!--start of banner-->
                                <img alt='Rocks My World' src='http://r00t-pssw.webcindario.com/images/BlogLicensesolution/header.png'/>
                                </div><!--end of banner-->
    <div id='content-wrapper'>

      <div id='crosscol-wrapper' style='text-align:center'>
        <b:section class='crosscol' id='crosscol' showaddelement='no'/>
      </div>

      <div id='main-wrapper'>
        <b:section class='main' id='main' showaddelement='no'>
<b:widget id='Blog1' locked='true' title='Entradas del blog' type='Blog'/>
</b:section>
      </div>

      <div id='sidebar-wrapper'>
<div id='search'>
                                        <form action='/search' id='searchthis' method='get'>
<div>
        <input id='s' name='q' size='15' type='text' value=''/>
        <input alt='Search' id='searchsubmit' type='submit' value='Search'/>
</div>
</form>
                                        </div>
        <b:section class='sidebar' id='sidebar' preferred='yes'>
<b:widget id='Label1' locked='false' title='Indice:' type='Label'/>
</b:section>
      </div>

      <!-- spacer for skins that want sidebar and main to be the same height-->
      <div class='clear'>&#160;</div>

    </div> <!-- end content-wrapper --> </div></div>

    <div id='footer'>
Copyright &#169; 2011 <a expr:href='data:blog.homepageUrl'><data:blog.title/></a>
    </div>

  </div></div> <!-- end outer-wrapper -->
</body>
</html>


Muchas gracias
#234
Ingeniería Inversa / Re posicionar un call near?
13 Septiembre 2011, 19:31 PM
a través de qué fórmula puedo saber que valores HEX debe tener un call en el dump (después de E8) me explico

si copio y pego un call en otra dirección no funciona ya que apunta a otra dirección y no a la que apuntaba estando en la posición original, no sé si se entiende

Saludos
#235
Como puedo poner una variable en la condición del comando:
BPCND

ej:

BPCND 4271B0, "EAX==VARIABLE"

Muchas gracias
#236
Hola a todos, bueno les comento tengo problemas con el antidump en el capítulo piden hacer un script que aparece en el capítulo 52 explicado.

pero mi problema recae en que quiero reparar el antidump de manera manual para luego hacer mi propio script, ricardo narvaja comenta:

CitarVemos que es un call a una api en este caso GetStartupInfoA y que al retornar, ya que es un
comando de 6 bytes lo hace en 4272db, y en el que esta protegido con asprotect tambien debe
retornar a la misma direccion lo que ocurre es que fue reemplazado por un comando de 5 bytes
siendo el 6 basura, asi que si ponemos un BP en la direccion de retorno del call en el empacado con
asprotect siempre debe ser un byte mas que el que indica la siguiente linea que se ve, en este caso la
siguiente linea es
004272D5 E8 268D5801 CALL 019B0000
004272DA D9F6 FDECSTP
pues el BP para que pare al retornar de la api, debe ser BP 4272db y alli parara al retornar, es muy
importante usar BPMs aquí o sea si yo quisiera resolver esto, pensaria que para tracear y no
volverme viejo ya que es una rutina larguisima, en este caso en algun momento debe acceder a los
bytes de la api, aunque sea como en este caso para leerlos para copiarlos a otro sitio, asi que se que
en este caso a la api GetStartupInfoA le pongo un BPM ON ACCESS en las primeras lineas de la
api, con eso descubrire en mi maquina donde lee la api correcta, luego debo hallar el momento que
cambia este CALL 019B0000 ya que luego de leer los bytes de la api los copia a otro lugar para
ejecutarlos, asi que eso a mi no me interesa, solo cuando cambia el CALL 19b0000 por el call a ese
nuevo lugar, eso tambien puede usarse un BPM ON WRITE y asi obtengo el lugar donde quiere
modificar el call, con lo cual yo puedo alli accionar el script para que guarde lo que yo quiero para
reparar el call y reemplazarlo por los bytes correctos y no lo que quiere guardar el jeje, esa seria la
idea a ver quien la hace mejor.
Tendran que luchar y pensar que debe funcionar en cualquier maquina, asi que adelante y a trabajar
espero que alguien lo resuelva tienen hasta el 17 de agosto de 2006 como fecha limite.
Ademas de la mencion y el uso del script del ganador, se mencionaran los nombres de todos los que
enviaron scripts que funcionan aunque no hayan ganado, como premio consuelo jeje.
Suerte y good work
Ricardo Narvaja
02/08/06

De partida no sé que trabajar creo que el original no el dumpeado. si alguien puediera resolver esto de manera manual, muchas gracias
#237
Hola a todos, bueno hace un tiempo cada vez que abro ollydump este me aparece arriba en la pantalla mostrándome la mitad de ollydump dandome problemas para presionar el botón dump (no visible) lo he probado en una máquina virtual y me ocurre lo mismo es decir queda muy arriba la ventanda, alguien sabe solucionar eso?

Saludos

PD:poseo un netbook, creo que puede ser eso
#238
Pues eso, como lo puedo hacer?
es decir tengo un fecha.txt ,dentro tiene una fecha como hago para que el sistema utilice esa fecha,saludos
#239
Hola a todos tengo una duda cuando un crackme llama:
rtcGetMonthOfYear
rtcGetYear

no logro ver los valores que retornan, no sé si están en el stack o en los registros...
Si me pudieran aclarar, saludos
#240
Ingeniería Inversa / Duda con opcode sete bl
7 Septiembre 2011, 21:05 PM
eso
#241
Sugerencias y dudas sobre el Foro / Asunto
7 Septiembre 2011, 18:28 PM
Se ha cambiado el tema?
#242
Ingeniería Inversa / Duda con VirtualProtect
7 Septiembre 2011, 06:10 AM
Hola a todos, bueno tengo una duda con uno de los valores de esta API:


0044A62A   .  68 50CA4500   PUSH 45CA50 ->lpflOldProtect
0044A62F   .  6A 40         PUSH 40->flNewProtect
0044A631   .  68 00100000   PUSH 1000->dwSize
0044A636   .  68 00004000   PUSH UnPackMe.00400000->lpAddress
0044A63B   .  FFD0          CALL VirtualProtect

BOOL VirtualProtect(

    LPVOID lpAddress,   // address of region of committed pages
    DWORD dwSize,   // size of the region
    DWORD flNewProtect,   // desired access protection
    PDWORD lpflOldProtect    // address of variable to get old protection
   );

Esto no se que es,ni como obtenerlo, si alguien me pudiera explicar

Muchas gracias

#243
que diferencia tiene con los ?? :huh:

Saludos
#244
Nadie ha creado retos?, creen uno para que mejoremos lo script, para crearlos es muy simple, ir al tema:
http://foro.elhacker.net/ingenieria_inversa/warscriptzoneintroduccion_a_scriptss-t338044.0.html

y crearlo con el esquema que aparece ahí, muchas gracias :D
#245
Hola a todos, me surge una duda nuevamente y es como puedo alterar un valor de un ejecutable, me explico

en el dump tengo lo siguiente:
00401029  0C FA 46 00

como puedo cambiar lo que está dentro de 00401029 por FF FF FF FF?

Muchas gracias
                                               .
#246
Ingeniería Inversa / plugin para FUU?
5 Septiembre 2011, 21:00 PM
 :silbar: que es?
#247
Este es mi primer script, está orientado en la búsqueda del OEP de manera genérica, una serie de métodos que están basados en el tutorial de introducción de ricardo narvaja, el objetivo de este script es poder optimizar la búsqueda de script, evitando realizar comandos repetitivos que ralentizan y demoran el trabajo de obtener un OEP,  los métodos de este script son los siguientes:

-PUSHAD-POPAD
una vez realizado este método, podemos buscar los siguientes Opcodes:
push ebp,push 0
-EXCEPCIONES
Este método consiste en colocar un BPM después de pasar por la última excepción
nos da la posibilidad de que si no sabemos cual es, el script en el registro (log)nos mostrará
una vez que estemos en la última excepción, nos da la posibilidad de dirigirnos en el retorno de la excepción para luego poder combinarlo con el método de bpmx(opcional)
-BPMX(Memory Breakpoint on execution)
este nos pedirá como requerimiento tener nuestro ollydbg parcheado (parcheado 4),nos preguntará en cual sección deseamos colocar el memory breakpoint on execution
-API COMÚN POR PACKER
Coloca un BP GetProcAddress la última vez que es llamada desde el packer, si no sabemos nos da la posibilidad de logear las veces que son llamadas
(el address a colocar no necesariamente debe ser el último, si no el último que es llamado desde la sección del packer)
-API COMÚN POR PROGRAMA
Este nos da la posibilidad de poder colocar un bp en 2 apis muy usadas al inicio de los programas:
GetModuleHandleA,GetVersion una vez que se detiene el programa se debe buscar el retorno y subir unas cuantas lineas

Script:
/*
    -=================================================================-
                           .:[CracksLatinoS]:.                       
        Script realizado por :UND3R                                       
        Script para : Generic OEP finder                                               
        Configuracion: Plugins Break on Execution o OllyDbg parcheado (cuando sea requerido por el script)                     
        Fecha : 05/09/2011                                           
                                                                     
                    -=[ Comentario del Script ]=-                   
     Agradecimientos:Apuromafo,Karmany,MCKSys Argentina,Tinkipinki                                                               
     por brindarme siempre ayuda cuando la necesito                                                               
     y a todos los de CracksLatinoS                                                               
    -=================================================================-
*/
START:
ASK "Métodos:Pushad-Popad(1),Excepciones(2),BPMX(3),API packer(4),API programa(5),Salir(x)"
cmp 1,$RESULT   //compara el resultado de ask con 1
je PUSHADPOPAD  //si el resultado es 1 se dirijirá al label PUSHADPOPAD
CMP 2,$RESULT   //compara el resultado de ask con 2
JE EXCEPCIONES  //si el resultado es 2 se dirijirá al label EXCEPCIONES
CMP 3,$RESULT   //compara el resultado de ask con 3
JE METODOBPMR   //si el resultado es 3 se dirije al label METODOBPMR
CMP 4,$RESULT
JE MUY_USADA_PACKER
CMP 5,$RESULT
JE MUY_USADA_PROGRAMA
CMP "x",$RESULT //compara el resultado de ask con x
JE SALIRDELSCRIPT //si el resultado es x terminará el script
CMP 0,$RESULT
JE SALIRDELSCRIPT


PUSHADPOPAD:
VAR AUX2 //declara una variable
VAR AUX //declara una variable
VAR KIUSER //declara una variable
VAR ZWCONT //declara una variable
VAR entrypoint //declara una variable
GPA "KiUserExceptionDispatcher", "ntdll.dll" //devuelve el address de una api
MOV KIUSER, $RESULT //mueve el resultado de la operacion anterior a KIUSER
BP KIUSER //coloca un bp en la address que apunta KIUSER
GPA "ZwContinue", "ntdll.dll" //devuelve el address de una api
MOV ZWCONT, $RESULT // mueve el resultado de la operación anterior a ZWCONT
BP ZWCONT //coloca un bp en la address que apunta ZWCONT
MOV entrypoint,[eip],1 //mueve el primer byte de eip a la variable entrypoint
CMP entrypoint,60 //compara entrypoint con 60 (equivale a un pushad)
JE PASO1 //si el primer opcode es pushad salta
TICND "byte [eip]==60" //tracea hasta encontrar un pushad
PASO1:
STI //Step into (F7), para ejecutar el pushad
MOV AUX,esp //mueve el valor de esp dentro de la variable AUX
INICIO:
BPHWS AUX, "r" //coloca un hadware breakpoint on access en AUX
TRABAJO:
EOB COMPROBAR // si ocurre una excepción o un bp se dirije a COMPROBAR
RUN //se ejecuta ollydbg (f9)
COMPROBAR:
CMP eip,KIUSER //compara eip con KIUSER
JE QUITAR   //si estamos en KiUserExceptionDispatcher irá a quitar BPHWS
CMP eip,ZWCONT //compara eip con ZWCONT
JE RESTAURAR  //si estamos en ZwContinue irá a restaurar
CMP eip,AUX2  //compara eip con el retorno de una excepción
JE RESTAURAR2 //si estamos en el retorno irá a restaurar2
JMP SALIR     //terminado todo se dirige a salir
QUITAR:
BPHWC         //quita el BPHWS
JMP TRABAJO  //salta a trabajo
RESTAURAR:
MOV AUX2,[ESP+4]  //introduce el valor de CONTEXT a AUX2
ADD AUX2,0b8 //le suma 0b8 para saber a que lugar retomará una vez pasada la excepción
BP AUX2      //sabiendo el retorno coloca un BP en ella     
JMP TRABAJO  //salta a trabajo
RESTAURAR2:
BC AUX2     //elimina el BP del retorno de la excepción
JMP INICIO   //salta a INICIO para volver a colocar el BPHWS
SALIR:
BPHWC //limpia todos los BPHWS
BC    //limpia todos los bp
MSGYN "Aproximación terminada,desea buscar OPcodes?"
CMP 1,$RESULT //compara resultado con 1(YES)
JZ BUSCAR_PUSH_EBP //si la comparación anterior se cumple salta al laber BUSCAR_PUSH_EBP
JMP START  //retorna al menú principal

EXCEPCIONES:
VAR BORRARZWCONTINUE //declara una variable
VAR ZWCONTINUAR //declara una variable
VAR COMPRO_MSG              //declara una variable
VAR EXCEPCION_ENCONTRADA         //declara una variable
VAR ZXCVAR     //declara una variable
VAR ZWCONTIN    //declara una variable
VAR ESP14       //declara una variable
VAR EXCEP       //declara una variable
VAR KIUSEREXCEP  //declara una variable
GPA "KiUserExceptionDispatcher", "ntdll.dll" //devuelve el address de una api
MOV KIUSEREXCEP,$RESULT   //mueve el address de la api a la variable KIUSEREXCEP
ASK "Introduzca la última excepción, si no sabe cual es introduzca 0"
MOV EXCEP,$RESULT
CMP 0,EXCEP   //compara con 0
JZ BUSCADOREX  //si es 0 irá a BUSCADOREX

BUSCADORCOND1:
BP KIUSEREXCEP  //coloca un bp en la variable KIUSEREXCEP
BUSCADORCOND2:
EOB BUSCADORCOND3  //si existe una excepción o bp se dirige a BUSCADORCOND3
RUN                //F9
BUSCADORCOND3:
MOV ESP14,[esp+14]  //Mueve el valor de [esp+14] en ESP14
CMP ESP14,EXCEP     //Compara si el valor es el mismo que la excepción introducida en el ask
JE ZXC              //si se cumple se dirijirá al label ZXC
JMP BUSCADORCOND2

BUSCADOREX:
MSG " El programa se ejecutará,una vez ejecutado se debe reiniciar (Control+F2)"
MSGYN "Las excepciones serán registradas en el log de OllyDBG,desea que estas también aparescan como MSG?"
MOV COMPRO_MSG,$RESULT
BP KIUSEREXCEP //Coloca un BreakPoint KIUSEREXCEP
BUSCADOREX2:
EOB BUSCADOREX3 //Si existe una excepción o un Breakpoint va a BUSCADOREX3
RUN
BUSCADOREX3:
MOV EXCEPCION_ENCONTRADA,[esp+14]
cmp COMPRO_MSG,0
JE BUSCADOREX4
EVAL "La última excepción por el momento es en la dirección:{EXCEPCION_ENCONTRADA}"
MSG $RESULT
BUSCADOREX4:
LOG EXCEPCION_ENCONTRADA
JMP BUSCADOREX2


ZXC:
EVAL "El programa se ha detenido en la excepción: {EXCEP}"
MSG $RESULT
MSGYN "Desea continuar en el retorno de la excepción?"
CMP 1,$RESULT
JE RETORNOEXCEP
BPHWC
BC
JMP START
RETORNOEXCEP:
BC
GPA "ZwContinue", "ntdll.dll"
BP $RESULT
MOV BORRARZWCONTINUE,$RESULT
RETORNOEXCEP2:
EOB RETORNOEXCEP3
RUN
RETORNOEXCEP3:
CMP eip,$RESULT
JZ RETORNOEXCEP4
CMP eip,[ZWCONTINUAR]
JZ RETORNOEXCEP5
JMP RETORNOEXCEP2
RETORNOEXCEP4:
MOV ZWCONTINUAR,[esp+4]
LOG ZWCONTINUAR
ADD ZWCONTINUAR,0b8
BP [ZWCONTINUAR]
JMP RETORNOEXCEP2
RETORNOEXCEP5:
BC BORRARZWCONTINUE
EVAL "Retorno de la excepción EIP:({eip})"
MSG $RESULT
JMP START

METODOBPMR:
MSG "Este método consiste en colocar un MemoryBreakPoint on EXECUTION,Se requiere el plugins Break On Execution o un OllyDbg parcheado para continuar"

VAR CONTADORBPM2 //establece una variable
VAR CONTADORBPM //establece una variable
VAR MODULOPESIGNA3 //establece una variable
VAR VIRTUAL_ADDRESS //establece una variable
VAR SIZE_OF_SECCION //establece una variable
VAR NAME_OF_SECCION //establece una variable
VAR MODULOPESIGNA2 //establece una variable
VAR MODULOPESIGNA  //establece una variable
VAR MEMORYBREAKPOINT //establece una variable
VAR MEMORYBREAKPOINT2 //establece una variable
VAR MEMORYBREAKPOINT3 //establece una variable
VAR NSECCIONES    //establece una variable
VAR PESIGNA      //establece una variable
VAR MODULO       //establece una variable
VAR MODULO2       //establece una variable
VAR MODULOP      //establece una variable
///////////////////////////////////////
GMI eip,MODULEBASE //obtiene el MODULEBASE
MOV MODULO,$RESULT  //el resultado de la operación anterior se guarda en la var MODULO
MOV MODULOP,MODULO  //mueve lo que está en MODULO a MODULOP
MOV MODULO2,MODULO
ADD MODULOP,3c       //a MODULOP se le suma 3c
MOV PESIGNA,[MODULOP]  //lo que está dentro de MODULEBASE+3C se guarda en PESIGNA
ADD MODULO,PESIGNA //suma MODULO con PESIGNA
MOV MODULOPESIGNA,MODULO //suma MODULOPESIGNA con MODULO
ADD MODULO,6 //MODULO se le suma 6 para saber el número de secciones
MOV NSECCIONES,[MODULO],1 //mueve un byte de lo que está dentro de [MODULO] a NSECCIONES
ADD MODULOPESIGNA,F8      //suma F8 a MODULOPESIGNA,para dirigirse al primer nombre de las secciones
MOV MODULOPESIGNA3,MODULOPESIGNA
LOG "*|--Informacion de secciones--|:" //logea lo que está en comillas
EVAL "Total de secciones:{NSECCIONES}"
LOG $RESULT
NMOFSEC:
MOV MODULOPESIGNA2,MODULOPESIGNA //mueve lo que está en MODULOPESIGNA a MODULOPESIGNA2
MOV SIZE_OF_SECCION,MODULOPESIGNA
ADD SIZE_OF_SECCION,8
MOV VIRTUAL_ADDRESS,SIZE_OF_SECCION
ADD VIRTUAL_ADDRESS,4
MOV NAME_OF_SECCION,[MODULOPESIGNA2]
BUF NAME_OF_SECCION //Convierte una String o dword a buffer
STR NAME_OF_SECCION //Convierte un buffer a STRING
LOG NAME_OF_SECCION //logea NOMBRE_DE_SECCION       
LOG [VIRTUAL_ADDRESS]
LOG [SIZE_OF_SECCION]
LOG "______________________________"
ADD MODULOPESIGNA,28 //suma 28 a MODULOPESIGNA
CMP [MODULOPESIGNA],0 //compara lo que está dentro de [MODULOPESIGNA] con 0
JZ MENSAJEDESEC //si es 0 es por que ya no hay más secciones
JMP NMOFSEC     //si hay más secciones salta a NMOFSEC
MENSAJEDESEC:
EVAL  "Numero de secciones encontradas:({NSECCIONES})más información ir al log"
MSG $RESULT
PREGNUMSEC:
ASK "Introduzca el nº de sección en donde desea colocar un memory breakpoint ej:1,2,3"
MOV MEMORYBREAKPOINT,$RESULT  //mueve el resultada a una variable
MOV CONTADORBPM,MEMORYBREAKPOINT //mueve una variable a otra
CMP MEMORYBREAKPOINT,NSECCIONES  //compara el nº de la sección con el introducido
JA  ERRORSEC //si es mayor se dirijirá a errorsec
CMP MEMORYBREAKPOINT,0 //compara nº introducido con 0
JZ ERRORSEC //si es 0 este irá a errorsec
CMP MEMORYBREAKPOINT,1  //compara con 1
JE MEMORYBREAK //si se comple se dirije a MEMORYBREAKPOINT
DEC CONTADORBPM  //toma el resultado del ASK anterior y lo disminuye en 1
MOV CONTADORBPM2,0 //CONTADORBPM2 toma el valor de 0
CONTADORBPMA:
//la finalidad de este loop está hecho para que modulopesigna se encuentre en el nombre de la sección elejida
CMP CONTADORBPM,CONTADORBPM2 //compara 0 con la sección elegida-1 ej:sec 3 cmp 0,2
JZ MEMORYBREAK //si se cumple se dirige a MEMORYBREAK
ADD MODULOPESIGNA3,28 //si no se dirije a la segunda sección sumándole 28
INC CONTADORBPM2     //incrementa el contador en 1
JMP CONTADORBPMA     //salta nuevamente a CONTADORBPMA
MEMORYBREAK:
ADD MODULOPESIGNA3,8 //estando en la sección elejida se le suma 8 para obtenr el size
MOV MEMORYBREAKPOINT2,[MODULOPESIGNA3] //guarda el (size) en MEMORYBREAKPOINT2
ADD MODULOPESIGNA3,4  //Le suma 4 para obtener el virtualadress
MOV MEMORYBREAKPOINT3,[MODULOPESIGNA3] //guarda el (virtualadress) en MEMORYBREAKPOINT3
ADD MEMORYBREAKPOINT3,MODULO2  //le suma la base a virtualadress
BPRM MEMORYBREAKPOINT3, MEMORYBREAKPOINT2 //coloca un BPRM con los parámetros obtenidos anteriormente
EVAL "Se ha colocado un BPM en:({MEMORYBREAKPOINT3}),con un tamaño de:({MEMORYBREAKPOINT2})"
MSG $RESULT
MSGYN "Desea Iniciar el programa(F9)?"
CMP 1,$RESULT   //compara el resultado con yes(1)
JZ ARRANCAR    //si se cumple se dirije al label ARRANCAR
JMP START //si no se dirije al menú principal
ARRANCAR:
RUN     //arranca el programa
ERRORSEC:
MSG "El nº de sección introducida es incorrecta, intente nuevamente"
JMP PREGNUMSEC //salta a preguntar el número de secciones

MUY_USADA_PACKER:
VAR ULTIMA_GETPROC //establece una variable
VAR COUNT //establece una variable
VAR RESP_GET //establece una variable
VAR ADDRESS_GET_PROC   //establece una variable
MOV COUNT,0
GPA "GetProcAddress", "kernel32.dll" //obtiene el address de GetProcAddress
MOV ADDRESS_GET_PROC,$RESULT //El Address es movida a ADDRESSGETPROC
BP ADDRESS_GET_PROC //Coloca un BP en GetProcAddress
ASK "Introduzca el address de retorno de la última call Realizada por el packer,si no sabe introduzca 0"
MOV ULTIMA_GETPROC,$RESULT
CMP 0,ULTIMA_GETPROC
JE BUSCADOR_API_PACKER
COMP_GET_PROC_ADDRES:
BP ADDRESS_GET_PROC  //coloca un bp en la variable ADDRESS_GET_PROC
COMP_GET_PRO_ADDRESS2:
EOB COMP_GET_PROC  //si existe una excepción o bp se dirige a COMP_GET_PROC
RUN                //F9
COMP_GET_PROC:
CMP [esp],ULTIMA_GETPROC     //Compara si el valor es el mismo que la excepción introducida en el ask
JE FINALIZAR_GET_PROC        //si se cumple se dirijirá al label FINALIZAR_GET_PROC
JMP COMP_GET_PRO_ADDRESS2

BUSCADOR_API_PACKER:
MSG "El programa se ejecutará,una vez ejecutado se debe reiniciar (Control+F2)"
BPL ADDRESS_GET_PROC,"[esp]"
RUN

FINALIZAR_GET_PROC:
MSG "Estado:Completado"
MSGYN "Desea colocar un MemoryBreakPoint on execution?"
CMP 1,$RESULT
JE METODOBPMR
BC
JMP START

MUY_USADA_PROGRAMA:
VAR APIUSADAPROGRAMA   //establece una variable
ASK "Opciones:GetVersion(1),GetModuleHandle(2)"
CMP 1,$RESULT
JE GETVERSION
CMP 2,$RESULT
JE GETMODULE
CMP 0,$RESULT
GETVERSION:
GPA "GetVersion","kernel32.dll"
MOV APIUSADAPROGRAMA,$RESULT
JMP MUY_USADA_PROGRAMA2
GETMODULE:
GPA "GetModuleHandleA","kernel32.dll"
MOV APIUSADAPROGRAMA,$RESULT
MUY_USADA_PROGRAMA2:
BP APIUSADAPROGRAMA  //coloca un bp en la API elegida por ASK
EOB MUY_USADA_PROGRAMA3 //si encuentra una excepción o un breakpoint se dirije al label
RUN  //inicia el programa (F9)
MUY_USADA_PROGRAMA3:
MSG "Estado:Completado"
BC   //limpia todos los bp
JMP START      //salta al menu principal

BUSCAR_PUSH_EBP:
ASK "OPcode: PUSH EBP(1),PUSH 0(2)"
CMP 2,$RESULT
JE BUSCAR_PUSH_EBP3
CMP 1,$RESULT
JE BUSCAR_PUSH_EBP2
JMP ERROR_OPCODE
BUSCAR_PUSH_EBP2:
TICND "byte [eip]==55" //tracea hasta encontrar un push ebp
JMP BUSCAR_PUSH_EBP4
BUSCAR_PUSH_EBP3:
TICND "byte [eip]==6a" //tracea hasta encontrar un push 0
BUSCAR_PUSH_EBP4:
MSGYN "OPcode encontrado,desea continuar" //muestra un mensaje al ser encontrado
CMP 1,$RESULT
JE BUSCAR_PUSH_EBP
JMP START

ERROR_OPCODE:
MSG "La opción introducida es incorrecta,por favor intente nuevamente"
JMP BUSCAR_PUSH_EBP
SALIRDELSCRIPT:
ret     //Sale del script


Espero que les sea de gran ayuda al momento de crackear,Saludos
#248
eso,Saludos
#249
Hola a todos, tengo una pequeña duda como puedo mostrar en un MSG algunos resultados obtenidos por un script ejemplo

134
123
124

el problema reside en que cuando ya tengo los números de secciones del programa y los nombres me gustaría que aparecieran en el MSG

existe una forma de ir adicionando resultados en una variable es decir cada resultado de una variable que me de, esta no sea sobrescrita si no adicionada

ej:
var x
mov x,1
hola:
eval {x}
MSG $RESULT
inc x
jmp hola

el primer mensaje que sea 1
el segundo 1,2
el tercero 1,2,3

ya que esos son los valores que va tomando x

por eso como lo de las secciones es aleatorio y el máximo de secciones son 96
tendría que crear 96 variables y sería horrible

Saludos
#250
todos los tipos de saltos no apuntan como antes (flechita roja)

¿Como se soluciona eso?, Saludos
#251
WarScriptZone
Concurso interno de este subforo
creadores:Tinkipinki y UND3R
Objetivo:aprender desde cero scripting o mejorar la técnica

Reglas:
1)en este tema solo se pueden publicar retos ha realizar y el esquema de publicación es el siguiente:


Nombre:EJ:OEPFinder
Objetivo del script:EJ:Activar los hadware bp para Pelock.exe
Dificultad del script:EJ (1-10)
Descarga del crackme: :EJ: www.crackme.com
Estado del reto:WarScriptZone,WarScriptZone,WarScriptZone
Solucionado por: EJ:UND3R
Solución: Link de la solución
Comentario adicional:Ej no será difícil lograrlo



en donde los colores significan los siguientes estados:
Rojo:No logrado
Amarillo:Logrado con script sin explicar
Verde:Logrado con script explicado

2)La solución del script debe ser en un nuevo tema anteponiendo:
[WarScriptZone]

3)una vez creada la solución el creador del reto debe modificar el estado y quien lo solucionó

4)Cualquier duda con este tema o script que pertenezcan a este wargame por favor crear un nuevo tema con anteponiendo
[WarScriptZone]Duda

Espero que disfrutemos de este WarScriptZone
#252
eso osea tengo lo siguiente:
30585055 es decir UPX
pero al momento de pushearlo al log, este me muestro los hexadecimales y no la strign

[VALOR]: 30585055

como hago para que diga:

[VALOR]: UPX

en el log?

creo que primero se debe realizar un rev para luego con otro comando pasarlo a ascii
Gracias
#253
pues eso más que nada saber el número de secciones y saber el base code más su size, muchas gracias por dedicar tanto tiempo en explicar

Saludos
#254
eso gracias :D
#255
Hola a todos otra pregunta
var HOLA
var AUX
mov AUX,[eax]
mov  HOLA,byte AUX??  :huh:

No me funciona, Saludos
#256
eso, saludos
#257
crackme1 por nitr0k1ller
Autor: Nitr0k1ller
Nombre: Crackme1
Fecha: 18 de agosto de 2007
Tamaño: 52,0 KB
Compilador y/o Packer: Visual Basic
Objetivos:
     1- Activar un botón
     2- Encontrar un serial válido
Dificultad: 2 (1-10)

Abrimos el crackme, notaremos que el botón está desactivado


Intentemos activarlo, con el método de buscar string (Control+B) y busquemos en ASCII Check:

si al detenerse no aparece la string se debe analizar el código nuevamente o remover el análisis, contamos hasta 11 editamos con Binary edit
cambiando 00 por 01, guardemos los cambios y carguemos nuevamente el crackme modificado para ver si funcionó:


ahora buscamos el siguiente comando:


la primera vez que se detiene en la búsqueda coloquemos un BP:


Le damos RUN y colocamos un serial falso:


y se detiene en el BP que pusimos, si seguimos traceando llegaremos a la siguiente call, relacionada con la fecha:


si seguimos traceando, llegaremos a otra call que está relacionada con la fecha:


Luego de pasar por más API'S del mismo estilo empieza a concatenar string, lo más probable es que sean los datos obtenidos por las call mencionadas anteriormente:


Luego llega a una comparación:

Si entramos a la call con f7 hasta el push 0, hacemos click derecho en EAX y seleccionamos follow in stack, si subimos un poco, veremos los datos que son comparados:


en este caso 920111-1546

al momento de realizar la comparación mi fecha era: 1/9/2011 con 15:46
por lo que el serial correcto es:

mes/año/día-hora/minuto
#258
Hola a todos, una duda como podría colocar un BP en el siguiente OP code en el que estoy
#259
Ingeniería Inversa / duda con ollyscript
1 Septiembre 2011, 18:41 PM
hola, tengo una duda me gustaría poder logear algunos resultados

por ejemplo:
x+z=´
$resultado

pero $resultado ira variando mientras se está ejecutando el script
pero me gustaría tener almacenado todos los resultados y no el último,no se si se entiende, es decir que por ejemplo que por el label paso1: pasará muchas veces unos valores y que sean registrados todos, como se hace?


Saludos y gracias
#260
CrackMe 1 by kaiser1313

Autor: kaiser1313
Nombre: CrackMe 1
Fecha: 30 de mayo de 2009
Tamaño: 715 KB
Compilador y/o Packer: Borland C++
Objetivos:Conseguir la clave correcta.
Dificultad: 1-2 (1-10).

Intentemos algo simple BP en la API:
MessageBoxA:


Una vez cargado el crackme, intentemos con un serial falso:


Vemos que la API es llamada desde: 00401AD6:


Si subimos un poco, notaremos el salto, por lo que la comprobación podría estar un poco más arriba:


Coloquemos BP en las CALL para saber si son esas las que verifican si el serial introducido es correcto o no:


Le damos RUN, e intentamos nuevamente con el mismo serial, una vez detenido se detiene en la primera call a la cual le pusimos un bp y si miramos en la PILA notaremos algo interesante:


Si introduzco la string que está arriba de mi serial falso, obtendremos el serial verdadero en este caso 1117 pero si abrimos nuevamente el crackme nos aparece que el serial es incorrecto, será algún RND?, pongamos un bp nuevamente en la call:


Notaremos que ha variado el serial correcto. por lo que intentaremos que cuando nos aparezca el mensaje de error nos muestre el serial correcto,dirijámonos al salto decisivo:


lleguemos hasta donde se comienza a pushear los valores para llamar a la API MessageBoxA (Mensaje de clave incorrecta):


estando detenido en 00401AC5, miremos el stack para ver si aun existe el serial correcto:


Intentemos modificar el PUSH del TITLE del MessageBoxA por un PUSH [esp-50](Debe ser en el Title y no en el Mensaje, debido a que después del OP code se coloca un NOP, lo que haría que no se pudiera llamar correctamente a la API sin hacer injerto):


Guardamos los cambios e introducimos un serial falso:


Notaremos que el serial correcto en esta ocasión es 390
#261
Crack Me 0.2 by Red Mx
Autor: Red Mx
Nombre: Crack Me 0.2
Fecha: 26 de mayo de 2009
Tamaño: 8,44 KB
Compilador y/o Packer: MEW 1.2 / Visual Basic (código nativo)
Objetivos: Conseguir la clave correcta.
Dificultad: 1-2 (1-10).

Realizamos un análisis con RDG Packer Detector:


Notamos que está comprimido con MEW 1.2 intentemos descomprimirlo abramos el crackme con OllyDBG, Nos avisa que está comprimido:


Intentemos buscar el OEP con el método de memory breakpoint on execution, esto se puede hacer a través de de un pluguin o ollydbg parcheado 5:


Presionamos M y colocamos un Memory breakpoint on access en la sección CODE
*En realidad es un MBPX por el pluguin:


Le damos RUN, esperamos un poco y se detiene en 00401210:


removamos el análisis del código y nos quedará:


Dumpeamos con ollydump:


Vamos a reparar la IAT, Nos vamos search->all intermodular call's y buscamos una que apunte a la IAT, en este caso rtcMsgBox:


Le damos doble click y nos aparecerá lo siguiente:


ahora Follow in dump->Memory Address y buscamos el Inicio y el final en la IAT en este caso:
Inicio:00401000
Final:004010C0
Largo:C0

colocamos los datos en ImportREC:


No hay ninguna IAT redireccionada :


presionamos fix dump, seleccionamos el archivo dumpeado previamente por Ollydump, intentemos ver si se ha desempaquetado correctamente:



Funciona de maravilla, ahora intentemos colocar un serial:


Antes de presionar OK nos dirigimos a la sección code y colocamos un Memory Break point on execution (Con el pluguins), ahora le damos OK y se detendrá a continuación:

004025C0   .  816C24 04 3B0>SUB DWORD PTR SS:[ESP+4],3B
004025C8   .  E9 A3050000   JMP dmp_.00402B70

Si seguimos traceando llegaremos hasta el siguiente OP code:


en el cual deberemos cambiar el FLAG S para que salte, debido a que notoriamente se puede visualizar una string que no es conveniente pushear

Si seguimos traceando una vez modificado el flag s llegaremos a un call encargado de devolver la fecha:

en mi caso 01/09/2011, luego de esto elimina los /:


si seguimos traceando pasando por la concatenación de dos series de string muy llamativas y un conjunto de otras operaciones llegaremos a la siguiente call:


si entramos con F7 a la call llegaremos a la siguiente call encargado de revertir la string:


Luego de seguir traceando llegaremos a una comparación a través de __vbaVarTstEq:


Entremos a la call con F7 llegando hasta el push 0, una vez detenidos ahí hacemos click derecho en EAX y presionamos follow in stack y veremos lo siguiente:


esto es comparado con edx (follow in stack) en mi caso UND3R es decir compara:
5642345645648784564156116456456110290104164214614321777407216721791241671010

con

UND3R

__vbaVarTstEq devuelve en EAX un número distinto de 0 si las dos string comparadas son iguales, notaremos que el resultado se dirige a ESI y luego se realiza un TEST SI,SI luego la comparación final JE SHORT en la cual si __vbaVarTstEq devuelve 0 en EAX JE saltará


Probemos con la string comparada:



pero, ¿para qué el crackme obtuvo la fecha?

Recordamos que la fecha en mi caso era: 01/09/2011, luego se eliminaron los /
01092011 luego se concatenó con las string llamativas y luego se revirtió la string:

5642345645648784564156116456456110290104164214614321777407216721791241671010

por lo cual lo que está con rojo debería ser la variable del serial del crackme
#262
Zen Marketing
Página:http://plandemarketing.info/  
Descarga:http://plandemarketing.info/descarga-aforcod
Autor:UND3R

Conociendo a el programa:
Abrimos Zen Marketing y nos aparece lo siguiente:


Si introducimos un serial falso u verdadero nos pedirá el segundo serial:


Si erramos nos mostrará el siguiente mensaje:


si intentamos nuevamente y volvemos a fallar nos mostrará lo siguiente:


Crackeando:
Atachamos el programa:
File->Attach


Intentemos buscar referencias de texto (*primera imagen):


Se detendrá por primera vez en:


por lo que no nos sirve intentemos de nuevo con find next o Control+L:



Si bajamos un poco veremos lo siguiente:


Sin saber programar notaremos que clave1+clave2=ClaveCompleta y ClaveCompleta=9131174656

por lo que intentemos que de alguna forma clave1+clave2=9131174656

probemos dividiendo 9131174656 en 2:


nos da como resultado: 4565587328
por lo que 4565587328+4565587328=9131174656

una sencilla fórmula, probemos si funcionó:


ya está registrado, por lo que en resumen la suma de los dos serial siempre debe ser: 9131174656

esto demuestra la vulnerabilidad que poseen los ejecutables en memoria virtual

Saludos a todos aquellos que se tomaron el tiempo de leer este tutorial
#263
como puedo hacer para que el script sepa si con un je jne ja,etc saltó o no?

Saludos
#264
Hola a todos, bueno en memoria tengo lo siguiente:
Address size
140000 9000
240000 6000

Por lo que entre 149000 y 240000 hay address faltantes como
150000
160000

con que API se puede agregar?

Saludos
#265
Ingeniería Inversa / duda con VirtualAlloc
31 Agosto 2011, 07:23 AM
si, tengo una duda, quiero crear una sección virtual en el address 160000 en donde luego pueda introducirle datos, pero no he podido lograrlo no sé que parámetros tengo que pushear. Sí investigué la API pero EAX siempre me devuelve 0000 por lo que la sección no se ha creado, como puedo hacer eso?

Saludos
#266
eso, la idea no es usar ollydg 2 alpha no se cuanto, si no seguir usando el mismo olly
Saludos
#267
Como puedo hacerlo?  :o
No he podido descargar programas para hacerlo
#268
Ingeniería Inversa / Duda con simple script
26 Agosto 2011, 22:11 PM
en el tutorial de introducción a olly se comienza con este script:


Citarinicio:

bphws 12ffc4, "r"

trabajo:

eob pirulo
run

pirulo:
cmp eip, 77aa6298
je quitar
cmp eip, 77aa62b0
je restaurar
jmp final

quitar:
bphwc 12ffc4
jmp trabajo

restaurar:
jmp inicio

final:
MSGYN "Continuar?"
cmp $RESULT,1
je inicio
ret

en donde las comparaciones que se realiza son en (se pone bp ahí) KiUserExceptionDispatcher y en ZwContinue (se pone bp)

la idea del script es poder saltear la detección de de los hadware breakpoint, este funciona correctamente pero me surge una duda:

Supongamos que está detenido en
77aa6298 (KiUserExceptionDispatcher)
al encontrar una excepción o breakpoint

por el comando eob saltará a pirulo

pirulo:
cmp eip, 77aa6298
je quitar
cmp eip, 77aa62b0
je restaurar
jmp final

aquí al ser la primera comprobación cierta, este va a quitar

quitar:
bphwc 12ffc4
jmp trabajo

por lo que luego va a trabajo mi duda es que no entiendo cuando se ejecuta run, ya que este está debajo de eob por lo que para mi entender nunca se ejecutaría y no haría nunca avanzar al programa, pero este si lo hace

iría a trabajo y denuevo encontraría un BP 77aa6298 o el RUN se ejecuta junto con el EOB? No sé si se entiende

Saludos
#269
Pues eso, tengo virtualbox, pero me está dando problemas con los hadware breakpoints, hay alguno que les esté funcionando excelente con xp emulado?

Saludos
#270
Ingeniería Inversa / Duda con comprobación CRC
26 Agosto 2011, 07:13 AM
Hola a todos, bueno tengo una duda encontré un programa que tiene tal comprobación, es decir al momento de cambiar un flag de una sección, este me lo detecta, mi duda es como puedo evitar este chequeo? si al momento de descomprimirlo este me crea más secciones y con nombres distintos? Saludos