60 lines
26 KiB
XML
60 lines
26 KiB
XML
|
<?xml version="1.0" encoding="utf-8"?>
|
|||
|
<search>
|
|||
|
<entry>
|
|||
|
<title><![CDATA[小米固件工具mkxqimage]]></title>
|
|||
|
<url>%2F2019%2F03%2F16%2F%E5%B0%8F%E7%B1%B3%E5%9B%BA%E4%BB%B6%E5%B7%A5%E5%85%B7mkxqimage%2F</url>
|
|||
|
<content type="text"><![CDATA[小米固件工具mkxqimage小米自己改了个打包解包固件的工具,基于 trx 改的(本质上还是 trx 格式),加了 RSA 验证和解包功能,路由系统里自带:1234Usage:mkxqimg [-o outfile] [-p private_key] [-f file] [-f file [-f file [-f file ]]] [-x file] [-I] 固件解包固件工具mkxqimage完成对固件的解包,在解包前先检查Checksum是否正确,然后利用RSA公钥/usr/share/xiaoqiang/public.pem检查RSA签名,这两个步骤通过后,根据[0x0C]的固件类型,以及[0x10]、[0x14]、[0x18]和[0x1C]的4个偏移量拆分固件。 固件打包小米官方在打包固件时用RSA私钥计算出固件的RSA签名,小米路由器下载固件后用RSA公钥来验证RSA签名,有效地防止固件被篡改。 固件格式路由固件的格式,基本是基于 openwrt 的 trx 这个简单的二进制文件格式12348 44 52 30 63 D4 11 03 FE 3D 1A FD 05 00 02 0020 00 00 00 20 00 FE 00 00 00 00 00 00 00 00 00FF 04 00 EA 14 F0 9F E5 14 F0 9F E5 14 F0 9F E5 第1~4字节:ASCII字符串“HDR0”,作为固件的标识;第5~8字节:4字节整型数0x0311D464,表示固件的大小:51500132字节;第9~12字节:固件的检查和;第13~14字节:0x0005,表示固件中包含哪些部分;第15~16字节:0x0002,表示固件格式版本号;第17~20字节:0x00000020,表示固件第一部分在整个固件中的偏移量,0.4.85固件的第一部分是brcm4709_nor.bin,也就是Flash中除0xfe0000-0xff0000的board_data外的全镜像;第21~24字节:0x00FE0020,表示固件第二部分在整个固件中的偏移量,0.4.85固件的第二部分是root.ext4.lzma,也就是硬盘中128M固件的压缩包;第33字节开始是固件的正式内容开始。 小米开启ssh工具包使用mkxqimage解包(现在会提示秘钥不存在)12error fopen public keyImage verify failed, not formal image 如果能解包应该可以得到脚本文件upsetting.sh 1234#!/bin/shnvram set ssh_en=1nvram set flag_init_root_pwd=1nvram commit 执行脚本文件upsetting.sh后,将ssh_en设置为1,同时设置了flag_init_root_pwd项。当正式启动时,/usr/sbin/boot_check脚本检测到flag_init_root_pwd=1时,自动修改root用户密码,具体脚本为:1234567flg_init_pwd=`nvram get flag_init_root_pwd`if [ "$flg_init_pwd" = "1" ]; then init_pwd=`mkxqimage -I` (echo $init_pwd; sleep 1; echo $init_pwd) | passwd root nvram unset flag_init_root_pwd nvram commitfi 初始密码是mkxqimage -I的结果,实际是根据路由器的序列号计算得到。路由器的序列号印在底盖上,12位数字,如:561000088888 初始密码计算算法为: substr(md5(SN+"A2E371B0-B34B-48A5-8C40-A7133F3B5D88"), 0, 8) A2E371B0-B34B-48A5-8C40-A7133F3B5D88 为分析mkxqimage得到的salt]]></content>
|
|||
|
<categories>
|
|||
|
<category>IOT</category>
|
|||
|
</categories>
|
|||
|
<tags>
|
|||
|
<tag>小米</tag>
|
|||
|
<tag>文件格式</tag>
|
|||
|
<tag>SSH</tag>
|
|||
|
</tags>
|
|||
|
</entry>
|
|||
|
<entry>
|
|||
|
<title><![CDATA[QQ数据库的加密与解密]]></title>
|
|||
|
<url>%2F2019%2F02%2F22%2Fqq%E6%95%B0%E6%8D%AE%E5%BA%93%E7%9A%84%E5%8A%A0%E5%AF%86%E8%A7%A3%E5%AF%86%2F</url>
|
|||
|
<content type="text"><![CDATA[qq数据库采用简单加密——异或加密数据获取:DENGTA_META.xml—IMEI:867179032952446databases/2685371834.db——数据库文件 解密方式:明文msg_t 密文msg_Data key:IMEImsg_t = msg_Data[i]^IMEI[i%15] 实验:123456789101112131415161718192021222324import sqlite3IMEI = '867179032952446'conn = sqlite3.connect('2685371834.db')c = conn.cursor()def _decrypt(foo): substr = '' #print(len(foo)) for i in range(0,len(foo)): substr += chr(ord(foo[i]) ^ ord(IMEI[i%15])) return substr#rem = c.execute("SELECT uin, remark, name FROM Friends")Msg = c.execute("SELECT msgData, senderuin, time FROM mr_friend_0FC9764CD248C8100C82A089152FB98B_New")for msg in Msg: uid = _decrypt(msg[1]) print("\n"+uid+":") try: msgData = _decrypt(msg[0]).decode('utf-8') print(msgData) except: pass 结果]]></content>
|
|||
|
<categories>
|
|||
|
<category>加密解密</category>
|
|||
|
</categories>
|
|||
|
<tags>
|
|||
|
<tag>密码</tag>
|
|||
|
<tag>QQ</tag>
|
|||
|
<tag>数据库</tag>
|
|||
|
</tags>
|
|||
|
</entry>
|
|||
|
<entry>
|
|||
|
<title><![CDATA[wifi半双工侧信道攻击学习笔记]]></title>
|
|||
|
<url>%2F2019%2F01%2F16%2Fwifi%E5%8D%8A%E5%8F%8C%E5%B7%A5%E4%BE%A7%E4%BF%A1%E9%81%93%E6%94%BB%E5%87%BB%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%2F</url>
|
|||
|
<content type="text"><![CDATA[TCP侧信道分析及利用的学习报告背景知识测信道香农信息论 什么是信息? 用来减少随机不确定的东西 什么是加密? 类似于加噪声,增加随机不确定性 “从密码分析者来看,一个保密系统几乎就是一个通信系统。待传的消息是统计事件,加密所用的密钥按概率选出,加密结果为密报,这是分析者可以利用的,类似于受扰信号。” 侧信道随之出现 越过加密算法增加的随机不定性,从其他的渠道获取数据标签,确定信息内容。 早期:采集加密电子设备在运行过程中的时间消耗、功率消耗或者电磁辐射消耗等边缘信息的差异性 而随着研究的深入,逐渐从加密设备延伸到计算机内部CPU、内存等之间的信息传递 并在Web应用交互信息传递越来越频繁时,延伸到了网络加密数据流的破解方面 侧信道攻击的流程 第一个就是侧信道泄露的截取,第二个是信息的恢复。 网络攻击 中间人攻击 “指攻击者与通讯的两端分别创建独立的联系,并交换其所收到的数据,使通讯的两端认为他们正在通过一个私密的连接与对方直接对话,但事实上整个会话都被攻击者完全控制。” 公共wifi、路由器劫持 一般使用加密来防御 加密的代价:维护密钥证书、影响功能(运营商无法做缓存) 非中间人攻击/偏离路径攻击/off-path attack 通信线路之外,攻击者看不到双方的消息,没办法截获和发送通信包。智能伪造成一方给另一方发消息。 攻击成功需要:消息合法+最先到达 防御措施:challenge-response/询问-应答机制双方在通信前交换一个随机数,这个随机数在每次的通信中都要被附带,而中间人看不见这个随机数,因此伪造的消息被认为不合法。 攻击者如何得到这个随机数:侧信道 TCP三次握手 客户端通过向服务器端发送一个SYN来创建一个主动打开,作为三路握手的一部分。客户端把这段连接的序号设定为随机数A。 服务器端应当为一个合法的SYN回送一个SYN/ACK。ACK的确认码应为A+1,SYN/ACK包本身又有一个随机产生的序号B。 最后,客户端再发送一个ACK。当服务端收到这个ACK的时候,就完成了三路握手,并进入了连接创建状态。此时包的序号被设定为收到的确认号A+1,而响应号则为B+1。 通过三次握手,确定对方不是非中间人 TCP序列号的问题 1985 1995 2001 2004 2007 2012 2012 2016 Morris Mitnik Zalewsky Waston kLM Herzberg 作者 作者 初始序列可预测 真实利用 漏洞仍在 BGP DoS Windows攻击 Puppet-assisted Malware-assisted off-path attack 90年代时发现并不随机:1995年伪造客户端连接微软大楼的服务器 2007年在windows场景下用IDID侧信道猜出序列号:只针对Windows,花费几小时 Malware-assisted攻击模型:给受害者安装一个无特权的应用程序(仅能网络连接),这个程序跟非中间人的攻击者里应外合,劫持手机上所有的TCP连接。 如何劫持TCP 需要的信息:Facebook的连接IP地址和端口号,由此可以知道TCP连接的序列号,利用序列号伪装成Facebook给手机发消息。使用netstat命令获取: 任务:由于TCP的序列号通常连续,所以要精确猜到它的下一个序列号。 如何验证序列号正确:通过某种侧信道,这个恶意软件在后台可以提供反馈。 变种一:防火墙攻击过程: TCP三次握手之后产生A和B,将来传输的包序列号必须跟A和B很接近,否则,防火墙会丢弃这个包。因此只有猜对了序列号,包才能到达手机端。到达手机端后,后台的恶意软件可以帮助我们判断手机是否接受了这个数据包。 具体侧信道方案: CPU资源使用率(噪音很大)——>TCP计数器(后台软件运行制造噪音)——>低噪音计数器:包被丢掉时,一个相应的错误计
|
|||
|
<categories>
|
|||
|
<category>顶会论文</category>
|
|||
|
</categories>
|
|||
|
<tags>
|
|||
|
<tag>侧信道攻击</tag>
|
|||
|
<tag>wifi</tag>
|
|||
|
</tags>
|
|||
|
</entry>
|
|||
|
<entry>
|
|||
|
<title><![CDATA[利用python实现BIBA模型]]></title>
|
|||
|
<url>%2F2018%2F11%2F16%2FBIBA%E8%AE%BF%E9%97%AE%E6%8E%A7%E5%88%B6%E6%A8%A1%E5%9E%8B%E5%AE%9E%E7%8E%B0(python)%2F</url>
|
|||
|
<content type="text"><![CDATA[基于python语言的BIBA模型图形界面实现一、实验目的: 查阅资料,了解biba安全模型的相关知识 通过编程实现基于biba模型的完整性访问控制,进一步掌握biba模型的规则 使用python语言实现,熟练pyqt的图形界面设计方法 二、实验环境: 操作系统:Windows10 工具版本:python3.7,pyqt5 三、实验原理:1. 什么是安全模型 系统的元素 具有行为能力的主体不具有行为能力的客体 系统的操作行为 可以执行的命令:读、写、执行 对系统行为的约束方式 对行为的控制策略 模型从抽象层次规定了系统行为和约束行为的方式 模型往往用状态来表示 系统行为所依赖的环境行为对系统产生的效果 2. biba完整性模型: 完整性威胁问题 完整性的威胁就是一个子系统在初始时刻认为不正常的修改行为;来源:内部&外部;类型:直接&间接 外部的直接 外部的间接 内部的直接 内部的间接 外部系统恶意地篡改另一个系统的数据或程序 一个外部系统插入恶意的子程序 修改自己的代码 修改自己的指针 biba模型的完整性定义 完整性级别高的实体对完整性低的实体具有完全的支配性,反之如果一个实体对另一个实体具有完全的控制权,说明前者完整性级别更高,这里的实体既可以是主体也可以是客体。完整性级别和可信度有密切的关系,完整级别越高,意味着可信度越高。 biba模型的规则 对于写和执行操作,有如下规则: 写规则控制当且仅当主体S的完整性级别大于或等于客体O的完整性级别时,主体S可以写客体O,一般称之为上写。执行操作控制当且仅当主体S2的完整性级别高于或等于S1,主体S1可以执行主体S2。 关于读操作,有不同的控制策略: 低水标模型任意主体可以读任意完整性级别的客体,但是如果主体读完整性级别比自己低的客体时,主体的完整性级别将为客体完整性级别,否则,主体的完整性级别保持不变。环模型不管完整性级别如何,任何主体都可以读任何客体严格完整性模型这个模型对读操作是根据主客体的完整性级别严格控制的,即只有完整性级别低或相等的主体才可以读完整性级别高的客体,称为下读 一般都是指毕巴严格完整性模型,总结来说是上写、下读 四、实验内容:1. 用户登录实现核对用户输入的账户密码与存储的是否匹配 从用户输入框获取账户和密码 检查输入信息是否合法(为空) 从password.txt中获取,并保存在列表listFromLine中 检查输入的账户是否存在 若存在,检查对应的密码是否正确 若正确,判断是管理员还是普通用户,并跳转相应的界面 1234567891011121314151617181920212223242526272829303132333435363738394041424344def checkPass(self): nameIn = self.lineEdit.text() passwdIn = self.lineEdit_2.text() md5 = hashlib.md5() md5.update(passwdIn.encode("utf-8")) passwdIn = md5.hexdigest() if (nameIn == '') or (passwdIn == ''): QMessageBox.warning(self, "警告", "账号和密码不能为空", QMessageBox.Yes) self.lineEdit.setFocus() print(nameIn, passwdIn) fr = open('./etc/passwd.txt') arrayofLines = fr.readlines() numberofLines = len(arrayofLines) for line in arrayofLines: line = line.strip() listFromLine = line.split(':') name = listFromLine[0] if name == nameIn: numberofLines = -1 passwd = listFromLine[1] if passwd == passwdIn: group = listFromLine[2] print("\n登录成功!\n") if name == 'root': print('root登录') rootUI.show() MainWindow.close() else: urName = nameIn mainUI.lineEdit.setText(urName) mainUI.lineEdit_2.setText(group) mainUI.show() MainWindow.close() else: QMessageBox.warning(self, "警告", "密码错误!", QMessageBox.Yes) self.lineEdit.setFocus() fr.close() return 0 2. 管理员功能实现管理员可以对用户进行增、删、查的操作 增加用户的实现 获取管理员
|
|||
|
<categories>
|
|||
|
<category>理论学习</category>
|
|||
|
</categories>
|
|||
|
<tags>
|
|||
|
<tag>模型实现</tag>
|
|||
|
<tag>python</tag>
|
|||
|
<tag>访问控制</tag>
|
|||
|
</tags>
|
|||
|
</entry>
|
|||
|
<entry>
|
|||
|
<title><![CDATA[Hello World]]></title>
|
|||
|
<url>%2F2000%2F01%2F01%2Fhello-world%2F</url>
|
|||
|
<content type="text"><![CDATA[你好!我是混元霹雳手]]></content>
|
|||
|
</entry>
|
|||
|
</search>
|