校园网电信需要一个认证客户端来连接,而客户端连接时会创建一个 L2TP VPN 连接。尝试手动输入用户名和密码连接却失败了,于是猜测进行了某些处理。
0x0 准备工作
用到的工具是 x64_dbg 和 IDA。
x64_dbg 用于动态调试,IDA 用于反编译代码。
0x1 调试
预备知识:
Windows 中控制系统的 PPPoE 或 VPN 连接需要用到 RasDial 这个 API,我们就从这里入手。
在 x64_dbg 中打开认证客户端,然后在下面的命令窗口输入 bp RasDialA
以及 bp RasDialW
,给 RasDial 下断点。
然后按 F9 运行程序,并连接到服务器。
果然在 RasDialA
这里中断了。
通过 RasDial
的函数声明我们知道第三个参数是连接的参数信息,所以我们在右边的参数列表找到第三个参数,右键转到内存窗口。
在内存窗口中往下查看,其中用户名没进行处理,而密码则经过了处理。
接下来就是反编译了,我们先要找到代码的地址。
右边堆栈的第一项写着 返回到 ...
,这个是 RasDialA
执行完后返回的地址。
点一下这一项然后按回车,就可以看到对应的代码了。
我们只需要这里的地址 00402A1B
。
0x2 反编译
接下来要用到 IDA。
先在 IDA 中打开客户端,然后按 G 并输入刚才记下的地址 00402A1B
,跳转到对应的代码。
然后按 F5 反编译,就可以知道其中的算法了。
下面的图片中我已经给变量和函数写上名称了