HookFunction

一文了解钩子函数(Hook Functions) 钩子函数是一种允许在软件执行过程中插入自定义逻辑的机制。它为开发者提供了一种灵活的方式,在某些特定的生命周期阶段或事件发生时,执行用户定义的代码,而无需直接修改框架或系统的核心逻辑。 阅读详情
DIY Your Ani patch

////////////////////////////////
// HookFunction
////////////////////////////////
BOOL HookFunction(
    PBYTE            pbCode,
    void            *pfnHook)
{
    LPVOID            lpvbounce;
    DWORD            cb;
    DWORD            dwprotect;

    //---------------- skip hot-patch JMP SHORT if present
    if ( pbCode[0] == 0x8B && pbCode[1] >= 0xC0 &&        // 8Bh/11abcabc: MOV reg, self
         (((pbCode[1] >> 3) ^ pbCode[1]) & 0x07) == 0 )
    {
        pbCode += 2;
    }

    //---------------- prepare dynamic portion of hook
    cb = DisassembleProlog(pbCode, 0x05);

    if (cb < 0x05)
        return FALSE;

    lpvbounce = VirtualAlloc(NULL, 0x05 + cb + 0x05, MEM_COMMIT|MEM_RESERVE, PAGE_EXECUTE_READWRITE);

    if (lpvbounce == NULL)
        return FALSE;

    *         ((LPBYTE)lpvbounce + 0x00)      = 0xE8;    // E8h/xxxxxxxx: CALL pfnHook
    *(LPDWORD)((LPBYTE)lpvbounce + 0x01)      = (DWORD)pfnHook - (DWORD)lpvbounce - 0x05;
    memcpy((LPBYTE)lpvbounce + 0x05, pbCode, cb);

    *         ((LPBYTE)lpvbounce + 0x05 + cb) = 0xE9;    // E9h/xxxxxxxx: JMP (pbCode + cb)
    *(LPDWORD)((LPBYTE)lpvbounce + 0x06 + cb) = (DWORD)pbCode - (DWORD)lpvbounce - 0x05 - 0x05;

    VirtualProtect(lpvbounce, 0x05 + cb + 0x05, PAGE_EXECUTE_READ, &dwprotect);

    //---------------- hook code entry point ("prolog")
    if (!VirtualProtect(pbCode, cb, PAGE_EXECUTE_READWRITE, &dwprotect))
    {
        VirtualFree(lpvbounce, 0, MEM_RELEASE);
        return FALSE;
    }

        *        (pbCode + 0x00) = 0xE9;            // E9h/xxxxxxxx: JMP lpvbounce
    *(DWORD*)(pbCode + 0x01) = (DWORD)lpvbounce - (DWORD)pbCode - 0x05;

    VirtualProtect(pbCode, cb, dwprotect, &dwprotect);

    return TRUE;
} //HookFunction()


////////////////////////////////
// HookExports
////////////////////////////////

const struct { const char *szexport; void *pfn; } USER32_HOOKS[] =
{
    { "LoadImageA", MyLoadImageA },
    { "LoadImageW", MyLoadImageW }
} ;

////////////////////////////////
BOOL HookExports()
{
    HMODULE            hm;
    PBYTE            pb;
    size_t            c;

    //---------------- hook USER32.DLL exports
    hm = GetModuleHandle("user32.dll");

    if (hm == NULL)
        return FALSE;

    for (c = 0; c < (sizeof(USER32_HOOKS) / sizeof(USER32_HOOKS[0])); c++)
    {
        pb = (PBYTE)GetProcAddress(hm, USER32_HOOKS[c].szexport);

        if (pb == NULL)
            continue;

        HookFunction(pb, USER32_HOOKS[c].pfn);
    } //for(c)

    return TRUE;
} //HookExports()
【中等】 猿人学web第一届 第2题 js混淆 动态cookie 1 进入题目正常加载数据后 打开调试工具,等待一会(2~3分钟) 刷新页面 cookie 失效以后会弹窗 删除 cookie 中的 m 字段再刷新页面也是一样的 点击确定后,页面自动刷新完会进入 无限 debugger 查看上一层堆栈 生成 debugger 的代码 是经过混淆的 手动解混淆后的代码 加密参数定位 hook Cookie hook 到 cookie 后,向上查看堆栈就能找到生成 cookie m参数的位置 每次请求返回的代码都不一样,但执行逻辑是一样的,所以将 2.html 阅读详情

