首页
社区
课程
招聘
[旧帖] 不规则窗体+Delphi编程(已解决) 0.00雪花
发表于: 2006-11-10 11:52 7440

[旧帖] 不规则窗体+Delphi编程(已解决) 0.00雪花

2006-11-10 11:52
7440
彩虹游戏盒子(Gamebox),因为关闭软件的时候,总是会跳出一个Tflashform,试图连接到一个网站,而且必须等网页加载完成才能显示关闭按钮,所以想把它搞掉。可是在逆向分析过程中遇到了问题,还请大家帮忙指一条明路~~~

软件用Dephi编写的,界面不是标准的Windows窗口,用查找参考文本字串、设控件消息断点等方式不好定位。我的调试过程是用OD加载运行,再F9,gamebox主窗口出现,这是切回OD查看窗口,得到如下信息:

Windows
句柄           标题                              父窗口     WinProc    ID         风格       扩展风格   线程       ClsProc    类
000205E0                                         Topmost                          84000000   00000080   主          004068A0   TPUtilWindow
000205E8                                         Topmost                          0CC00000   00000100   主          02545F60   ATL:02595250
0002063E       Hammer of Thor                    Topmost                          8C000000              主          77E26387   Mjolnir
E00020634      THOR MAIN WINDOW                  0002063E                         8C400000   00000188   主          02577BCB   CiceroUIWndFrame
NK000205FA     CiceroUIWndFrame                  00020634                         8C800000   00000008   主          02577BCB   CiceroUIWndFrame
NK00020620     PadListView                       00020634                         56000000   00000200   主          02568210   PadListView
NIE000205EA                                      00020620              00000020   40000002              主          FFFF06DB   SysHeader32
NE0002063A     CiceroUIWndFrame                  00020634                         8C000000   00080008   主          02577BCB   CiceroUIWndFrame
NNK000705CC    PadListView                       0002063A                         56000000   00000200   主          02568210   PadListView
NNIE00040610                                     000705CC              00000020   50000002              主          FFFF06DB   SysHeader32
NNE001005CA    CiceroUIWndFrame                  0002063A                         8C800000   00000008   主          02577BCB   CiceroUIWndFrame
000305F2                                         Topmost                          86010000              主          FFFF06D9   Shell Embedding
0003068C       彩虹游戏盒子 V1.6                       Topmost                          17C40000   00010100   主          0044487C   TMainForm
K000205E2                                        0003068C              =句柄  00    54000100              主          0044487C   TStatusBar
K000205E4      Panel1                            0003068C              =句柄  00    56000000   00010000   主          0044487C   TPanel
IE0003068E                                       000205E4              =句柄  00    56010000              主          FFFF06D9   Shell Embedding
INE00040688                                      0003068E                         56010000              主          FFFF0711   Shell DocObject View
INNE00020618                                     00040688                         56000000              主          FFFF0729   Internet Explorer_Server
K000205EE                                        0003068C              =句柄  00    56000000   00010000   主          0044487C   TPanel
IK000205E6                                       000205EE              =句柄  00    56000000   00010000   主          0044487C   TPanel
IE000405EC                                       000205EE              =句柄  00    5600984E   00010000   主          0044487C   TToolBar
E001D020C      Default IME                       0003068C                         8C000000              主          77E6DC14   IME
NE000605DA     M                                 001D020C                         8C000000              主          FFFF0735   MSCTFIME UI
000605DE                                         Topmost                          84000000   00000080   主          004068A0   TPUtilWindow
0006068A                                         Topmost                          84000000   00000080   主          004068A0   TPUtilWindow
00070640                                         Topmost                          84000000              主          FFFF0731   Internet Explorer_Hidden
0026020E       gamebox                           Topmost                          94CA0000   00000100   主          004068A0   TApplication
K000205F0        本软件为免费,请您支持本软件,                 0026020E                         86C00000   00000101   主          0044487C   Tflashform
K000205F4      帮助                                0026020E                         86C80000   00000101   主          0044487C   ThelpForm
K000205F6      关于...                             0026020E                         86C80000   00000101   主          0044487C   TAboutForm
E000205F8      打开                                0026020E                         86C80000   00000101   主          0044487C   TOpenForm

红色部分就是那个想搞掉的窗口,于是我跟随 ClassProc,在该处下断点,重新执行程序后发现跟我原来想的情况不同。
我原来想像是在点关闭按钮的时候创建一个Tflashform窗口,那么我可以直接在程序中从这里jmp到结束程序,pass掉这个窗口。
但是事实上好像是这个程序一运行的时候,就把所有窗体都创建好了,点关闭按钮的时候无非是设置了一个窗体的IsVisiable属性,并且要命的是所有窗体的创建都是同一个call,我猜用delphi和CB编写的程序都是这种情况,不知是不是这样?还是因为他是用的哪种界面控件或是特殊方法来设计非标准窗体导致的这种情况?请高手指教一把~~~
然后问题就是。。。。。。。下面我该怎么办啊?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 202
活跃值: (50)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
我粗略翻了一下原来下载的论坛精华(不超过2分钟 -_-!!),发现专门讲用动态跟踪破Delphi程序的资料较少(也许是我没看到:),但是看到两篇讨论Delphi下如何下断点截取文本框信息的,和一般介绍的API断点及思路都不相同,我想这大概是用VCL写程序的普遍现象,而无论是用MFC还是SDK还是VB写程序都是微软的一套应该就用标准的api调试方法就可以。(如果我说错了请一定指教!!)

废话不多说,我用DeDe把Gamebox.exe载入分析了一道,找到一些有用信息:

1、在窗体页中,得到 TMainForm 的 OnCloseQuery = FormCloseQuery ,即主窗体关闭的时候会调用FormCloseQuery过程;

2、TflashForm窗体的控件中只有1个按钮Button1,应该就是讨厌的弹出窗口中的“退出”按钮了,它的 Caption = #36864'  '#20986,Unicode-16编码(Delphi/CB中默认编码都是这种),写了个html用浏览器显示了一把,果然是“退出”二字(这是个笨方法,请大家教一教我达到同样效果的简单方法,我对字符编码没有深入过),它的 OnClick = Button1Click ,即点击按钮以后会调用Button1Click过程;

3、在过程页中,得到TmainForm.FormCloseQuery过程的入口地址是0048DC28,Tflashform.Button1Click过程的入口地址是0048C994。

OK!彻底了解程序流程了,当点击主窗口“退出”按钮时,调用FormCloseQuery过程,估计该过程是先隐藏主窗体,再显示Flash窗体(我没有进去看,不感兴趣),Flash窗体显示以后,对WebBrowser控件设URL,并且过一段时间后才显示“退出”按钮(可能是载入页面完成或超时以后),点击这个按钮则程序正常退出。

以上都是废话,关键的解决方法,设法在FormCloseQuery过程一开始的时候就直接调用Button1Click过程。再次开OD,找到0048DC28处,汇编,把命令修改为“jmp 0048C994”,F9运行,点“退出”,程序直接关闭,再查看进程管理器,没有残留进程,OK!赶紧复制到可执行文件。

事后:由于我这里用的立即数直接跳转,所以颇有些不安,怕该函数入口地址在别的系统或机器中会有偏差,经验证没有这回事。才想到这些过程的调用不同于调用系统API,其实是早就写好在程序中的,笨啊~
2006-11-10 15:02
0
游客
登录 | 注册 方可回帖
返回
//