这个操作是将http_request_t结构体中偏移量0xD0的字符串指针和字符串“xmlset_roodkcableoj28840ybtide”比较,如果字符匹配,就会跳过check_login函数,alpha_auth_check操作返回1(认证通过)。
我在谷歌上搜索了一下“xmlset_roodkcableoj28840ybtide”字符串,只发现在一个俄罗斯论坛里提到过它,说这是一个在/bin/webs里一个“非常有趣”的一行。我非常同意。
那么,这个神秘的字符串究竟是和什么东西进行比较?如果回顾一下调用路径,我们会发现http_request_t结构体被传进了好几个函数:

事实证明,http_request_t结构体中处在偏移量 0xD0处的指针是由httpd_parse_request函数赋值的:

检查HTTP头信息中的User-Agent值

将http_request_t + 0xD0指针指向头信息User-Agent字符串
这代码实际上就是:
1 | if ( strstr (header, "User-Agent:" ) != NULL) |
3 | http_request_t->0xD0 = header + strlen ( "User-Agent:" ) + strspn (header, " \t" ); |
知道了http_request_t偏移量0xD0处的指针指向User-Agent头信息,我们可以推测出alpha_auth_check函数的结构:
04 | int alpha_auth_check( struct http_request_t *request) |
06 | if ( strstr (request->url, "graphic/" ) || |
07 | strstr (request->url, "public/" ) || |
08 | strcmp (request->user_agent, "xmlset_roodkcableoj28840ybtide" ) == 0) |
15 | if (check_login(request->0xC, request->0xE0) != 0) |
|