相关推荐

利用ORCAD/pspice 仿真分析电路的幅度相位谱

利用ORCAD的pspice仿真分析电路的相位谱1.介绍2.搭建电路原理图3.建立仿真文件,进行交流分析4.仿真、查看输出5.总结 1.介绍 orcad配合pspice一直是电路原理图绘制和仿真的主要工具,pspice工具提供了诸如暂态分析、直流分析、交流分析等多个工具。学校主要教的是multisim,对orcad讲得很少,最进要利用orcad对运放构成的电路的频响、相移特性进行分析,发现资料幅度...

qq_40011737的博客 1万+

python强大的hook函数

钩子函数(hook function),可以理解是一个挂钩,作用是有需要的时候挂一个东西上去。具体的解释是:钩子函数是把我们自己实现的hook函数在某一时刻挂接到目标挂载点上。

YLF123456789000的博客 1239

避坑指南:ShardingSphere连接达梦/金仓数据库时SQL解析器的那些‘坑‘

本文深入探讨了ShardingSphere与国产数据库(如达梦、金仓)集成时遇到的SQL解析器差异问题,提供了详细的解决方案和优化策略。通过分析SQL方言差异、JDBC实现差异及解析器兼容性,帮助开发者有效避坑,提升分布式数据库架构设计的效率与稳定性。

weixin_29309475的博客 392

hook和钩子函数

钩子函数(Hook Function) 本质上是一种回调callback机制,它允许程序在特定事件发生时执行用户自定义代码。一种实现方式。✔ Hook 是一种更广义的概念,指拦截或修改函数行为,而钩子函数是 Hook 的一种具体实现方式。钩子函数 主要用于:回调机制。 运行结果:

QingTC 568

数据结构实验1.2—高精度计算PI值(西工大)

这是数据结构第二题的题目,是让我们根据用户的需求来计算派的值 这是题目的详细描述,刚看到这道题的时候,我是真的头大,完全没有思路,于是查找了一些大佬的笔记后才开始编写 这是我在写这些代码是所运用到的数学反三角函数幂次展开式的知识。 下面是正确的代码以及我的一些见解,和需要注意的一些地方。希望能对你有所帮助。如有更加精简的算法,请在评论区留下你的算法!!!谢谢!!! #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdl

abcdef0623的博客 5831

OpenCV实例(八)车牌字符识别技术(三)汉字识别

相较于数字和英文字符的识别,汽车牌照中的汉字字符识别的难度更大,主要原因有以下4个方面:(1)字符笔画因切分误差导致非笔画或笔画流失。(2)汽车牌照被污染导致字符上出现污垢。(3)采集所得车辆图像分辨率低导致多笔画的汉字较难分辨。(4)车辆图像采集时所受光照影响的差异导致笔画较淡。综合汉字识别时的这些难点来看,很难被直接提取的是字符的局部特征。笔画作为最重要的特征而仅存在于汉字中,这由先验知识可知。一旦捺、横、竖、撇这些笔画特征被提取到,对于汉字字符识别的工作就完成了许多。

小幽余生不加糖 1650

如何Hook一个函数

函数是什么  在LUA中, 一个函数是一个简单的变量。从LUA的文档来看:<!--Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->  The statement  function f () ... end  trans

分享建筑软件的乐趣 2412

智能Agent如何重塑企业流程

