某国内大型网游公司反调试器附加研究

Android下反调试与反反调试 TracerPid: 16208 说明当前的进程正在被进程 16208 调试或跟踪,否则没有被调试值应该为0。使用 cat 命令查看 /proc/[pid]/wchan 文件,该文件显示进程当前正在等待的内核函数。再通过 head /proc/[pid]/status 可以查看详细的进程状态,包括是否被调试等信息。在输出中,ptrace_stop 表示进程 17305 当前正在被调试器暂停,等待调试器发出的命令。通过head /proc/[pid]/status 可以查看详细的进程状态。 阅读详情

搞了一个晚上,天终于亮了,问题也解决了,VMP加检测DEBUG,再加代码DEBUG

看了部分记录就知道了。。。原来很简单。

 

想CE就CE,想OD就OD 爽,累了。。。闪

 

ThreadId:a8d8 ==Starting:
ThreadId:a8d8 ==Loading:
ThreadId:a8d8 ==LoadLibraryExW:'RPCRT4.dll',0x0,0x0,Address 0x76e30000:
ThreadId:a8d8 ==LoadLibraryExW:'rpcrt4.dll',0x0,0x0,Address 0x7dc10000:
ThreadId:a8d8 ==LoadLibraryExW:'C:/WINDOWS/system32/mswsock.dll',0x0,0x0,Address 0x7db70000:
ThreadId:a8d8 ==LoadLibraryExW:'hnetcfg.dll',0x0,0x0,Address 0x69660000:
ThreadId:a8d8 ==LoadLibraryExW:'C:/WINDOWS/System32/wshtcpip.dll',0x0,0x0,Address 0x71a40000:
ThreadId:a8d8 ==LoadLibraryExW:'WS2_32.dll',0x0,0x0,Address 0x71b60000:
ThreadId:a8d8 ==LoadLibraryExW:'kernel32.dll',0x0,0x0,Address 0x7d4f0000:
ThreadId:a8d8 ==ReMapFile://./SICE://./ASDF:
ThreadId:a8d8 ==ReMapFile://./SIWVID:SAME:
ThreadId:a8d8 ==ReMapFile://./NTICE:SAME:
ThreadId:a8d8 ==ReMapFile://./ICEEXT:SAME:
ThreadId:a8d8 ==ReMapFile://./SYSERBOOT:SAME:

虚幻引擎(UE4) Gameplay Debugger(调试器) Gameplay Debugger(虚幻调试器)对于开发者查看运行时数据非常有用,甚至在利用网络复制的客户端上也是如此。他可以运行在编辑器,模拟器中,并且独立于游戏,所有的数据都显示在游戏窗口上,调试系统提供了一套可以扩展的调试框架。 引擎实现可以显示: Pawn基础信息 AIController 基础信息 行为树和黑板信息 执行环境信息 触觉系统信息 玩家网格和选择的Pawn的所有细节 通常有很多类别信息需要输出到屏幕上,通常用5个类别来显示: Navmesh Basic Behavi 阅读详情

相关推荐

暗黑破坏神2重置版 反调保护分析

暴雪游戏的通用保护分析,这里针对暗黑2重置版深入分析一下

IT男也疯狂 2858

49.网游逆向分析与插件开发-游戏反调试功能的实现-软件调试器设计的基本原理

网络游戏逆向、网络游戏安全、网络游戏攻防、c++

计算机王的博客 1748

od(游戏调试工具)

主要用于高度程序,进行反汇编,是用于制作网络游戏外挂的好工具,不得不学。

关于滴水的VT调试器

