Removiendo
Anuncios de Aureate Media (+Tsehp)
Cuando
lanzas un programa que te muestra un banner
cambiando cada 3 segundos, es bastante molesto...
apenas puedes dejar de mirar ese banner. Primero
yo me pregunto: ¿Cuál podría ser la LLAMADA
para desplegar esto?
¿CreateBitmap? ¿DrawIcon? ¿FillRect?
Ninguno de estos... esto no funciona con un solo
BPX en SoftICE. Así que yo intenté en SoftICE
HWND binboy y ves la ventana oculta: ADVERT.DLL
...
No tienes que mirar ninguno más: Dispara
Win32Dasm en ADVERT.DLL localizado en
Windows\System o WinNT\System32 y mira las
funciones exportadas... verás _paint, mira la
dirección y pon un BPX en esta dirección con
SoftICE.
¡Y funciona! Cada vez que el banner cambia el
programa Llama a esta función exportada en
ADVERT.DLL... rastrea esta función dentro de
ADVERT.DLL e inspecciona el banner, llegarás
aquí:
* Reference To: GDI32.StretchDIBits, Ord:0000h
|
:XXXX (depende de tu memoria)
:XXXX E871750400 Call 0045DD24
:XXXX 85C0 test eax, eax
:XXXX 0F95C2 setne dl
Aquí
está la documentación de esta función:
La función StretchDIBits copia los datos de
color para un rectángulo de puntos en un mapa de
bits independiente del dispositivo (DIB) al
rectángulo del destino especificado. Si el
rectángulo del destino es más grande que el
rectángulo de la fuente, esta función estira
las filas y columnas de datos de color para
encajar el rectángulo del destino. Si el
rectángulo del destino es menor que el
rectángulo de la fuente, esta función comprime
las filas y columnas usando el funcionamiento de
la trama especificado.
int StretchDIBits(
HDC hdc, // manipulador de contexto del dispositivo
int XDest, // coordenada X de la esquina superior-izquierda del rect. dest.
int YDest, // coordenada Y de la esquina superior-izquierda del rect. dest.
int nDestWidth, // anchura del rectángulo de destino
int nDestHeight, // altura del rectángulo de destino
int XSrc, // coordenada X de esquina superior-izquierda de rect de la fuente.
int YSrc, // coordenada Y de esquina superior-izquierda de rect de la fuente.
int nSrcWidth, // anchura de rectángulo de la fuente
int nSrcHeight, // altura de rectángulo de la fuente
CONST VOID *lpBits, // dirección bits del mapa de bits
CONST BITMAPINFO *lpBitsInfo, // dirección de datos del mapa de bits
UINT iUsage, // uso
DWORD dwRop // código de funcionamiento de trama
);
Así
que tu tienes la elección: simplemente
"NOPea" la LLAMADA a esta función o
cambia los parámetros y mostrará cualquier cosa
que tu quieras. Bien, yo lo "nopeé" y
no muestra nada.
|
Crackeando NAG Screen (josephCo)
Esto
puede parecer también confuso... pero de nuevo,
juega alrededor de ello. Te acostumbrarás a
usarlo. Cuando una NAG Screen aparece, entra en
SoftICE y teclea:
HWND
Debes ver algo similar a:
Window-Handle
|
hQueue
|
SZ |
QOwner
|
Class-Name
|
Window-Procedure
|
0080 (0) |
2057 |
32 |
MSGSVR32 |
#32711
(switch_win) |
17EF:00004B6E
|
0084 (1) |
2057 |
32 |
EXPLORER |
shell_trayWnd
|
1487:0000016C
|
... |
... |
... |
... |
... |
... |
Lo que necesitas hacer es desplazar hacia abajo
la lista de manipuladores, y mirar el QOWNER.
Encuentra el manipulador de un proceso que
pertenezca a tu programa, y si tu NAG Screen
tiene un botón de OK, busca un BUTTON bajo el
class name. Si tu NAG Screen no tiene uno,
entonces cualquier cosa que tenga BUTTON después
de él, no será el manipulador que quieres
romper. Esto será ensayo/ error hasta que
consigas el que quieres (explicado un poco). La
lista de manipuladores probablemente será
bastante larga, pero normalmente el NAG Screen
está entre los primeros que pertenecen a tu
programa.
TORN@DO's
Tip
|
Recomiendo
altamente usar una herramienta como SMU
Winspector para
crackear NAGs. Te ahorrará la cosa del
ensayo / error, de modo que aliviará tu
trabajo, que siempre es bueno.
SMU Winspector y otras herramientas de
ese tipo muestran toda la información
que necesitas, Window-Handle,
Window-Class Name, Window-Text, Parent
Window-Handle, Parent-Window Class Name,
Parent Window-Text, Module ... |
Una vez pienses que has encontrado el manipulador
de la NAG screen, querrás usar el comando BMSG.
Si quieres ver el parámetro exacto que lo
permite, mientras estés en SoftICE, teclea:
HELP BMSG
OK, ahora a nuestro ejemplo. Supón que tu NAG
tiene un botón de OK después del manipulador
que quieres romper (más fácil de encontrar), y
piensas que has encontrado el manipulador
apropiado. Tendrás que teclear:
BMSG 0084
WM_DESTROY
Donde 0084 es el manipulador de tu NAG Screen. Lo
que esto hace básicamente, es decir a SoftICE
que rompa después de que el NAG Screen se ha
borrado de la pantalla. Estarás muy dentro de
algún API desconocido, así que tendrás a F12
(P RET) el cual pondrá la Pausa en RETorno
atrás al código de tu programa. A estas alturas
quieres encontrar donde el NAG inicial fue creado
(pon BPX en la mayoría de las Llamadas que
llegan de fuera). El NAG Screen probablemente
será creada/destruida en la misma LLAMADA, así
que si encuentras la correcta, haz cualquier cosa
que necesites hacer.
|
Splash Screens (Predator NLS)
La
manera más rápida de crackear NAG Screens es
usar un Editor Hex y tus ojos. Arranca tu
programa y espera hasta que la NAG Screen
aparezca. Ahora anota la captación de la ventana
y las primeras palabras del mensaje de diálogo.
Entonces abre tu EXE (o DLL) y busca el string
anotado. Si lo encontraste, te desplazas hacia
arriba y buscas los 4 bytes FF FF FF 80... y si
estuvieran ahí reemplaza el 80h por 90h.
Después de este parcheado, arranca tu programa y
nunca verás de nuevo el NAG.
A veces es necesario apretar un botón para
continuar. ¡En esto casos a menudo, debes usar
un debugger!
|
|