-
您的位置:首页 → 精文荟萃 → 破解文章 → 现W32dsm.exe在2000下的命令行功能
现W32dsm.exe在2000下的命令行功能
时间:2004/10/15 0:58:00来源:本站整理作者:蓝点我要评论(0)
-
一、问题的提出:
我在SendTo文件夹下放了很多常用的软件的快捷方式。但是其生效的基本条件是必须支持命令行参数。W32DSM的KILLER版说明支持此参数,而且在WIN98下也通过了。但在2000下用SENDTO会自动退出。
二、查找原因:
是一个STD指令惹的祸。这个我们在以前已经讲过了。
1、
:10043042 890D305A0410 mov dword ptr [10045A30], ecx
:10043048 FD std ;设置字符串处理的方向为逆向,这在NT里面的一些函数中会发生不可预料的错误
:10043049 B05C mov al, 5C
:1004304B F2 repnz
:1004304C AE scasb
:1004304D 85C9 test ecx, ecx
:1004304F 7417 je 10043068
:10043051 8BD9 mov ebx, ecx
:10043053 83C702 add edi, 00000002
:10043056 C647FF00 mov [edi-01], 00
:1004305A 56 push esi
* Reference To: KERNEL32.SetCurrentDirectoryA, Ord:023Eh ;调用这个函数前要把其字符串的处理方向设置为正向
|
:1004305B E8C80C0000 Call 10043D28
2、类似的还有一处(这是我们以前改过的):
:10043168 FD std ;;;;;;;;;;;;;
:10043169 B05C mov al, 5C
:1004316B F2 repnz
:1004316C AE scasb
:1004316D 85C9 test ecx, ecx
:1004316F 741C je 1004318D
:10043171 83C702 add edi, 00000002
:10043174 C647FF00 mov [edi-01], 00
:10043178 3BFE cmp edi, esi
:1004317A 7411 je 1004318D
:1004317C 56 push esi
* Reference To: KERNEL32.SetCurrentDirectoryA, Ord:023Eh ;;;;;;;;;;;;
|
:1004317D E8A60B0000 Call 10043D28
3、修改方法如下(以前也说过):
:10043048 FD std
:10043049 B05C mov al, 5C
:1004304B F2 repnz
:1004304C AE scasb
:1004304D 85C9 test ecx, ecx
:1004304F 7417 je 10043068
:10043051 8BD9 mov ebx, ecx
:10043053 47 inc edi ;;;;;;;;;;;
:10043054 C60700 mov byte ptr [edi], 00 ;;;;;;;;;;;
:10043057 47 inc edi ;;;;;;;;;;;
:10043058 FC cld ;这里恢复其默认设置
:10043059 90 nop ;呵呵,2条指令变4条,还多了一个字节
:1004305A 56 push esi
* Reference To: KERNEL32.SetCurrentDirectoryA, Ord:023Eh
|
:1004305B E8C80C0000 Call 10043D28
三、具体解决方案:
经过跟踪分析,在KILLER的W32DSM版本中,有两个对W32PATCH.DLL的写操作。其中应该以后一个(5271XX处的最终有效)。不管这么多,都改就行了。
1、这里:
005411A4 8DB5 953B4000 LEA ESI,DWORD PTR SS:[EBP+403B95] ;指向%system%\W32PATCH.DLL
005411AA 6A 00 PUSH 0
005411AC 68 80000000 PUSH 80
005411B1 6A 02 PUSH 2
005411B3 6A 00 PUSH 0
005411B5 6A 00 PUSH 0
005411B7 68 00000040 PUSH 40000000
005411BC 56 PUSH ESI
005411BD FF95 39364000 CALL DWORD PTR SS:[EBP+403639] ;实际上是CreateFileA
005411C3 83F8 FF CMP EAX,-1
005411C6 0F84 B9000000 JE W32ASM_2.00541285
...
0054121F E8 710B0000 CALL W32ASM_2.00541D95
00541224 8D9D 93344000 LEA EBX,DWORD PTR SS:[EBP+403493]
0054122A 6A 00 PUSH 0
0054122C 53 PUSH EBX
0054122D FFB5 CB344000 PUSH DWORD PTR SS:[EBP+4034CB]
00541233 FFB5 C7344000 PUSH DWORD PTR SS:[EBP+4034C7] ;指向W32PATCH.DLL的缓冲区的指针
00541239 FFB5 C3344000 PUSH DWORD PTR SS:[EBP+4034C3]
0054123F FF95 79364000 CALL DWORD PTR SS:[EBP+403679] ;WriteFile
2、再到这里:
005271A4 8DB5 953B4000 LEA ESI,DWORD PTR SS:[EBP+403B95] ;指向%system%\W32PATCH.DLL
005271AA 6A 00 PUSH 0
005271AC 68 80000000 PUSH 80
005271B1 6A 02 PUSH 2
005271B3 6A 00 PUSH 0
005271B5 6A 00 PUSH 0
005271B7 68 00000040 PUSH 40000000
005271BC 56 PUSH ESI
005271BD FF95 39364000 CALL DWORD PTR SS:[EBP+403639] ;实际上是CreateFileA
005271C3 83F8 FF CMP EAX,-1
005271C6 0F84 B9000000 JE W32ASM_2.00527285
...
00527224 8D9D 93344000 LEA EBX,DWORD PTR SS:[EBP+403493]
0052722A 6A 00 PUSH 0
0052722C 53 PUSH EBX
0052722D FFB5 CB344000 PUSH DWORD PTR SS:[EBP+4034CB]
00527233 FFB5 C7344000 PUSH DWORD PTR SS:[EBP+4034C7]
00527239 FFB5 C3344000 PUSH DWORD PTR SS:[EBP+4034C3] ;指向W32PATCH.DLL的缓冲区的指针
0052723F FF95 79364000 CALL DWORD PTR SS:[EBP+403679] ;WriteFile
3、补丁方案:
这两处补丁方法都一样,所以写一个标准的补丁代码段,用CALL调用它:)
(1)通用补丁的代码:
004AF811 . 8B85 C7344000 MOV EAX,DWORD PTR SS:[EBP+4034C7]
004AF817 . 8BD8 MOV EBX,EAX
004AF819 . 05 71310000 ADD EAX,3171
004AF81E . 81C3 53300000 ADD EBX,3053
004AF824 . 68 47C60700 PUSH 7C647
004AF829 . 8F00 POP DWORD PTR DS:[EAX]
004AF82B . FF30 PUSH DWORD PTR DS:[EAX]
004AF82D . 8F03 POP DWORD PTR DS:[EBX]
004AF82F . 68 0047FC90 PUSH 90FC4700 ;其中00字节是重复PUSH和POP的,为了避免影响后续的字节
004AF834 . 8F40 03 POP DWORD PTR DS:[EAX+3]
004AF837 . FF70 03 PUSH DWORD PTR DS:[EAX+3]
004AF83A . 8F43 03 POP DWORD PTR DS:[EBX+3]
004AF83D . 8D9D 93344000 LEA EBX,DWORD PTR SS:[EBP+403493]
004AF843 . C3 RETN
(2)需要修改的跳转:
a)
00541224 E8 E8E5F6FF CALL W32ASM_2.004AF811 ;这里
00541229 90 NOP
0054122A 6A 00 PUSH 0
0054122C 53 PUSH EBX
0054122D FFB5 CB344000 PUSH DWORD PTR SS:[EBP+4034CB]
00541233 FFB5 C7344000 PUSH DWORD PTR SS:[EBP+4034C7]
00527239 FFB5 C3344000 PUSH DWORD PTR SS:[EBP+4034C3] ;指向W32PATCH.DLL的缓冲区的指针
0052723F FF95 79364000 CALL DWORD PTR SS:[EBP+403679] ;WriteFile
b)
00527224 E8 E885F8FF CALL W32ASM_2.004AF811
00527229 90 NOP
0052722A 6A 00 PUSH 0
0052722C 53 PUSH EBX
0052722D FFB5 CB344000 PUSH DWORD PTR SS:[EBP+4034CB]
00527233 FFB5 C7344000 PUSH DWORD PTR SS:[EBP+4034C7]
00527239 FFB5 C3344000 PUSH DWORD PTR SS:[EBP+4034C3] ;指向W32PATCH.DLL的缓冲区的指针
0052723F FF95 79364000 CALL DWORD PTR SS:[EBP+403679] ;WriteFile
四、完成啦。太过弱智化,高手莫笑。
|
相关阅读
Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么
-
热门文章
去除winrar注册框方法
最新文章
比特币病毒怎么破解 比去除winrar注册框方法
华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)通过Access破解MSSQL获得数据
人气排行
华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)qq相册密码破解方法去除winrar注册框方法(适应任何版本)怎么用手机破解收费游戏华为无线猫HG522破解如何给软件脱壳基础教程
查看所有0条评论>>