仅供学习交流使用,请勿用于非法用途以及破坏课堂秩序。
由于是在机房进行这次逆向的,有些细节记不太清楚了,请见谅。本文仅给出一些关键信息:
在 VerifyUser.dll
中,可以发现如下逻辑,很明显是用于校验用户是否存在并验证密码是否正确的:
观察到它首先调用了 UH_CheckUserRight
外部函数,这个名字看上去就很关键,因此我们顺藤摸瓜:
可以看到调用了处理密码的函数 OSS_PWDEncode
:
并在同个 .dll
中看到对应的 OSS_PWDDecode
:
观察这两个函数的运行逻辑,很明显是 BASE64 的加密和解密:
至此,我们完成了对密钥处理部分的分析(用 BASE64 加密密码属实有点难绷),那么接下来如何获取账密呢? 码 一个比较简单的办法是用动调工具直接在程序运行到密码处理关键节点(可以使用 OE_MemCmp
(密码)、OE_WStrCmp
(账号) 这两个 oe_base.dll
中的函数作为断点) 时获取账密:
获取了 Base64
格式的密码,解密后发现确实可以校验成功,进入管理面板,大功告成: