简单小木马脱壳

  1. 一个小木马脱壳  请虚拟机下调试 相关文件见附件 未知壳相当简单 但是典型 有stolen code和overlay   只是练习脱壳 所以没有分析木马
  2. 初次实战 一路F8
  3. 载入:
  4. 00410336 > $  57            PUSH EDI
  5. 00410337   .  8BFC          MOV EDI,ESP
  6. 00410339   .  83EC 26       SUB ESP,26
  7. 0041033C   .  C74424 0E 000>MOV DWORD PTR SS:[ESP+E],0
  8. 00410344   >  C74424 06 FB6>MOV DWORD PTR SS:[ESP+6],DC8A65FB       ;解密key
  9. 0041034C   .  C74424 02 000>MOV DWORD PTR SS:[ESP+2],0
  10. 00410354   .  BE D5034100   MOV ESI,1.004103D5          ;解密起始地址
  11. 00410359   .  897424 12     MOV DWORD PTR SS:[ESP+12],ESI
  12. 0041035D   >  EB 00         JMP SHORT 1.0041035F
  13. 0041035F   >  BE 7A210000   MOV ESI,217A
  14. 00410364   .  03F7          ADD ESI,EDI
  15. 00410366   .  2BF4          SUB ESI,ESP                             ;esi + esp + (esp-26h) = esi + 26h
  16. 00410368   .  397424 0E     CMP DWORD PTR SS:[ESP+E],ESI            ;[esp+e]计数器
  17. 0041036C   .  74 02         JE SHORT 1.00410370
  18. 0041036E   .  EB 0C         JMP SHORT 1.0041037C
  19. 00410370   >  8B7424 12     MOV ESI,DWORD PTR SS:[ESP+12]           ;[esp+e] == esi时 才开始解密  
  20. 00410374   .  8A6424 06     MOV AH,BYTE PTR SS:[ESP+6]
  21. 00410378   .  2826          SUB BYTE PTR DS:[ESI],AH
  22. 0041037A   .  EB 00         JMP SHORT 1.0041037C
  23. 0041037C   >  834424 12 01  ADD DWORD PTR SS:[ESP+12],1           
  24. 00410381   .  C16C24 06 02  SHR DWORD PTR SS:[ESP+6],2
  25. 00410386   .  C16C24 06 02  SHR DWORD PTR SS:[ESP+6],2
  26. 0041038B   .  C16C24 06 02  SHR DWORD PTR SS:[ESP+6],2
  27. 00410390   .  C16C24 06 02  SHR DWORD PTR SS:[ESP+6],2              ;右移8位  即右移一个字节
  28. 00410395   .  834424 02 01  ADD DWORD PTR SS:[ESP+2],1
  29. 0041039A   .  837C24 02 04  CMP DWORD PTR SS:[ESP+2],4
  30. 0041039F   .  75 10         JNZ SHORT 1.004103B1
  31. 004103A1   .  C74424 06 FB6>MOV DWORD PTR SS:[ESP+6],DC8A65FB
  32. 004103A9   .  C74424 02 000>MOV DWORD PTR SS:[ESP+2],0
  33. 004103B1   >  BE 98064100   MOV ESI,1.00410698                      ;解密终止地址
  34. 004103B6   .  397424 12     CMP DWORD PTR SS:[ESP+12],ESI
  35. 004103BA   .^ 72 A1         JB SHORT 1.0041035D
  36. 004103BC   .  FF4424 0E     INC DWORD PTR SS:[ESP+E]
  37. 004103C0   .  817C24 0E 332>CMP DWORD PTR SS:[ESP+E],2333
  38. 004103C8   .^ 0F86 76FFFFFF JBE 1.00410344
  39. //整个解密过程 简单但是干扰性极大 [esp+e]为21A0时解密才开始  解密过程的key为DC8A65FB  变换过程 循环右移一个字节
  40. 00410407  |.  33C0          XOR EAX,EAX
  41. 00410409  |.  8B0424        MOV EAX,DWORD PTR SS:[ESP]               ;kernel里的一个地址送eax
  42. 0041040C  |.  66:33C0       XOR AX,AX
  43. 0041040F  |.  68 FFFF0000   PUSH 0FFFF                               ;函数名HASH值入栈
  44. 00410414  |.  68 B674755D   PUSH 5D7574B6                            ;GetProcAddress
  45. 00410419  |.  68 2207E471   PUSH 71E40722                            ;LoadLibraryA
  46. 0041041E  |.  68 80EFF815   PUSH 15F8EF80                            ;VirtualProtect
  47. 00410423  |.  68 EC5863D6   PUSH D66358EC                            ;ExitProcess
  48. 00410428  |.  8BFC          MOV EDI,ESP                              ;EDI 用来定位  堆栈 
  49. 0041042A  |>  66:8138 4D5A  /CMP WORD PTR DS:[EAX],5A4D              ;PE
  50. 0041042F  |.  75 13         |JNZ SHORT 1.00410444
  51. 00410431  |.  8B50 3C       |MOV EDX,DWORD PTR DS:[EAX+3C]
  52. 00410434  |.  81FA 00100000 |CMP EDX,1000
  53. 0041043A  |.  77 08         |JA SHORT 1.00410444
  54. 0041043C  |.  66:813C10 504>|CMP WORD PTR DS:[EAX+EDX],4550          ;MZ
  55. 00410442  |.  74 07         |JE SHORT 1.0041044B
  56. 00410444  |>  2D 00000100   |SUB EAX,10000                           ;  UNICODE "ALLUSERSPROFILE=C:/Documents and Settings/All Users"
  57. 00410449  |.^ EB DF         /JMP SHORT 1.0041042A
  58. //寻找kernel 基址
  59. 0041044B  |> /50            PUSH EAX                                 ;  kernel32.7C800000
  60. 0041044C  |.  8B7410 78     MOV ESI,DWORD PTR DS:[EAX+EDX+78]        ;  定位到DataDirectory[0].VirtualAddress
  61. 00410450  |.  03F0          ADD ESI,EAX                              ;  定位到导出表
  62. 00410452  |.  83C6 18       ADD ESI,18                               ;IMAGE_EXPORT_DIRECTORY.NumberOfNames
  63. 00410455  |.  93            XCHG EAX,EBX
  64. 00410456  |.  AD            LODS DWORD PTR DS:[ESI]
  65. 00410457  |.  50            PUSH EAX                                 ;IMAGE_EXPORT_DIRECTORY.NumberOfNames入栈
  66. 00410458  |.  AD            LODS DWORD PTR DS:[ESI]
  67. 00410459  |.  50            PUSH EAX                                 ;IMAGE_EXPORT_DIRECTORY.AddressOfFunctions入栈
  68. 0041045A  |.  AD            LODS DWORD PTR DS:[ESI]
  69. 0041045B  |.  50            PUSH EAX                                 ;IMAGE_EXPORT_DIRECTORY.AddressOfNames入栈
  70. 0041045C  |.  03C3          ADD EAX,EBX
  71. 0041045E  |.  50            PUSH EAX             ;IMAGE_EXPORT_DIRECTORY.AddressOfNames+ImageBase入栈
  72. 0041045F  |.  AD            LODS DWORD PTR DS:[ESI]                  
  73. 00410460  |.  50            PUSH EAX             ;IMAGE_EXPORT_DIRECTORY.AddressOfNameOrdinals入栈
  74. 00410461  |.  8BEC          MOV EBP,ESP                              ;EBP指向IMAGE_EXPORT_DIRECTORY.AddressOfNameOrdinals
  75. 00410463  |>  8B4D 10       /MOV ECX,DWORD PTR SS:[EBP+10]           ;IMAGE_EXPORT_DIRECTORY.NumberOfNames
  76. 00410466  |.  33D2          |XOR EDX,EDX
  77. 00410468  |>  8B75 04       |/MOV ESI,DWORD PTR SS:[EBP+4]           ;IMAGE_EXPORT_DIRECTORY.AddressOfNames+ImageBase
  78. 0041046B  |.  8B36          ||MOV ESI,DWORD PTR DS:[ESI]             ;ESI 为 函数名的起始地址RVA
  79. 0041046D  |.  03F3          ||ADD ESI,EBX                            ;得到函数名地址VA
  80. 0041046F  |.  33C0          ||XOR EAX,EAX                            
  81. 00410471  |.  50            ||PUSH EAX
  82. 00410472  |>  C1C8 07       ||/ROR EAX,7
  83. 00410475  |.  310424        |||XOR DWORD PTR SS:[ESP],EAX
  84. 00410478  |.  AC            |||LODS BYTE PTR DS:[ESI]
  85. 00410479  |.  84C0          |||TEST AL,AL
  86. 0041047B  |.^ 75 F5         ||/JNZ SHORT 1.00410472                  ;函数名HASH           
  87. 0041047D  |.  58            ||POP EAX
  88. 0041047E  |.  57            ||PUSH EDI
  89. 0041047F  |>  813F FFFF0000 ||/CMP DWORD PTR DS:[EDI],0FFFF          ;函数是否 地址都找到  找到就跳
  90. 00410485  |.  74 09         |||JE SHORT 1.00410490
  91. 00410487  |.  3B07          |||CMP EAX,DWORD PTR DS:[EDI]            ;比较函数名HASH值
  92. 00410489  |.  74 0F         |||JE SHORT 1.0041049A
  93. 0041048B  |.  83C7 04       |||ADD EDI,4
  94. 0041048E  |.^ EB EF         ||/JMP SHORT 1.0041047F
  95. 00410490  |>  5F            ||POP EDI
  96. 00410491  |.  8345 04 04    ||ADD DWORD PTR SS:[EBP+4],4             ;移到下一个函数名起始地址
  97. 00410495  |.  42            ||INC EDX
  98. 00410496  |.^ E2 D0         |/LOOPD SHORT 1.00410468
  99. 00410498  |.  EB 2C         |JMP SHORT 1.004104C6
  100. 0041049A  |>  D1E2          |SHL EDX,1
  101. 0041049C  |.  8B4D 00       |MOV ECX,DWORD PTR SS:[EBP]              ;IMAGE_EXPORT_DIRECTORY.AddressOfNameOrdinals
  102. 0041049F  |.  03CB          |ADD ECX,EBX                             ;IMAGE_EXPORT_DIRECTORY.AddressOfNameOrdinals+IMAGEBASE
  103. 004104A1  |.  03CA          |ADD ECX,EDX                             ;得到特定函数 序号地址
  104. 004104A3  |.  8B09          |MOV ECX,DWORD PTR DS:[ECX]              ;得到函数序号
  105. 004104A5  |.  81E1 FFFF0000 |AND ECX,0FFFF                          
  106. 004104AB  |.  8B55 0C       |MOV EDX,DWORD PTR SS:[EBP+C]            ;IMAGE_EXPORT_DIRECTORY.AddressOfFunctions
  107. 004104AE  |.  03D3          |ADD EDX,EBX                             ;IMAGE_EXPORT_DIRECTORY.AddressOfFunctions+IAMGEBASE
  108. 004104B0  |.  C1E1 02       |SHL ECX,2                               
  109. 004104B3  |.  03D1          |ADD EDX,ECX                             
  110. 004104B5  |.  8B12          |MOV EDX,DWORD PTR DS:[EDX]              
  111. 004104B7  |.  03D3          |ADD EDX,EBX                             ;得到函数VA
  112. 004104B9  |.  8917          |MOV DWORD PTR DS:[EDI],EDX              ;存放函数地址
  113. 004104BB  |.  8B4D 08       |MOV ECX,DWORD PTR SS:[EBP+8]
  114. 004104BE  |.  03CB          |ADD ECX,EBX
  115. 004104C0  |.  894D 04       |MOV DWORD PTR SS:[EBP+4],ECX
  116. 004104C3  |.  5F            |POP EDI
  117. 004104C4  |.^ EB 9D         /JMP SHORT 1.00410463
  118. //想起failwest的shellcode。。。。。 
  119. 004104C6  |> /83EF 04       SUB EDI,4
  120. 004104C9  |.  8BE7          MOV ESP,EDI
  121. 004104CB  |.  8B5C24 08     MOV EBX,DWORD PTR SS:[ESP+8]
  122. 004104CF  |.  8BFC          MOV EDI,ESP
  123. 004104D1  |.  83EF 04       SUB EDI,4
  124. 004104D4  |.  57            PUSH EDI
  125. 004104D5  |.  6A 40         PUSH 40                                  ;PAGE_EXECUTE_READWRITE
  126. 004104D7  |.  68 00100000   PUSH 1000
  127. 004104DC  |.  68 00004000   PUSH 1.00400000
  128. 004104E1  |.  FFD3          CALL EBX                                 ;  VirtualProtect修改PE头属性为可读可写可执行
  129. 004104E3  |.  BF 00004000   MOV EDI,1.00400000                       ;IMAGEBASE
  130. 004104E8  |.  037F 3C       ADD EDI,DWORD PTR DS:[EDI+3C]            ;IMAGE_NT_HEADER
  131. 004104EB  |.  C787 A0000000>MOV DWORD PTR DS:[EDI+A0],12000          ;重定位表IMAGE_DIRECTORY_ENTRY_BASERELOC.VirtualAddress
  132. 004104F5  |.  C787 A4000000>MOV DWORD PTR DS:[EDI+A4],11E4           ;IMAGE_DIRECTORY_ENTRY_BASERELOC.Size
  133. 004104FF  |.  C787 80000000>MOV DWORD PTR DS:[EDI+80],0              ;IMAGE_DIRECTORY_ENTRY_IMPORT.VirtualAddress清空了导入表偏移
  134. 00410509  |.  C787 84000000>MOV DWORD PTR DS:[EDI+84],0              ;IMAGE_DIRECTORY_ENTRY_IMPORT.Size
  135. 00410513  |.  8BD7          MOV EDX,EDI                              ;IMAGE_NT_HEADER                          
  136. 00410515  |.  83C2 18       ADD EDX,18                               ;IMAGE_OPTIONAL_HEADER32
  137. 00410518  |.  33C9          XOR ECX,ECX
  138. 0041051A  |.  66:8B4F 14    MOV CX,WORD PTR DS:[EDI+14]              ;SizeOfOptionalHeader
  139. 0041051E  |.  03D1          ADD EDX,ECX                              ;定位到节表IMAGE_SECTION_HEADER
  140. 00410520  |.  33C9          XOR ECX,ECX
  141. 00410522  |>  8B72 0C       /MOV ESI,DWORD PTR DS:[EDX+C]            ;IMAGE_SECTION_HEADER.VirtualAddress
  142. 00410525  |.  81C6 00004000 |ADD ESI,1.00400000                      ;IMAGE_SECTION_HEADER.VirtualAddress+IMAGEBASE
  143. 0041052B  |.  60            |PUSHAD
  144. 0041052C  |.  8BFC          |MOV EDI,ESP
  145. 0041052E  |.  83EF 04       |SUB EDI,4
  146. 00410531  |.  57            |PUSH EDI
  147. 00410532  |.  6A 40         |PUSH 40
  148. 00410534  |.  FF72 08       |PUSH DWORD PTR DS:[EDX+8]               ;IMAGE_SECTION_HEADER.VirtualSize
  149. 00410537  |.  56            |PUSH ESI
  150. 00410538  |.  FFD3          |CALL EBX                                ;VirtualProtect
  151. 0041053A  |.  61            |POPAD
  152. 0041053B  |.  83C2 28       |ADD EDX,28
  153. 0041053E  |.  41            |INC ECX
  154. 0041053F  |.  81F9 03000000 |CMP ECX,3              
  155. 00410545  |.^ 72 DB         /JB SHORT 1.00410522                     ;将PE文件前3个节属性变为可读可写可执行
  156. 00410547  |.  83EA 28       SUB EDX,28                               ;定位到第3个节的节表
  157. 0041054A  |.  8B42 0C       MOV EAX,DWORD PTR DS:[EDX+C]             ;IMAGE_SECTION_HEADER.VirtualAddress 
  158. 0041054D  |.  0342 10       ADD EAX,DWORD PTR DS:[EDX+10]            ;+ IMAGE_SECTION_HEADER.SizeOfRawData
  159. 00410550  |.  05 00004000   ADD EAX,1.00400000                       ;定位到节空隙
  160. 00410555  |.  83C0 64       ADD EAX,64
  161. 00410558  |.  60            PUSHAD
  162. 00410559  |.  8BF8          MOV EDI,EAX
  163. 0041055B  |.  BE D5034100   MOV ESI,1.004103D5                       ;首次解密的起始地址
  164. 00410560  |.  B9 98064100   MOV ECX,1.00410698                       ;首次解密的终止地址
  165. 00410565  |.  2BCE          SUB ECX,ESI
  166. 00410567  |.  F3:A4         REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]
  167.                                                                      ;将壳代码复制到节表间隙中去 想写插入型病毒的可以参考这里怎样定位的
  168. 00410569  |.  61            POPAD
  169. 0041056A  |.  68 FB658ADC   PUSH DC8A65FB                            
  170. 0041056F  |.  FFE0          JMP EAX                                  ;跳
  171. 00413667   .  B9 FB658ADC   MOV ECX,DC8A65FB                         ;注意上面入栈的 再看看这里  该壳有多种变形壳 但是都是通过 比较一个DWORD 来确定 运行流程
  172. 0041366C   .  3B0C24        CMP ECX,DWORD PTR SS:[ESP]
  173. 0041366F   .  0F84 8B010000 JE 1.00413800                            ;跳到壳的第二部分
  174. 00413675   .  B8 00000000   MOV EAX,0
  175. 00413800   > /5E            POP ESI                                  
  176. 00413801   .  05 98064100   ADD EAX,1.00410698
  177. 00413806   .  2D D5034100   SUB EAX,1.004103D5                       ;重定位壳代码的 结束地址
  178. 0041380B   .  8BD8          MOV EBX,EAX
  179. 0041380D   .  33C0          XOR EAX,EAX
  180. 0041380F   .  B8 03000000   MOV EAX,3
  181. 00413814   .  48            DEC EAX
  182. 00413815   .  6BC0 28       IMUL EAX,EAX,28
  183. 00413818   .  2BD0          SUB EDX,EAX                              ;定位到第1个节的IMAGE_SECTION_HEADER
  184. 0041381A   .  33C9          XOR ECX,ECX
  185. 0041381C   >  8B72 0C       MOV ESI,DWORD PTR DS:[EDX+C]             ;IMAGE_SECTION_HEADER[0].VirtualAddress
  186. 0041381F   .  81C6 00004000 ADD ESI,1.00400000                       ;+IMAGEBASE
  187. 00413825   .  33C0          XOR EAX,EAX
  188. 00413827   .  8A06          MOV AL,BYTE PTR DS:[ESI]                 ;每个节的开始 都有一个结构 
  189. 00413829   .  03F0          ADD ESI,EAX
  190. 0041382B   .  60            PUSHAD
  191. 0041382C   .  8BFB          MOV EDI,EBX
  192. 0041382E   .  E8 1F000000   CALL 1.00413852                          ;解压CALL跟进去看看
  193. {
  194.   00413852  /$  60            PUSHAD
  195.   00413853  |.  BB D218CF1F   MOV EBX,1FCF18D2
  196.   00413858  |.  B9 00000000   MOV ECX,0
  197.   0041385D  |.  BA 00000000   MOV EDX,0
  198.   00413862  |>  281E          /SUB BYTE PTR DS:[ESI],BL
  199.   00413864  |.  C1EB 08       |SHR EBX,8
  200.   00413867  |.  41            |INC ECX
  201.   00413868  |.  83F9 04       |CMP ECX,4
  202.   0041386B  |.  75 0A         |JNZ SHORT 1.00413877
  203.   0041386D  |.  BB D218CF1F   |MOV EBX,1FCF18D2
  204.   00413872  |.  B9 00000000   |MOV ECX,0
  205.   00413877  |>  46            |INC ESI
  206.   00413878  |.  42            |INC EDX
  207.   00413879  |.  83FA 08       |CMP EDX,8
  208.   0041387C  |.^ 7C E4         |JL SHORT 1.00413862
  209.   0041387E  |.  7F 05         |JG SHORT 1.00413885                 ;EDX为8时才 解密
  210.   00413880  |.  8B46 FC       |MOV EAX,DWORD PTR DS:[ESI-4]        ;解密后的[ESI-4]代表 需解压的代码 终止地址
  211.   00413883  |.  03C6          |ADD EAX,ESI
  212.   00413885  |>  3BF0          |CMP ESI,EAX
  213.   00413887  |.^ 7C D9         /JL SHORT 1.00413862
  214.   00413889  |.  61            POPAD  
  215. //下面是解压过程 代码不贴了
  216. }
  217. 每个节的第1个字节 代表需解密的代码在节中偏移,解密后的代码的第2个DWORD值代表需解压的代码的大小
  218. 导入表在第3个节中 第3次解压将导入表破坏  
  219. 00413833   .  8B0E          MOV ECX,DWORD PTR DS:[ESI]
  220. 00413835   .  8BFE          MOV EDI,ESI
  221. 00413837   .  2BF8          SUB EDI,EAX
  222. 00413839   .  8BF3          MOV ESI,EBX
  223. 0041383B   .  F3:A4         REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI];将解压后的代码复制回原地
  224. 0041383D   .  61            POPAD
  225. 0041383E   .  83C2 28       ADD EDX,28
  226. 00413841   .  41            INC ECX
  227. 00413842   .  81F9 03000000 CMP ECX,3
  228. 00413848   .^ 72 D2         JB SHORT 1.0041381C                      ;循环解压3个节
  229. 0041384A   .  B8 2D704000   MOV EAX,1.0040702D
  230. 0041384F   .  FFD0          CALL EAX                                 ;进入OEP
  231. 00413851   .  C3            RETN
  232. 简便方法:该壳 在最后解压3个节 并破坏原IAT  所以在原IAT 下硬件写入断点 就可停在0041383B  往下再走几步就到
  233. OEP了
  234. 修复IAT:整个壳 虽然清0了导入表偏移并破坏了导入表结构  但是该导入表是伪导入表 无论是壳 还是木马本身都跟该导入表中函数无关   dump后  importfix 检测到导入表但是无导入函数  直接运行后错误  所以仔细跟了下 是堆栈引起的 写了个脚本修复了下  运行后 dump  可以直接运行
  235. 脚本:
  236. var iataddress
  237. var mem
  238. var xxx
  239. var org_esp
  240. var oep
  241. var yyy
  242. gmi eip, IDATATABLE
  243. mov iataddress, $RESULT
  244. bphws iataddress, "w"
  245. run
  246. bphwcall
  247. findop eip, #ffd0#
  248. bp $RESULT
  249. run
  250. bc eip
  251. sti
  252. msg "到达oep,开始修补堆栈,修补后会改变OEP"
  253. mov oep, eip
  254. alloc 1000
  255. mov mem, $RESULT
  256. mov xxx, mem
  257. mov org_esp, esp
  258. @continue:
  259. add esp, 4
  260. cmp [esp], 0000ffff
  261. jnz @continue
  262. @next:
  263. mov [xxx], #68#,1
  264. inc xxx
  265. mov [xxx], [esp]
  266. sub esp,4
  267. add xxx,4
  268. cmp esp, org_esp
  269. jae @next
  270. mov [xxx], #ff25#, 2
  271. add xxx, 2
  272. mov [xxx], iataddress
  273. add xxx, 4
  274. sub xxx, mem
  275. mov [iataddress], oep
  276. add iataddress, 4
  277. mov eip, iataddress
  278. mov yyy, mem
  279. @orz:
  280. cmp xxx, 0
  281. je @exit
  282. mov [iataddress], [yyy], 1
  283. inc iataddress
  284. inc yyy
  285. dec xxx
  286. jmp @orz
  287. @exit:
  288. msg "修补完成,可以dump"
  289. free mem
  290. ret
  291. overlay处理:直接把原文件的overlay贴到 脱壳后的文件末尾就可以了
  292. 注意下:
  293. 1:我的虚拟机里XP版本过老  木马运行后  系统崩溃
  294. 可能是XP版本问题,换了个新版本的XP  运行正常  但是因为新版本的XP  没有弄测试
  295. 环境 所以不能肯定
  296. 2:在某个系统下调试 就不要换其它系统,修复堆栈里存放的函数地址  是直接从堆栈中读取的而不是 自己写动态获取过程得到的 所以 肯定不能跨系统版本运行 脚本运行过程中 会有个断点下在数据段的警告 确定就可以了
  297. 3:木马有危险,切记虚拟机下调试 稍微看了下 没有新技术 以后有时间再仔细分析 字符串都是加密的 不停的拷贝自身。。
  298. 附件下载:http://bbs.pediy.com/showthread.php?t=79532
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值