awd BIOS rk ,'universal' tst

AI编程IDE 以及。它们各有侧重,适合不同的开发习惯和场景。 阅读详情
创建时间:2007-05-28
文章属性:原创
文章提交: icelord (icelord_at_sohu.com)

Award BIOS Rootkit,universal test

[author  ]:icelord
[date    ]:2007/05/25
[contact ]:icelord@sohu.com

[申明]

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    本文所涉及到的资料,均来自internet...
    由此造成的后果,与本人无关
    假设您已经了解x86和NT的相关知识。
    内容仅为个人意见。由于时间仓促,很多细节没有验证,错误很多。
    如果您有不同意见,可联系icelord@sohu.com,欢迎指正。

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


[.code]

下面的文字仅为个人想法,目的抛砖引玉
由于时间和环境问题,暂时没有机会来验证,所以没有demo,可以
在iclord基础上作简单修改进行验证测试
欢迎有兴趣的朋友测试验证
也可能下面的想法估计是完全错误的,如果您认为不可行,欢迎指正

'通用'所要面临的问题:
(1)   BIOS效验和的问题
(2)   Rootkit启动的时机
(3)   程序健壮性问题
(4)   BIOS刷新的问题


下面的方法是个很啰嗦的方法,如果您有更好的方法,欢迎指点
brk:  boot rk,bios rk...

[设计目标]
    要求brk能够在多种类型的BIOS内植入并启动
    
    问题:
    1.不同类型的bios的'效验和'位置不同,导致添加自己的brk后,不能正
    常启动.
    2.需要在bios启动过程中启动自己的brk,不同类型的bios是个难题
    
    3.怎样重新取得cpu?
    
    4.anti brk chk?这暂时谈不到.
    
[简单结构]

+--------------------+---[low ROM,Mem 4GB-ROMSize]
|     bios mod       |
+--------------------+
|                    |
+--------------------+
|     free space     |
+--------------------+
|  brk rom section2  +-->ESCD better,brk real body
+--------------------+
|    free space      |
+--------------------+
|                    |
+--------------------+---[Last Section,Mem 4GB-64KB]
|                    |
+--------------------+
|  brk rom section1  +-->Brk init & restore orig_jmp
+--------------------+
|     boot rom       |
+--------------------+
|  hook far jmp here +-->jmp brk rom section1
+--------------------+---[high ROM,Mem 4GB]


