我不会写破文大家凑和着看吧
XP下的空当接龙 2000 也类似 98的我改不了因为是16位的程序
闲着没事修改一下空当接龙
默认的版本 是当你移动一列到空位置的时候 会出现一个对话框
是移动整列还是单张 单张对我们来说没什么用出
那就吧这个对话框去掉算了
Ollydbg载入
查找DialogBoxParamW创建对话框的
可以找到哦此处 下断点 当出现移动整列还是单张的对话框是断在此处
010038F1 |> \6A 00 push 0 ; /lParam = NULL
010038F3 |. 68 8A240001 push freecell.0100248A ; |DlgProc = freecell.0100248A
010038F8 |. FF75 08 push [arg.1] ; |hOwner
010038FB |. 68 28150001 push freecell.01001528 ; |pTemplate = "MoveCol"
01003900 |. FF35 60780001 push dword ptr ds:[1007860] ; |hInst = NULL
01003906 |. FF15 2C110001 call dword ptr ds:[<&USER32.DialogBox>; \DialogBoxParamW
由于我们不知道点移动整列的时候改变了什么东西,所以进入 这个对话框内部 处理函数地址 100248A
将断点下载此处 当点击对话框的按钮的时候 会到此处
0100249E |. 48 dec eax ; Switch (cases 2..CA)
在此继续让移动整列 还是单张的对话框出来,选择移动整列
根据后面的注释可以看到
010024B0 |> \6A 00 push 0 ; Case CA of switch 0100249E
010024B2 |. EB 06 jmp short freecell.010024BA 点移动整列的时候处理
010024B4 |> 6A 01 push 1 ; Case C9 of switch 0100249E
010024B6 |. EB 02 jmp short freecell.010024BA 移动单张时候处理
010024B8 |> 6A FF push -1 ; Case 2 of switch 0100249E 取消的时候处理
010024BA |> FF75 08 push [arg.1] ; |hWnd
010024BD |. FF15 6C110001 call dword ptr ds:[<&USER32.EndDialog>; \EndDialog
原来将结果压栈
那我们就模拟一下吧将
01002490 |. 2D 10010000 sub eax, 110 ; Switch (cases 110..111)
01002495 74 2E je short freecell.010024C5 110的时候处理 也就是WM_INITDIALOG
将此处跳转直接改到 处理 点击整列的地方
01002495 . /EB 1D jmp short C.010024B4 这样改
只要这个对话框创建的时候 就会直接处理 到 按移动整列的地方
保存之后运行 讨厌的对话框终于没有了 是不是移牌的时候快了许多
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)