关于滴水的VT调试器 by 海风月影 论坛上今天吵的比较火热,主要是关于滴水的VT调试器,很多人不了解这个东西,我对Intel的VT技术略有了解,所以我来简单的介绍一下。 第一,什么是VT技术 VT是Intel的硬件虚拟化技术,说到VT,就不得不提虚拟机(例如VMWare)。在硬件还没有支持VT前,系统级的虚拟机其实是很难做的,要考虑的 东西非常多(主要是效率问题,因为用软件模拟

whatday的专栏 8053

ViragDevTool:魔兽世界调试器开发人员插件

ViragDevTool信息 寻找Legion Beta来测试和更新此插件 ViragDevTool是供插件开发人员使用的Lua魔兽世界插件。 功能类似于调试器。 此插件可以帮助新开发人员了解WoW API。 主要思想是在类似表格的UI中检查WoW API或您的插件变量。 使用起来比默认的打印或聊天调试容易得多 如何使用 您可以使用的主要(也是唯一的)函数是ViragDevTool_AddData(data,“ some string name”) : -- - Adds data to ViragDevTool UI list to monitor -- @param data (any type)- is object you would like to track. -- Default behavior is reference and not object copy --

易语言实现反OD调试反复附加的代码

今天小编就为大家分享一篇关于易语言实现反OD调试反复附加的代码,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

180316 逆向-反调试技术(9)防止附加和父进程检测

1625-5 王子昂 总结《2018年3月16日》 【连续第531天总结】 A. 反调试技术(9) B. 防止调试器附加 R3调试器的附加使用的是DebugActivePocess函数,在附加相关进程时,会首先执行到ntdll.dll下的ZwContinue函数,最后停留在ntdll.dll的DbgBreadkPoint处 可以通过Hook上述两个函数,如果执行了则说明有调试器附加 ...

whklhhhh的博客 2323

RK3568下YT8531/YT8521 PHY移植避坑指南:RGMII与设备树详解

嵌入式Linux网络调试中,PHY芯片作为MAC与物理介质之间的桥梁,其驱动配置直接影响网络稳定性。RGMII接口的延时补偿、PHY地址设定以及复位时序是设备树配置中的关键环节,稍有差错便会出现链路已通却无法通信的现象。通过理解PHYLIB框架与mdio总线枚举原理,开发者可以快速定位寄存器级故障。在RK3568等工业级平台中,裕太微YT8531/YT8521凭借高性价比与内核主线支持,成为替代传统方案的热门选择。从设备树模板、内核配置到常见坑点,系统梳理千兆以太网PHY的移植与调试方法,帮助开发者少走弯路

weixin_29189381的博客 212

一些反调试手段及对应的逆向思路

实践还少,暂且没遇到,不过先来打个预防针,熟悉下。 首先什么是反调试:防止程序被调试,保护代码。一种加固手段。 万事无绝对,不能阻止,但能缓解,让破解者消费精力。一般的,该手段会与加壳并用。 如何来反调试呢?大方向有两类:检测,攻击。 1. 检测 检测程序是否被调试,若是的话做出一些“反”措施,例如退出,跳到其他位置等。 2. 攻击 让调试器崩溃,阻止调试。 1.一般的,大多通过另启进程或线程。 基础知识:一个进程最多只能被一个进程ptrace:调试状态下,linux向/proc/p.

iopoint的专栏 2624

瑞萨RZN2L工业以太网开发避坑指南:EtherCAT从入门到通信调试全流程

本文详细解析了瑞萨RZN2L MPU在工业以太网开发中的EtherCAT从站配置与通信优化全流程。通过硬件设计关键点、协议栈选型、PDO映射策略及DC同步精度优化等实战技巧,帮助开发者快速搭建高效通信框架并解决调试中的常见问题,特别适合工业自动化领域的实时通信需求。

aitie1479的博客 461

AD创建属于自己的元件库(详细)

我今天开始学习AD2022,但是我想自己创建属于自己的元件库,但是奈何找了好多教程就是随便几句话就把我打发走了,弄了一天都没搞定(也许是我比较菜),所以现在乱懂了,自己写一个属于我们自己小白的教程,希望有用吧哈哈我比较偷懒,直接使用嘉立创上画好的元件导入,和我们自己创建自己画的步骤其实都一样。

qq_33591173的博客 2万+

对运行中的进程保护

也许大家也是研究腾讯游戏的爱好者,对腾讯的游戏都有过这样的体会例如OD与CE无法进行如以下操作: (1)无法附加进程, (2)无法打开进程, (3)游戏进程被隐藏无法在工具中查看到, (4)内存无法读取代码 (5)内存修改后游戏掉线 (6)无法双机进行调试 (7)出现SX非法模块提示 `例如DNF的TP保护就是HOOK了以下几个API函数来禁止上面刚才说的那些: NtOpe...

onlyfunboy的专栏 743

携程酒店数据爬取进阶:动态接口破解与反反爬策略实战

本文详细解析了携程酒店数据爬取的进阶技巧,包括动态接口参数破解、反爬虫策略对抗及企业级采集方案实现。重点介绍了eleven参数的生成逻辑、动态Cookie维护方法,以及如何应对携程的请求指纹检测和行为模式识别。通过实战案例,帮助开发者高效获取酒店价格数据,同时遵守行业规范。

eee77的博客 1079

守望先锋游戏反外挂技术测评

前言守望先锋作为目前最为火爆的游戏,赢得了广大玩家的青睐。在天梯赛开放过后,其反外挂机制受到了玩家的挑战。本文本着学习态度,通过“黑盒测试”的方式逐步分析其反外挂机制,最后再结合目前市面上的一款外挂验证其反外挂机制的有效性。反外挂之文件结构首先从守望先锋的文件入手,找到其反外挂机制的载体。守望先锋的文件结构树如图1所示。 守望先锋文件结构树 文件结构很清晰明了,可执行的文件包括:1. OverWatch.exe,该文件即为守望先锋的主程序;2. OverWatch_Launcher.exe,.

ludongguoa的博客 3171

【笔记篇】Davinci Configurator EcuM模块

autosar ecum模块简介

weixin_47571898的博客 1268

SAP ABAP Web Service 的创建与消费:保姆级教程

SOAP 定义了消息的格式和传输规则,使得 Web Service 可以在不同的操作系统和网络环境中通信。通过 WSDL,服务的提供者可以明确地定义服务的功能,而服务的使用者则可以通过解析 WSDL 文件,了解如何正确地调用该服务。它封装了与 Web 服务通信的所有复杂性,如消息格式的构建、传输协议的选择、请求的发送和响应的处理等。除了本文介绍的 ABAP 编程语言之外,我们还可以通过 Java,Node.js,C++,C#,Python 等其他编程语言来消费本文创建的 ABAP Web Service.

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 713

某游戏的反调试

最近比较无聊,有朋友就喊我去玩玩打枪的小游戏,然后由于我怕麻烦所以把游戏安装到虚拟机中了,然后我虚拟机开了双机调试器,其实是由于我比较懒不想关双机调试,导致游戏弹出窗口要求我关闭调试器。 小样,你叫我关就关岂不是很没有面子,然后我做了下面的事情。 首先看是不是检测了SharedUserData->KdDebuggerEnabled 这里手动在...

墨鱼菜鸡 1100

2025年12月GESP真题及题解(C++一级): 小杨的爱心快递

2025年12月GESP真题及题解(C++一级): 小杨的爱心快递

王老师青少年编程 1649

C/C++ 反调试与绕过手法

反调试技术,恶意代码会用它识别自身是否被调试,或者让调试器失效,给反病毒工程师们制造麻烦,拉长提取特征码的时间线,本章将具体总结常见的反调试基础的实现原理以及如何过掉这些反调试手段,从而让我们能够继续分析恶意代码。

微软技术分享 6815

X86/64架构中的总线 和 ARM架构中总线的理解

内部总线 /CPU总线/FSB前端总线:类似ARM架构中的AHB总线北桥? 直接和CPU连接,这条总线主要由CPU使用,用来与高速缓存、主存和北桥(或MCH)之间传送信息。 外部总线:类似ARM架构中的APB总线(外围总线)南桥?例如PCI总线、USB总线等 通过北桥与CPU连接(南桥?),是CPU与内存RAM、ROM和输入/输出设备接口之间进行通讯的通路 内存总线:内存与北桥间的总线称为内存总线 ...

a746742897的博客 1067

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Anti-Attach 防止调试器附加

今天逛了下52pojie,看到有哥们发了一段代码,摘自《加密解密3》 看了下代码,只知道是HOOK ntdll.dll的ZwContinue函数,具体不知道为啥HOOK这个函数能发现调试器,这个时候我掏出了《加密解密3》,寻找答案, 发现书上写了这样一句话: Ring3调试器的附加使用的是DebugActiveProcess函数,在附加相关进程时,会首先执行到ntdll.dll下的ZwCon

LLC 6273

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

检查进程是否被调试

转自:http://www.cnblogs.com/this-543273659/archive/2013/03/04/2943380.html 在调试一些病毒程序的时候,可能会碰到一些反调试技术,也就是说,被调试的程序可以检测到自己是否被调试器附加了,如果探知自己正在被调试,肯定是有人试图反汇编啦之类的方法破解自己。为了了解如何破解反调试技术,首先我们来看看反调试技术。 ...

1005

深度学习工具包 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")

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

逆向入门-反调试

逆向基础-反调试专题

AppWhite_Star的博客 2814

给游戏或代码增加反调试功能(应用层级)

前言: 感谢:易道云学院 tiger老师指导: 调试分为:打开一个调试进程和调试一个现有的进程。 DebugByCreate为真时调用CreateProcess()函数打开一个调试进程,当DebugByCreate为假时调用DebugActiveProcess(dwPID)函数调试一个现有的程序。 一、调用CreateProcess()函数打开一个调试进程: 调用CreateProcess()函数实际底层调用: 二、调用DebugActiveProcess(dwPID)函数调试一个现有的程序

weixin_44389943的博客 973

详解反调试技术

反调试技术,恶意代码用它识别是否被调试,或者让调试器失效。恶意代码编写者意识到分析人员经常使用调试器来观察恶意代码的操作,因此他们使用反调试技术尽可能地延长恶意代码的分析时间。为了阻止调试器的分析,当恶意代码意识到自己被调试时,它们可能改变正常的执行路径或者修改自身程序让自己崩溃,从而增加调试时间和复杂度。很多种反调试技术可以达到反调试效果。这里介绍当前常用的几种反调试技术,同时也会介绍一些逃避反

houjingyi的博客 3万+

反调试 -- 利用ptrace阻止调试器附加

为了方便应用软件的开发和调试,UNIX的早期版本就提供了一种对运行时中的进程进行跟踪和控制的手段,那就是系统的ptrace。 这个函数在iOS中没有提供头文件,我们可在macOS中查看头文件的具体细节。pteace提供了一个非常有用的参数,PT_DENY_ATTACH,这是一个宏,这个参数用于告诉系统阻止调试器附加。 首先,可以将macOS下的头文件整体复制出来放到iOS工程下,方便使用。 ...

weixin_34268843的博客 1162
上一篇: WIN NT 主要对象隐形 MOD PROC DRV
下一篇: 无法定位一级基址的处理
nooning
博客等级 码龄24年 20粉丝 64原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值