Activar menú

Iniciado por Redesoft, 13 Abril 2010, 16:59 PM

0 Miembros y 1 Visitante están viendo este tema.

Redesoft

Hola a todos.

Me gustaría preguntaros una cosa a ver si alguno sabe como atacar el tema. Tengo un programita version beta que tiene algunos menús desactivados, ya sabeis, en vez de aparecer en negro aparecen en gris. Con el programa VeoVeo puedo acceder a las funciones del programa pero... queda cutre, me gustaría saber en que apis soleis poner bp para activar menús porque en estas cosas ando un poco perdido, nunca se me ha dado el caso de tener que activar un menú...y por mas que he buscado por el foro lo mas que he encontrado es activar botones.

Un saludo y gracias de antemano.

LSL

Saludos.

LSL.

LSL

Saludos.

LSL.

karmany

Para desactivar un menú con Api, se suele hacer con SetMenuItemInfo. También existe la Api EnableMenuItem y la ModifyMenu pero ya no se usan. Piensa también que con Visual Basic eso no suele ser con Api, así que verifica el compilador.

De todos modos, igual el programa tiene alguna restricción más e interese más saber por qué se deshabilita el menú.

Un saludo

Redesoft

#4
Bueno... después de pasarme las horas frente al pc y olly y tener los ojos como tomates de rojos he llegado a la siguiente conclusión:

MOV BYTE PTR SS:[EBP-1],0

Si el programa pasa por esa linea el menú se desactiva, justo arriba hay un jmp por lo que en ejecución "normal" el menú se queda activado. Mas arriba hay varios ... mejor lo pongo todo:



005A8AC2  /.  55               PUSH EBP
005A8AC3  |.  8BEC             MOV EBP,ESP
005A8AC5  |.  83C4 F8          ADD ESP,-8
005A8AC8  |.  E8 5A74FFFF      CALL Free.008B7F27
005A8ACD  |.  8945 F8          MOV [LOCAL.2],EAX
005A8AD0  |.  8B45 F8          MOV EAX,[LOCAL.2]
005A8AD3  |.  3D 25030000      CMP EAX,325
005A8AD8  |.  7F 33            JG SHORT Free.005A8B0D
005A8ADA  |.  74 66            JE SHORT Free.005A8B42
005A8ADC  |.  3D 31020000      CMP EAX,231
005A8AE1  |.  7F 15            JG SHORT Free.005A8AF8
005A8AE3  |.  74 5D            JE SHORT Free.005A8B42
005A8AE5  |.  2D A4010000      SUB EAX,1A4
005A8AEA  |.  74 56            JE SHORT Free.005A8B42
005A8AEC  |.  83E8 04          SUB EAX,4
005A8AEF  |.  74 51            JE SHORT Free.005A8B42
005A8AF1  |.  83E8 05          SUB EAX,5
005A8AF4  |.  74 4C            JE SHORT Free.005A8B42
005A8AF6  |.  EB 62            JMP SHORT Free.005A8B5A
005A8AF8  |>  2D 37020000      SUB EAX,237
005A8AFD  |.  74 43            JE SHORT Free.005A8B42
005A8AFF  |.  2D 81000000      SUB EAX,81
005A8B04  |.  74 3C            JE SHORT Free.005A8B42
005A8B06  |.  83E8 6B          SUB EAX,6B
005A8B09  |.  74 37            JE SHORT Free.005A8B42
005A8B0B  |.  EB 4D            JMP SHORT Free.005A8B5A
005A8B0D  |>  3D 5C050000      CMP EAX,55C
005A8B12  |.  7D 13            JGE SHORT Free.005A8B27
005A8B14  |.  2D D7030000      SUB EAX,3D7
005A8B19  |.  74 27            JE SHORT Free.005A8B42
005A8B1B  |.  83E8 09          SUB EAX,9
005A8B1E  |.  74 22            JE SHORT Free.005A8B42
005A8B20  |.  83E8 03          SUB EAX,3
005A8B23  |.  74 1D            JE SHORT Free.005A8B42
005A8B25  |.  EB 33            JMP SHORT Free.005A8B5A
005A8B27  |>  05 A4FAFFFF      ADD EAX,-55C
005A8B2C  |.  83E8 02          SUB EAX,2
005A8B2F  |.  72 11            JB SHORT Free.005A8B42
005A8B31  |.  83E8 4E          SUB EAX,4E
005A8B34  |.  74 0C            JE SHORT Free.005A8B42
005A8B36  |.  83E8 02          SUB EAX,2
005A8B39  |.  74 07            JE SHORT Free.005A8B42
005A8B3B  |.  83E8 46          SUB EAX,46
005A8B3E  |.  74 02            JE SHORT Free.005A8B42
005A8B40  |.  EB 18            JMP SHORT Free.005A8B5A
005A8B42  |>  8B55 08          MOV EDX,[ARG.1]
005A8B45  |.  52               PUSH EDX
005A8B46  |.  8B4A 08          MOV ECX,DWORD PTR DS:[EDX+8]
005A8B49  |.  FF51 28          CALL DWORD PTR DS:[ECX+28]
005A8B4C  |.  59               POP ECX
005A8B4D  |.  85C0             TEST EAX,EAX
005A8B4F  |.  0F95C0           SETNE AL
005A8B52  |.  83E0 01          AND EAX,1
005A8B55  |.  8845 FF          MOV BYTE PTR SS:[EBP-1],AL
005A8B58  |.  EB 04            JMP SHORT Free.005A8B5E
005A8B5A  |>  C645 FF 00       MOV BYTE PTR SS:[EBP-1],0