在当今数字化时代,企业流程的效率和敏捷性至关重要。传统企业流程往往受限于人工操作,效率低下、成本高昂,难以适应快速变化的市场环境。智能Agent作为一种新兴技术,凭借其强大的智能化能力,正在逐渐改变企业流程的运作模式,为企业带来新的机遇和挑战。智能Agent是一种能够感知环境、自主决策、执行任务的软件实体。它可以模拟人类的智能行为,例如学习、推理、规划和沟通。通过将智能Agent嵌入到企业流程中,可以实现流程的自动化、优化和智能化,从而提高效率、降低成本、提升客户体验。8.1 研究成果总结。

AGI×大数据,开启智能时代的认知跃迁;解码AGI,赋能数据驱动的智能革命。 873

And64InlineHook核心API详解:A64HookFunction与A64HookFunctionV的终极指南

想要在Android ARM64平台上实现高效函数Hook吗?And64InlineHook库提供了两个强大的核心API:A64HookFunction与A64HookFunctionV,让您轻松实现C/C++函数的inline hook功能。这篇完整指南将带您深入了解这两个API的使用方法、区别以及最佳实践!🚀 ## 📋 什么是And64InlineHook? And64InlineHo

gitblog_00228的博客 448

论文必备 - YOLOv13热力图可视化,支持指定模型,指定显示层,设置置信度,以及10种可视化实现方式

本文带来的是YOLOv13热力图可视化功能,支持,以及。我们经常看到一些论文里绘制了不同的热力图,一方面能够直观的感受其模型的有效性,另一方面也丰富了论文内容。特别是在使用了注意力模块的网络中,热力图就可以验证注意力机制是否真正聚焦到了预期的重要特征上,以便对模型的有效性和合理性进行评估。例如这篇文章中展示的,就很能够表达作者改进后的模型相比之前模型的优越性。

Limiiiing的博客 487

什么是 AI Agent?它和直接调用大模型 API 有什么区别?

什么是 AI Agent?它和直接调用大模型 API 有什么区别?

我哎GIS博客 6477

如何在Android项目中快速集成And64InlineHook

And64InlineHook是一款轻量级的ARMv8-A架构(ARM64, AArch64, Little-Endian)内联钩子库,专为Android C/C++开发设计。本文将详细介绍如何在Android项目中快速集成该库,实现高效的函数钩子功能。 ## 📋 准备工作:获取And64InlineHook库 首先需要将And64InlineHook库添加到你的Android项目中。通过以

gitblog_01125的博客 836

基于多头注意力时间卷积网络(MATCN)的虚拟电厂短期功率预测模型

​时空特征解耦​:TCN负责时间模式,注意力捕捉空间关联​动态门控机制​:自适应调整两种特征的融合比例​多尺度感知​:膨胀卷积覆盖5分钟到24小时的时间跨度​轻量化设计​:参数量比传统Transformer减少52%

hasakie的博客 322

And64InlineHook实战教程:10分钟学会Android函数Hook

And64InlineHook是一款轻量级的ARMv8-A架构(ARM64、AArch64、小端模式)内联钩子库,专为Android平台的C/C++开发设计。本教程将带你快速掌握如何使用这个强大的工具实现Android函数Hook,无需深入底层汇编知识,即可轻松拦截和修改目标函数行为。 ## 🚀 什么是And64InlineHook? And64InlineHook是由Rprop开发的开源库

gitblog_00628的博客 470

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

And64InlineHook最佳实践:构建稳定的Hook框架

And64InlineHook是一款轻量级的ARMv8-A架构内联Hook库,专为Android平台的C/C++开发设计。它提供了简单高效的API,帮助开发者在ARM64架构下实现函数拦截与替换,是移动逆向工程、应用调试和功能扩展的强大工具。 ## 🚀 为什么选择And64InlineHook? 在Android开发中,内联Hook技术广泛应用于功能增强、漏洞修复和逆向分析等场景。And64

gitblog_00801的博客 354

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

ROBLOX脚本开发深度解析:高级游戏功能模块实现技术揭秘