一.BIOS效验的问题
    不知道其它类型BIOS的自我效验如何,像Award BIOS的自我效验都
    是使用简单的'效验和'方式,就是将要效验的数据块按uchar来相加,与原始效
    验和值比较。
    如果你修改了这些数据块中的某些数据,将会导致效验和失败,BIOS启动时
    就会出现BIOS Checksum Error。
    
    那么怎样来保证修改后的BIOS效验和能正常运行?
    一直以来都是修改数据块后重新计算效验和并写入到原始效验和的位置。
    某天,突然发现这个问题实在太xx,只要修改后的数据块的效验和与未修改时
    的效验和相等即可嘛...ft,大脑僵化的结果。
    
    但问题又来了,如果BIOS所采用的效验方式不是效验和呢?的确(‘universal’
    这一说法要打折扣),如果要采用别的加密的方法就更麻烦...
    
    先拿award bios来作例子...(假设其它BIOS的验证都使用效验和方式...?????)
    //contact icelord@sohu.com 如果有不同意见
    
    具体做法就是在BIOS ROM中查找足够大(与brk的body大小相同)的空闲位置(
    全0xFF或0x0),计算这些空间的效验和,修正brk的效验和,与之相等,替换即可。
    
    这包括brk ROM Section1和brk ROM Section2两部分
    其中brk ROM Section1在BIOS ROM最后64KB内查找
    其中brk ROM Section2在BIOS ROM中间空闲位置查找
    
    
    上图已经说明了brk的构造
    (1).hook_far_jmp
        在安装时确定并修正此值
        
    (2).brk ROM Section1
        此部分作用为进入保护模式,初始化brk的实体brk ROM Section2(安装时构造)
        
    (3).brk ROM Section2
        此部分为BIOS Rk的实体,可以放到brk ROM Section1中,按payload大小而定
    (安装时构造)
        
        
    解释一下:
        我不知道开机时有多少ROM映射到1MB以内,但是可以确定的是BIOS ROM最后64KB
    会映射到0xF000段。
        0xF000内一般没有足够大的空间,所以将brk ROM Section2放置在BIOS ROM的靠前的
    空闲位置非,这样就导致在0xF000段内无法访问到brk ROM Section2 (in ROM)(in real mode).
    所以brk ROM Section1的作用是拷贝brk ROM Section2到1MB以下(其实是白拷,BIOS在初
    始化过程中会overwrite1MB一下的内存为0,至少Award是这样做的???,所以任务放
    到了mbr上),所以enter PM,访问brk ROM Section2.(按理BIOS ROM可直接EIP执行...,
    因为first jmp就是ROM指令...)
    ---------------------------------
    还有一个方法就是将brk放置到ESCD(extend system configuration data)或者DMI区域中,
    在第一条指令直接跳转ESCD或者DMI区域。
    原因:(拿award来说)
        实际发现ESCD区域中有很大的区域未使用(但是发现Toshiba R100几乎没有空闲,jp!),
    而且ESCD区域一般应该不会进行效验和检测(award BIOS 没有),因为当硬件改变时,BIOS会
    更新此区域内容,即开机自检过程中的 "Updating ESCD..."
    (具体可以看看ESCD specification).而且ESCD区域一般是4KB/8KB或者64KB (unit)????
    (不确定...)
    
    问题:
        ESCD区域是否可以在RM下访问到(without enter PM,尝试一条指令的hook,在BIOS之前)
        实际发现ESCD在256KB ROM中位于最后64KB,在512KB ROM中位于BIOS ROM起始位置,
    这跟BIOS ROM(类型)的sector大小有关,还跟BIOS的layout有关(例如Award 的16K-8K-8K Unit),
    即使这样做,仍然需要一个wrapper来使得在RM下可以访问到ESCD(胡乱猜测)
        
    
    /*这里有问题!!!!!*/


二.BIOS Rootkit启动的时机
    BIOS rk需要在pc启动的过程中获取执行的机会,BIOS之前,过程中,之后,只要
    能获取执行即可。
    
    而启动brk的方式还是老套的那几种hook,file...(virtualize?)
    
    就选择最简单的hook吧,那么,选择什么位置/代码来hook才可以达到universal?
    最简单的答案就是BIOS入口处.
    x86 CPU在启动时,CS的不可见部分(Base Addr)为0xFFFF0000,EIP为0xFFF0,第一条
    指令为 BIOS ROM最后16字节内,这个位置是比较universal的hook位置.
    一般来说,这条指令都是一个长跳转指令(也有非长跳转的,例如dell的某个BIOS),如果想
    不被明显的看出来,可以修改跳转目的地址的指令,一般都在BIOS最后64KB,这个位
    置是直接映射到0xF000段的,长跳转到此。
    
    现在,brk可以启动了,而且是在BIOS之前,此时,没有任何可以使用的BIOS服务.
    
    现在就要发挥你的想象能力了。你需要作一些事情,然后将CPU交给原始BIOS,使其进行
    必要的初始化(硬件,BIOS服务等).此过程中BIOS 需要改变CPU模式,I/O等.
    
    当前状态是16bit RealMode,没有多任务,没有BIOS服务,现在要解决的问题就是如何
    在放弃CPU后如何重新获取CPU。
    
    hehe,想了好久,如果还是hook BIOS中间代码,感觉很复杂,需要很多硬编码数据,
    还是使用老套的方式比较好,写文件。
    关于IDE的I/O操作很简单,一般是对I/O端口0x1F0~0x1F7进行读写操作,使用Loop I/O就
    更简单了。
    
    做法就是在MBR中写入几个字节的jmp指令即可.这样在选择硬盘启动后可直接获取cpu.
    //如果您有好的方法,欢迎指点。
    
    但是,这样的做法将导致程序的健壮性打折扣。修改MBR时如果断电则是个麻烦...
    怎么办?
    
