《Web安全攻防》学习笔记

  • 收集信息与工具配置
    • SQL MAP
    • Burp Suite
    • Nmap
  • XSS漏洞
  • CSRF漏洞
  • SSRF漏洞
  • 文件上传漏洞

收集信息与工具配置

  1. 收集子域名信息
    子域名也是二级域名,,是指顶级域名下的域名。一般主域名都是重点防护区域,所以可以尝试接近子域名,然后想办法接近真正的目标。

  2. 证书透明度(CT)是指证书授权机构(CA)的一个项目,证书授权机构会将每个SSL/TLS证书发布到公共日志中。重点来了,一个SSL/TLS整数通常会包含域名、子域名和邮件地址,所以也可以通过这种方法来获取有用的信息。

  3. CMS(Content Management Syatem)又称整站系统或文章系统。利用它可以定期更换数据来维护网站。

  4. CDN
    内容分发网络,主要解决因传输距离和不同运营商结点造成的网络速度性能低下的问题。也就是一组在不同运营商之间的对接结点上的高速缓存服务器,把客户经常访问的静态数据资源直接缓存到结点服务器上,当用户再次请求时,会直接分发到在离用户近的结点服务器上响应给用户,当用户有实际数据交互时才会从远程Web服务器上响应。

SQL MAP

  1. 判断是否存在注入
    sqlmap.py -u xxx
    当注入点后的参数大于等于两小时,需加双引号
    sqlmap.py -u “xxx”
  2. 判断文本中的请求是否存在注入
    txt文件中是一个Web数据包,此时从文件中加载HTTP请求,SQL MAP就可以获取HTTP请求。
    sqlmap.py -r desktop/xx.txt
    其中-r一般在存在cookie注入时使用
  3. 查询当前用户下的所有数据库
    确定网页存在注入后,可以查询当前用户下的所有数据库
    sqlmap.py -u xxx –dbs
  4. 获取数据库中的表名
    该命令作用是查询完数据库后,查询数据库中的所有表名。
    sqlmap.py -u “xxx” -D dkeye --tables
    若不加上-D参数指明某一个具体的数据库,SQL Map会列出数据库中所有的表名(dkeye是数据库名)
  5. 获取表中的字段名
    该命令作用于查询完表明之后,查询该表中所有的字段名。
    sqlmap.py -u “xxx” -D dkeye -T user_info –columns
    user_info是dkeye数据库中的其中一个表
  6. 获取字段内容
    查询完字段名之后,使用该命令可以获取该字段种具体的数据信息
    sqlmap.py -u “xxx” -D dkeye -T user_info -C username,password –dump
    需要下载dkeye数据库中user_info表中username password的值
  7. 获取数据库的所有用户
    该命令是列出数据库所有用户名。在当前用户有权限度去包含所有用户的表的权限时,使用该命令就可以列出所有管理用户
    sqlmap.py -u “xxx” –users
  8. 获取数据库用户的密码
    如果当前用户有读取包含用户密码的权限,SQL Map会先列出用户,然后列出Hash,并尝试破解
    sqlmap.py -u “xxx” –password
  9. 获取当前网站数据库的名称
    使用这个命令可以获取该网站正在使用的数据库名称
    sqlmap.py -u “xxx” –current -db
    current:当前的
  10. 获取当前网站数据库的用户名
    sqlmap.py -u “xxx” –current-user

参数详解

  1. –level 5:探测等级
  2. –is-dba :当前用户是否为管理权限
  3. –roles:列出数据库管理员角色
    仅适用于当前数据库时Oracle时。也可以使用-U参数查看指定用户的角色
  4. –referrer:HTTPReferer头
    当—level参数设定为3或3以上时,可以使用该命令进行欺骗
    如:–referer http://www.baidu.com
  5. –sql-shell:运行自定义SQL语句
  6. –os-cmd,–os-shell:运行任意操作系统命令
  7. –file-read:从数据库服务器中读取文件
  8. –file-write –file-dest:上传文件到数据库服务器中
    文件可以是文本、二进制

