往上一看就看见了两个cmp指令,我们分析一下代码:
RETN 10
CMP EAX,3F6 ;如果是3F6
JE SHORT TRACEME.004012A3 ;则跳转到4012A3处
CMP EAX,9C42 ;这不是关于菜单40002的id么?呵呵
JNZ SHORT TRACEME.004012C0 ;如不是关于菜单,就跳走,是则执行4012A3
4012A3: MOV EDX,DWORD PTR SS:[ESP+100] ; Cases 3F6,9C42 of switch 0040115E
MOV EAX,DWORD PTR DS:[4054E0]
PUSH 0 ; /lParam = NULL
PUSH TRACEME.00401020 ; |DlgProc = TRACEME.00401020
PUSH EDX ; |hOwner
PUSH 67 ; |pTemplate = 67
PUSH EAX ; |hInst => 00400000
CALL DWORD PTR DS:[<&USER32.Dialo> ; \DialogBoxParamA
POP EDI ; Default case of switch 0040115E
XOR EAX,EAX
大家想必也看到了4012A3处的注释,正是响应3F6与9C42的地方,后者是关于菜单,前者则是主界面上的关于按钮的ID,找到了地方,我们就可以增加上我们的代码了,我们加在我们的老地方:400300处那么我们就要把JNZ SHORT TRACEME.004012C0这句改成JMP 400300了,等等看看下边的代码:
0040129A . 74 07 JE SHORT TRACEME.004012A3
0040129C . 3D 429C0000 CMP EAX,9C42
004012A1 . 75 1D JNZ SHORT TRACEME.004012C0
004012A3 > 8B9424 0001000>MOV EDX,DWORD PTR SS:[ESP+100]
JNZ SHORT TRACEME.004012C0这一句是个短跳转只有2个字节,而改成我们的JMP400300则需要6个字节!即FF1500034000,怎么办?只有把上句或下句一齐改到我们的400300处了!把光标停在CMP EAX,9C42这一句上,然后按空格键,出现如下窗口,直接在里边改成JMP 400300,然后点击“汇编(Assemble)”就可以了。然后点击右键菜单,选择“复制到可执行文件”“全部复制”就可以了。