三.程序健壮性
    其实也谈不上健壮。
    要处理的问题就是MBR写入的问题和安装操作系统的问题
    
    (1).MBR写入的问题
    IDE好说,直接使用cli;Loop I/O的方式读写扇区即可
    SCSI/CDROM/Eth Boot,唉,不知道怎么办了
    
    (2).安装操作系统的问题
    假设安装winxp,确保在拷贝文件时,BIOS hook已经被卸载
    //reason:hook read service...,不知道在安装开始拷贝文件是否使用BIOS svc
    
    还有MBR不能被保存在BIOS中,以防止安装操作系统后出现新的MBR的问题
    
    所以还得在MBR中找到一个通用的hook code??
    
    也可在安装时将MBR备份到MBR和第一个分区之间的空闲区域内(至少62个扇区吧,
    估计。安装nt后还有很多空闲,不知道安装Grub会怎样...反正能找到空闲位置),
    在brk启动时将MBR与备份MBR比较(同时检查是否为hook过的 MBR,防止重复hook),
    如不同则备份。若相同,则读取mbr,修改MBR,然后写入MBR.
    
    若发现MBR不完整(0xaa55),则使用备份MBR来覆盖MBR,
    这样来防止写入MBR断电破坏MBR
    
    (注:'备份MBR'在安装时写入,在MBR有效,且MBR与'备份MBR'不一致,则更
    新'备份MBR',根据实际情况来定了...)
    
    在从硬盘启动时,恢复MBR为原始状态。

    /*总之,就是使用备份技术,来降低断电破坏MBR的几率*/
    待解决...
    
四.BIOS刷新的问题

    这是个老问题了。可使用的方法有
    uniflash  (open src)
    award smi flash
    (ami smi flash).
    感兴趣的可以看看
    
五. 安装程序的任务

    
    (1).在OS下Dump BIOS
    
    (2).在BIOS最后64KB查找空闲空间,构造计算并防止jmp_hook和brk rom section1(尽量小)
    
    (3).在BIOS ROM中查找足够大的空闲空间,构造计算并放置brk rom section2
    
    (4).(释放驱动)刷新BIOS    (最麻烦的问题!!!待高手解决)
    
六. IcLord2.test流程    
    
    (1).PC上电,CS.SegBase=0xFFFF0000 EIP=0xFFF0
    
    (2).在0xFFFF FFF0执行被hook的(jmp)指令(in ROM),跳转到brk rom section1(in ROM)
    
    (3).brk rom section1进入PM(保持一致性),访问brk rom section2(in ROM),(拷贝到RAM,
    并执行)
    
    (4).brk rom section2(in RAM)使用I/O来读取MBR和磁盘临时数据('备份MBR',sub_routine
    sector,hlper_routine sector...等)进行有效性检查(自定义了)
    
    (5).修改MBR,写回disk;
        写入磁盘临时数据(如果'备份MBR'无效,如果hlper_routine Sector无效)
    
    (6).恢复状态,跳转原始 BIOS
    
    (7).BIOS初始化(上面说的问题在这里,BIOS检测内存会用到内存读写,如果将brk放置
    到内存中的话,可能在这个阶段就被破坏了,所以,hehe,需要上面所说的hlper_routine
    sector...)
    
    (8).如果Boot From IDE,则MBR被加载到0x7C00位置执行,此时执行的是我们自己的MBR,
    其任务就是加载存放于MBR和第一个分区之间的hlper_routine sector并执行;
    hlper_routine为ROM Section2保留内存,进入PM,拷贝ROM Section2到保留内存区域,Hook
    BIOS服务,或者调用保留内存区域的ROM Section2来I/O操作系统相关的文件(例如,你
    可以使用自己的buildin driver写磁盘文件,如果你想这样做)
        最后,加载‘备份 MBR’到0x7C00,并执行
        
    (9).MBR加载PBR(OBR),OBR加载osloader...,此时我们的hooker得到执行机会...,然后进行
    kernel subvertion...
        //
        //Win NT相关:
        //这里在说一下iclord brk的简单flowchart:
        //hook int 13h-->hook ntldr!BlSetupForNT!'xxxxx',使用堆栈ebp获取BlLoaderBlock,
        //修改内存链表属性,同时hook ndis.sys...-->ndis.sys hooker执行,
        //初始化ndis,然后初始化自己(展开rootkit .sys文件进行驱动程序(boot driver)初始化),
        //返回控制到IopInitializeBuiltinDriver()?
        //over
        //
        
    (10).Rootkit's "show time" here...
    
