先转载一下您的文章:
豪杰菜单处理函数分析和研究
----再发一文.申请入组织.我想加入组织,不知道具体应该做什么才可以呢??
作者: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期)