nss4.dll 导入了 wpcap.dll 的7个函数。具体是什么我们不需要关心。我们关心的是nss4做了什么。
同样使用stud_pe可以看到nss4.dll 有6个导出函数:
GetCountNum,IsMonitorRunning,StartMonitor,StartMonitorProcess1,StopMonitor,StopMonitorProcess1
我想..这6个函数名是我这篇Blog里可读性最高的一行文字了吧(包括我写的文字-_-).
该IDA登场了,打开nss4.dll,大致看一下StartMonitor函数。其中的流程基本很明了,特别是以下一段
.text:10004B8B test eax, eax
.text:10004B8D mov [esp+1Ch+var_4], 0FFFFFFFFh
.text:10004B95 mov [esi], eax
.text:10004B97 jz short loc_10004C10 <———— 注意,注意
.text:10004B99 push edi
.text:10004B9A push offset aAntiproxyStart ; "antiproxy starting on netcard %d"
0x10004B97处的跳转如果实现,那么从后边的代码可以知道StartMonitor函数就直接返回了。而之前的一些代码似乎是在检查用户的网络配置环境的,我没有细看。大致可以猜到如果检测到用户有共享上网的条件(如在局域网什么的),那么就会开始所谓的 AntiProxy 工作。否则就返回。且不管Racer主程序是如何定时调用这个函数,也不管到底是哪个模块调用这个函数,也不管RacerKP.exe(号称dhcpkeeper)是如何守护。我想现在已经非常明白了,我们只需要在这里做文章。而事实上经过调试和后来的使用也证明了这一点。
只要我们将 10004B97 处的 jz short loc_10004C10 修改成无条件跳转 jmp 10004C10,那么Racer精心安排的一切监视进程就全盘失灵了。
总结下来,我们只需要修改nss4.dll的 1个字节 :将 0x10004B97 的 74 修改为 EB 即可!
具体的修改方法有很多,很多16进制编辑器都可以。比较流行的UltraEdit,网上有很多介绍如何使用16进制编辑器修改程序的文章,这里我就不多说,不会改的朋友就多费点心找些文章看下,比葫芦画瓢改一下。记得改之前备份。Enjoy It!