逆向分析校园网电信认证客户端的密码算法

校园网电信需要一个认证客户端来连接,而客户端连接时会创建一个 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 反编译,就可以知道其中的算法了。

下面的图片中我已经给变量和函数写上名称了

本文章采用 CC BY-NC-SA 4.0 International 协议 进行许可。
本文链接:https://blog.ysc3839.com/archives/2017/10/telecom-vpn-password-reverse.html