Hmm, we must find some way to let the program never execute/set that (Set)Timer at 0043D3EF.
If you look at 0043D419 you see that that line is referenced by 4 jumps. If we could let the
program jump there, the Call 00406358 (settimer) will never be executed and the timer won`t get
set, so the program keeps running forever.
Let`s look at the jumps, they are just above the call.
:0043D3CD E8668EFCFF Call 00406238
:0043D3D2 8B7324 mov esi, dword ptr [ebx+24]
:0043D3D5 85F6 test esi, esi
:0043D3D7 7440 je 0043D419 ; Jump 1
:0043D3D9 807B3400 cmp byte ptr [ebx+34], 00
:0043D3DD 743A je 0043D419 ; Jump 2
:0043D3DF 66837B2E00 cmp word ptr [ebx+2E], 0000
:0043D3E4 7433 je 0043D419 ; Jump 3
:0043D3E6 6A00 push 00000000
:0043D3E8 56 push esi
:0043D3E9 6A01 push 00000001
:0043D3EB 8B4328 mov eax, dword ptr [ebx+28]
:0043D3EE 50 push eax
If we look at line 0043D3D7 we see the first jump, if we reverse it (make it jne) the jump is taken and the call to Settimer at 0043D3EF is skipped. Normally there is no jump and the program
proceeds to line 0043D3EF (Settimer). And our goal is to change only 1 byte so we can change
je 0043D419
to
jne 0043D419
And if we run the program it keeps running forever :)