首页
社区
课程
招聘
[求助]求助如何修改代码隐藏菜单..
发表于: 2013-7-9 23:43 8031

[求助]求助如何修改代码隐藏菜单..

2013-7-9 23:43
8031
研究了一天了,想用RegisterClassEx 函数找到以下初始化 WNDCLASSEX 结构体的代码,使它的lpszMenuName成员等于null,但是一直找不到..
CreateWindow函数也找不到,各种关于Menu的函数都找不到,可能是水平太差,跟踪不到...
求授鱼啊....

程序下载地址

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (18)
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
网速实在太慢...居然发了两变..太惭愧了....
请高手指点..
2013-7-9 23:56
0
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我是不是发错地方了,,应该发到逆向分析啊...这里也行吧??真搞不定求指点....
2013-7-10 09:25
0
雪    币: 233
活跃值: (59)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
具体说说你想隐藏哪个菜单,还是所有菜单都想隐藏
看大家谁能帮到你
2013-7-10 12:38
0
雪    币: 233
活跃值: (59)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
这个用资源修改工具更方便呵。
下面是用exescope改的:
上传的附件:
2013-7-10 13:30
0
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
是整个菜单栏条都隐藏,不是隐藏一个..隐藏一部分的话,我知道怎么弄..
2013-7-10 14:54
0
雪    币: 233
活跃值: (59)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
没感觉有什么不同呵,同样可以修改。
上传的附件:
2013-7-10 21:19
0
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
你这种操作是否是把菜单项都删了然后把菜单栏高度调低了???
是否跟我效果一样..不过我们的主题不一样...

图片

如果你的方法是整个菜单栏隐藏或能调整菜单栏高度,请指点下方法???
上传的附件:
2013-7-10 21:47
0
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
顶一下,求高手指导啊...
2013-7-12 13:15
0
雪    币: 233
活跃值: (59)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
呵呵,原来关键在mfc80.dll里:
CPU Disasm
Address             Hex dump          Command                                  Comments
00267203 #1557      /$  55            PUSH EBP
00267204            |.  8BEC          MOV EBP,ESP
00267206            |.  51            PUSH ECX
00267207            |.  56            PUSH ESI
00267208            |.  57            PUSH EDI
00267209            |.  33FF          XOR EDI,EDI
0026720B            |.  397D 1C       CMP DWORD PTR SS:[EBP+1C],EDI
/* [EBP+1C] 里放的是菜单名称; 这里与NULL进行比较 */
0026720E            |.  8BF1          MOV ESI,ECX
00267210            |.  897D FC       MOV DWORD PTR SS:[EBP-4],EDI
00267213                74 29         JE SHORT 0026723E 		//这里应该JMP,菜单项将不加载
00267215            |.  6A 04         PUSH 4                                   ; Arg2 = 4
00267217            |.  FF75 1C       PUSH DWORD PTR SS:[EBP+1C]               ; Arg1
0026721A            |.  E8 0BBD0800   CALL #1063
0026721F            |.  FF75 1C       PUSH DWORD PTR SS:[EBP+1C]               ; /MenuName
00267222            |.  50            PUSH EAX                                 ; |hInst
00267223            |.  FF15 70172300 CALL DWORD PTR DS:[<&USER32.LoadMenuA>]  ; \USER32.LoadMenuA


