荔园在线
荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀
[回到开始]
[上一篇][下一篇]
发信人: skyxnet (陈宇青), 信区: Security
标 题: 除虫记之程序关闭错误修复
发信站: 荔园晨风BBS站 (Thu Sep 15 10:13:29 2005) , 站内信件
除虫记之程序关闭错误修复
1、 在我的电脑中,安装了SoftICE调试器,只是偶尔用来看看程序而已,谁知”"话"时代
全免费沟通工具“Skype在安装时及运行时会提示发现发现SoftICE调试器的信息。当然,这
只是善意的提示,我也不可能为了它就把SoftICE卸载掉吧? 嘿嘿。。 修改修改它
00C7BA4B . E8 CCE293FF CALL Skype.005B9D1C
00C7BA50 . 84C0 TEST AL,AL
00C7BA52 74 1A JE SHORT Skype.00C7BA6E
00C7BA54 . 6A 00 PUSH 0 ; /Style =
MB_OK|MB_APPLMODAL
00C7BA56 . 68 64C4C700 PUSH Skype.00C7C464 ; |Title =
"Skype"
00C7BA5B . 68 6CC4C700 PUSH Skype.00C7C46C ; |Text = "
Skype is not compatible with system debuggers like SoftICE."
00C7BA60 . 6A 00 PUSH 0 ; |hOwner =
NULL
00C7BA62 . E8 B9CA78FF CALL ; \MessageBoxA
00C7BA67 . 6A 00 PUSH 0 ; /ExitCode
= 0
00C7BA69 . E8 AABE78FF CALL ; \ExitProcess
00C7BA6E > B9 B0C4C700 MOV ECX,Skype.00C7C4B0 ; ASCII "S
tarting .."
00C7BA73 . BA C8C4C700 MOV EDX,Skype.00C7C4C8 ; ASCII "S
kype.main"
00C7BA78 . A1 80248900 MOV EAX,DWORD PTR DS:[892480]
00C7BA7D . E8 56D8C1FF CALL Skype.008992D8
问题就在00C7BA4B处的CALL函数了,通过对特定ASCII的处理来完成对SoftICE调试器相关句
柄的检测工作,(注,所以在静态字符中不会找到类似\\.\SICE的句柄参考值的!)
005B9D4C |. B8 C89E5B00 MOV EAX,Skype.005B9EC8 ; ASCII 10
,"B494A6545B414B4D"
005B9D67 |. B8 DC9E5B00 MOV EAX,Skype.005B9EDC ; ASCII 14
,"B49AACA6B9A3FD7C636E"
005B9D82 |. B8 F49E5B00 MOV EAX,Skype.005B9EF4 ; ASCII 12
,"B49BAB5DB7BD80CA4C"
005B9D9D |. B8 089F5B00 MOV EAX,Skype.005B9F08 ; ASCII 1E
,"B49D5D8BCC4638F9666B5C5B4E5D5B"
0012FF60 01613D4C ASCII "\\.\SiwvidSTART"
0012FF64 001BA07C UNICODE "\\.\SiwvidSTART"
0012FF68 01613D34 ASCII "\\.\NTICE"
0012FF6C 001BEDA4 UNICODE "\\.\NTICE"
0012FF70 01613D1C ASCII "\\.\Siwvid"
0012FF74 001B9E34 UNICODE "\\.\Siwvid"
0012FF78 01612D10 ASCII "\\.\SICE"
0012FF7C 001BA4CC UNICODE "\\.\SICE"
; 还有相应的UNICODE呢
在00C7BA4B . E8 CCE293FF CALL Skype.005B9D1C 指令中, 返回非零值,则表示
安装程序的电脑中安装有SoftICE调试器的存在。。。 随即弹出信息框告知,然后再调用Ex
itProcess()函数退出主程序 !
我们只需要修改00C7BA52中指令即可
JE SHORT Skype.00C7BA6E
=>
JMP SHORT Skype.00C7BA6E
;强制跳过即可
2、 点击“文件”菜单的“关闭”命令时,会发生访问异常的错误提示:
Access violation at address 00893649 in module 'skyXnetpe.exe'. Read of address
00000004.
调试过程:
使用错误捕捉却无法捕捉成功? 嘿嘿。。 只能使用MessageBoxA断点拦截...
00492277 |. E8 38EEFFFF CALL Skype.004910B4
0049227C |. 84C0 TEST AL,AL
0049227E |. 74 06 JE SHORT Skype.00492286
00492280 |. 81CB 00001000 OR EBX,100000
00492286 |> 33C9 XOR ECX,ECX
00492288 |. 55 PUSH EBP
00492289 |. 68 0D234900 PUSH Skype.0049230D
0049228E |. 64:FF31 PUSH DWORD PTR FS:[ECX]
00492291 |. 64:8921 MOV DWORD PTR FS:[ECX],ESP
00492294 |. 53 PUSH EBX ; /Style
00492295 |. 57 PUSH EDI ; |Title
00492296 |. 56 PUSH ESI ; |Text
00492297 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] ; |
0049229A |. 8B40 30 MOV EAX,DWORD PTR DS:[EAX+30] ; |
0049229D |. 50 PUSH EAX ; |hOwner
0049229E |. E8 7D62F7FF CALL ; \MessageBoxA
004922A3 |. 8945 F8 MOV DWORD PTR SS:[EBP-8],EAX ; 返回到些处。。。
限于时间与精力...没办法再对这些代码看下去,不过。由于发生这些错误,要消除这些是
必需的。
由于在前面提到,该程序对SoftICE调试有Anti功能,一旦发现这些调试器的句柄存在,则
自动退出。。。
嘿嘿。。 你是否也想到了下一步要做的事呢?? ^_^
是的。 我们可以采取指令跳转或修改指令的方式来达到程序的正常关闭功能!
修复如下:
修改地址0049227E处的跳转指令,跳向00492294地址处,然后在00492294地址中重新写入退
出主程序的代码,其他未使用的代码,使用NOP掉! 保存,运行,OK ! Fixed Success !
00492277 |. E8 38EEFFFF CALL SkyXnetp.004910B4
0049227C |. 84C0 TEST AL,AL
0049227E EB 14 JMP SHORT SkyXnetp.00492294
00492280 |. 81CB 00001000 OR EBX,100000
00492286 |> 33C9 XOR ECX,ECX
00492288 |. 55 PUSH EBP
00492289 |. 68 0D234900 PUSH SkyXnetp.0049230D
0049228E |. 64:FF31 PUSH DWORD PTR FS:[ECX]
00492291 |. 64:8921 MOV DWORD PTR FS:[ECX],ESP
00492294 6A 00 PUSH 0
00492296 E8 62769C77 CALL kernel32.ExitProcess
0049229B 90 NOP
0049229C 90 NOP
0049229D 90 NOP
0049229E 90 NOP
0049229F 90 NOP
004922A0 90 NOP
004922A1 90 NOP
004922A2 90 NOP
004922A3 |. 8945 F8 MOV DWORD PTR SS:[EBP-8],EAX
后记:
该程序的修复过程较简单,在这里的修改中,需要对这些代码的字节完整性做要求,
否则程序运行会出错哦!
完成于2005.3.2
--
修身 养性 治国 平天下 心有多高,天空就有多高!
※ 来源:.荔园晨风BBS站 http://bbs.szu.edu.cn [FROM: 211.148.214.191]
[回到开始]
[上一篇][下一篇]
荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店