首页
社区
课程
招聘
[求助]一个程序操作时自动打开网页 怎么破解
发表于: 2009-12-21 19:23 8185

[求助]一个程序操作时自动打开网页 怎么破解

2009-12-21 19:23
8185
软件名是   EASY定时关机  下载地址 http://www.downxia.com/downinfo/1934.html

软件启动时会打开一个网页 代码如下:

00401A55   > \68 E8704000   PUSH EasyShut.004070E8                   ;  http://www.onlinedown.net/soft/19788.htm
00401A5A   .  8D4C24 08     LEA ECX,DWORD PTR SS:[ESP+8]
00401A5E   .  E8 55210000   CALL <JMP.&MFC42.#537_CString::CString>
00401A63   .  8B4424 04     MOV EAX,DWORD PTR SS:[ESP+4]
00401A67   .  6A 01         PUSH 1                                   ; /IsShown = 1
00401A69   .  6A 00         PUSH 0                                   ; |DefDir = NULL
00401A6B   .  6A 00         PUSH 0                                   ; |Parameters = NULL
00401A6D   .  50            PUSH EAX                                 ; |FileName
00401A6E   .  68 E0704000   PUSH EasyShut.004070E0                   ; |open
00401A73   .  6A 00         PUSH 0                                   ; |hWnd = NULL
00401A75   .  C78424 C00200>MOV DWORD PTR SS:[ESP+2C0],0             ; |
00401A80   .  FF15 C4524000 CALL DWORD PTR DS:[<&SHELL32.ShellExecut>; \ShellExecuteA  //只要把这行  NOP 掉  就可以不再让程序启动时打开这个网页

但是程序后面还有一个地方也是会打开网页   
就是在设定好任务后  点确定时   它也会打开网页   代码如下  

00402804   .  E8 01130000   CALL <JMP.&MFC42.#4224_CWnd::MessageBoxA>
00402809   >  68 C0714000   PUSH EasyShut.004071C0                   ;  http://www.skycn.com/soft/30468.html
0040280E   .  8D4C24 14     LEA ECX,DWORD PTR SS:[ESP+14]
00402812   .  E8 A1130000   CALL <JMP.&MFC42.#537_CString::CString>
00402817   .  8B4C24 10     MOV ECX,DWORD PTR SS:[ESP+10]
0040281B   .  6A 01         PUSH 1                                   ; /IsShown = 1
0040281D   .  55            PUSH EBP                                 ; |DefDir
0040281E   .  55            PUSH EBP                                 ; |Parameters
0040281F   .  51            PUSH ECX                                 ; |FileName
00402820   .  68 E0704000   PUSH EasyShut.004070E0                   ; |open
00402825   .  55            PUSH EBP                                 ; |hWnd
00402826   .  FF15 C4524000 CALL DWORD PTR DS:[<&SHELL32.ShellExecut>; \ShellExecuteA ///  可是现在如果NOP掉这行  它就程序错误了
求教各位大大  如何去掉后面的这个网页 又可以正常运行??

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

收藏
免费 0
支持
分享
最新回复 (20)
雪    币: 1489
活跃值: (1008)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
2
注意堆栈平衡啊,如果不NOP掉参数,堆栈就被破坏掉了,不应该只NOP掉ShellExecuteA
执行ShellExecuteA的5个参数的栈谁来清啊
正确的是把下面函数的参数和函数都全部NOP掉:
0040281B   .  6A 01         PUSH 1                                   ; /IsShown = 1
0040281D   .  55            PUSH EBP                                 ; |DefDir
0040281E   .  55            PUSH EBP                                 ; |Parameters
0040281F   .  51            PUSH ECX                                 ; |FileName
00402820   .  68 E0704000   PUSH EasyShut.004070E0                   ; |open
00402825   .  55            PUSH EBP                                 ; |hWnd
00402826   .  FF15 C4524000 CALL DWORD PTR DS:[<&SHELL32.ShellExecut>; \ShellExecuteA ///\

分已经扣了,就给我吧...
2009-12-21 19:36
0
雪    币: 1489
活跃值: (1008)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
3
我只有1kx了。。。。。5555
2009-12-21 19:48
0
雪    币: 164
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
这个我知道呀   你NOP它的话 后面几行也会被NOP的 。。。  仍然错误呀~~~
2009-12-21 20:10
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
信息O(∩_∩)O哈哈~
2009-12-21 21:15
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
我也想知道答案。
2009-12-21 21:47
0
雪    币: 250
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
68 C0714000   PUSH EasyShut.004071C0                   ;  http://www.skycn.com/soft/30468.html

改成别的字符串,比如sttp:://www.skycn.com/soft/30468.html
.....................
2009-12-21 21:59
0
雪    币: 1489
活跃值: (1008)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
8
00402804   .  E8 01130000   CALL <JMP.&MFC42.#4224_CWnd::MessageBoxA>
00402809   >  68 C0714000   PUSH EasyShut.004071C0                   ;  http://www.skycn.com/soft/30468.html
0040280E   .  8D4C24 14     LEA ECX,DWORD PTR SS:[ESP+14]
00402812   .  E8 A1130000   CALL <JMP.&MFC42.#537_CString::CString>
00402817   .  8B4C24 10     MOV ECX,DWORD PTR SS:[ESP+10]
0040281B   .  6A 01         PUSH 1                                   ; /IsShown = 1    ;这里改JMP跳转到ShellExecut的下一行试试看看
0040281D   .  55            PUSH EBP                                 ; |DefDir
0040281E   .  55            PUSH EBP                                 ; |Parameters
0040281F   .  51            PUSH ECX                                 ; |FileName
00402820   .  68 E0704000   PUSH EasyShut.004070E0                   ; |open
00402825   .  55            PUSH EBP                                 ; |hWnd
00402826   .  FF15 C4524000 CALL DWORD PTR DS:[<&SHELL32.ShellExecut>; \ShellExecuteA ///  可是现在如果NOP掉这行  它就程序错误
2009-12-21 22:13
0
雪    币: 1632
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
00401A67 . 6A 01 PUSH 1 ; /IsShown = 1
00401A69 . 6A 00 PUSH 0 ; |DefDir = NULL
00401A6B . 6A 00 PUSH 0 ; |Parameters = NULL
00401A6D . 50 PUSH EAX ; |FileName
00401A6E . 68 E0704000 PUSH EasyShut.004070E0 ; |open
00401A73 . 6A 00 PUSH 0 ; |hWnd = NULL

00401A75 . C78424 C00200>MOV DWORD PTR SS:[ESP+2C0],0 ; |
00401A80 . FF15 C4524000 CALL DWORD PTR DS:[<&SHELL32.ShellExecut>; \ShellExecuteA

把红色nop了就行。
2009-12-21 22:46
0
雪    币: 56
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
上面已经有解了 我帮顶一下吧
2009-12-22 08:40
0
雪    币: 22
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
路过学习,反汇编这条路,不好走啊
2009-12-22 09:25
0
雪    币: 458
活跃值: (421)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
12
方法1:
全部nop掉以下代码
0040281B   .  6A 01         PUSH 1                                   ; /IsShown = 1
0040281D   .  55            PUSH EBP                                 ; |DefDir
0040281E   .  55            PUSH EBP                                 ; |Parameters
0040281F   .  51            PUSH ECX                                 ; |FileName
00402820   .  68 E0704000   PUSH EasyShut.004070E0                   ; |open
00402825   .  55            PUSH EBP                                 ; |hWnd
00402826   .  FF15 C4524000 CALL DWORD PTR DS:[<&SHELL32.ShellExecut>; \ShellExecuteA

然后将
0040282C      8D4C24 10     LEA ECX,DWORD PTR SS:[ESP+10] 修改为
0040282C      8D4C24 10     LEA ECX,DWORD PTR SS:[ESP-8]
2009-12-22 09:51
0
雪    币: 458
活跃值: (421)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
13
方法2:

00402825   .  55            PUSH EBP                                 ; |hWnd 修改为
00402825   .  55            PUSH EBX                                 ; |hWnd
2009-12-22 09:55
0
雪    币: 1632
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
厉害啊,现学现用,改成不存在的窗体句柄。
2009-12-22 10:04
0
雪    币: 458
活跃值: (421)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
15
嘿嘿,我问的那个问题别人不知道,你肯定知道  ,跟这个是一模一样的问题,nop掉调用函数,栈平衡出问题了,最后是个高手给解决了,也是这2种方法,哈哈
2009-12-22 10:12
0
雪    币: 22
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
高手能不能留下你的qq?
2009-12-22 10:13
0
雪    币: 164
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
我想请教  这是为什么   好像还是打开网页了额
还有上面的方法一   我试了下  NOP前面之后  改不改后面的 esp+10 为esp-8  也能成功去掉那个网页额~~~~
2009-12-22 14:09
0
雪    币: 458
活跃值: (421)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
18
To:tmsdy

关于方法2 是一种比较邪的方法,他的原理是破坏调用函数的参数,让函数调用失败已达到目的,我给的修改是错误(依然能打开,这里说句不好意思),我重新实验了一下,这样
0040281B      6A 01         PUSH 1
0040281D      55            PUSH EBP
0040281E      55            PUSH EBP
0040281F      51            PUSH ECX
00402820      68 FE704000   PUSH EasyShut.004070FE                   ;  ASCII "net/soft/19788.htm"
00402825      53            PUSH EBX

00402826      FF15 C4524000 CALL DWORD PTR DS:[<&SHELL32.ShellExecut>;  SHELL32.ShellExecuteA
0040282C      8D4C24 10     LEA ECX,DWORD PTR SS:[ESP+10]
00402830   .  E8 99120000   CALL <JMP.&MFC42.#800_??1CString@@QAE@XZ>

这样就行了,你也可以自己乱改改参数试试,我就是乱改的  反正能达到目的

对于第一种方法,先讲一点相关知识
函数调用时参数传递考虑两个问题:
1、按什么顺序将参数入栈;
2、函数结束后,由谁来平衡堆栈;

围绕这两个问题,不同语言定了不同的调用约定,包括__cdcel(C规范)、PASCAL、stdcall及Fastcall四种方式
win32API采用stdcall方式,由被调用函数返回前平衡堆栈,故你在MessageBoxA函数后面看不到平衡堆栈的操作(在函数内部就完成堆栈平衡操作了)
sprintf函数采用的是__cdcel方式,需要调用者自己平衡堆栈,所以函数返回后有个 add esp,xx
http://www.rrgod.com/

下面我们先做一个实验,建立一个MFC空Dlg程序,然后在按钮里加代码如下
void CMy1111Dlg::OnOK()
{
        ::ShellExecuteA(m_hWnd, "open", "http://www.baidu.com", NULL, NULL, NULL)        ;
}
OD之,发现:
0040147E      90            NOP
0040147F      90            NOP
00401480   .  8B41 20       MOV EAX,DWORD PTR DS:[ECX+20]
00401483   .  6A 00         PUSH 0                                   ; /IsShown = 0
00401485   .  6A 00         PUSH 0                                   ; |DefDir = NULL
00401487   .  6A 00         PUSH 0                                   ; |Parameters = NULL
00401489   .  68 28304000   PUSH 1111.00403028                       ; |FileName = "http://www.baidu.com"
0040148E   .  68 20304000   PUSH 1111.00403020                       ; |Operation = "open"
00401493   .  50            PUSH EAX                                 ; |hWnd
00401494   .  FF15 B4214000 CALL DWORD PTR DS:[<&SHELL32.ShellExecut>; \ShellExecuteA
0040149A   .  C3            RETN
0040149B      90            NOP
0040149C      90            NOP

说明这个函数 是自己来平衡栈的,不需要我们平衡,不用管ESP,开始你误导我了,呵呵,下面你知道怎么做了吧
参考:
我的相关问题分析: http://hi.baidu.com/blueapple%5Fc/blog/item/d73cab2ba5272e26d52af134.html
我讨论过的帖子:http://bbs.pediy.com/showthread.php?t=103317
上传的附件:
2009-12-22 15:42
0
雪    币: 164
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
哈哈 学习了  继续研究~~~~~
2009-12-23 12:05
0
雪    币: 166
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
18楼GOOD method
2009-12-24 14:35
0
雪    币: 22
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
我按照你的作法作了,结果程序启动就报错,根本启动不了呀?
2009-12-24 20:37
0
游客
登录 | 注册 方可回帖
返回
//