00455A93 |. FF53 28 call ds:[ebx+28]
¿como lo encontramos?, pues yo por ejemplo cuando aparece, paro el flujo directamente (F12), y luego voy retornando hasta ver el bucle de la ventana (en este caso por ser delphi es fácilmente reconocible).
Citar
004487E1 |> /8B03 /mov eax,ds:[ebx]
004487E3 |. |E8 D42D0000 |call Rubik.0044B5BC
004487E8 |. |8B03 |mov eax,ds:[ebx]
004487EA |. |80B8 8C000000>|cmp byte ptr ds:[eax+8C],0
004487F1 |. |74 0F |je short Rubik.00448802
004487F3 |. |8B45 FC |mov eax,[local.1]
004487F6 |. |C780 34020000>|mov dword ptr ds:[eax+234],2
00448800 |. |EB 14 |jmp short Rubik.00448816
00448802 |> |8B45 FC |mov eax,[local.1]
00448805 |. |83B8 34020000>|cmp dword ptr ds:[eax+234],0
0044880C |. |74 08 |je short Rubik.00448816
0044880E |. |8B45 FC |mov eax,[local.1]
00448811 |. |E8 26FDFFFF |call Rubik.0044853C
00448816 |> |8B45 FC |mov eax,[local.1]
00448819 |. |8B80 34020000 |mov eax,ds:[eax+234]
0044881F |. |85C0 |test eax,eax
00448821 |.^\74 BE \je short Rubik.004487E1
004487E3 |. |E8 D42D0000 |call Rubik.0044B5BC
004487E8 |. |8B03 |mov eax,ds:[ebx]
004487EA |. |80B8 8C000000>|cmp byte ptr ds:[eax+8C],0
004487F1 |. |74 0F |je short Rubik.00448802
004487F3 |. |8B45 FC |mov eax,[local.1]
004487F6 |. |C780 34020000>|mov dword ptr ds:[eax+234],2
00448800 |. |EB 14 |jmp short Rubik.00448816
00448802 |> |8B45 FC |mov eax,[local.1]
00448805 |. |83B8 34020000>|cmp dword ptr ds:[eax+234],0
0044880C |. |74 08 |je short Rubik.00448816
0044880E |. |8B45 FC |mov eax,[local.1]
00448811 |. |E8 26FDFFFF |call Rubik.0044853C
00448816 |> |8B45 FC |mov eax,[local.1]
00448819 |. |8B80 34020000 |mov eax,ds:[eax+234]
0044881F |. |85C0 |test eax,eax
00448821 |.^\74 BE \je short Rubik.004487E1
entonces metes un BP justo debajo del JE y parará cuando termines con la ventana.. de ésta manera irás retornando hasta llegar justo debajo del CALL que te dije.
Entonces si te fijas ves que hay varias comparaciones:
Citar
00455A69 |. 807B 30 00 cmp byte ptr ds:[ebx+30],0
00455A6D |. 74 43 je short Rubik.00455AB2
00455A6F |. F643 20 10 test byte ptr ds:[ebx+20],10
00455A73 |. 75 21 jnz short Rubik.00455A96
00455A75 807B 26 00 cmp byte ptr ds:[ebx+26],0
00455A79 |. 75 1B jnz short Rubik.00455A96
00455A7B |. 66:837B 2A 00 cmp word ptr ds:[ebx+2A],0
00455A80 |. 74 14 je short Rubik.00455A96
00455A6D |. 74 43 je short Rubik.00455AB2
00455A6F |. F643 20 10 test byte ptr ds:[ebx+20],10
00455A73 |. 75 21 jnz short Rubik.00455A96
00455A75 807B 26 00 cmp byte ptr ds:[ebx+26],0
00455A79 |. 75 1B jnz short Rubik.00455A96
00455A7B |. 66:837B 2A 00 cmp word ptr ds:[ebx+2A],0
00455A80 |. 74 14 je short Rubik.00455A96
tomando como referencia ésta:
00455A75 807B 26 00 cmp byte ptr ds:[ebx+26],0
pones un BP ahi reinicias y verás que compara un solo byte de una direccion. Que si le metes un HBP on access al inicio te darás cuenta que hay una línea que mueve un 00 al principio y le pones un 1 y queda registrado..
otra manera de llegar sería:
Citar
0049765C 8078 26 00 cmp byte ptr ds:[eax+26],0
00497660 |. 75 5F jnz short Rubik.004976C1
00497662 |. 8D55 E8 lea edx,[local.6]
00497665 |. A1 F4C04900 mov eax,ds:[49C0F4]
0049766A |. E8 915DF9FF call Rubik.0042D400
0049766F |. 8D45 E8 lea eax,[local.6]
00497672 |. BA E8784900 mov edx,Rubik.004978E8 ; ASCII " *UNREGISTERED*"
00497660 |. 75 5F jnz short Rubik.004976C1
00497662 |. 8D55 E8 lea edx,[local.6]
00497665 |. A1 F4C04900 mov eax,ds:[49C0F4]
0049766A |. E8 915DF9FF call Rubik.0042D400
0049766F |. 8D45 E8 lea eax,[local.6]
00497672 |. BA E8784900 mov edx,Rubik.004978E8 ; ASCII " *UNREGISTERED*"
ahi se hace la misma comparacion.
Salu2..