普通视图

发现新文章,点击刷新页面。
今天 — 2025年2月7日首页

2月7日

2025年2月7日 00:10

2月7日公历平年)年的第38天,离一年的结束还有327天(闰年是328天)。

大事记

19世紀以前

19世紀

20世紀

21世紀

出生

逝世

节假日和习俗

參考資料

  1. ^ 俄羅斯索契冬奧會絢麗開幕. BBC中文網. 2014-02-07 [2014-02-08]. (原始内容存档于2014-02-07) (中文(繁體)). 
  2. ^ 中医名家李可节前逝世 曾被诬告在监狱中学中医. 搜狐新闻. 2013-02-17 [2018-08-17]. (原始内容存档于2020-06-20). 
  3. ^ 袁秀贤. 中医名家李可逝世 粤省弟子追思悼念. 大公网. 2013-03-01 [2018-08-17]. (原始内容存档于2017-09-28). 
月份與日期
1月
2月
3月
4月
5月
6月
7月
8月
9月
10月
11月
12月

ReSym: 利用大语言模型从剥离的二进制文件中恢复变量和数据结构符号

2025年2月5日 11:00
作者:Danning Xie, Zhuo Zhang, Nan Jiang 等. 译者:知道创宇404实验室翻译组 原文链接:ReSym: Harnessing LLMs to Recover Variable and Data Structure Symbols from Stripped Binaries 摘要 反编译旨在将二进制可执行文件恢复为源代码形式,因此其在网络安全(如恶意软件分...
昨天 — 2025年2月6日首页

每日安全动态推送(25/2/6)

2025年2月6日 15:57

原创 admin 2025-02-06 15:57 北京

利用NTP窃取用户哈希;利用SMB文件服务器构建虚拟内存访问陷阱;时间盗贼:ChatGPT 的安全漏洞

•  通过JSON文件上传发现的存储型XSS漏洞
https://medium.com/@malvinval/stored-xss-via-json-file-upload-poc-9a1063bba5b8

本文详细揭示了通过JSON文件上传在IP2Location国家阻断器WordPress插件中发现的存储型XSS漏洞,这一技术深度和实战价值极高的文章值得我们关注。作者不仅分享了漏洞的具体触发方式,还提供了详细的复现步骤。


•  定向时钟烤制:利用NTP窃取用户哈希
https://medium.com/@offsecdeer/targeted-timeroasting-stealing-user-hashes-with-ntp-b75c1f71b9ac

本文揭示了一种新颖的网络攻击技术,即"目标时间烘烤"(Targeted Timeroasting),利用微软的时间协议MS-SNTP来窃取用户哈希值。通过巧妙地修改活动目录中用户的属性,使域控制器误认为是计算机账户并泄露其凭证信息,这为高级持续性威胁提供了新的入侵途径。


•  Windows 11 24H2中利用SMB文件服务器构建虚拟内存访问陷阱的新方法
https://googleprojectzero.blogspot.com/2025/01/windows-exploitation-tricks-trapping.html

本文揭示了Windows 11 24H2版本中的一项新特性,即无需远程服务器即可直接在本地机器上滥用SMB文件服务。这一变化不仅简化了利用过程,还引入了新的攻击向量,特别是针对所谓的"虚假文件不可变性"漏洞类别的本地利用能力。


•  时间盗贼:ChatGPT 的安全漏洞
https://www.bleepingcomputer.com/news/security/time-bandit-chatgpt-jailbreak-bypasses-safeguards-on-sensitive-topics/

本文揭示了名为“时间强盗”的ChatGPT漏洞,该漏洞允许用户绕过OpenAI的安全指南,获取敏感信息。这是首次详细报道如何利用模型的时间混淆和程序模糊性来突破大型语言模型的防护机制。


•  针对ADFS的复杂网络钓鱼攻击
https://sectoday.tencent.com/event/ijur2JQBok1VOLb0O6QY

一系列复杂的网络钓鱼攻击正瞄准依赖Microsoft Active Directory Federation Services(ADFS)进行身份验证的组织,尤其是教育领域。攻击者运用伪造的电子邮件与登录页面盗取用户凭证及多因素身份验证信息,进而执行各种后入侵行动。


•  CISA命令联邦机构在三周内修复Linux内核漏洞
https://www.bleepingcomputer.com/news/security/cisa-orders-agencies-to-patch-linux-kernel-bug-exploited-in-attacks/

本文聚焦于一个高危Linux内核漏洞CVE-2024-53104,该漏洞已被积极利用进行攻击,并且美国联邦机构被要求在三周内修复此安全问题。文章的亮点在于详细分析了这一USB视频类驱动程序中的越界写入弱点如何导致权限提升风险。


•  微软发布PowerShell脚本以更新UEFI证书应对BlackLotus UEFI引导工具
https://www.bleepingcomputer.com/news/microsoft/microsoft-script-updates-bootable-media-for-blacklotus-bootkit-fixes/

微软发布了一款PowerShell脚本,帮助用户和管理员更新可启动媒体以使用新的“Windows UEFI CA 2023”证书。这是为了在年底前强制实施针对BlackLotus UEFI引导工具包的缓解措施做准备的关键步骤。


* 查看或搜索历史推送内容请访问:
https://sectoday.tencent.com/
* 新浪微博账号: 腾讯玄武实验室
https://weibo.com/xuanwulab
* 微信公众号: 腾讯玄武实验室


阅读原文

跳转微信打开

数据外发传输,通过 Sharp4AutoDeploy 自动化搭建代码审计环境和数据传输通道

2025年2月6日 09:09

原创 专攻.NET安全的 2025-02-06 09:09 安徽

在攻击者数据外发传输阶段快速代码审计时,快速搭建Web应用环境是一个常见的需求。Sharp4AutoDeploy 作为一款自动化部署工具,能够简化在IIS上的部署过程,为安全研究人员提供了一个高效、便捷的解决方案。

01. 工具基本介绍



Sharp4AutoDeploy 是一款自动化部署工具,帮助安全研究者将.NET Web 应用或者其他文件快速部署到IIS服务器上。支持通过命令行参数指定应用的名称、编号、端口号以及物理路径,从而实现一键式的部署。这对于快速搭建测试环境进行代码审计或者数据外发传输尤为重要。



02. 工具实战用法



Sharp4AutoDeploy 是一个独立的可执行文件,不需要额外安装或配置。只需将其上传并解压至指定目录即可使用,基本使用格式如下所示:

Sharp4AutoDeploy.exe 应用名 应用编号 http端口号 应用物理路径

此处的应用名表示指定Web应用的名称,可以根据需求设置为任意字符串,编号为了区分不同的部署ID,端口号表示Web开启监听的HTTP端口。

假设要将名为myapp8888的Web应用部署到IIS上,应用编号为8888,使用端口8078,并且应用物理路径为D:\Test\WebAppSample,则可以使用以下命令。

Sharp4AutoDeploy.exe myapp8888 8888 8078 "D:\Test\WebAppSample"

用这条命令会在IIS中创建一个名为myapp8888的站点,设置该站点的端口为8078,如下图所示。

这里将Web应用的物理路径设置为D:\Test\WebAppSample,自动配置IIS,并将应用部署到指定的目录,访问8078端口出现页面,如下图所示。

在进行攻防对抗阶段和代码审计时,Sharp4AutoDeploy 的自动化部署功能大大提高了实战效率。以下是该工具可能存在的几个应用场景

2.1 数据外发传输

Sharp4AutoDeploy 也可以作为渗透测试的一部分。渗透测试人员通常需要在受控环境中外发数据,这个阶段便可以重新启动一个新的Web端口进行数据传递。

2.2 代码安全审计

在进行代码审计时,通常需要将应用程序部署到测试环境中,测试不同的输入和漏洞。Sharp4AutoDeploy 提供了快速部署的功能,可以轻松搭建多个环境,用于不同版本的代码审计或多用户的并行测试。

综上所述,Sharp4AutoDeploy 是一款非常实用的.NET Web 应用自动化部署工具,能够帮助用户快速将应用程序部署到IIS中,适用于安全研究、代码审计、渗透测试等多个领域。文章涉及的工具已打包在星球,感兴趣的朋友可以加入自取。


03. 技术精华内容



从漏洞分析到安全攻防,我们涵盖了 .NET 安全各个关键方面,为您呈现最新、最全面的 .NET 安全知识,下面是公众号发布的精华文章集合,推荐大伙阅读!











04. 加入安全社区



目前dot.Net安全矩阵星球已成为中国.NET安全领域最知名、最专业的技术知识库之一,超 1200+ 成员一起互动学习。星球主题数量近 600+,精华主题 230+,PDF文档和压缩包 300+ 。从Web应用到PC端软件应用,无论您是初学者还是经验丰富的开发人员,都能在这里找到对应的实战指南和最佳实践。


20+专栏文章

星球文化始终认为授人以鱼不如授人以渔!星球整理出 20+ 个专题栏目涵盖 .NET安全 点、线、面、体等知识范围,助力师傅们实战攻防!其中主题包括.NET  内网攻防、漏洞分析、内存马、代码审计、预编译、反序列化、WebShell免杀、命令执行、工具库等等。

海量资源和工具

截至当前,dot.Net安全矩阵星球社区汇聚了 600+ 个实用工具和高质量PDF学习资料。这些资源涵盖了攻防对抗的各个方面,在实战中能够发挥显著作用,为对抗突破提供强有力的支持。

专属成员交流群

我们还有多个成员专属的内部星球陪伴群,加入的成员可以通过在群里提出问题或参与论的方式来与其他成员交流思想和经验。此外还可以通过星球或者微信群私聊向我们进行提问,以获取帮助迅速解决问题。


已入驻的大咖们

星球汇聚了各行业安全攻防技术大咖,并且每日分享.NET安全技术干货以及交流解答各类技术等问题,社区中发布很多高质量的.NET安全资源,可以说市面上很少见,都是干货。

欢迎加入我们

dotNet安全矩阵星球从创建以来一直聚焦于.NET领域的安全攻防技术,定位于高质量安全攻防星球社区,也得到了许多师傅们的支持和信任,通过星球深度连接入圈的师傅们,一起推动.NET安全高质量的向前发展。星球门票后期价格随着内容和质量的不断沉淀会适当提高,因此越早加入越好! 


阅读原文

跳转微信打开

国内最专业、最全面的 [ .NET 代码审计 ] 体系化学习交流社区

2025年2月6日 09:09

专攻.NET安全的 2025-02-06 09:09 安徽

01

.NET漏洞背景

微软的.NET技术广泛应用于全球企业级产品,包括其知名的Exchange、SharePoint等,国内如某友的Cloud、某通的T系列、某蝶的云产品等也广泛采用。各行业核心业务均依赖于此技术。但近期,在国家护网演练中,这些基于.NET的系统频繁遭攻击,问题涵盖任意文件上传、反序列化漏洞、SQL注入、文件下载漏洞、命令执行漏洞等。

一位知名微软专家戏称,国内企业办公应用几乎被漏洞 [翻了个底朝天] ,也显示出国内在.NET代码审计方面的不足,导致应用上线前难以发现潜在风险。因此,掌握.NET代码审计与安全评估技术,对个人技能及国家信息安全均至关重要。

02

星球介绍

星球文化始终认为授人以鱼不如授人以渔!截至目前,星球已推出近100节内容 (还在持续增加),包括70个视频+30份PDF文档我们已将内容细致划分为15个分类,并随新漏洞类型的出现持续扩展。在这里您将学到包括但不限于以下漏洞类型。

详细的内容与结构,请参考下方的星球大纲版块,让我们一起深入探索代码审计与漏洞挖掘的奥秘!

03

星球大纲(部分)

.NET代码审计体系化星球包括但不限于OWASP十大漏洞类型,涉及SQL注入漏洞、文件上传下载漏洞、任意文件操作漏洞、XML外部实体注入漏洞、跨站脚本攻击漏洞、反序列化漏洞、命令执行漏洞、未授权和越权漏洞、第三方组件漏洞等等。

04

基础配套学习

为助力零基础新人轻松踏入.NET代码审计的殿堂,精心准备配备了一套《.NET安全基础入门》星球,加入代码审计后赠送该星球永久免费学习。星球内容覆盖广泛, 视频讲解的方式 作为主要学习桥梁,部分内容图所示。

.NET的基本概念、环境搭建讲起,逐步深入到编程语言、类库使用、面向对象编程、异常处理、文件操作等关键知识点。通过系统而全面的讲解,让初学者从零开始,逐步掌握.NET框架的核心概念、基本原理及实践技能。

05

学完收获

收获一:掌握在不同.NET框架版本的审计思路、步骤与方法,形成全面的代码审计知识体系

收获二:还能为企业提供专业的有偿代码审计服务,不仅巩固了技术能力,还开辟了工资之外的额外收入来源。

收获三:在年度国家级护网行动中,凭借高危漏洞,助力团队在攻防演练中脱颖而出,为个人及团队赢得了荣誉与认可。

收获四:高效掌握.NET安全漏洞审计技巧,参与各大平台漏洞赏金计划,赢得丰厚奖励,如下图所示。

06

星球福利

1. 学习模式: 代码审计知识星球在线录播视频 +后续漏洞挖掘直播、内部专属交流社区答疑解惑;

2. 优享福利:加入.NET代码审计星球后赠送永久dot.Net安全基础入门星球。

欢迎对.NET代码审计关注和关心的同学加入我们 [dot.Net安全代码审计] ,目前已有近 100+ 位朋友抢先预定。

星球门票后期价格随着内容和质量的不断沉淀会适当提高,越早加入越划算! 现在加入星球可享受星球早鸟价,并可领取100元优惠券期待在这里能遇到有情有义的小伙伴,大家聚在一起做一件有意义的事,扫描下方老师二维码了解更多详情。

阅读原文

跳转微信打开

2025 持续防范 GitHub 投毒,分析 Visual Studio 隐藏文件

2025年2月6日 09:09

原创 专攻.NET安全的 2025-02-06 09:09 安徽

在2024年底的网络安全事件中,某提权工具被发现植入后门,攻击者利用 .suo 文件作为隐蔽的攻击方式。由于 .suo 文件是 Visual Studio 项目的隐藏配置文件,通常不为安全研究人员所关注,因此为攻击者提供了潜在的攻击渠道。

初步调查显示,此次攻击事件可能是由东南亚地区的 APT 组织—海莲花所为。该组织以其高度隐蔽性和技术精湛的攻击手段而著称,通常将目标锁定在政府机构、军事单位以及其他高价值目标上,进行精确打击。

2025年为应对这种隐蔽攻击方式,Sharp4SuoExplorer 应运而生。通过对 .suo 文件的深度分析,Sharp4SuoExplorer 能够帮助识别潜在的安全风险,及时发现隐藏的恶意代码或后门,从而防止类似攻击带来的进一步危害。

01. 工具基本介绍



Sharp4SuoExplorer 是一款专门用于逆向解析和查看 .suo 文件内容的工具。该工具通过直观的 GUI 界面,使用户能够轻松地列出 .suo 文件中的所有键名,并查看每个键的具体内容。


02. 工具实战用法



Sharp4SuoExplorer .exe 可以快速列出 .suo 文件中的所有键,支持查看指定键名的内容,内容默认以十六进制显示。

比如,查看包含了.NET反序列化攻击载荷键名为 VsToolboxService 的内容,如下图所示。

综上所述,Sharp4SuoExplorer 是一款强大的工具,可用于逆向分析恶意 .suo 文件,帮助用户识别和防止潜在的钓鱼攻击。通过其直观的 GUI 界面,用户可以轻松地解析和查看 .suo 文件的具体内容,进而发现隐藏的恶意代码、后门或其他恶意数据。

对于安全团队和渗透测试人员来说,Sharp4SuoExplorer 提供了一种有效的方式来防止因 .suo 文件被恶意植入而导致的安全风险。文章涉及的工具已打包在星球,感兴趣的朋友可以加入自取。

03. 技术精华内容



从漏洞分析到安全攻防,我们涵盖了 .NET 安全各个关键方面,为您呈现最新、最全面的 .NET 安全知识,下面是公众号发布的精华文章集合,推荐大伙阅读!











04. 加入安全社区



目前dot.Net安全矩阵星球已成为中国.NET安全领域最知名、最专业的技术知识库之一,超 1200+ 成员一起互动学习。星球主题数量近 600+,精华主题 230+,PDF文档和压缩包 300+ 。从Web应用到PC端软件应用,无论您是初学者还是经验丰富的开发人员,都能在这里找到对应的实战指南和最佳实践。


20+专栏文章

星球文化始终认为授人以鱼不如授人以渔!星球整理出 20+ 个专题栏目涵盖 .NET安全 点、线、面、体等知识范围,助力师傅们实战攻防!其中主题包括.NET  内网攻防、漏洞分析、内存马、代码审计、预编译、反序列化、WebShell免杀、命令执行、工具库等等。

海量资源和工具

截至当前,dot.Net安全矩阵星球社区汇聚了 600+ 个实用工具和高质量PDF学习资料。这些资源涵盖了攻防对抗的各个方面,在实战中能够发挥显著作用,为对抗突破提供强有力的支持。

专属成员交流群

我们还有多个成员专属的内部星球陪伴群,加入的成员可以通过在群里提出问题或参与论的方式来与其他成员交流思想和经验。此外还可以通过星球或者微信群私聊向我们进行提问,以获取帮助迅速解决问题。


已入驻的大咖们

星球汇聚了各行业安全攻防技术大咖,并且每日分享.NET安全技术干货以及交流解答各类技术等问题,社区中发布很多高质量的.NET安全资源,可以说市面上很少见,都是干货。

欢迎加入我们

dotNet安全矩阵星球从创建以来一直聚焦于.NET领域的安全攻防技术,定位于高质量安全攻防星球社区,也得到了许多师傅们的支持和信任,通过星球深度连接入圈的师傅们,一起推动.NET安全高质量的向前发展。星球门票后期价格随着内容和质量的不断沉淀会适当提高,因此越早加入越好! 

阅读原文

跳转微信打开

IDA背后的原理入门(二): 函数大小计算

2025年2月6日 10:02

原创 冲鸭安全 2025-02-06 10:02 北京

简介

我们上一章已经成功的得到了函数的列表:

IDA背后的原理入门(一): 简介&函数识别

现在,我们遇到了一个麻烦: 函数大小计算

可能有一些逆向人认为,直接查找ret即可完成任务。知道了函数开头,直接查找第一次出现的ret就是函数的大小。
但是事实并非如此,并且函数大小计算是一个充满启发性的计算。不是想象中那么容易能算出来的。让我们一步一步的说明为什么

存在的问题

如果我们直接看函数的ret会怎么样?看第一次出现的ret,就能非常轻松的确定是哪个。
如果实际这样做过,你就会发现,大小完全的不准。这是因为各个编译器编译参数不一样,不一定是以ret为函数结尾
比如这个函数:

int test_function(int x) {
    volatile int a = x;
    if (a > 0) {
        for (int i = 0; i < a; i++) {
            if (i * i > a) {
                return a + i;
            }
        }
        return a + 1;
    }
    return a - 1;
}

在clang的情况下,是这样:

test_function(int):
        push    rbp
        mov     rbp, rsp
        mov     dword ptr [rbp - 8], edi
        mov     eax, dword ptr [rbp - 8]
        mov     dword ptr [rbp - 12], eax
        mov     eax, dword ptr [rbp - 12]
        cmp     eax, 0
        jle     .LBB0_8
        mov     dword ptr [rbp - 16], 0
.LBB0_2:
        mov     eax, dword ptr [rbp - 16]
        mov     ecx, dword ptr [rbp - 12]
        cmp     eax, ecx
        jge     .LBB0_7
        mov     eax, dword ptr [rbp - 16]
        imul    eax, dword ptr [rbp - 16]
        mov     ecx, dword ptr [rbp - 12]
        cmp     eax, ecx
        jle     .LBB0_5
        mov     eax, dword ptr [rbp - 12]
        add     eax, dword ptr [rbp - 16]
        mov     dword ptr [rbp - 4], eax
        jmp     .LBB0_9
.LBB0_5:
        jmp     .LBB0_6
.LBB0_6:
        mov     eax, dword ptr [rbp - 16]
        add     eax, 1
        mov     dword ptr [rbp - 16], eax
        jmp     .LBB0_2
.LBB0_7:
        mov     eax, dword ptr [rbp - 12]
        add     eax, 1
        mov     dword ptr [rbp - 4], eax
        jmp     .LBB0_9
.LBB0_8:
        mov     eax, dword ptr [rbp - 12]
        sub     eax, 1
        mov     dword ptr [rbp - 4], eax
.LBB0_9:
        mov     eax, dword ptr [rbp - 4]
        pop     rbp
        ret

开了-o2优化后,会变成这样

test_function(int):
        mov     dword ptr [rsp - 4], edi
        cmp     dword ptr [rsp - 4], 0
        mov     eax, dword ptr [rsp - 4]
        jle     .LBB0_7
        test    eax, eax
        jle     .LBB0_6
        xor     eax, eax
.LBB0_3:
        mov     ecx, eax
        imul    ecx, eax
        cmp     ecx, dword ptr [rsp - 4]
        jg      .LBB0_4
        inc     eax
        cmp     eax, dword ptr [rsp - 4]
        jl      .LBB0_3
.LBB0_6:
        mov     eax, dword ptr [rsp - 4]
        inc     eax
        ret
.LBB0_7:
        dec     eax
        ret
.LBB0_4:
        add     eax, dword ptr [rsp - 4]
        ret

非常明显,我们多了几个RET,这是因为:
不开优化(-O0)时:

编译器会按照代码的字面顺序直接翻译
所有返回语句通常会跳转到函数末尾的一个公共返回点
这样做便于调试,因为执行路径更直观

开启优化(-O2)时:

编译器会尝试优化执行路径,减少指令数量
如果发现直接返回比跳转到公共返回点更高效,就会生成多个ret
这样可以省去额外的跳转指令

所以,直接找ret不可取,并且导致了一个麻烦的结论

所有软件对函数大小的计算,都是启发性的,并不能精准识别.

我们需要一个更加聪明的办法.

聪明的办法

要准确计算函数大小,我们需要分析函数的控制流。主要思路是:追踪所有可能的执行路径,直到找到所有可能的结束点。

具体来说,我们需要:

  1. 追踪所有的跳转指令(jmp, jz, jnz等)

  2. 分析条件分支创造的多个执行路径

  3. 找到每个路径的终点(ret指令)

  4. 取所有终点中地址最大的那个作为函数结束位置

这将会尽可能的找到我们需要的函数方向.

具体实现

基本的实现流程如下:

function FindFunctionEnd(startAddress):
    1. 反汇编当前地址的指令
    2. 如果是返回指令,记录当前位置+指令长度
    3. 如果是跳转指令:
       - 验证跳转目标的合法性
       - 递归分析跳转目标
       - 继续分析当前路径
    4. 返回找到的最远结束地址

为了避免重复分析和无限递归,我们需要:

  1. 使用哈希表记录已分析过的地址

  2. 检查跳转目标是否在合理范围内

  3. 防止向低地址的非法跳转

关键点处理

跳转指令分析:

if (isJump(instruction)) {
    // 获取跳转目标
    targetAddress = getJumpTarget(instruction);
    // 验证目标地址
    if (isValidTarget(targetAddress)) {
        // 递归分析新路径
        endAddr = max(endAddr, FindFunctionEnd(targetAddress));
    }
}

这样会追踪所有可能的执行路径

示例代码:
if (x > 0) {
    return 1;
} else {
    return 2;
}
汇编代码:
    cmp eax, 0
    jle else_branch   // 条件跳转,创建两条路径
    mov eax, 1
    ret              // 路径1的结束点
else_branch:
    mov eax, 2 
    ret              // 路径2的结束点

如果不分析跳转,就会漏掉else分支的ret,导致函数大小计算错误

另外这个不允许向上跳转,向上跳转则认为这个跳转没意义,我们假设代码是从下到上的.因此还需要地址合法性检查

地址合法性检查代码:

bool isValidTarget(targetAddress) {
    // 不允许向低地址跳转
    if (targetAddress < functionStart) 
        return false;
    // 不允许跳出代码段
    if (targetAddress > codeSegmentEnd)
        return false;
    // 避免重复分析
    if (alreadyAnalyzed(targetAddress))
        return false;
    return true;
}

地址合法性检查存在的意义是,防止向下跳转导致的误判,如下所示:

function_A:
    ...
function_B:
    jmp function_A   // 如果允许向下跳转,可能误判为function_B的一部分

以及避免跨段访问

.text:
    function_start:
        jmp data_section  // 不允许跳转到数据段
.data:
    data_section:
        db "Hello"

这样,我们终于能安心的寻找最后一个RET了:

测试

上面的代码,IDA里面大小是0x50:

而以上的实现,也是0x50:

如果直接看单独ret的存在,我们是没办法这样匹配的

未完待续

下一章,我们将介绍如何做程序控制流访问控制.当文章阅读过1000就马上更新!

另外加入了鸭鸭粉丝俱乐部的各位,可以在本公众号的微信群询问鸭哥要关于本章的DEMO以及指导(如果对做IDA感兴趣的话).感谢各位兄弟们的支持!

如果没有加入,速速私聊加入.

阅读原文

跳转微信打开

❌
❌