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
Gracias
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ú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
Citar00638285 |. E8 06FFFFFF CALL AtomicEm.00638190
Citarfunction retrieves the type and data for a specified value name associated with an open registry key
"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'> </div>
</div> <!-- end content-wrapper --> </div></div>
<div id='footer'>
Copyright © 2011 <a expr:href='data:blog.homepageUrl'><data:blog.title/></a>
</div>
</div></div> <!-- end outer-wrapper -->
</body>
</html>
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
/*
-=================================================================-
.:[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
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