[Anti & 问题]
    没细想过。我备份了一下BIOS而已
    
    由于修改BootROM seg,而且借助(RW)了IDE之类的非固件存储设备,导致所谓的'universal'在
    健壮性和安全性上较差,操作系统重装没有解决(可能会出问题)...

    由于要修改BootBlock,有的FlashROM对BootBlock作了特殊的限制...
    
    用光盘启动,检查;
    启动到dos下检查;
    
    
    /**
    以上想法有很多疑惑地方,猜测而已。
    至于挨骂,那时肯定的,hehe
        
    期待高手斧正...
    */
    
=============

    icelord@2007/05/25
    
    
----------
revision @ 07/05/28
    PC启动时有几个寄存器保留着一些信息

    如果PC从睡眠模式恢复...
 
AWD_BIOS刷新工具完整解决方案 许多企业客户希望在其定制设备上显示专属品牌Logo或公司名称。CBROM支持通过替换LOGO模块实现这一需求。首先准备一张256色BMP图像,尺寸通常为640×480像素,并使用专用工具(如LogoTool)转换为BIOS兼容格式:然后执行注入命令:部分主板还需启用“Quiet Boot”选项才能隐藏POST信息并显示Logo。可通过修改NVRAM模块中的Setup默认值实现自动化:# 编辑NVRAM.SET,设置Quiet Boot = Enabled。 阅读详情

相关推荐

BIOS更新:从入门到实践

BIOS(Basic Input Output System)是计算机最基本的输入输出系统,是嵌入在主板上的一种固件,它负责在计算机启动时进行硬件初始化,并在操作系统载入前提供低级设备驱动服务。BIOS通常被固化在ROM(Read-Only Memory)或Flash内存中,是连接计算机软件与硬件的第一道桥梁。BIOS(Basic Input Output System)是计算机启动时加载和运行的第一个软件,它在系统硬件与操作系统之间扮演着重要的桥梁角色。

weixin_35755823的博客 1112

iClord.exe 系统错误. 由于找不到iUtils.dll,无法继续执行代码。重新安装程序可能会解决此问题。

iClord.exe 系统错误,可能是防病毒软件把iUtils.dll文件误判为病毒并把它删除或隔离了,这时候只需要把它从隔离区弄出来。

qq_40418553的博客 6049

AWD BIOS 刷新软件

在Windows下直接刷新BIOS的软件

万能BIOS刷新工具Universal Flash Utility V8.93:高效刷新BIOS,提升系统性能

万能BIOS刷新工具Universal Flash Utility V8.93:高效刷新BIOS,提升系统性能 【下载地址】万能BIOS刷新工具UniversalFlashUtilityV8.93 Universal Flash Utility V8.93是一款功能强大的BIOS刷新工具,适用于多种主板型号,帮助用户轻松...

gitblog_06769的博客 2453

BIOS刷新工具Universal Flash Utility V8.95.rar

bios刷新升级工具软件, 软件版权归属原作品发布方,提供与本网站各界爱好者试用,以便交流刷新比较困难的 bios 实际使用经验!

AWD_bios刷新工具

BIOS升级工具,可升级常见的BIOS,无盘常用到的

awdBIOS 镜像结构简单分析

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%    本文所涉及到的资料,均来自internet...    造成的后果,与本人无关|   内容仅为个人意见。由于时间仓促,很多细节没有验证,错误很多。|   如果您有不同意见,可联系icelord@sohu.com,欢迎指正。%

2949

万能BIOS刷新工具Universal Flash Utility V8.93

一个万能的BIOS刷新工具,也不知道是不是通用的,不过对于一般的主板还是可以的吧。

记一次awd源码分析

这个应该是我20年时遇到的题目,现在补发记录。该源码是由werkzeug和flask共同搭建,入口文件为run.py,根据每一个@app.route去看路由就很好分析,自己搭环境运行访问首页如下图。

tddjjjxxx的博客 509

两路半桥LLC谐振变换器软开关Simulink仿真(模拟谐振参数不同、分裂电容)