ROBLOX脚本开发社区中的Stefanuk12项目为开发者提供了丰富的游戏功能增强模块,涵盖飞行控制、无限耐力、无后座力、自动瞄准、ESP视觉等多个核心技术领域。这些模块不仅展示了Lua脚本在ROBLOX平台上的高级应用,更揭示了游戏逆向工程和客户端修改的深层次技术原理。 ## 项目架构概览与技术栈分析 Stefanuk12项目采用模块化架构设计,将不同游戏功能按类别组织在Games、Uni

gitblog_01148的博客 440

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

wordpress hook机制

稍有接触过WordPress布景或外挂客制修改的朋友,对WordPress的Hook机制应该不陌生,但通常刚接触WordPress Hook的新手,对其运作原理可能会有点混乱或模糊。本文针对WordPress Hook运作大致做个简单的说明,而预设读者是理解基本的PHP function语法及运作,但对WordPress Hook机制不是很明白。 Hook机制里登场的角色 先从「登场角色」的个...

weixin_33836223的博客 133

WordPress 的 Hook 机制与原理

Hook机制里登场的角色 先从“登场角色”的个别说明开始: WordPress核心 指的是 WordPress 内建的程式码架构,提供 WordPress 主要的基本功能。 Hook 也许你早已听说,Hook 本身虽是钩子的意思,但直译又有点奇怪,所以一般通常都不直译它,而是直接称它 Hook 。WordPress 的 Hook 也可以想像成“钩子”,这些“钩子”会埋

gsls181711的专栏 884

Hook API监视驱动的加载_ASM Hook API监视驱动的加载_ASM

转自:http://blog.youkuaiyun.com/iiprogram/archive/2007/09/06/1774026.aspx;**************************************************************************************************;Author:dge/D哥;Date  :2006.7.20;**

daiyu22的专栏 548

Hook機制裡登場的角色

先從「登場角色」的個別說明開始: WordPress核心 指的是WordPress內建的程式碼架構,提供WordPress主要的基本功能。 Hook 也許你早已聽說,Hook本身雖是鈎子的意思,但直譯又有點奇怪,所以一般通常都不直譯它,而是直接稱它Hook。WordPress的Hook也可以想像成「鈎子」,這些「鈎子」會埋在WordPress網站中特定幾處的程式碼中,埋進去

678

VB的HOOK简介

 Hook简介Hook这个东西有时令人又爱又怕,Hook是用来拦截系统某些讯息之用,例如说,我们想让系统不管在什麽地方只要按个Ctl-B便执行NotePad,或许您会使用Form的KeyPreview,设定为True,但在其他Process中按Ctl-B呢?那就没有用,这是就得设一个KeyboardHook来拦截所有Key in的键;再如:MouseMove的E

hack_wg的专栏 925

黄聪:WordPress 的 Hook 机制与原理(add_action、add_filter)

稍有接触过 WordPress 主题或插件制作修改的朋友,对 WordPress 的Hook机制应该不陌生,但通常刚接触WordPress Hook 的新手,对其运作原理可能会有点混乱或模糊。本文针对 WordPress Hook 运作大致做个简单的说明,而预设读者是理解基本的 PHP function 语法及运作,但对 WordPress Hook 机制不是很明白。 Hook机制里登场的角色 ...

weixin_33775582的博客 163

深入 Graphile Engine v4 Hook 系统:newWithHooks 与 builder.hook 插件扩展机制全解

在 Graphile Crystal 仓库的 Graphile 生态中,v4 时代的 Graphile Engine 通过一套精巧的 **Hook(钩子)系统**,让插件能够在不触碰核心源码的情况下,在 Schema 构建的任意环节注入、改写和扩展 GraphQL 定义。本文以 [version-4 的 Hooks 文档](https://link.gitcode.com/i/19e88f28f1

gitblog_00875的博客 404
上一篇: TLS callback
下一篇: hotpatch逆向代码~HotPatch.c
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值