首页
社区
课程
招聘
在DGCF论坛看到的帖子,关于豪杰解霸的,请看
发表于: 2004-5-26 16:38 5268

在DGCF论坛看到的帖子,关于豪杰解霸的,请看

2004-5-26 16:38
5268
先转载一下您的文章:
豪杰菜单处理函数分析和研究

----再发一文.申请入组织.我想加入组织,不知道具体应该做什么才可以呢??

作者:nbw[NE365]
QQ : 343538175

http://nboy.cnwlt.com    很希望和Pe Diy爱好者交流或合作
  

       今天主要介绍如何寻找菜单消息处理的地方,和上两篇一样,我们依然拿豪杰解霸2003英雄版开刀。首先考虑最方便的方法吧,用w32dasm反编译,找到“文件”/“打开单个文件”菜单,其ID为: 9c41H。好了搜索9c41H,看看那里有没有类似sub  eax,  9c41  ;  jnz  ……的代码,如果有的话就中断到那里看看。结果没有(当然没有,要不我今天也不用在此长篇大论)。

       那就从 “打开单个文件”菜单的功能入手,这个菜单调用了通用打开对话框让用户选择视频文件,于是乎,调出TRW2000:

1、bpx getopenfilenamea    选中:"打开单个文件" 菜单,被TRE中断,下命令F12,弹出打开文件对话框,点取消,再次回到TRW,停留在一个ret处,击F10进一步,在上面的地址0167:0041ddd6处下中断命令,也就是这个call调用了刚才的getopenfilenamea函数。退出TRW;

2、取消中断bpx getopenfilenamea,只保留0167:0041ddd6的中断,并打开此中断,在豪杰中选中“打开多个文件”菜单,未被TRW拦截,说明我们刚才下中断的Call和“打开多个菜单”选项无关;

3、再次选中“打开单个文件”菜单,很明显,被TRW拦截,再次下F12命令,和第一步一样,取消弹出的打开文件对话框,TRW又停留在一个ret命令上,F10前进一步,向上面看是:0167:0041e116处,说明我们刚刚从这个call跳出来,清空以前的中断,在这里(0167:0041e116)下中断;

4、重复执行第二步的操作,也就是看我们的中断是否可以拦截到“打开多个菜单”选项,如果拦不到,再往外面的call跳,直到找到一个call,既可以拦截到“打开单个文件”也可以拦截到“打开多个文件”,这个Call就是0167:0041f0d1

  

现在看来:

:0041F0CF 50                      push eax  ;eax-->菜单句柄        

:0041F0D0 57                      push edi

:0041F0D1 E82A080000              call 0041F900

就是处理菜单选项的入口点。

现在我们再次选中“打开单个文件”追进这个Call,我们直到,这个菜单选项的ID是9c41H,注意观察,不出几步就到了下面的菜单ID处理部分,如下:

:0041F93A 8D86BF63FFFF            lea eax, dword ptr [esi+FFFF63BF] ;esi--->菜单ID,由此确定eax

:0041F940 3D88010000              cmp eax, 00000188                     

:0041F945 0F8715150000            ja 00420E60                       ;判断菜单时候都不跳     

:0041F94B 33C9                    xor ecx, ecx

:0041F94D 8A88E4124200            mov cl, byte ptr [eax+004212E4] ;根据上面查出的eax来确定cl

:0041F953 FF248D00114200          jmp dword ptr [4*ecx+00421100] ;根据ecx(其实是cl)确定要跳转的方向

最后的dword ptr [4*ecx+00421100]就是消息对应的函数。

由此可见,豪杰在对菜单的处理采用了数组方式,通过2次对数组的查找来完成最终的转向,相比对各个菜单ID直接比较,本方法更为高效,值得学习。

       上面我介绍的4步方法,其实是暴力破解中比较常用的方法,说白了就是,一个地方找不到切入点,我们就跳出去,到“外层”空间进行查找。一部分人对暴破不屑一顾,事实上每种方法都有它值得学习的地方!

       事情到此并未结束,我们看到:0041F0D1   call 0041F900是菜单的消息处理函数,现在仍然用TRW对这个call下中断,试验一下点击主界面上的按钮,比如说进度跳上面的那个讨厌的“播放影碟”按钮,看看发现了什么?

       噢,被TRW中断了。事实证明,我们刚才找到的Call是豪杰解霸的主消息处理函数。豪杰主窗口的大部分按钮和菜单的消息由他来接收。这样一来,我们对豪杰的DIY便大大方便了。

       既然发现了这个函数,我们就要对他改造一番,也显得咱“到此一游”。具体留下什么记号呢?就把进度条和“文件”菜单中间的那个按钮的功能改成“打开单个文件”吧。

       下命令bpx  0041F953(看看上面这个地址的作用),在F10 ,发现跳往0167:41F96E,也就是说从0167:41F96E开始就进入到了“打开打个文件”的功能。那么我们要修改的按钮呢?点击那个按钮,再次中断,看看往哪里跳?晕倒,竟然就是下一条命令0167: 41F95A。那么,我们就NOP大法,把从0167: 41F95A开始到0167:41F96E全部NOP掉。这样随便nop这么多指令,会不会由副作用呢?靠!我才不管那么多,要是不行的话再SMC嘛。调出Hiew,。。。。。。。。修改完毕,打开豪杰,点一下那个打开影碟的按钮,靠!?

       一切良好,咱们下节课再见!

★★★★★★我想请问:
1.由于现在大家都使用豪杰超级解霸V8,我想请问在V8中如何更改菜单中的快捷键,比方说播放和暂停的快捷键都是Enter,前进/后退的快捷键是Ctrl+PageDn,能不能改为别的键呢?请问如何改(用WinHex)?
2.或者说说下什么断点,关键的文件是什么也可以。

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

收藏
免费 6
支持
分享
最新回复 (4)
雪    币: 221
活跃值: (100)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
没有人知道?
2004-5-27 10:02
0
雪    币: 339
活跃值: (1510)
能力值: ( LV13,RANK:970 )
在线值:
发帖
回帖
粉丝
3
我在给你查资料
是DFCG
2004-5-27 10:41
0
雪    币: 236
活跃值: (48)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
学习中……
2004-5-27 18:26
0
雪    币: 221
活跃值: (100)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
最初由 nbw 发布
我在给你查资料
是DFCG

键入错误,我把DFCF写成DGCF了,抱歉。
有结果了请公布一下,我要好好学习,谢谢。
2004-5-28 00:29
0
游客
登录 | 注册 方可回帖
返回
//