内容概要:本文介绍了“两路半桥LLC谐振变换器软开关Simulink仿真”资源包,重点在于基于Simulink平台对两路半桥LLC谐振变换器进行高精度建模与动态仿真,特别考虑了谐振参数不一致及分裂电容等非理想工况对系统性能的影响。该仿真模型不仅涵盖了主电路拓扑、软开关实现机制与谐振网络设计,还深入分析了不同参数配置下系统的启动特性、稳态效率、动态响应及软开关条件的满足情况。通过参数扫描与对比仿真,帮助用户掌握LLC变换器的关键设计要素与优化方法,具备较强的工程指导价值和科研教学意义。; 适合人群:电力电子、电气工程及其自动化等相关专业的高校师生,以及从事高频开关电源、新能源变换器、车载充电机等领域的研发工程师和技术人员。; 使用场景及目标:① 掌握两路并联半桥LLC谐振变换器的建模与仿真方法;② 理解软开关技术在提升变换器效率与降低EMI方面的关键作用;③ 分析谐振参数偏差与分裂电容结构对系统均流特性、增益曲线及软开关范围的影响;④ 支持科研项目中的拓扑验证、控制策略开发与故障工况分析; 阅读建议:建议结合Simulink仿真模型与配套说明文档进行学习,重点关注谐振腔参数设置、驱动时序设计及软开关波形观测;可通过调整谐振电感、电容值或引入参数失配,观察系统行为变化,深入理解LLC变换器的稳定边界与优化设计原则。

双向全桥CLLC谐振变换器仿真模型(Simulink仿真实现)

内容概要:本文系统介绍了双向全桥CLLC谐振变换器的Simulink仿真模型,重点阐述了变频控制、闭环仿真及其与多种电力电子拓扑(如维也纳整流器、DAB变换器、图腾柱PFC等)的联合仿真设计。资源包涵盖2.5kW双向全桥LLC、V2G电动汽车充放电系统、三相PFC、多相交错LLC等多种变换器的仿真案例,并深入展示了三电平VIENNA整流器在双闭环PI控制与SVPWM调制策略下,结合上下电容电压差值补偿实现中点电位平衡的先进控制方法。通过仿真验证,该策略不仅有效维持了800V直流母线电压的稳定,还在动态工况下显著提升了电容电压的均衡度,同时保持了较低的输入电流THD,充分体现了SVPWM与中点平衡控制协同优化的技术优势。; 适合人群:具备电力电子与自动控制理论基础,从事新能源发电、电动汽车、工业电源、微电网等领域的研究生、工程师及科研人员。; 使用场景及目标:① 学习并构建高频谐振变换器(如LLC、CLLC)的Simulink仿真模型,掌握其变频与混合控制策略;② 深入理解并应用中点电位平衡、双闭环PI控制、SVPWM调制等核心技术于VIENNA等三电平变换器中;③ 复现高水平期刊论文中的控制算法,服务于科研项目申报、学术论文撰写或工程产品开发。; 阅读建议:该资源为综合性仿真资料库,建议使用者结合自身研究方向(如电动汽车充电、新能源并网)选择对应案例进行精学,重点关注控制策略的设计逻辑、仿真参数的整定方法以及SVPWM与中点平衡的协同机制,并充分利用附带的计算书和参考文献深化理解,以实现从仿真模型到实际工程应用的顺利转化。

AWD Format: About

AWD Format:About What is AWD? AWD is a compact binary format for the storing and retrieval of 3D data. It is primarily designed for use in websites and installab...

weixin_30237281的博客 147

MatterPort3D 数据集下载

【代码】MatterPort3D 数据集下载。

qq_44106838的博客 6785

Zed 编辑器深度解析:当「实时协同」不再是 IDE 的附加功能,而是编辑器的底层契约

Zed 把实时协同从外挂功能变成编辑器内核契约:基于 CRDT 与 Tree-sitter,实现字符级、AST 感知的毫秒级同步,局域网光标延迟低于 15ms,带宽占用极低且支持离线合并。它用 Rust 与 GPU 渲染换取确定性与性能,代价是放弃 VS Code 插件生态。

2601_94912102的博客 232

T265摄像头插着开机后,需要重新插拔才能正常启动

T265摄像头插着开机后,需要重新插拔才能正常启动

qq_35598561的博客 1080

CTF实战:Flask Session流量解密与内存马路由追踪

