首页
社区
课程
招聘
[求助]关于看雪教程上一个时间限制习题的一些疑问
发表于: 2007-4-24 19:04 5057

[求助]关于看雪教程上一个时间限制习题的一些疑问

2007-4-24 19:04
5057
教程在http://www.pediy.com/tutorial/chap6/Chap6-1-31.htm
0043D3D2      8B73 24       mov     esi, dword ptr [ebx+24]
0043D3D5      85F6          test    esi, esi
0043D3D7  |.  74 40         je      short 0043D419
0043D3D9  |.  807B 34 00    cmp     byte ptr [ebx+34], 0
0043D3DD  |.  74 3A         je      short 0043D419
0043D3DF  |.  66:837B 2E 00 cmp     word ptr [ebx+2E], 0
0043D3E4      74 33         je      short 0043D419
0043D3E6  |.  6A 00         push    0                                ; /Timerproc = NULL
0043D3E8  |.  56            push    esi                              ; |Timeout
0043D3E9  |.  6A 01         push    1                                ; |TimerID = 1
0043D3EB  |.  8B43 28       mov     eax, dword ptr [ebx+28]          ; |
0043D3EE  |.  50            push    eax                              ; |hWnd
0043D3EF  |.  E8 648FFCFF   call    <jmp.&user32.SetTimer>           ; \SetTimer
0043D3F4  |.  85C0          test    eax, eax
0043D3F6  |.  75 21         jnz     short 0043D419
0043D3F8  |.  8D55 FC       lea     edx, dword ptr [ebp-4]
0043D3FB  |.  A1 04ED4300   mov     eax, dword ptr [43ED04]
0043D400  |.  E8 E779FCFF   call    00404DEC
0043D405  |.  8B4D FC       mov     ecx, dword ptr [ebp-4]
0043D408  |.  B2 01         mov     dl, 1
0043D40A  |.  A1 ACB34000   mov     eax, dword ptr [40B3AC]
0043D40F  |.  E8 10B4FCFF   call    00408824
0043D414  |.  E8 835EFCFF   call    0040329C
0043D419  |>  33C0          xor     eax, eax

答案是只要我们修改0043D3E4这行:je  short 0043D419 为JMP,让其直接跳过SetTimer函数的设置,这样就没时间限制了。

那要是不跳过
那是不是可以改这句0043D3E8  56          PUSH    ESI                  ;暂停时间值 (21 seconds)
里面得EDI得参数就可以调整限制得时间罗,我再往上看
0043D3D2      8B73 24       mov     esi, dword ptr [ebx+24]
这句定义了ESI的值,我是菜鸟,我不是很懂dword ptr [ebx+24]得意思,觉得大概是EBX+24的地址上取一双字,并移到ESI中,我索性就把它改成0043D3D2      8B73 24       mov     esi, 1
我觉得程序应该运行得瞬间就被关闭了,可我运行它,它一直没有关闭,反正远远超过了原本得20限制,有点不明白了,大家能不能给小菜鸟解惑一下啊?

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 50161
活跃值: (20610)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
2
注意,你将

0043D3EB  8B43 28       mov     eax, dword ptr [ebx+28]  
改成:
0043D3D2  BE 01000000   mov     esi, 1

机器码增加了,由8B43 28 变成BE 01000000 ,因此不能直接改。
2007-4-24 20:16
0
雪    币: 206
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
嗯,老大怎么之说其一,不说其二啊,要改得话,应该怎么做呢,[ebx+28] 我应该如何找到这个地址并该里面得数字呢?还是用其他得思路来改,请指教
2007-4-24 21:19
0
雪    币: 50161
活跃值: (20610)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
4
可以将如下3句:

0043D3D2      8B73 24       mov     esi, dword ptr [ebx+24]
0043D3D5      85F6          test    esi, esi //判断esi是不是为0
0043D3D7      74 40         je      short 0043D419

改成:
0043D3D2      BE 01000000   mov     esi, 1
0043D3D7      90            nop
0043D3D8      90            nop
2007-4-25 09:24
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
同样一个问题我想请教

我按楼上的做了后,程序直接提示已过期...............
2007-6-3 07:34
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
SetTimer函数的使用- -
                                       
UINT_PTR SetTimer(
  HWND hWnd,              // 窗口句柄
  UINT_PTR nIDEvent,      // 定时器ID,多个定时器时,可以通过该ID判断是哪个定时器
  UINT uElapse,           // 时间间隔,单位为毫秒
  TIMERPROC lpTimerFunc   // 回调函数
);

例如
SetTimer(m_hWnd,1,1000,NULL); //一个1秒触发一次的定时器

时间间隔改为1毫秒,岂不是就瞬间计数满了,也就是程序过期,可以改成大数字。
2007-6-3 08:15
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
改成 -1 ? 无限大
2007-6-3 08:25
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
好~~~~~~~~~~~~~~~~~~~~~~~~
2007-6-3 10:31
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
这个习题一共有几种破法呢? 多请教一下

http://www.pediy.com/tutorial/chap6/Chap6-1-31.htm
2007-6-3 11:21
0
游客
登录 | 注册 方可回帖
返回
//