荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: 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软件 网络书店