首页
社区
课程
招聘
[旧帖] [求助]这个vc写的程序,为什么无法修改啊~~ 0.00雪花
发表于: 2006-12-23 18:16 3805

[旧帖] [求助]这个vc写的程序,为什么无法修改啊~~ 0.00雪花

2006-12-23 18:16
3805
这个软件 一打开就会调用IE 弹出网页  我想出掉这个功能
于是汇编后得到

00417757    E8 52710000     call <jmp.&MFC42.#941>
0041775C    8B4424 00       mov eax,dword ptr ss:[esp]
00417760    6A 01           push 1
00417762    50              push eax

00417763    FF15 50204200   call dword ptr ds [<&kernel32.WinExec>]     ; KERNEL32.WinExec
00417769    8D4C24 00       lea ecx,dword ptr ss:[esp]

0041776D    C68424 14010000>mov byte ptr ss:[esp+114],0
00417775    E8 EA6F0000     call <jmp.&MFC42.#800>
0041777A    8D4C24 04       lea ecx,dword ptr ss:[esp+4]
0041777E    C78424 14010000>mov dword ptr ss:[esp+114],-1

追踪后发现是在00417763出调用模块  然后返回00417769
于是我把 call dword ptr ds  该为 jmp 00417769
可是更改后程序一运行就自动关闭了
为什么会这样 请高手指点一下
另外能不能说说要去除这种限制的基本思路呢
小弟在这先谢过了~~~

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 133
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
我觉得可能kernel32.WinExec里面有什么东西会给下面的进行使用,
这样,你去掉后,下面的得不到什么,便会有问题。所以要想去掉,还得把下面的一些东西也去掉
2006-12-23 18:26
0
雪    币: 201
活跃值: (32)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
这样改会导致堆栈不平衡
把下面两行nop掉看
00417760    6A 01           push 1
00417762    50              push eax

还有要注意一下eax的值
2006-12-23 19:10
0
雪    币: 133
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
堆栈不平衡?是不是push,pop乱了呀?
2006-12-23 19:38
0
雪    币: 201
活跃值: (32)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
00417760    6A 01           push 1
00417762    50              push eax
00417763    FF15 50204200   call dword ptr ds [<&kernel32.WinExec>]     ; KERNEL32.WinExec

1跟eax作为KERNEL32.WinExec的参数在函数调用之前入栈
根据stdcall调用约定,调用WinExec之后同时由该函数负责恢复堆栈

如果直接把 call dword ptr ds  这句改为 jmp 00417769的话
就省略了堆栈的恢复过程,堆栈当然会不平衡
2006-12-23 20:05
0
雪    币: 220
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
我试了一下  把00417760 00417762  nop掉
运行正常

没出现问题

真是谢谢这位大哥了
2006-12-23 22:03
0
游客
登录 | 注册 方可回帖
返回
//