Los programas son conjuntos de operaciones aritméticas que se ejecutan sobre la memoria.
A estas operaciones se acceden mediante una serie de saltos (ya sean condicionales o incondicionales).
Si lo que quiero es obtener una salida distinta a la habitual, lo que debo hacer es modificar el algoritmo, forzando una serie de saltos concretos. (Estudiando las operaciones aritméticas y saltos que realiza la aplicación)
Tenemos una aplicación que parece contener una contraseña, pero no está autorizada a mostrarnosla.

Abrimos la aplicación con Ollydbg y buscamos cadenas legibles, con el fin de poder situarnos en el flujo que contiene la condición que nos niega darnos la contraseña.

Podemos ver la parte que devuelve la contraseña, pero esta enmascarada, así que no aparece directamente, si no que en el momento de ejecución cada %c, será sustituido por valores char.

Pulsamos doble click sobre el y nos mandará a esa parte:

Nos situamos sobre el “No puedo darte la clave”, y se desplegará una flecha, que nos indicará desde que salto proviene la instrucción.
Nos posicionamos en el origen y vemos que pone JE, que significa “salta si es equivalente”, entonces entendemos que hay una condición que esta impidiendo que la aplicación nos de la contraseña.
Por lo tanto vamos a modificar JE por su antónimo: JNE, que significa “salta si no es equivalente”.
Hacemos doble click sobre el, lo modificamos y pulsamos
Assemble:

Ahora que ya hemos modificado el algoritmo de la aplicación, pasamos a probarlo: Pulsamos en
Debug >
Run (O directamente pulsamos
F9)

Ya está, hemos conseguido que nos muestre la clave.
Código fuente del ejecutable:
#include <stdio.h>
#include <cstdlib>
int main() {
bool autorizado = false;
if(autorizado)
printf("Puedo darte la clave: %c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",'f','0','6','7','4','3','2','8','d','1','3','5','5','9','c','5','d','c','6','d','9','b','2','b','7','5','c','8','6','2','5','7');
else
printf("No puedo darte la clave");
system("PAUSE");
return 0;
}