How To : 从Netkeeper 4.X客户端获取真实账号

只做点醒作用,不会告诉你实际该怎么做,也不要想从这里找源代码。没有意义。 这文章对于真的有这份心自己弄的,肯定有所帮助,对于伸手党和心怀不轨的嘛,呵呵。 哦,伸手党还是滚回去吧,这里没你能看的东西。

0x00 回顾

我们先来想想Netkeeper的拨号流程:

  1. 你在客户端输入账号密码点登陆
  2. Netkeeper调用RasDialW函数拨号,其中参数RASDIALPARAMSW包含了拨号的账号和密码
  3. 系统开始向BAS发包,认证,建立连接。

所以我们动手的地方可以在: 1.客户端本身 2.系统层面 3.中间人

0x01 客户端本身

客户端本身拨号的时候会有一系列函数调用,所以通过Inline hook可以起到一定作用,hook RasDialW函数并获取其参数即可知道用户名和密码。 然而呢。4.7 + 的Netkeeper / WeNet有了自保护机制,某人说的是呢信利调用了CreateFileW 并指定参数来另行加载了一份 RasApi32.dll,也就是说在这种情况下就算你hooke了RasDialW由于他调用的不是你Hook的那份DLL,所以没啥用。 所以说下来的话你可以通过在程序启动的时候注入你的DLL,把某些API给HOOK了,然后涉及到关键DLL的直接给返回你HOOK好了的,指定的句柄,这样应该是OK的。 总的来说inline hook不能通过常规手段达到,所以单纯写钩子没啥意义,不用点手段你根本就勾不到。(当然有没有什么漏掉的API可以试试的也不是不可能。) 当然还有一个办法就是读他的内存,类似于Cheat Engine. 至于读什么内容嘛,你想想他什么拨号的时候有些东西,哪些是固定的,然后再去考虑特征,很快就出来了。 啥?你说你是做外挂的啊,内存挂你不可能不会撒,这个就不需要我来教了吧。

0x02 系统层面

RasDialW调用的时候会向系统日志写入拨号的信息,包括使用的真实用户名,你可以通过事件查看器搜索RasClient的事件看到。 当然啦,托江西地区同学的福,你们的作死让手动版泛滥,现在4.8以上的客户端直接清空事件日志了。所以一般手段是看不到的 —— 但是不代表没有办法。你依然可以使用系统事件订阅API来完成这个操作,甚至是事件日志重定向,而且这个点还是比较有效的。 EvtSubscribe,就提示这么多了,这也是最简单的办法。对应C#的API的则是 EventLogWatcher 至于怎么用,好好理解事件模型吧。 这个方法很看脸,因为呢,往往有些时候事件放在缓冲区还没来得及被读取,你的日志就被客户端清除了。之前Simple Netkeeper用的这套方法很不稳定就是因为这个原因,我也不想说太多。拿来玩玩还是可以的。 当然我没试过RasDial的事件HOOK是否有用。你们可以试试?

0x03 中间人

PPPoE协议本身是二层协议。拨号的时候系统会发包到远端的BAS,所以你可以用中间人的手段来做,抓取PAP或者CHAP的验证包就能知道账号和密码。 至于怎么玩中间人嘛,虚拟机装个PPPoE Server就好了嘛,剩下的就看你自己怎么玩咯。玩这个不会抓包,会抓包玩python或者写代码玩不来,就真的滑天下之大稽了啊。 哦,别跟我说易语言,那东西自娱自乐就够了。

0x04 关于心跳

老规矩,443端口,QUIC的UDP,或者非HTTPS流量TCP,心跳服务器嘛。。。自己抓包看看吧:) 至于原文是什么加密是什么,人家信利某客户端VMP混淆算法了偏偏不混淆心跳,这是破罐子破摔呢还是新版要上了所以干脆不管了呢。