如何利用 LTE/4G 伪基站+GSM 中间人攻击攻破所有短信验证
这次公开课请来的嘉宾对自己的简介是:
连续创业失败的创业导师;
伪天使投资人;
某非知名私立大学创办人兼校长;
业余时间在本校通信安全实验室打杂。
自从他在黑客大会上演讲《伪基站高级利用技术——彻底攻破短信验证码》后,黑产就盯上了这项技术。他们给能仿制这项攻击方法的人开价保底一个月 200 万元,外加分成。
这个攻击方法其实1秒钟可以血洗很多个银行账号。他说,保守估计一小时能带来 7000 万元的黑产产值。但是,他并不是为了钱。他的原话是:“短信验证码这种安全机制朽而不倒,我想把它推倒!”
他就是雷锋网宅客频道此前曾报道过的黑客 Seeker 。上次,Seeker 觉得自己和雷锋网聊了太多“花边八卦”,这次公开课,他决定好好聊聊“纯技术”(开玩笑!依然不会放过你的八卦) ,谈谈如何利用 LTE/4G 伪基站+GSM 中间人攻击攻破所有短信验证,以及应对攻略。
嘉宾介绍
Seeker,中国海天集团有限公司创始人兼CEO,IT老兵,网络安全专家,1994年起创业,几经起伏,至今仍在路上,主业是开办私立大学,研发互联网和网络安全类产品,提供IT技术培训和咨询服务。Seeker对新技术非常敏感,13岁开始编程,初中开始玩无线电通信,之后一直保持在网络安全和无线通信领域的研究兴趣。
问答精华回顾
1. 首先请Seeker老师进行简单的自我介绍。
Seeker:我是一个连续创业者,1994年大学毕业,当年在北京中关村创办第一家公司,从此一直在创业路上,创业方向主要是IT、互联网和教育,业务几经起落和调整,目前公司业务主要是开办私立大学,研发互联网和网络安全类产品,提供IT技术培训和咨询服务。
我一直对新技术、新管理理念、新创业方法等怀有浓厚兴趣,也追踪很多科技领域的发展,算是个意识领先、比较新潮的技术派。13岁开始编程,初中开始玩无线电通信,是电脑神童和少年HAM,之后一直保持在网络安全和无线通信领域的研究兴趣。工作的原因,我主要活跃在教育圈、创业圈和投资圈,但是业余时间,我大部分用于网络安全和无线通信领域的研究。
2. 为了不招来警察蜀黍,请在合法的基础上详细介绍一下LTE重定向+GSM中间人攻击的方法。
Seeker:我实现的这种攻击方法,能够证明短信验证码这种安全认证机制可被轻易突破,理应尽快放弃并使用更安全的认证机制。
先简单说说原理:攻击者可通过架设 LTE 伪基站吸引目标 LTE 手机前来附着(Attach),在附着过程中通过 RRC 重定向信令将该手机重定向到攻击者预先架设的恶意网络,通常是 GSM 伪基站,然后攻击者用另一部手机作为攻击手机,以目标手机的身份在运营商现网注册,从而在现网拥有目标手机的全部身份,能够以目标手机的身份接打电话、收发短信,这就是所谓 GSM 中间人攻击。这种攻击方法能够拦截掉发给目标手机的所有短信,因此可以攻破以短信验证码作为身份认证机制的任何网络服务,包括手机银行和手机支付系统。
需要说明的是,LTE RRC 重定向,不止可以对接 GSM 伪基站,还可以对接 CDMA 伪基站,以及破解过的 3G、4G Femto Cell,同样可以实现中间人攻击。即使对接 GSM,某些情况下也可以不架设伪基站,直接对接现网 GSM 基站,然后使用半主动式方式来拦截短信,不用中间人攻击也达到同样的短信拦截效果。
LTE 重定向+ GSM 中间人攻击的适用范围广,破坏性强。范围广,是通过LTE重定向攻击来实现的,因为LTE 伪基站覆盖范围内的 95% 以上的 LTE 手机会受影响。破坏性强,是通过中间人攻击这种形式,等于手机的电话短信的全部控制权在机主无法察觉的情况下转到了攻击者手里,不止可以拦截短信验证码,还可以组合出花样繁多的各种利用方法。
LTE重定向攻击的首次公开,是在今年5月出版的由 360 Unicorn Team 合著的新书《无线电安全攻防大揭秘》中简短提到,而在在国际上的第一次公开展示,是在 5 月底阿姆斯特丹的 HITB 上,由 360 Unicorn Team 的黄琳博士完成的。黄琳演示了一部中国联通的 iPhone 手机,被 LTE 伪基站重定向到 GSM 伪基站,验证了 LTE 重定向攻击的可能性。所以,我并不是第一个发现这个 LTE 可利用漏洞的人。
GSM 中间人攻击的历史更悠久,我既不是第一个发现的人,也不是第一个实现这种攻击方法的人。
GSM 中间人攻击在国内 2~3 年前就有黑产应用,最常见的就是号码采集系统,用来采集某位置附近的 GSM 手机号码,通过 GSM 伪基站+攻击手机劫持附近的 GSM 手机用户的身份去拨打一个特定电话号码,然后汇总该号码上的未接来电。这样在该位置附近经过的人的手机号码就不知不觉的泄露了。还有的黑产在劫持手机用户身份后发短信订阅某些SP服务,因为有明显的费用产生,用户容易察觉到。更隐蔽的做法是用来刷单,拿到手机号码后短时间保持身份劫持状态以拦截短信,然后迅速的完成网络用户注册开户或者某些敏感操作的短信确认,就可以实现批量自动注册用户和刷单了。还有今年发现的在国际机场附近劫持手机身份,然后在国外运营商网络里拨打主叫高付费电话的利用方式,就更恶性了。
我发现理论上可以把 LTE 重定向攻击和 GSM 中间人攻击这两者组合起来,形成一个广泛适用的,威力强大的攻击工具。以我对黑产的观察,这种工具迟早被黑产研发出来并加以利用。电信协议漏洞的时效性非常长,因为需要照顾现存的几十亿部手机终端。电信协议漏洞一旦被黑产利用,危害将广泛而持久。我个人预测,黑产将首先瞄准短信验证码这种已被证明不安全的认证机制,并先从手机银行和手机支付系统入手。各金融机构和网络服务商应充分警醒,早做准备,毕竟部署另一套身份认证系统需要不少时间。为了证明这种攻击不只理论上成立,而且很快会真实出现,让业界尽早放弃短信验证码,我编程实现了这种攻击组合,并在 8 月的 KCon 黑客大会上做了演讲《伪基站高级利用技术——彻底攻破短信验证码》。今天这次公开课,也是基于同样目的,就是再推一把短信验证码这个朽而不倒,很不容易推倒的认证机制,并提出替代解决方案。
遵循负责任披露(Responsible Disclosure)模式,我不会对外发布攻击源代码和实现的具体细节,避免被黑产从业者利用。但是我仍会披露足够多的信息,使各金融机构和网络服务商能充分重视,了解到安全威胁的严重性并准备替代解决方案。
以上是背景信息,下面进入正题。以下内容假设群友已初步了解 GSM 和 LTE 的基础知识。
LTE RRC重定向在现网中频繁使用,多见于LTE手机接打电话时的电路域回落(CSFB),是指LTE系统通过 RRCConnectionRelease 消息中的 redirectedCarrierInfo 指示手机/用户设备(UE)在离开连接态后要尝试驻留到指定的系统/频点。UE会先释放掉当前连接,然后重定向到指示的频点重新建立连接。
LTE RRC 重定向攻击的原理:LTE 伪基站吸引 LTE 手机前来附着,在收到手机发来附着请求(Attach Request)之后,安全流程启动之前,直接下发NAS消息拒绝附着(Attach Reject),紧接着下发 RRCConnectionRelease 消息,该消息携带 redirectedCarrierInfo 信息,指示手机关闭当前连接,然后转到攻击者指示的网络(2G/3G/4G)和频点(ARFCN),通常是预先架设好的恶意网络,去建立连接,从而方便攻击者实施下一步攻击。
LTE RRC 重定向攻击成立的原因:LTE 下手机(UE)和基站(eNodeB)应该是双向认证的,按理说不应该出现未认证基站真伪,就听从基站指令的情况。3GPP制定协议标准时,应该是在可用性和安全性不可兼得的情况下选择了可用性,放弃了安全性,即考虑发生紧急情况、突发事件时可能产生大量手机业务请求,网络可用性对于保证生命、财产安全至关重要,需要能及时调度网络请求,转移压力,这时候大量的鉴权、加密、完整性检查等安全措施可能导致网络瓶颈,因此被全部舍弃。
LTE 伪基站的搭建:硬件:高性能PC、bladeRF(或USRP B2x0)、天馈系统;软件:Ubuntu Linux、OpenAirInterface。相比 OpenLTE,OAI 的代码要成熟稳定的多,而且同时支持 TDD 和 FDD LTE 。
LTE RRC重定向攻击的编程实现:OAI(OpenAirInterface)代码中定义了 R8 和 R9 的 RRCConnectionRelase, 但是没有调用逻辑; 需要修改 MME 和 eNodeB 的代码,增加相应逻辑。
下面介绍 GSM 中间人攻击的原理:在目标 GSM 手机和运营商 GSM 基站之间插入一台GSM伪基站和一部GSM攻击手机。在目标附近启动伪基站,诱使目标手机来驻留(Camping),同时调用攻击手机去附着(Attach)现网的运营商基站,如果现网要求鉴权,就把鉴权请求(Authentication Request)通过伪基站发给目标手机,目标手机返回鉴权响应 ( Authentication Response ) 给伪基站后,该鉴权响应先传给攻击手机,攻击手机再转发给现网,最后鉴权完成,攻击手机就以目标手机的身份成功注册在现网上了。之后收发短信或接打电话时,如果现网不要求鉴权,就可以由攻击手机直接完成,如果需要鉴权,就再次调用伪基站向目标手机发起鉴权请求,之后把收到的鉴权响应转发给现网的运营商基站。
GSM 伪基站的搭建:硬件:普通 PC、USRP B2X0 + 天线(或Motorola C118/C139 + CP2102)。软件:Ubuntu Linux、OpenBSC。OpenBSC:由Osmocom发起并维护的一套高性能、接口开放的开源GSM/GPRS基站系统。
GSM 攻击手机的搭建:硬件:普通PC、Motorola C118/C139 + CP2102。软件:Ubuntu Linux、OsmocomBB。OsmocomBB:基于一套泄露的手机基带源代码重写的开源的GSM基带项目,只能支持TI Calypso基带处理器。被用来参考的那套泄露源代码不完整,只有90+%的源代码,部分连接库没有源代码,而且也缺少DSP的代码。OsmocomBB 被设计成黑客的实验工具,而不是供普通用户使用的手机系统,其Layer 2和3是在PC上运行的,方便黑客编写和修改代码,实现自己的某些功能。
GSM 中间人(MITM)攻击的编程实现(OpenBSC):实现伪基站的基本功能;将附着手机的IMSI发给MITM攻击手机;接收来自攻击手机的鉴权请求,并向目标手机发起网络鉴权;将从目标手机接收到的鉴权响应发回给攻击手机。
GSM 中间人(MITM)攻击的编程实现(OsmocomBB):接收伪基站发来的 IMSI ;以此 IMSI 向对应运营商网络发起位置更新(Location Update)请求;如果运营商网络要求鉴权,则将收到的鉴权请求发给伪基站;接收伪基站发回的鉴权响应,转发给运营商网络,完成鉴权;开始使用仿冒身份执行攻击向量:接收/发送短信, 拨打/接听电话。如果某个操作需要鉴权,则重复之前的鉴权流程。
LTE RRC 重定向攻击的运行截图:
GSM MITM 攻击的运行截图:
黑产可能的利用方式(轻量级):背包、小功率、小范围。每次影响少数几人,属于针对性攻击。
图中的 USRP B200mini 用来实现LTE伪基站,一部 Motorola C139 用来实现 GSM 伪基站,一部 Motorola C118 用来实现攻击手机。
黑产可能的利用方式(普通):架高/车载/背包、大功率、大范围。影响很多人,属于无差别攻击。LTE 伪基站将能覆盖半径 300 米内 95% 的LTE手机,峰值性能每秒可重定向 15-20 部 LTE 手机。每台 LTE 伪基站,需要4-5台GSM伪基站和100-150部攻击手机来对接。GSM 伪基站以合适的参数和方式架设,覆盖范围非常大,LTE手机一旦被LTE伪基站吸引并重定向到 GSM 伪基站,其驻留时间将足以完成几十次短信验证码的接收。攻击手机因为是通过 UDP 协议与 GSM 伪基站协同工作,理论上可以分散在互联网覆盖的任何地方。一旦这样的一套攻击系统被黑产架设起来,最坏的情况,将能以每秒 20 个手机用户的速度血洗他们的所有银行帐户,最好的情况,是被黑产用来刷单,每秒可完成约 100 次帐户注册。这样的系统威力很强,已超越黑产过去所拥有的各种攻击手段。
3. 这种攻击方法造成的后果是?
Seeker:
1) 影响全部4G/LTE手机,快速简单粗暴。
2) 信息泄露。
3) 资金损失。
4) 如果被黑产利用,1秒可能血洗20部手机绑定的全部银行账户,1小时就可转款7000万元。
4. 有没有什么可以预防这种攻击的技术手段?
Seeker:普通用户没有直接的办法。金融机构和网络服务商应尽快放弃短信验证码这种不安全的安全认证机制。
5. 电信业的朋友知道你们这种攻击方法后是什么态度?
Seeker:没有得到官方的表态。电信业的朋友个人观点,主要是说电信是管道,是基础设施,应用安全应由商家自己负责解决。这跟TCP/IP协议和互联网的发展历史一样,从最初完全没有安全机制,到部分协议有安全机制,协议在不断升级完善,但是商家仍然都默认互联网不安全,从而必须自己在应用层设有安全机制。同理,电信网络也不能被信任,应在假设电信网络不安全的前提下设计应用层的安全机制。
6. 为什么专门研究攻破短信验证码?
Seeker:
1) 危害大:各种重要操作普遍使用短信验证码作为安全机制;
2) 短信验证码朽而不倒,需要推倒;
3) 补充说明: 这只是我更广泛的渗透入侵研究的一部分,算是过程中的副产品。演示攻破手机银行账户只是为了证明危害性。
7. 短信验证码都被攻破了,那我们怎么办?谁可以负责任地出来做点什么?
Seeker:
1) 解决方案:使用真正的双因子认证系统,然后尽可能照顾用户的易用性。
2) 普通用户:等待。
3) 应用服务提供商:未雨绸缪,技术准备。
4) 银行/电信等:商机,提供双因子认证的基础设施服务。
5) 我:提供解决方案和咨询服务。
8. 为什么说手机是渗透入侵最好的突破口?
Seeker:
1) 手机是获得个人信息/敏感数据/权限的通道。
2) 手机经常被携带进出办公区域。在办公区域外,就是突破的好时机。
3) 手机可被多方式多层次渗透突破。
4) 手机早已是渗透入侵大型网路时最好的突破口,只不过之前的入侵多是以互联网为通路,多半是利用WIFI完成木马植入,植入的效率不高。
9. 能不能说说手机还有哪些安全隐患?
Seeker:
1) SIM卡:OTA推送小程序;
2) 基带:蜂窝数据网络;
3) 操作系统:蜂窝数据网络/WIFI;
4) 应用层:蜂窝数据网络/WIFI;
5) 以上是远程,如果能物理拿到手机,BootLoader/TrustZone/HLOS/DRM……
10. 电信网络还有哪些安全问题?
Seeker:
1) 核心网/Femto Cell的问题;
2) 7号信令(SS7-MAP)/LTE Diameter互联的问题;
3) VoLTE的问题。
11. 听说有黑产在找你,能不能详细说说这中间的故事?
Seeker:因为我在 KCon 的那个演讲的 PPT 里留过微信号,有的黑产业者看完后就来问我能不能合作……几乎每天都有吧。
12. 现在关于这个领域的黑产到底是怎样的规模?仿制你的技术的门槛在哪里?
Seeker:黑产规模没有权威数字,我也不清楚。仿制的门槛还是有一些,需要熟悉电信协议+基站射频硬件+软件开发的一支研发团队。黑产现在还没到养研发团队的阶段,研发都是单兵在做,要突破就需要一段时间了。
13. 你研究这些是出于爱好还是?能抵御金钱的诱惑吗?
Seeker:
1) 纯粹是爱好,我喜欢研究军事/情报机关神秘技术的原理并尝试自己实现。
2) 也是创业压力的释放,数字世界比真实世界更容易掌控。
3) 主业是创业。从挑战的角度,创业成功更具挑战。从更广泛的角度,社会本身是个大系统,是施展才华的更大战场。
4) 本人笃信社会价值创造理论,不创造社会价值的事都走不远。
14. 最近在研究什么不违法的新技术?违法的咱们就别说了。
Seeker:
1) 开源移动通信项目,基础/平台性质;
2) 4G/5G安全测试平台,测试基带安全;
3) 定位和攻击伪基站;
4) 运营商安全路测,测试基站配置隐患,众包方式。
15. 主业是商人,业余是这么牛的黑客,能不能传授一下经验——业余时间如何成功地钻研黑客业务?
Seeker:
1) 没什么经验。人的精力都是有限的,我在黑客技术上的突破,通常发生在创业失败或主业的低谷时期。所以,根据目前我的技术表现,可以很容易的反推出我在企业发展上遇到了困难。
2) 保持技术不落伍,我有些经验:掌握原理看透本质,坚决拿下生命周期长的基础原理/核心技术,不在那些快速变化的浮华外表和细枝末节上浪费时间。
3) 另外补充一下,我不认为自己是商人。成功的企业家一定同时是成功的商人,但成功的商人不一定是成功的企业家。我虽然还算不上是成功的企业家,但从我决定创业的第一天,就是受企业家精神的驱动。
4) 之前我说过自己是个技术派,所以我以泛技术的视角来看待这个世界,我认为研发是技术,营销是技术,财务是技术,管理是技术,创业也是技术,这个世界就是一个技术的世界,只要是技术的,都应该不难掌握。如果说黑客技术是在一个比较窄的领域的一种智力游戏,那么在这个广阔的世界里创业和竞争,就更是一种有挑战有成就感的智力游戏。我花了更多精力在研究怎么做企业,比投在安全领域的精力多多了,从技术角度看已掌握了做企业的很多知识,按理说早该有所建树了。后来我发现我错了,这个世界是个复杂系统,而且很多东西比如管理即是技术同时也是艺术。复杂系统包含着不确定性,不是简单的逻辑推演成立结果就必然成立,这个跟黑客的数字世界是不一样的。所以,当我在现实世界受挫之后,跑回到数字世界去寻找 100% 掌控的感觉,也算是一种心理治疗吧。
16. 之前你还说过喜欢当面和同业人员交流,上次去360独角兽实验室,说了什么了不得的事情?
Seeker:
1) 我喜欢遍寻天下高手交流切磋技术,经常陌生拜访认识新朋友。
2) 国内研究无线安全的氛围不浓,难得有一个专门研究无线安全的团队,大家惺惺相惜。
3) 答应担任独角兽团队的荣誉顾问,未来可能会有研究合作。
17. 为了表明此次讲座确实是为了建设和谐社会,请再和谐地说说自己做黑客的初衷以及以后的想法。
Seeker:
1) 本次讲座是为了推倒短信验证码这种不安全的认证机制,也许推倒很困难,但总要有人推。
2) 黑客技术只是智力游戏,是业余爱好。这个世界终究是机构比个人更有力量,建设比破坏更有价值。我更渴望做的是创建一个生态型经济组织,专注某一自己擅长领域的社会价值创造,以共同愿景和高效率的价值创造来吸引和凝聚社会资源为自己所用,组织应能自我学习成长变异进化,并最终能真正推动所在领域的社会进步。这个野心和愿景更吸引我。
3) 打击黑产,不遗余力。
4) 如有战事,当为国效力。
5) 愿各种形式支持安全领域的创业公司。
18. 想对宅客频道的读者说什么?
Seeker:
1) 黑产没未来,回头是岸。
2) 建设永远比破坏更有价值,安全本身和安全以外的创新研发需要建设型人才。
3) 希望有更多的人来玩无线通信和通信安全。
4) 如果你有兴趣一起玩通信安全,有能力和精力一起做无线通信领域的开源项目研发,请跟我联系,我的微信:70772177。
读者提问:如果短信验证码的机制不安全,哪些验证方式是相对可靠,能替换它的?
Seeker:这个问题早有答案:就是双因子或多因子认证。问题在于过份照顾用户体验和竞争导致用户数增长的压力,使得商家普遍不愿意第一个部署双因子认证系统。谁能提供一个不显著降低用户体验的安全认证系统,肯定会有很大的商机。
读者提问:手机Kali怎么攻击?(简单探讨下理论吧,防止警察蜀黍追捕)
Seeker:安卓手机上安装NetHunter后,就是一部黑客手机,经常用做WIFI攻击,USB口插上SDR可以做GSM伪基站,但是不足以支持LTE。
读者提问:如何评价360在 DEF CON 上展示如何黑掉 4G LTE 手机?
Seeker:很好,为国争光,中国人适合做安全,国际黑客大会上理应有更多中国黑客去分享。
如何利用 LTE/4G 伪基站+GSM 中间人攻击攻破所有短信验证的更多相关文章
- 【GSM】GTM900C的应用——短信
虽说GSM已经很老旧,但其低廉的价格,非常适合一些需要小数据上网传输和短信等功能的应用场合. 不知道GSM能否像51单片机一样,在低端应用中长久不衰.GTM900C发送短信,支持两种模式,TXT和PD ...
- 利用ARP欺骗进行MITM(中间人攻击)
ARP欺骗主要骑着信息收集得作用,比如可以利用欺骗获取对方流量,从流量分析你认为重要得信息 0X01 了解ARP Arp协议 ARP(Address Resolution Protocol,地址解析 ...
- 利用twilio进行手机短信验证
首先要注册 twilio 账号但是由于twilio人机验证用的是Goole所有注册需要FQ 完成后去免费获取15元使用 然后 pip install twilio 注册完成后会在个人首页显示你的免费金 ...
- 黑客炼金术士 Seeker:可以攻破 4G 摸到你短信,还要为朝阳群众提供谍战工具
在北京上地的一家咖啡馆里,我在等待黑客 Seeker 的到来. 我对黑客 Seeker 颇有期待.他曾在黑客大会 KCon 上演讲<伪基站高级利用技术——彻底攻破短信验证码>,介绍利用 L ...
- android安全问题(八)伪造短信(利用原生android4.0漏洞)
导读:本文利用android4.0的一个原生漏洞来伪造短信.无须声明任何权限即可伪造发送方为任何号码的短信给用户. android4.0发布已经是很久很久很久很久以前的事情了,这个漏洞早就报了出来,之 ...
- Android -- 利用ContentProvider 读取和写入短信
1. 读写短信 示例代码 均需要先获得读写短信的权限 <uses-permission android:name="android.permission.WRITE_SMS" ...
- C#利用Web Service实现短信发送(转)
通过编程方式实现短信息的发送对很多人来说是一件比较烦杂的事情,目前一般的解决方法是通过计算机和手机的连线,通过可对手机编程的语言编写相关的手机短信息程序来实现,而这种方法对于一般人来说是很难达到的,因 ...
- 利用阿里大于接口发短信(Delphi版)
阿里大于是阿里通信旗下产品,融合了三大运营商的通信能力,提供包括短信.语音.流量直充.私密专线.店铺手机号等个性化服务.每条四分五,价钱还算公道,经老农测试,响应速度非常快,基本上是秒到.官方文档提供 ...
- Unity利用SMSSDK实现短信验证码(附代码)
最近一直在研究如何给app更多实用性的功能,在app进行登录或者注册时,为了方便用户更加快捷的完成登录功能,所以就决定采用短信验证码的方式进行验证登录.在学习的过程中,先使用了Mob的短信服务进行短信 ...
随机推荐
- 日期计算、正则、sequence、索引、表连接、mybatis
************************** mybatis ******************************************* #{} 的参数替换是发生在 DBMS 中, ...
- 怎样从外网访问内网DB2数据库
外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...
- 自动化测试系列:如何实现Selenium自动化读取H5手机缓存
更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6890675.html 前言: 由于Se ...
- Hadoop-3.0.2 覆盖源代码生效
一.需求背景 基于业务需求,需要修改hadoop源码,将局部源代码修改后,放在自己的工程目录下,由于其相同的路径,想要覆盖掉源码对应部分 二.环境背景 IDEA下,编辑MapReduce任务,打包提交 ...
- ckeditor5 增加居中alignment
https://ckeditor.com/docs/ckeditor5/latest/builds/guides/integration/installing-plugins.html 克隆下来 gi ...
- LRU的实现
https://blog.csdn.net/elricboa/article/details/78847305 未看懂https://zhuanlan.zhihu.com/p/34133067
- 力扣(LeetCode)463. 岛屿的周长
给定一个包含 0 和 1 的二维网格地图,其中 1 表示陆地 0 表示水域. 网格中的格子水平和垂直方向相连(对角线方向不相连).整个网格被水完全包围,但其中恰好有一个岛屿(或者说,一个或多个表示陆地 ...
- localStorage(本地存储器)、sessionStorage(会话存储)
设置:localStorage.setItem("token", JSON.parse(res).data.token); 获取:that.token = localSto ...
- yii2restful规范的api使用
说明:restful是一套优秀的接口调用规范. 使用规范: 1,安装yii2 使用composer安装 安装完 Composer,运行下面的命令来安装 Composer Asset 插件: php c ...
- part4:素数判别
法一: √n判别 这个的话就是暴力了吧,不过只能判别单个数是不是质数,而且很大的话会爆 //没有代码qwq(不想写 法二:埃式筛法 O(nloglogn)判别 直接代码好不啦: ],n,num; ]; ...