首页
社区
课程
招聘
求助--帮修复软件BGinfo.exe-10秒倒计时的方法
发表于: 2010-4-16 22:20 5299

求助--帮修复软件BGinfo.exe-10秒倒计时的方法

2010-4-16 22:20
5299
是去掉这个软件的10秒后自动运行用默认配置运行!!不是让软件不显示这个10秒倒计时, 是打开软件没有那个10秒或10后软件不自动运行使用默认配置...软件以脱壳.请不要加壳传上来.
最好告诉我方法.

二楼先给出正确的方法给7分.三楼的朋友也很热心.讲的深刻给3分吧.谢谢两位.

哎,不行还没有结呢.还有问题.
还有个问题.
把0041326B nop掉 是不自动退出了.但是
用BG .\noram.bgi /timer:0 /silent 这个参数调用它不成功.请问这个能解决吗?
还有就是这个参数/timer:300这个程序就没有倒计时了.可不可以把这个数改下呢?

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

上传的附件:
收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 2513
活跃值: (615)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
0041326B nop掉
2010-4-16 23:28
0
雪    币: 119
活跃值: (10)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
3
。。。。。

有效
nop掉程序不会自动退出除了。。

可是我还是没找到出来Timer的地方
下GetMessageA也没找到。。
2010-4-16 23:39
0
雪    币: 119
活跃值: (10)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
4
又小研究了下:

漫长旅程:

对时间的CM没怎么弄过,对DIY这个程序费了不少劲
1、首先当然是想到SetTimer这个函数了,果然可以定位,而且时间设置的是1s,应该就是这个了
   可惜他没有回调函数,也就是说Timer事件的响应是通过消息了(弄的时候忽略了可以用KillTimer函数定位)
2、到网上查到这个 113H 是windows的timer消息,因此右键查找常量,只找到一处,可怎么看也不像处理的关键代码
3、想下个202消息断点看看,但程序不允许对他上面的控件下消息断点

4、程序到时间就退出,那么好,设置ExitProcess断点吧。堆栈窗口得到如下信息

0012FF28   004254A1  /CALL 到 ExitProcess 来自 BG.0042549B
0012FF2C   00000000  \ExitCode = 0
0012FF30   7C92E920  ntdll.7C92E920
0012FF34   004253CB  返回到 BG.004253CB 来自 BG.004253FE
0012FF38   00000000
0012FF3C   00000000
0012FF40   00000000
0012FF44   00424ECD  返回到 BG.<模块入口点>+0E9 来自 BG.004253BE
0012FF48   00000000

一直查到这里BG.<模块入口点>+0E9 (程序入口+0E9)
结果发现程序正常退出也是途径这里,应该都是接收了退出消息的反应

5、最后,既然是退出消息,那么应该会调用SendMessage发送消息吧,
   先将程序运行起来(运行的时候程序会多次调用SendMessageA),再下SendMessageA断点,等时间到了被断下

0041238C   .  8B3D 34474800 mov     edi, dword ptr [<&USER32.SendMessageA>]           ;  USER32.SendMessageA

在这里发现了很多东西: SetDlgItemTextA, 还剩下时间: %d,那很有可能就是这里了。

向上看看:
004122EE   > \8B0D E0B84700 mov     ecx, dword ptr [47B8E0]       ;  Case 113 (WM_TIMER) of switch 004122A8

这是他消息处理的分支(没有常量113)
004122A8   .  81E9 10010000 sub     ecx, 110                                          ;  Switch (cases 110..219)
004122AE   .  0F84 EF0C0000 je      00412FA3
004122B4   .  49            dec     ecx
004122B5   .  0F84 CD000000 je      00412388
004122BB   .  49            dec     ecx
004122BC   .  0F84 A9000000 je      0041236B
004122C2   .  49            dec     ecx
004122C3   .  74 29         je      short 004122EE                                    ;  这个是WM_TIMER消息的处理函数
004122C5   .  83E9 0C       sub     ecx, 0C
004122C8   .  74 11         je      short 004122DB
004122CA   .  81E9 FA000000 sub     ecx, 0FA
004122D0   .  0F85 91120000 jnz     00413567
004122D6   .  E9 E6120000   jmp     004135C1                          ;  Case 219 (WM_DEVICECHANGE) of switch 004122A8

现在没找到的是哪里让他退出的呢?
在设置倒计时显示的那个控件的时候,发现这条指令
00412360   .  FF0D E0B84700 dec     dword ptr [47B8E0]

程序开始的时候会对他进行初始化,通过在内存窗口改变它的值,发现程序退出的时间就是和这个变量有关。

在哪里设置的这个值呢?重新加载程序,在[47B8E0]上设置内存访问断点,被断在如下位置:
00413FF2   .  50            push    eax                              ; /pDisposition
00413FF3   .  68 8CB94700   push    0047B98C                         ; |pHandle = BG.0047B98C
00413FF8   .  53            push    ebx                              ; |pSecurity
00413FF9   .  68 3F000F00   push    0F003F                           ; |Access = KEY_ALL_ACCESS
00413FFE   .  53            push    ebx                              ; |Options
00413FFF   .  53            push    ebx                              ; |Class
00414000   .  53            push    ebx                              ; |Reserved
00414001   .  68 841A4700   push    00471A84                         ; |software\winternals\bginfo
00414006   .  68 01000080   push    80000001                         ; |hKey = HKEY_CURRENT_USER
0041400B   .  FF15 583D4800 call    dword ptr [<&ADVAPI32.RegCreateK>; \RegCreateKeyExA
00414011   .  FF75 F8       push    dword ptr [ebp-8]
00414014   .  8D45 FC       lea     eax, dword ptr [ebp-4]
00414017   .  50            push    eax
00414018   .  68 E42D4700   push    00472DE4                         ;  silent
0041401D   .  E8 39D4FEFF   call    0040145B
00414022   .  83C4 0C       add     esp, 0C
00414025   .  85C0          test    eax, eax
00414027   .  74 07         je      short 00414030
00414029   .  C605 9CB94700>mov     byte ptr [47B99C], 1
00414030   >  FF75 F8       push    dword ptr [ebp-8]
00414033   .  8D45 FC       lea     eax, dword ptr [ebp-4]
00414036   .  C705 E0B84700>mov     dword ptr [47B8E0], 0A           ;  这里内存访问断点被断下

竟然是个常数0A

程序有个命令行选项的说明,似乎可是设置这个时间,但是我没看明白他的命令行是怎么用的,就到此为止吧!

LZ参考吧!!
2010-4-17 15:02
0
雪    币: 191
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
谢谢.回答.呵呵.我试试.我别的不太会NOP还是会的.但是是不退出了.是退不出了.所以发上来让大家看下.我先试试二楼的.在看三楼的.好长.长知道.真是太感谢了.
2010-4-17 22:40
0
雪    币: 191
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
二楼的有效.可能是我没NOP对地方.呵呵.谢谢二楼.
2010-4-17 22:45
0
雪    币: 191
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
三楼的我也看了下.呵呵.讲的很好...就是我看不懂.对这方面不太了解.哎.呵呵,我还是要向坛子里的人学习.在次谢谢两位帮助.学习了很多东西.
2010-4-17 23:16
0
雪    币: 2513
活跃值: (615)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
00414036     C705 E0B84700 2C010000      mov dword ptr ds:[0x47B8E0],0x12C
2010-4-18 01:53
0
游客
登录 | 注册 方可回帖
返回
//