小野博客 - 2025年10月
type: channel
link: https://lb5.net/2025/10/
description: 小野（Hirono）博客的个人网站，主要讲述关于小野的一些陈芝麻烂谷子事。网络、生活、我的主张，也是一个自留地
items: 自建-简单图床 easyImage2.0 搭配PicGo使用
items: 萝卜PHP探针 - 轻巧好用的服务器检测工具-开源版
items: 总结：eval(gzinflate(base64_decode解密方法
items: Python之造轮，Gif截图录制工具
items: 一键提取 YYDS 源码网 100 页网盘链接！Python 脚本开源

自建-简单图床 easyImage2.0 搭配PicGo使用
type: item
date: 2025-10-27T03:12:53+08:00
description: 把多余的VPS小鸡，拿来搭建一个专属图床用于博客配图、日常存图，又不希望将它开放为公共平台推荐EasyImage2.0 (简单图床) + PicGo图床下载地址：{cat_download name="EasyImages2.0" url="https://github.com/icret/EasyImages2.0" password=""}开启个人使用安装成功后，登录后台，按照截图开启相应功能即可。“登录上传” —— 防止游客上传，仅限个人使用，保护仅有的小硬盘“开启 API 上传” —— 搭配 PicGo 使用，无须打开网页上传图片Picgo 自定义上传API下载PicGo：{cat_download name="PicGo开源地址" url="https://github.com/Molunerfinn/PicGo" password=""}安装后在插件设置中搜索：web-uploader 1.1.1并安装。图床设置 - 自定义 Web 图床中按照如下方式填写，然后点击确定并设置为默认图床登录图床后台 --> 图床安全 --> 高级设置 --> 开启 API 上传自定义 Web 图床参数API 地址：https://你的域名/api/index.php # 输入你的网站 api 地址 后台API设置有提示地址 POST 参数名: image JSON 路径: url 自定义 Body: {"token":"1xxxxxx3cb5e131"} # 这里输入你网站生成的 token上传成功截图

萝卜PHP探针 - 轻巧好用的服务器检测工具-开源版
type: item
date: 2025-10-26T05:13:47+08:00
description: 简单介绍单文件，不占资源功能实在，没有花哨截图<?php // index.php - PHP探针 error_reporting(0); @ini_set('display_errors', 0); // 1. 基础信息获取（完全安全） function getBasicInfo() { $info = []; // 使用安全的获取方式 $info['服务器名称'] = isset($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : '未知'; $info['服务器软件'] = isset($_SERVER['SERVER_SOFTWARE']) ? $_SERVER['SERVER_SOFTWARE'] : '未知'; $info['PHP版本'] = PHP_VERSION; $info['操作系统'] = @php_uname('s') . ' ' . @php_uname('r'); $info['服务器时间'] = date('Y-m-d H:i:s'); $info['运行模式'] = PHP_SAPI; // 内存信息（安全获取） $info['内存使用'] = formatBytes(@memory_get_usage(true)); $info['内存峰值'] = formatBytes(@memory_get_peak_usage(true)); return $info; } // 2. 安全的性能测试（简化版） function getPerformance() { $results = []; // 整数运算测试 $start = microtime(true); $result = 0; $iterations = 100000; // 减少迭代次数 for ($i = 0; $i < $iterations; $i++) { $result += $i * $i; } $time_taken = max(microtime(true) - $start, 0.001); $results['整数运算'] = [ 'score' => intval($iterations / $time_taken), 'time' => round($time_taken * 1000, 2) ]; return $results; } // 3. 组件检测（安全版） function getComponents() { $components = []; // 只检测常用组件 $extensions = [ 'MySQLi' => 'mysqli', 'PDO' => 'pdo', 'PDO MySQL' => 'pdo_mysql', 'Redis' => 'redis', 'GD Library' => 'gd', 'cURL' => 'curl', 'OpenSSL' => 'openssl', 'MBString' => 'mbstring', 'JSON' => 'json', 'XML' => 'xml', 'ZIP' => 'zip', 'OPcache' => 'Zend OPcache' ]; foreach ($extensions as $name => $ext) { $components[$name] = @extension_loaded($ext); } return $components; } // 4. 磁盘信息（安全获取） function getDiskInfo() { $info = []; $path = __DIR__; $total = @disk_total_space($path); $free = @disk_free_space($path); if ($total !== false && $free !== false && $total > 0) { $used = $total - $free; $usage_percent = round(($used / $total) * 100, 1); $info['总容量'] = formatBytes($total); $info['已使用'] = formatBytes($used); $info['可用空间'] = formatBytes($free); $info['使用率'] = $usage_percent; } else { $info['总容量'] = '未知'; $info['已使用'] = '未知'; $info['可用空间'] = '未知'; $info['使用率'] = 0; } return $info; } // 5.…

总结：eval(gzinflate(base64_decode解密方法
type: item
date: 2025-10-22T16:38:24+08:00
description: 今天逛论坛发现有位坛友贴了一段加密代码。问解密难度多大。先看看源代码：<?php echo(gzinflate(base64_decode('[binary]')));这段代码使用的是一种常见的“混淆”方式;我们来分解一下eval(gzinflate(base64_decode('加密代码')));有 base64 编码再用 gzinflate 压缩最后用 eval 执行那如何解密呢？你只需要把 eval 换成 echo 然后浏览器运行跑一下就能还原出原始代码。解密后源代码：/* 加密时间: 2025-10-22 10:47:39 */ $___d41d8='';$___d41d8.=base64_decode('JF9TRVJWRVJb');$___d41d8.=base64_decode('IlJFUVVFU1Rf');$___d41d8.=base64_decode('VVJJIl0=');if(isset($___d41d8) && strpos($_SERVER["REQUEST_URI"], base64_decode('eGRlYnVn')) !== false) exit(base64_decode('5o6l5Y+35qC35LiO77yB')); $___ebd91=base64_decode('cnVua2l0X2Z1bmN0aW9uX3JlZGVmaW5l');if(function_exists($___ebd91)) exit(base64_decode('5o6l5Y+35qC35LiO77yB')); $__funcs=array ( '__full_file__' => '[binary]:4db0b902cec38d5cf0f3d979f5f5c2f0', ); $__salts=array ( '__full_file__' => 'ce390a4e1dfc67b3', ); $__hmacs=array ( '__full_file__' => 'b1415fc56f594e4469d7a47a960e1ba0aa7c900cb8f73bf701449374f827382e', ); $__signatures=array ( '__full_file__' => 'e6e2be52022af457d6476915e7ebb1fa3e493a531b47738b6be2200ebdae84a7ed2605a60b99c6ee70271400c5dd2d4484f80e29e84ad5f87eeddafa0ff19100', ); $__randData=array ( '278edf6f' => 'b665a43e', 'de80dcf3' => 'f3dbc6d2ad84aa', 'bed840e8' => 'NDExMGIxZTQyZTQ4ZWU3ZmM2YjE=', '4a1fe109' => '0c0b92fc8da7a4', '40d454dd' => '5045e44f273606e5', 'fc139939' => '5fe9a6b5', '5b01761d' => 'qs8o2s9sr132172nn5or', 'f373a44b' => 'f0fbca37cdd4', '6f60a960' => 'fe6659baba', 'a8e430f6' => 'n8p98s34q27n5qq14546667r', ); $__keyMap=array ( 0 => 'bed840e8', 1 => '5b01761d', 2 => 'a8e430f6', ); $__segmentCompressMethods=array ( '__full_file__' => 'gzip', ); // 增强的安全密钥处理 $__mk_part1 = strrev(base64_decode($__randData[$__keyMap[0]])); $__mk_part2 = str_rot13($__randData[$__keyMap[1]]); $__mk_part3 = str_rot13($__randData[$__keyMap[2]]); $__masterKey = $__mk_part1 . $__mk_part2 . $__mk_part3; unset($__mk_part1, $__mk_part2, $__mk_part3); $__cache=[]; function f515f13ccdddd7066($n){ global $__funcs, $__salts, $__hmacs, $__signatures, $__masterKey, $__cache,…

Python之造轮，Gif截图录制工具
type: item
date: 2025-10-17T13:49:29+08:00
description: 区域选择录制：支持全屏或自定义区域录制实时预览：选择区域后可立即预览参数自定义：可调节FPS、录制时长友好界面：直观的GUI操作界面安装依赖库pip install pillow pyautogui pyinstaller核心源码import tkinter as tk from tkinter import ttk, filedialog, messagebox import pyautogui from PIL import Image, ImageTk, ImageGrab import threading import time import os class GIFRecorderWithRegion: def __init__(self, root): self.root = root self.root.title("GIF录制工具 - 带区域选择") self.root.geometry("500x400") self.recording = False self.selecting_region = False self.frames = [] self.output_path = "favicon.ico" self.region = None # (x1, y1, x2, y2) self.setup_ui() def setup_ui(self): """设置用户界面""" # 输出路径选择 path_frame = ttk.Frame(self.root) path_frame.pack(pady=10, padx=20, fill="x") ttk.Label(path_frame, text="输出路径:").pack(side="left") self.path_var = tk.StringVar(value=self.output_path) ttk.Entry(path_frame, textvariable=self.path_var, width=30).pack(side="left", padx=5) ttk.Button(path_frame, text="浏览", command=self.browse_path).pack(side="left") # 区域选择 region_frame = ttk.LabelFrame(self.root, text="录制区域/////LB5.NET-小野博客//////", padding=10) region_frame.pack(pady=10, padx=20, fill="x") self.region_var = tk.StringVar(value="全屏") ttk.Radiobutton(region_frame, text="全屏", variable=self.region_var, value="全屏", command=self.update_region_display).pack(anchor="w") ttk.Radiobutton(region_frame, text="自定义区域", variable=self.region_var, value="自定义区域", command=self.update_region_display).pack(anchor="w") # 区域坐标显示和选择 coord_frame = ttk.Frame(region_frame) coord_frame.pack(fill="x", pady=5) ttk.Label(coord_frame, text="区域坐标:").pack(side="left") self.coord_var = tk.StringVar(value="未选择") ttk.Label(coord_frame, textvariable=self.coord_var, foreground="green").pack(side="left", padx=5) ttk.Button(coord_frame, text="选择区域", command=self.start_region_selection).pack(side="left", padx=10) # 参数设置 param_frame = ttk.LabelFrame(self.root, text="录制参数", padding=10) param_frame.pack(pady=10, padx=20, fill="x") ttk.Label(param_frame, text="FPS:").grid(row=0, column=0, sticky="w") self.fps_…

一键提取 YYDS 源码网 100 页网盘链接！Python 脚本开源
type: item
date: 2025-10-10T17:58:00+08:00
description: 想一次性把 YYDS 源码网 1-200 页的网盘资源全部扒下来？今天分享 30 行 Python 脚本，无需配置环境，双击即可运行，自动提取标题+真实外链，支持 7 大网盘，完全开源！1. 脚本功能顺序抓取 1-200 页文章列表进入详情页提取「侧边栏按钮 + 正文」网盘链接自动跟随 goto?down=xxx 跳转，拿到真实外链支持蓝奏云 / 百度 / 夸克 / 123 / 阿里 / 迅雷 / 腾讯保存格式：标题 | 网盘链接（txt 可直接复制）2. 运行环境项目版本Python3.7+依赖requests、beautifulsoup4一键安装：pip install requests beautifulsoup4 #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 抓取 www.yydsym.com 保存格式：标题 | 网盘链接 输出文件：桌面 title_pan_links.txt """ import os import time import random import requests from bs4 import BeautifulSoup from urllib.parse import urljoin MAX_PAGE = 100 SLEEP = lambda: random.uniform(1.0, 2.0) TIMEOUT = 10 LIST_URL = "https://www.yydsym.com/page/{}" SAVE_FILE = os.path.join(os.path.expanduser("~"), "Desktop", "title_pan_links.txt") HEADERS = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 " "(KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" } PAN_KEYS = ("lanzou", "lanzn", "pan.baidu", "quark.cn", "123pan.com", "alipan.com", "xunlei.com", "cloud.189.cn", "tc.qq.com") def get_list(page): url = LIST_URL.format(page) resp = requests.get(url, headers=HEADERS, timeout=TIMEOUT) resp.raise_for_status() soup = BeautifulSoup(resp.text, "html.parser") items = [] for art in soup.select('article.post-grid'): a = art.select_one('h2.entry-title a') if not a: continue title = a.get_text(strip=True) link = urljoin(url, a["href"]) items.append((title, link)) return items def extract_pan(html): soup = BeautifulSoup(html, "html.parser") pans = set() for a in soup.select('a[href*="goto?down="]'): short = urljoin("https://www.yydsym.com", a["href"]) try: r = requests.get(short, headers=HEADERS, allow_redirects=False, timeout=10) real = r.headers.get("Location", "") if r.status_code in (301, 302) else short pans.add(real) except Exception: continue for a in soup.find_all("a", href=True): href = a["href"].strip() if any(k in href for k in PAN_KEYS): pans.add(href) return pans def main(): exist = set() if os.path.isfile(SAVE_FILE): with open(SAVE_FILE, "r",…