下面是效果图:
上传的附件:
2013-7-16 04:53
0
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
按照你的方法,我修改了mfc80.dll后,都不知道把DLL放置到哪?
我先放到程序根目录下,修改的DLL没有运行.
分析进程,看到它直接加载了C:\Windows\winsxs\x86_microsoft.vc80.mfc_1fc8b3b9a1e18e3b_8.0.50727.4053_none_cbf21254470d8752文件下的MFC80.DLL文件,而不是本目录下的DLL...为啥会这样?
2013-7-16 17:20
0
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
替换了C:\Windows\winsxs\x86_microsoft.vc80.mfc_1fc8b3b9a1e18e3b_8.0.50727.4053_none_cbf21254470d8752下的mfc80.dll文件后,菜单倒是隐藏了..但是这样的方法在客户端操作起来很麻烦啊..而且更改的DLL会不会影响别的程序加载的菜单...求指点...
2013-7-16 17:44
0
雪    币: 233
活跃值: (59)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
没错呵!DLL不能动。
其实可以从这个EXE文件入手,当LoadMenu之前,将MenuName置NULL。具体做法就是:
[原EXE代码]
0046D3DC   .- FF25 38014700             JMP DWORD PTR DS:[<&MFC80.#1557>]


这里改写代码,让它跳转到我们的代码
0046D3DC     /E9 FF2B0000               JMP 0046FFE0
0046D3E1     |90                        NOP


我们的代码可以这样
0046FFE0      55                        PUSH EBP
0046FFE1      89E5                      MOV EBP,ESP
0046FFE3      C745 1C 00000000          MOV DWORD PTR SS:[EBP+1C],0 //将MenuName置NULL
0046FFEA      5D                        POP EBP
0046FFEB    - FF25 38014700             JMP DWORD PTR DS:[<&MFC80.#1557>]
/* 继续到MFC80.DLL执行LoadMenu */


按照上面的思路可以直接给EXE文件打补丁,也可以自己写个LOADER。 至于找的那个0046FFE0地址是否合适,还得多测试:)
2013-7-16 21:40
0
雪    币: 233
活跃值: (59)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
据微软官方网站说:

With both implicit and explicit linking, Windows first searches for "known DLLs", such as Kernel32.dll and User32.dll. Windows then searches for the DLLs in the following sequence:
1. The directory where the executable module for the current process is located.
2. The current directory.
3. The Windows system directory. The GetSystemDirectory function retrieves the path of this directory.
4. The Windows directory. The GetWindowsDirectory function retrieves the path of this directory.
5. The directories listed in the PATH environment variable.


C:\Windows\winsxs\x86_microsoft.vc80.mfc_1fc8b3b9a1e18e3b_8.0.50727.4053_none_cbf21254470d8752文件下的dll应该是vc++2008redistributable安装的。我的想法是如果有安装,就加载这个;否则就用当前目录下的。
2013-7-16 21:59
0
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
呵呵,按照你的思路..完美解决问题...是不是能直接找到调用

0046D3DC   .- FF25 38014700             JMP DWORD PTR DS:[<&MFC80.#1557>]

的代码,然后修改MenuName为null呢?最近新学逆向工程....狂补基础啊.
2013-7-16 22:44
0
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
真的非常感谢,让我对逆向有了新的了解....
2013-7-16 22:45
0
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
[QUOTE=lupming;1199579]呵呵,按照你的思路..完美解决问题...是不是能直接找到调用

0046D3DC .- FF25 38014700 JMP DWORD PTR DS:[<&MFC80.#1557>]

的代码,然后修改MenuName为null呢?最近新学逆向工程....狂...[/QUOTE]

调试后发现调用0046D3DC 的代码
地址 HEX 数据 指令 注释
670274D0 |. FF75 F0 PUSH DWORD PTR SS:[EBP-10]
670274D3 |. FF75 EC PUSH DWORD PTR SS:[EBP-14]
670274D6 |. FF90 3C010000 CALL DWORD PTR DS:[EAX+13C] //这里调用




他调用的地方也是在MFC80.DLL里,这样的话,如果不是"打补丁"的话,就只能通过修改DLL解决了??
上传的附件:
2013-7-16 23:24
0
雪    币: 233
活跃值: (59)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
万一DLL是share的呢,所以我觉得给exe打补丁好。
2013-7-17 00:20
0
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
嗯,是的,只是觉得奇怪,怎么这种加载菜单栏的业务处理型代码怎么会在mfc80.dll里呢...

还得继续学习...
2013-7-17 09:31
0
游客
登录 | 注册 方可回帖
返回
//