本帖最后由 拓海真一 于 2014-7-16 23:44 编辑
回答2:如果按钮事件断在时钟事件上,那么单步在头部 55 push ebp 上使用 33 retn 即可将时钟事件去除
完整点:
[Asm] 纯文本查看 复制代码 0042868A |. /EB 09 jmp Xpengyou.00428695
0042868C |> |8B4D EC /mov ecx,[local.5]
0042868F |. |83E9 01 |sub ecx,0x1
00428692 |. |894D EC |mov [local.5],ecx
00428695 |> \837D EC 00 cmp [local.5],0x0
00428699 |. 7C 12 |jl Xpengyou.004286AD
0042869B |. 8B55 EC |mov edx,[local.5]
0042869E |. 8B45 08 |mov eax,[arg.1]
004286A1 |. 8B4C90 10 |mov ecx,dword ptr ds:[eax+edx*4+0x10]
004286A5 |. 894D F0 |mov [local.4],ecx
004286A8 |. FF75 F0 |push [local.4]
004286AB |.^ EB DF \jmp Xpengyou.0042868C
004286AD |> FF55 FC call [local.1]
通常我们都是在 004286AD |> FF55 FC call [local.1] 处下断点 如果是时钟事件,断下后 不操作任何按钮等, 他断下 就是时钟事件了,因为只有定时执行子程序的基本只有时钟了,此时断在call 断点 ,我们要F7单步步入,这时就已经处于断首,各种语言的断首是不同的,但是只有在步入的第一行写retn才会有效,易语言一般断首都是
[Asm] 纯文本查看 复制代码 00428640 /$ 55 push ebp
00428641 |. 8BEC mov ebp,esp
在00428640 /$ 55 push ebp 处双击写入代码 retn 即可
如果有检测更改断首的话, 可在第二行写
pop ebp
retn
可保证堆栈平衡和过检测断首
根本去除时钟的方法 小菜无能,无法对已经开启的时钟去除, 只能给各位提供一个小方法: Ctrl+G 输入 SetTimer 然后在跳转到的地址写入 retn 0x10 这样可防止开启时钟,开启时钟的命令都会经过这个API,让他失效会让所有时钟都无效
如果要去除已经运行的时钟,只有注入代码使用API KillTimer 来清除,除此之外小菜无能为力
原API代码
[Asm] 纯文本查看 复制代码 773B79FB > B8 18100000 mov eax,0x1018
773B7A00 B9 00000000 mov ecx,0x0
773B7A05 8D5424 04 lea edx,dword ptr ss:[esp+0x4]
773B7A09 64:FF15 C000000>call dword ptr fs:[0xC0]
773B7A10 83C4 04 add esp,0x4
773B7A13 C2 1000 retn 0x10
修改后的API代码
[Asm] 纯文本查看 复制代码 773B79FB > C2 1000 retn 0x10
773B79FE 90 nop
773B79FF 90 nop
773B7A00 B9 00000000 mov ecx,0x0
773B7A05 8D5424 04 lea edx,dword ptr ss:[esp+0x4]
773B7A09 64:FF15 C000000>call dword ptr fs:[0xC0]
773B7A10 83C4 04 add esp,0x4
773B7A13 C2 1000 retn 0x10
|