- 分享
[第二弹] 在 Hydro,我们可以"免费"修改自己域 Logo 等高级功能...
- 2024-8-6 8:03:12 @
此内容仅进行学习交流,为了不损害 Hydro 利益,本演示去除了一切其他功能(登录、注册)等,仅保留了一个首页的展示!
此页面可以实时根据 Hydro 同步!
功能:
- 修改 Hydro 图标
- 点击图标不跳转至主域
- 预览题目(New)
- 预览比赛(New)
- 持续开发中……
思路:
PHP获取HTML并处理。
PHP代理处理防盗链+细节修改。
主页代码实现例子:
<?php
$url='https://hydro.ac/d/<域ID>/';
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($ch,CURLOPT_REFERER,'https://hydro.ac');
curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)');
curl_setopt($ch,CURLOPT_COOKIE,$cookie_string);
$page_content=curl_exec($ch);
curl_close($ch);
$base_url='https://hydro.ac';
$page_content=preg_replace_callback(
'/(src|href)=["\']([^"\']+)["\']/i',
function ($matches) use ($base_url)
{
$url=$matches[2];
if(preg_match('/^https?:\/\//i',$url))
{
return $matches[0];
}
$absolute_url=(strpos($url,'/')===0)?$base_url.$url:$base_url.'/'.$url;
return $matches[1].'="'.$absolute_url.'"';
},
$page_content
);
$page_content=preg_replace(
'/(src|href)=["\'](https:\/\/cdn\.hydro\.ac\/[^"\']+)["\']/i',
'$1="proxy.php?url=$2"',
$page_content
);
$newContent='
<div class="row">
<div class="columns clearfix">
<ol class="nav__list nav__list--main clearfix">
<li class="nav__list-item">
<a href="https://cgrrms.mcfuns.cn/CJOJ/">
<img class="nav__logo" src="/CJOJ/img/logo.png" alt="Logo">
</a>
</li>
<li class="nav__list-item">
<a href="https://cgrrms.mcfuns.cn/CJOJ/" class="nav__item nav--active">首页</a>
</li>
<li class="nav__list-item">
<a href="https://cgrrms.mcfuns.cn/CJOJ/p/" class="nav__item">题库</a>
</li>
<li class="nav__list-item">
<a href="https://cgrrms.mcfuns.cn/CJOJ/contest/" class="nav__item">比赛</a>
</li>
<li class="nav__list-item">
<a href="https://hydro.ac/d/CJOJ/" class="nav__item">前往 Hydro</a>
</li>
</ol>
</div>
</div>';
$pattern='/(<nav[^>]*id="menu"[^>]*>)(.*?)(<\/nav>)/s';
$replacement='$1'.$newContent.'$3';
$page_content=preg_replace($pattern,$replacement,$page_content);
echo $page_content;
?>
<script src="main.js"></script>
其中 proxy.php
是反代程序,绕过防盗链。
<?php
$url=$_GET['url'];
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
$response=curl_exec($ch);
if($response === false)
{
http_response_code(500);
echo "Error fetching URL: " . curl_error($ch);
}else{
$contentType=curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
header("Content-Type: $contentType");
echo $response;
}
curl_close($ch);
?>
如果您是 Hydro 开发人员,可以尝试规避此程序。
如果您是用户,请不要试图开发完整版本用于 OJ,此代码只为 学术交流。
当前仅供交流,请在实验后 1 小时结束实验。
1 条评论
-
ChinaFan @ 2024-8-6 18:43:35
6
- 1