Burp Suite

  1. 因为Burp Suite是在JAVA环境上运行,首先需要下载JAVA环境。然后就可以下载Burp Suite了,从官网上下载,但是下载超慢,建议复制下载地址到迅雷上下载。
  2. 下载完成后设置认可CA证书和网页代理。有大佬们建议打开网页代理和网页安全代理,但是当我打开网页安全代理时,浏览器变成了这样

    咳咳,好的吧,Safari直接拦截了,关闭网页安全代理
  3. Burp Suite 是以拦截主力的方式,拦截所有通过代理的网页流量如客户端的请求数据、客户端的返回信息等。主要拦截HTTP和HTTPS协议的流量,通过拦截,Burp Suite一种坚韧的方式对客户端的请求数据、服务端的返回信息作处理,进行安全测试。
    主要版块:

    1. Proxy
      通过代理进行拦截、查看所有客户端和服务端之间的数据传输。
    2. Spider
      蜘蛛爬行功能可以帮助我们了解系统的结构,Spider爬取到的内容将 在Target中显示。
    3. Decoder
      是Burp中自带的编码解码及散列转换工具,能对原始数据进行各种编码格式和散列的转换。
    4. Inturder
      可以对Web应用程序进行自动化攻击。
      工作原理:Interder在原始请求数据的基础上,通过修改各种请求参数获取不同的请求应答。在每一次请求中,Interder通常会携带一个或多个有效的payload,在不同位置进行攻击重放,通过应答数据的对比分析获得特征数据。
      sniper模式
      使用于单一的Payload组。适用于对常见的漏洞中的请求参数单独进行Fuzzing测试。
      Batter ram模式
      使用于单一的Payload组,重复Payload并一次性把所有相同的Payload放入指定的位置中。适用于将相同的输入放入不同的位置。
      Pitchfork模式
      使用多个Payload组,攻击会迭代所有的Payload组,并放入每一个定义的位置中。适用于在不同的位置中需要插入不同但相似输入的情况。
      Cluster bomb模式
      使用多个Payload组,每个定义的位置中有不同的Payload组。适用于在位置中需要不同且不相关或者未知输入攻击的情形。如果对用户的用户名和密码进行破解,需要同时选中pass和user两个参数,可以选用这种模式。
    5. Repeater
      是一个手动修改、补发个别HTTP请求,并分析他们的相应的工具。
    6. Comparer
      主要提供一个可视化的差距对比功能,来对比分析两次数据之间的区别。使用到的情况:
      枚举用户名-对比成功和失败时,服务器端反馈结果的区别
      使用Intruder进行攻击-分析两次服务器端的响应
      进行SQL注入的盲注测试-比较两次相应消息的差异,判断相应结果与注入条件的关联关系。
    7. Sequencer
      用于分析数据样本随机性质量的工具,可以用它测试应用程序的会话令牌、密码重置令牌是否可预测等情景,通过Sequencer的数据样本分析,能很好地降低这些关键数据被伪造的风险。