本文通过一道CTF实战题目,详细解析了Flask Session流量解密与内存马路由追踪的全过程。文章从破解前端加密密码入手,逐步揭示如何利用泄露的SECRET_KEY解密Session,发现命令执行痕迹,并最终追踪到攻击者植入的内存马路由。内容涵盖Wireshark流量分析、flask-unsign工具使用等实战技巧,为CTF选手和安全研究人员提供了一套完整的Flask应用安全分析思路。

weixin_28309571的博客 308

Pytorch【10】卷积神经网络CNN实战|卷积、池化、padding、stride,CNN训练MNIST

上一篇我们用全连接层完成MNIST分类。把28×28二维图像直接Flatten成一维向量,丢失像素之间空间位置关系参数数量巨大,容易过拟合卷积层Conv、池化层Pool、激活函数卷积:滑动卷积核提取局部特征;池化:降采样、压缩特征图,减少计算量。局部感受野:卷积核只看一小块区域,符合图像特征局部相关性权值共享:一张图共用同一套卷积核,大幅减少参数量平移不变性:同一个特征,在图里左右移动依然可以被识别。

Beforthing的博客 149

你的Wi-Fi总断网?可能是DHCP租约到期惹的祸!手把手教你用Windows/路由器设置永久IP或延长租期

本文深入解析家庭Wi-Fi频繁断网的常见原因——DHCP租约到期问题,并提供Windows和路由器设置永久IP或延长租期的详细教程。通过对比静态IP配置与延长租期两种方案,帮助用户有效解决网络不稳定问题,特别适合游戏玩家和远程工作者优化家庭网络环境。

weixin_29305313的博客 1439

JetBrains IDE带来全新音效体验

其实,很多时候技术圈很容易忽略“声音”这个维度。但对于我们这些一天十几个小时盯着屏幕的人来说,多一个感官的反馈,就意味着多一份注意力保护。把眼睛从无休止的进度条和日志里解放出来,让你的耳朵帮你分担一点压力。这大概是 JetBrains 在狂堆 AI 功能之外,做的最具有“人情味”的一次更新了。准备好给你的 IDE 调个音了吗?

weixin_44058951的博客 418

GCJ02坐标系转WGS84坐标系(已实地测试基本无偏差)

坐标系转化,GCJ02坐标系,WGS84坐标系

Xiao_XianYu_的博客 1859

spring boot 集成cas(一) 服务端搭建

简单点就是统一服务认证,多个系统一次登录。俗称单点登录。

慕孑晨的博客 1957

Cursor + IntelliJ IDEA = OpenIDEA?这个Rust开源IDE有点东西

是一个开源的集成开发环境(IDE),设计目标是在保留 IntelliJ IDEA 优秀开发体验的同时,通过原生架构实现更高性能、更低资源占用和更开放的生态。OpenIDEA 项目仍然处于快速发展阶段,插件生态和语言支持成熟度暂时还无法与 JetBrains 系列相比,暂时不建议立即替代生产环境。

Tony.Dong的专栏 411

如何学习总线技术

如何学习总线技术 以形象生动的比喻来描绘了总线技术的基本思想,指出了总线的基本分类和总线传输的基本原理,以及在学习过程中应当掌握的最基本的知识,对初学者有起到抛砖引入的作用。 0引言   如果一座只能容一个人来往的独木桥,两端的人都想要过桥,为了不拥挤、阻塞,那我们就得采取有效的办法。比如规定某段时间哪端的人过桥,另一端的人就等着该他过桥的时间段的到来,同时也还可以规定人多时要按先来后到或年

ce123的技术博客 8529

Codex IDE extension

本文已收录在。。

JavaEdge全是干货的技术号 392

Vibe Coding 实战指南:用 3 类社区资源实现每周高效追新

介绍一种分层技术雷达校准方法,通过领域过滤器(L1技术栈锚定、L2能力映射、L3场景收敛)精准筛选AI编程相关更新,结合可验证的Shell命令与CI任务卡,将信息过载压缩为可执行、可审计的工程实践。

weixin_27251469的博客 331

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

上一篇: CodeGear宣布最新的C++Builder版本 : C++Builder 2007
下一篇: AV终结者技术大曝光(另附AV终结者10大死法)
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值