风一样的男孩 发表于 2010-9-15 10:13:23

Thinkpad预装系统安装锐捷认证客户端3.95版,不断提示需要重启才能使用的原因及规避

学校使用的锐捷客户端在WIN7上安装的版本是3.95,在我的Thinkpad R400笔记本的WIN7系统上安装后,运行提示“重启计算机后才能使用锐捷认证客户端,是否立即重启?”,重启之后再次运行,仍然弹出该提示,重启N遍亦不能解决。
上网搜索发现早有人反映这个问题,在锐捷网络技术服务论坛上有用户发帖反映(http://support.ruijie.com.cn/showtopic-20473.aspx),该用户已找到症结,即锐捷认证客户端更新服务与Lenovo ThinkpadVantage System Update服务名冲突,于是在预装有后者的Thinkpad上杯具了。
IDA下看了一下RuijieSupplicant.exe,该程序启动后,调用一个函数,试图访问SuService服务(OpenServiceA使用权限为SERVICE_ALL_ACCESS),将此服务启动类型改为自动(使用ChangeServiceConfigA),之后再查看此服务状态(使用QueryServiceStatusEx),确认此服务状态处于SERVICE_RUNNING或SERVICE_STOP_PENDING。
如果整个过程成功则函数返回1,如其中有任何一步出错或结果不合预计,则返回-1。
问题是Thinkpad系列的笔记本预装的系统中有Lenovo ThinkpadVantage SystemUpdate组件,该组件使用服务的名称正是SuService,与锐捷更新服务同名,相关文件名也是SuService.exe(只是处于不同目录下),而且启动类型是自动。因此锐捷安装的时候没有能够正确地创建自己的SuService服务,之后RuijieSupplicant.exe访问的实际上是Lenovo ThinkpadVantage SystemUpdate组件的服务,在对这个服务进行访问和操作的过程中就可能与预计结果不符,从而导致函数返回-1。
.text:004012DD loc_4012DD:                              ; CODE XREF: sub_401220+AE j
.text:004012DD                  push   offset ServiceName ; "SuService"
.text:004012E2                  call   sub_4010B0
.text:004012E7                  add      esp, 4
.text:004012EA                  cmp      eax, 1
.text:004012ED                  jz       short loc_401328
.text:004012EF                  push   1                ; uType
.text:004012F1                  push   offset asc_4040B0
.text:004012F6                  push   offset asc_40407C
.text:004012FB                  push   ebx            ; hWnd
.text:004012FC                  call   ds:MessageBoxA
.text:00401302                  cmp      eax, 1
.text:00401305                  jnz      loc_401507
.text:0040130B                  call   sub_4011A0
.text:00401310                  pop      edi
.text:00401311                  pop      esi
.text:00401312                  pop      ebp
.text:00401313                  mov      eax, 1
.text:00401318                  pop      ebx
.text:00401319                  mov      ecx,
.text:0040131D                  mov      large fs:0, ecx
.text:00401324                  add      esp, 28h
.text:00401327                  retn
....
.text:00401507 loc_401507:                              ; CODE XREF: sub_401220+38 j
.text:00401507                                          ; sub_401220+6A j ...
.text:00401507                  mov      ecx,
.text:0040150B                  pop      edi
.text:0040150C                  pop      esi
.text:0040150D                  pop      ebp
.text:0040150E                  xor      eax, eax
.text:00401510                  pop      ebx
.text:00401511                  mov      large fs:0, ecx
.text:00401518                  add      esp, 28h
.text:0040151B                  retn
.text:0040151B sub_401220       endp
.text:0040151B
一旦该函数返回-1,程序认为需要重启才能让自身的SuService服务自动运行起来,于是用一个MessageBoxA,弹出“重启计算机后才能使用锐捷认证客户端,是否立即重启?”的对话框,如用户选择重启则重启,如用户选择取消则就退出了。显然,在这种状况下,用户即使选择了重启,重启后结果还是一样的,而用户不选择重启的话,也不会再出来认证界面。
由于这个问题是两者同名产生,在不卸载或修改原有的Lenovo ThinkpadVantage SystemUpdate组件的情况下,要真正解决问题只能修改锐捷的组件,把涉及的服务名通通改掉,从而自行创建新服务给锐捷使用,这条路显然是厂商干的活而不应该是用户的选择。
对于我们这些使用锐捷的校园网用户来说,由于锐捷软件是由学校提供的,升级也是由学校更改后通知,我们基本上不需要让锐捷去自动升级,所以这个功能不是必要的,因此用户的选择应该是撇开这个功能,让锐捷能正常认证上网就可以了。
在这样的思想下,继续看下去可以发现RuijieSupplicant.exe其实只是一个前置程序,锐捷真正的认证功能实现的Ring3主程序是8021x.exe。
RuijieSupplicant.exe的作用是在检查更新服务的状态正常后,查看upgrade文件夹中的Configure.ini中所记载的升级设置结果,完成8021x.exe文件的替换,然后采用命令行参数“-ssbero2008d-user”来启动8021.exe(如果是Vista以上系统,ShellExecuteA参数会使用RunAs,使其以管理员身份运行),之后RuijieSupplicant.exe就返回了。8021x.exe才是真正弹出认证对话框并执行认证的进程,认证成功后8021x.exe进程会一直常驻内存。
因此,完全可以抛开RuijieSupplicant.exe,直接使用命令行参数“-ssbero2008d -user”来启动8021.exe,就可以正常认证上网(不使用升级功能)。
问题规避方法:
在桌面和开始菜单中的锐捷认证客户端快捷方式下右键点击“属性”,把目标一栏内容最后面的
RuijieSupplicant.exe"
改为
8021x.exe" -ssbero2008d -user
点击确定保存。
这样以后双击这个快捷方式就直接启动8021x.exe而不再需要先启动RuijieSupplicant.exe,也就不会有需要重启的错误提示了。
由于这只是规避了锐捷对更新服务的检查,而不是彻底解决冲突问题,因此严格上说只能是规避问题的方法,但是对于一般校园网用户,这已经是满足要求的解决方法了。
页: [1]
查看完整版本: Thinkpad预装系统安装锐捷认证客户端3.95版,不断提示需要重启才能使用的原因及规避