Nmap

  1. UDP(User Dategram Protocol
    UDP 是Internet协议集中的一个支持无连接传输的协议,与同是Internet协议传输层的主要协议-TCP协议相对且互补。
    UDP不具备数据包分组、组装及排序等功能,也就是说不能保证数据传输,仅适合于一次传输少量数据。UDP用来支撑那些需要在计算机之间进行数据传输的联网应用。有趣的是正因为其不能保证数据传输,也被称为不可靠协议。
    功能:为了实现计算机同时识别多个URL,并且允许一台主机上多个应用进行数据包的发送和接收。
  2. Idil Scan
    step 1: Probe the zombie’s IP ID and record it.
    探测被攻击的电脑ID、IP并记录
    step 2: Forge a SYN packet from the zombie and send it to the desired port onthe target. Depending on the port state, the target’s reaction may or may not cause the zombie’s IP ID to be incremented.
    从被攻击的电脑中伪造一个SYN数据包并将它发送给目标端口。取决于这个端口的状态,目标的反应会不会造成被攻击的电脑的IP or ID升值
    step 3: Probe the zombie’s IP ID again. The target port state is then determined by comparing this new IP ID with the one recorded in step 1.
    再次探测目标电脑的IP、ID。对比新的IP、ID和step 1 中得到的IP、ID将决定目标端口的状态
    probe 探查、检测
    zombie 被黑客攻击后的主机
    SYN “三次握手”
    increment 升值
  3. SCTP协议(Stream Control Transform Protocol)
    是传输控制协议,兼具TCP/IP的特征。
    区别:

    1. TCP/IP是以字节为单位传输,SCTP以数据包为单位进行传输;
    2. TCP是单路径传播,SCTP是多路径传播。TCP需要传输数据和接收数据的两端只能用一个IP,但是SCTP中每一端都可以绑定很多IP,只要其中一组IP能通,数据就可以传输;
    3. TCP是单流有序传输,SCTP是多留独立传播;
    4. TCP需要三次握手,SCTP需要四次握手。serve端在收到连接请求不会立刻分配内存缓存起来,而是返回一个cookie,client端需要返回这个cookie,serve端检验后,会从cookie中获取有价值的信息;
    5. SCTP会有heartbeat机制管理路径的可用性
  4. FTP协议(File Tranfer Protocol)
    是TCP/IP协议中的一部分。FTP主要分为FTP客户端和FTP服务器端,因为其传输速率较高,在网络中通常用于传输大的文件。默认情况下FTP协议使用TCP协议中的20、21端口,20端口用来传输数据,21端口用来控制信息。由于FTP协议的任务是从一台计算机到另一台计算机,与计算机所处位置、连接方式,甚至是操作系统都无关。

SQL注入的基础

  • SQL注入漏洞需要满足的条件:
    参数用户可控:前段传给后端的数据是可控的
    参数带入数据库查询:传入的参数拼接到SQL语句,且带入数据库查询
  • 传入ID参数为1,数据库执行代码
select * from users where id = 1 and 1=1
  • SCHEMATA、TBLES、COLUMNS
    SCHEMATA 表存储该用户创建的所有数据库的库名
    TBLES 表存储该用户创建的所有数据库的库名和表名
    COLUMNS 表存储该用户创建的所有数据库的库名、表名和字段名

  • 常用的MySQL 查询语句和函数

  • MYAQL查询语句
    在未知任何数据时:
    SELEST 要查询的字段名 FROM 库名、表名
    已知一条条件:
    SELECT 要查询的字段名 FROM 库名,表名 WHERE 已知条件的字段名=’已知条件的值’
    已知两个条件:
    SELECT 要查询的字段名 FROM 库名,表名 WHERE 已知条件1的字段名 =’已知条件1的值’AND已知条件2的字段名=‘已知条件2的值’

  • limit的用法

limit m,n

m指记录开始的位置 从0开始。n表示提取几条记录

  • 常见函数
    database():当前网站使用的数据库
    version():当前MySQL的版本
    user():当前MySQL的用户
  • 注释符
    在MySQL中,常见的注释符:#或—空格或/**/
  • 内联注释
    /*! */
    可用于整个SQL语句中
  1. Union注入攻击

  2. order by 1-99:查询该数据表的字段数量
    例:id=1 order by 4
    若返回值与id=1 order by 1不同,则说明字段数量为3

  3. Union注入语句

union select 1,2,3

SQL语句:

`select * from users where ‘id’=1 union select 1,2,3`

此代码值返回第一条结果,可以通过设置参数ID的值,让服务端返回union select的结果。
例:ID=-1 数据库中没有ID=-1的数据,就会返回union select的结果

  1. Union注入获取database()
id=1+union+selece+1,database(),3
  1. 查询表名
select table_name from informstion_schema.tables where table_schema=’sql’limit 0,1;

通过修改limit中的第一位数字,可以查看不同的表名

  1. 查询字段名(以emaile表名为例)
select xolumn_name from information_schema.columns where table_schema=’sql’and table_name=’emaile’limit 0,1;
  1. 查询数据库的数据(查询email_id对应的数据)
select email_id from sql.emails limit 0,1;
  1. Boolean 注入攻击

Boolean 注入是指构造SQL判断语句,查看返回结果来推测哪些SQL判断条件是成立的
- 判断数据库长度

‘ and length(database())>=1 - - +

通过改变“1”的值查看返回结果,判断数据库长度
例:输入3 返回yes 输入4 返回no 则数据库长度为3
- 逐字符获取数据库库名
库名范围az、09、特殊字符,有人可任意用ASCII码
注:SQL中不区分大小写

‘ and substr(database(),1,1)=’t’ - - +

substr 截断,此处意思是截取database()的值,从第一个字符开始,每次返回值一个
- 查询表名、字段名

‘ and substr((select table_name from information_schema.tables where table_schem=‘sql’limit 0,1),1,1)=’e’ - - +
  1. 报错注入攻击

返回错误值,程序会直接将错误信息返回到页面上,所以可以利用报错注入获取数据
- updatexml()获取user()

‘ and updatexml(1,concat(0✖️7    e,(sesect user()),0✖️7e),1)- - +
  • 获取数据库库名
‘ and updatexml(1,concat(0✖️7e,(select database()),0✖️7e),1)- -+
  • 获取库名
‘ and updatexml(1,concat(0✖️7e,(select schect schema_name from information_schema,schema.schemata limit 0,1)0✖️7e),1)- - +
  • 获取数据text表名
‘ and updatexml(1,concat(0✖️7e,(select table_name from information_schema.tables where table_schema=’text’limit 0,1),0✖️7e),1)- - +
  1. 时间注入攻击

利用sleep()或benchmark()等函数让MySQl的执行时间变长
- 判断数据库名长度

if(length(database())>1,sleep(5),1)

意思是如果长度大于1,执行sleep(5);否则执行1
- 查询数据库名

if(substr(database(),1,1)=’s’,sleep(5),1)
  1. 堆叠查询注入攻击

  2. 堆叠注入语句

‘:select if(substr(user(),1,1)=’r’,sleep(3),1)%23
  1. 获取表名
‘:select if(substr((select table_name from infoemation_schema.tables where table_schema=database() limit 0,1),1,1)=’e’,sleep(3),1)%23
  1. PDO(PHP Data Objects)
    PHP数据对象(PDO)扩展为PHP访问数据库定义了一个轻量级的一致接口。实现PDO接口的每一个数据库驱动可以公开数据库特性作为标准扩展功能。并不是PDO扩展实现了该功能,必使用一个具体的PDO数据库的驱动来访问数据库服务
    使用PDO执行SQL语句时,可以执行多语句,但是PDO只会返回第一条SQL语句执行的结果,所以在第二条语句中可以使用update更新数据或使用时间盲注获取数据。
    MD5信息摘要算法

  2. 宽字符注入 仅GBK

原理:id=1’ ’被转义符(反斜线\)转义。当数据库的编码为GBK时,在地址后➕%df,再加单引号,反斜线的编码是%5c,此时%df%5c是一个繁写汉字,此时单引号成功逃逸
woohoo~好神奇呀

  1. cookie注入攻击

cookie----存储在用户本地终端的一种数据,属于“小型文本文件”。某些软件需要辨别用户的身份,进行Seesion跟踪而存储在用户本地终端上的数据,有用户客户端计算机进行永久性地保存信息。因为证书等原因,cookie存在安全隐患,可以进行攻击
注:通过改变cookie后id的值进行测试

  1. base64 注入攻击

代码不会过滤解码后的id值,且将其值带入了SQL语句中,所以存在漏洞
将ID进行base64编码,代入URL中

##9. XFF注入攻击

通过修改X-Forwarded-for的值,伪造客户端IP
127.0.0.1
127.0.0.1‘

  1. SQL大小写绕过注入

访问ID=1’ 报错
ID=1 and 1=1 “no hack”
id=1 And/aNd/anD 1=1 OK
order by 报错
Order by ok (by 未被拦截)
… …. ……
SQL不是不区分大小写吗?那么这样修改SQL语句,是不是有些矛盾。。。

  1. 双写绕过注入

当输入id=1 and 1=1时,返回’1=1’,”and”被拦截,那么试一下anandd,当and被过滤后还会有一个and,那么就成功了
以此类推,返回值中有被过滤的部分就试试”double”!!

  1. 编码绕过技术

当输入id=1 and 1=1时,页面返回“hack” ,”and”被拦截,尝试URL全编码的方式绕过拦截,具体的方法是对关键词and 进行URL编码时选择全编码,并且需要编码两次
判断字段、库名、表名等的长度
剩余操作与union注入相同,但需判断过滤的关键词,并进行两次URL全编码

  1. 内联注释绕过注入

当输入id=1 and 1=1时,页面返回“hack” ,”and”被拦截,尝试使用内联注释,即id=1 /and/ 1=1
剩余操作与union注入相同

Web安全攻防

XSS漏洞

XSS漏洞用到了HTML、JavaScript、PHP语言

  1. 反射型XSS攻击
    原理:将“输入” 表单中的内容在“提交后”反映到“输出”中
    思路:将执行XSS攻击的代码作为标签放在input中,弹出“/XSS/”,按下确认后执行代码
    关键代码:
    <input type=”text” value=””><img src=1 onerror=alter(/XSS/)/>”>
  2. 存储型XSS攻击
    功能:获取用户输入的信息存入数据库中,并将数据库中用户留下的信息输出到页面上。应用于用户留言模块
    思路:若输入标题为<img src=X onerror=alter(/XSS)/>,页面会执行<img src=1 onerror=alter(/XSS/)/>弹出窗口。
  3. DOM型XSS攻击
    功能:将用户输入的内容更改为HTML中标题的内容,实现修改页面
    思路:在标题处添加id=”xx”作为替换的目标,用tihuan()函数将输入的内容替换标题
    关键代码:<hx id=”id1”></hx>
    document.getElementById(“id1”).innerHTML=document.getElementById(“dom_input”).value;
    <input type=”button” value=”替换” οnclick=”tihuan ()”>
  4. 修复漏洞:过滤输入的非法字符、对输出到页面的内容进行编码的转换,HTML、JavaScript等

CSRF漏洞

HTML、JavaScript、SQL、PHP

  1. Cross-site request forgery跨站请求伪造
  2. 与XSS漏洞的区别:XSS漏洞是利用网站信用用户,CSRF漏洞伪装成信用用户,以目标用户的名义执行某些操作:发送邮件、虚拟货币转让、发信息等
  3. 执行事例:抓取某博客发布文章按钮的包,构造CSRF PoC,将构造的连接发不到一个网站中,若用户处于登录状态访问连接,目标用户就会自动发布一篇文章。
  4. 如何识别网站中的恶意链接?验证Referer值,若其为自己网站开头的域名,则说明该请求来自网站自己。若Referer是其他网站域名或空白,就有可能是CSRF攻击。
  5. 抵御关键:在请求中放入攻击者不能伪造的信息

SSRF漏洞

局域网、PHP

  1. Server-Side Request Forgery 服务器请求伪造
  2. 原理:在未连接外网的内部系统中进行请求伪造,有服务端发起请求。
  3. 主要攻击方式:
    1. 对外网、服务器所在内网进行端口扫描,获取banner信息,根据benner判断主机是否存在某些服务
    2. 攻击运行在内网或本地的应用程序
    3. 对内网外网的web应用进行指纹识别,获取企业内部资产信息
    4. 攻击内外网的Web应用,HTTP GRT
    5. 利用file协议读取本地文件
  4. 修复
    限制请求端口,只允许访问HTTP和HTTPS的请求
    限制不能访问内网的IP,或者将可以访问内网的IP加入白名单,但也只限于规模较小的局域网
    屏蔽返回的详细信息或者限制访问本机的敏感信息

文件上传漏洞

  1. 如果文件上传不存在限制,非法用户就可以利用上传的恶意脚本文件控制整个网站甚至服务器。
  2. 恶意脚本文件(We bShell)
    Webshell具有十分强大的功能,例如查看服务器目录、服务器文件、执行系统命令等。

    在某论坛上曾看到dalao讲到学会写脚本、程序很有用处,再此看来,大佬说的对。
  3. JS检测绕过攻击
    1. 使用浏览器插件,删除检测文件后缀的JS代码,然后上出文件即可绕过。Mac上的S a f ari浏览器居然没有查看网页代码!可能是要安装什么插件吧。实测火狐OK
    2. 首先将需要上传的文件的后缀改为允许上传的,例如jpg、png等较为安全文件格式,绕过JS检测后,在抓包,将后缀改为可执行文件的后缀。
  4. 文件后缀绕过攻击
    如果Apache(Web服务器)配置
    AddType application/x-httpd-php .php.html
    则能够解析PHP 和phtml文件
    所以就可以上传一个后缀为phtml的WebShell
    函数pathinfo()获取文件后缀
  5. 文件类型绕过攻击
    工具:Burp suite
    从客户端上传文件时,通过Burp Suite抓包,当上传php格式文件时,数据包中Content-Type的值是application/octet-stream,上传jpg文件格式时,数据包中Content-Type的值是image/jpeg
    可以通过修改Burp中Content-Type的值就可以实现绕过。但是仅限于服务端代码是通过Content-Type的值来判断文件类型的情况。
    因为Content-Type的值是通过客户服务端传输的,所以可以修改。
    如何判断服务端是如何判断文件类型的?

    1. 可以通过查看网页代码中限制上传文件类型时有没有pathinfo()来排除其是利用JS来判断文件类型的。
    2. 程序使用substr()来获取文件类型
      一种与文件上传漏洞相似的漏洞:利用getmagesize()函数可以获取图片的大小和位置等信息,若getmagesize函数获取不到信息,就可以排除其是图片文件
      绕过方法:若Apache可以解析格式为php的文件,即可绕过
  6. 文件绕过攻击
    工具:Burp suite
    类型:PHP%00截断
    原理:00表示结束符,所以会把00 后面的所有字符删除
    条件:PHP版本小余5.3.4,PHP中magic_quotes_gpc为OFF状态
    127.0.0.1/php?jieduan=111
    修改jieduan参数为1.php%00.jpg,上传时文件名只剩下1.php,上传成功
    程序使用substr()获取文件后缀,然后排除不可上传文件类型。但如果保存路径中有$_REQUEST['jieduan’],则可利用—截断绕过
  7. 竞争条件攻击:一个锻炼手速的攻击方法
    有一些网站就比较猥琐了,上传文件时并不会做任何限制,但是在上传后检查上传的文件是否包含WebShell脚本,若检查为阳性,删除。
    但是聪明的黑客意识到,就算他会删除我的脚本,但是在检查和删除时会有一定的时间差,只要我好好利用这段时间差重新生成一个WebShell,那就嘿嘿嘿
    修复建议:通过白名单判断文件类型是否合法、对上传文件进行重命名
  8. 暴力破解
    工具:Burp suite
    这是一个势利的破解方式,拥有的字典越大破解的机会就越大,用户名、密码、验证码无所不能
    接下来是一顿Burp Suite操作
    用户名:admin 密码:随便输
    打开Burp抓包,在infrader中选择密码处爆破
    修复建议:限制输入密码次数

这周学习的内容比较少,HTML与CSS、安全攻防,主要是电脑系统是Mac,在经历了虚拟机崩盘、U盘驱动失败、启动转换助理失败后,开始了漫漫Mac渗透工具寻找之路,此处省略一万字x x。在配置工具过程中问题比较多,深深意识到自己学习知识的浅薄,还是需要不断的学习呀!

《Web安全攻防》学习笔记相关推荐

  1. 第二行代码学习笔记——第六章:数据储存全方案——详解持久化技术

    本章要点 任何一个应用程序,总是不停的和数据打交道. 瞬时数据:指储存在内存当中,有可能因为程序关闭或其他原因导致内存被回收而丢失的数据. 数据持久化技术,为了解决关键性数据的丢失. 6.1 持久化技 ...

  2. 第一行代码学习笔记第二章——探究活动

    知识点目录 2.1 活动是什么 2.2 活动的基本用法 2.2.1 手动创建活动 2.2.2 创建和加载布局 2.2.3 在AndroidManifest文件中注册 2.2.4 在活动中使用Toast ...

  3. 第一行代码学习笔记第八章——运用手机多媒体

    知识点目录 8.1 将程序运行到手机上 8.2 使用通知 * 8.2.1 通知的基本使用 * 8.2.2 通知的进阶技巧 * 8.2.3 通知的高级功能 8.3 调用摄像头和相册 * 8.3.1 调用 ...

  4. 第一行代码学习笔记第六章——详解持久化技术

    知识点目录 6.1 持久化技术简介 6.2 文件存储 * 6.2.1 将数据存储到文件中 * 6.2.2 从文件中读取数据 6.3 SharedPreferences存储 * 6.3.1 将数据存储到 ...

  5. 第一行代码学习笔记第三章——UI开发的点点滴滴

    知识点目录 3.1 如何编写程序界面 3.2 常用控件的使用方法 * 3.2.1 TextView * 3.2.2 Button * 3.2.3 EditText * 3.2.4 ImageView ...

  6. 第一行代码学习笔记第十章——探究服务

    知识点目录 10.1 服务是什么 10.2 Android多线程编程 * 10.2.1 线程的基本用法 * 10.2.2 在子线程中更新UI * 10.2.3 解析异步消息处理机制 * 10.2.4 ...

  7. 第一行代码学习笔记第七章——探究内容提供器

    知识点目录 7.1 内容提供器简介 7.2 运行权限 * 7.2.1 Android权限机制详解 * 7.2.2 在程序运行时申请权限 7.3 访问其他程序中的数据 * 7.3.1 ContentRe ...

  8. 第一行代码学习笔记第五章——详解广播机制

    知识点目录 5.1 广播机制 5.2 接收系统广播 * 5.2.1 动态注册监听网络变化 * 5.2.2 静态注册实现开机广播 5.3 发送自定义广播 * 5.3.1 发送标准广播 * 5.3.2 发 ...

  9. 第一行代码学习笔记第九章——使用网络技术

    知识点目录 9.1 WebView的用法 9.2 使用HTTP协议访问网络 * 9.2.1 使用HttpURLConnection * 9.2.2 使用OkHttp 9.3 解析XML格式数据 * 9 ...

  10. 安卓教程----第一行代码学习笔记

    安卓概述 系统架构 Linux内核层,还包括各种底层驱动,如相机驱动.电源驱动等 系统运行库层,包含一些c/c++的库,如浏览器内核webkit.SQLlite.3D绘图openGL.用于java运行 ...

最新文章

  1. 提供《华容道与数据结构》代码供测试
  2. python3 日志检索异常抛出异常 raise KeyError(key),KeyError: 'formatters'
  3. 洛谷 P2261 [CQOI2007]余数求和
  4. Mysql数据库(四)——mysql索引相关知识
  5. 在Linux开发.NET——拜拜了Win10
  6. Apache Ignite变得简单:第一个Java应用程序
  7. java给图片坐标描点,记录一下, canvas实现获取图片每个坐标点,以描点方式渲染图片...
  8. Android Themes与Styles实践
  9. 【刷水】之USACO2008资格赛(Bzoj1599-1603)
  10. Python如何在循环语句中加入两个变量_Python基础知识
  11. [转]百度地图的一些应用方法
  12. Ubuntu安装Tensorflow及anaconda环境下使用TensorFlow
  13. python爬去微博签到数据_GitHub - fs6/weiboSpider: 新浪微博爬虫,用python爬取新浪微博数据...
  14. android手机通过蓝牙连接佳博打印机
  15. 【图像分割】最大类间方差法(otsu)图像分割
  16. 如何构建本地化的blast2go数据库
  17. Java编写程序输出一个笑脸_给定一个数组,输出笑脸的个数。
  18. 发布本人整理的面试问题大全,为准备找工作的同行们尽一份力!希望大家多补充或回答!
  19. 火狐浏览器叫板苹果:绝不登录iOS平台
  20. 常见的CSS页面布局方式

热门文章

  1. excel找到对应数据的列指标_Excel 行列转换的最简方法
  2. EFCore-脚手架Scaffold发生Build Failed问题的终极解决
  3. 硬盘突然变raw格式_移动硬盘分区变为RAW格式的终极解决办法
  4. win10查询计算机显卡,windows10系统电脑查看显卡型号的两种方法
  5. 卸载计算机系统,W7电脑系统如何卸载软件
  6. 2020个人年度总结
  7. 普通文本与富文本,超文本之间的区别
  8. 2012年8月编程语言就业趋势
  9. antd表单按钮验证置灰
  10. JAVA一维数组求和