WinSock 小分析(二)NoLSP.exe 主要做了什么

上一次我们聊到了 NoLSP.exe 时结束了,现在让我们继续这个话题,顺带回顾一下 cutter

导航

本篇已完结,列出目录方便查阅

  1. 代理软件和 docker 的冲突
  2. NoLSP.exe 主要做了什么
  3. WSCSetApplicationCategory 如何操作注册表

本文是第二部分

NoLSP 做了什么

我们没有 NoLSP.exe 的代码,但是又想知道它做了什么,那么很显然,cutter 要登场了!

cutter

函数拉到最下面,我们就能看到贴心的 main 函数, 更贴心的是 Ghidra 反编译出来的结果也很容易把握:

ghidra main

我们也不是第一次玩 cutter 了,根据我们以往的经验,快速看清程序结构才是最重要的, 所以很快找到最大的 if else

else block

很明显这个是判断输入参数是不是两个,如果不是就打印一下用法。 所以重点就是这个 if 之内做的事情,看上去最值得怀疑的是 fcn.00487ac3fcn.0048c195,前者传入了文件的路径参数, 后者传入的值很像是写入注册表的键值。不过事实上这两个都没有做什么特别的事情, 真正做代志的是 fcn.00487a78(uVar1)

fcn.00487a78

根据 API 这个函数是需要传参的,但是 Ghidra 没有认出来, 所以上面几个函数应该就是为调用 WS2_32.dll_WSCSetApplicationCategory 准备参数。 这个其实和 proxifier 开发者的说法一样:

The easiest solution is to use WSCSetApplicationCategory WinAPI call for wsl.exe to prevent this.

下一步

好了,NoLSP.exe 的案子我们先破到这里,不过我们看得很粗略, 还是推荐使用脚本的方法来修改注册表。但是我的兴趣也随之转移到了 WSCSetApplicationCategory:它是怎么修改的注册表呢?