Si los JE SHORT que hay justo encima de los JMP los cambio por JMP entonces el menú queda activado.

El tema está en que he llegado hasta eso porque el programa lleva protección por hasp, al darle al menú "archivo" busca si tengo licencia en general y si tengo licencia para ese modulo, con bp en messageboxexa y sin la hasp me salta el error y traceando un poco llego hasta eso.

El tema está en que si, lo he conseguido, pero y si no llevase hasp?? voy a probar con las apis que dice karmany a ver si me lleva al mismo sitio.

Un saludo y gracias.

LSL

las apis necesitan unos valores en los parametros que utilizan,
si ese
MOV BYTE PTR SS:[EBP-1],0
lo cambias por
MOV BYTE PTR SS:[EBP-1],1

ya que parece es el valor del parametro que necesita posteriormente la API que se utilize, para desactivar o activar las opciones de los menu. (valor 0=False, 1=True).

Saludos.

LSL.

tena

#6
005A8B4D  |.  85C0             TEST EAX,EAX
005A8B4F  |.  0F95C0           SETNE AL
005A8B52  |.  83E0 01          AND EAX,1
005A8B55  |.  8845 FF          MOV BYTE PTR SS:[EBP-1],AL    <<<bueno
005A8B58  |.  EB 04            JMP SHORT Free.005A8B5E
005A8B5A  |>  C645 FF 00       MOV BYTE PTR SS:[EBP-1],0   <<<< malo


Cambia ahi como te dice LSL por un

MOV BYTE PTR SS:[EBP-1],1

y te evitarias cambiar todos los saltos


Redesoft

Si, en realidad tengo claro que

005A8B55  |.  8845 FF          MOV BYTE PTR SS:[EBP-1],AL    <<<bueno
005A8B5A  |>  C645 FF 00       MOV BYTE PTR SS:[EBP-1],0   <<<< malo

Tengo varias opciones, cambias todos los saltos que vayan al malo, para que pase lo que pase llegue siempre al bueno. Modificar el malo, ponerle 1 y que sea bueno, incluso poner un jmp al bueno directamente al bueno en 005A8AD3, no sé si así petaría o no.... eso ya lo tengo resuelto.

Lo que decía principalmente es que yo he llegado a deducir todo lo anterior porque el programa me lo ha puesto facil, es decir, si no tengo la llave puesta peta y me sale un msgbox el cual cazado poniendo un bp a messageboxexa y luego traceando.

la pregunta clave es ¿donde pondríais vosotros bp si el programa no sacases ningún msgbox? getmenu??

LSL

en ese caso que no veas nada por donde atacar, la api mas directa y acertada es la que da el maestro Karmany
Cita de: karmany en 13 Abril 2010, 21:19 PM
Para desactivar un menú con Api, se suele hacer con SetMenuItemInfo. También existe la Api EnableMenuItem y la ModifyMenu pero ya no se usan. Piensa también que con Visual Basic eso no suele ser con Api, así que verifica el compilador.

De todos modos, igual el programa tiene alguna restricción más e interese más saber por qué se deshabilita el menú.

Un saludo

http://winapi.conclase.net/curso/?cap=037#INHIBIR

aunque tal como bien te dice karmany, no todos los compiladores utilizan las Apis de windows.
Saludos.

LSL.

tena

Cierto.. Tambien podes ver que apis usa con un monitor.
Aveces suelo ver los ids de los recursos con un editor de recursos,
y luego buscarlos en el olly como constantes.. y asi aproximarme al lugar donde quiero.






slds