<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Henlenl的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Henlenl</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Henlenl]]></copyright><item><title><![CDATA[攻防世界-Mary_Morton]]></title><link>https://blog.youkuaiyun.com/Henlenl/article/details/121643311</link><guid>https://blog.youkuaiyun.com/Henlenl/article/details/121643311</guid><author>Henlenl</author><pubDate>Tue, 30 Nov 2021 21:54:24 +0800</pubDate><description><![CDATA[检查文件信息

amd64-elf文件
开启了Canary保护
开启了NX保护
ida静态分析

进入到sub_4008EB函数 格式化字符串漏洞

另外进入到sub_400960()函数有栈溢出漏洞


但是有一点开启了Canary 那么我们可以通过 格式化字符串任意读 泄露Canary地址 然后利用这个地址来进行溢出漏洞的利用 栈分布如图

而我们知道 v2就是用来储存canary的值的变量
而buf 大小位0x90
v2的大小位 0x8
覆盖return addr，需要0x90-0x8=0x88大小去]]></description><category></category></item><item><title><![CDATA[攻防世界-csaw2013reversing2]]></title><link>https://blog.youkuaiyun.com/Henlenl/article/details/121197406</link><guid>https://blog.youkuaiyun.com/Henlenl/article/details/121197406</guid><author>Henlenl</author><pubDate>Sun, 07 Nov 2021 21:19:28 +0800</pubDate><description><![CDATA[无壳程序
IDA静态分析
找到main函数
![image.png](https://img-blog.csdnimg.cn/img_convert/d937d85acd09e34b9ae05d2e9e3d68e2.png#clientId=ufefc85f1-ac53-4&amp;from=paste&amp;height=426&amp;id=u7c49415e&amp;margin=[object Object]&amp;name=image.png&amp;originHeight=426&amp;]]></description><category></category></item><item><title><![CDATA[强网拟态REV-(fastjsoN)wp]]></title><link>https://blog.youkuaiyun.com/Henlenl/article/details/120983001</link><guid>https://blog.youkuaiyun.com/Henlenl/article/details/120983001</guid><author>Henlenl</author><pubDate>Tue, 26 Oct 2021 22:46:43 +0800</pubDate><description><![CDATA[fastjsoN
依照这个链接可以知道 跟之前长安杯和看雪KCTF题目差不多
先用脚本恢复一下符号
0x02, 0x3A, 0x10, 0x6C, 0x6F, 0x6E, 0x67, 0x32, 0x73, 0x74, 
0x72, 0x10, 0x73, 0x74, 0x72, 0x32, 0x6C, 0x6F, 0x6E, 0x67, 
0x10, 0x73, 0x64, 0x66, 0x73, 0x66, 0x73, 0x64, 0x66, 0x0E, 
0x73, 0x74, 0x72, 0x32,]]></description><category></category></item><item><title><![CDATA[BUUCTF-RE-[UTCTF2020]babymips]]></title><link>https://blog.youkuaiyun.com/Henlenl/article/details/120790066</link><guid>https://blog.youkuaiyun.com/Henlenl/article/details/120790066</guid><author>Henlenl</author><pubDate>Fri, 15 Oct 2021 20:20:31 +0800</pubDate><description><![CDATA[无壳程序
IDA 打开 静态分析

提示输入flag  拷贝数据unk_4015F4给v7
查看unk_4015F4的数据并保存

进入  sub_401164(v7, v6);函数

逻辑就一个异或
exp
data = [0x62, 0x6C, 0x7F, 0x76, 0x7A, 0x7B, 0x66, 0x73, 0x76, 0x50, 
0x52, 0x7D, 0x40, 0x54, 0x55, 0x79, 0x40, 0x49, 0x47, 0x4D, 
0x74, 0x19, 0x7B, 0x6]]></description><category></category></item><item><title><![CDATA[BUUCTF-RE-2020-羊城杯 login]]></title><link>https://blog.youkuaiyun.com/Henlenl/article/details/120456950</link><guid>https://blog.youkuaiyun.com/Henlenl/article/details/120456950</guid><author>Henlenl</author><pubDate>Fri, 24 Sep 2021 15:58:58 +0800</pubDate><description><![CDATA[wp
pyc RE
先用pyinstxtractor.py反编译为pyc文件
看到如下信息

但是注意 要对比login和struct头部的字节差异

将差异补上后  login这个文件加上.pyc后缀  然后就能用uncompyle6 将pyc反编译为python代码
# uncompyle6 version 3.7.4
# Python bytecode 3.6 (3379)
# Decompiled from: Python 3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018,]]></description><category></category></item><item><title><![CDATA[BUUCTF-PWN-hitcontraining_uaf]]></title><link>https://blog.youkuaiyun.com/Henlenl/article/details/118960917</link><guid>https://blog.youkuaiyun.com/Henlenl/article/details/118960917</guid><author>Henlenl</author><pubDate>Thu, 22 Jul 2021 11:30:40 +0800</pubDate><description><![CDATA[文章目录查看文件信息IDA分析
查看文件信息

32位  且开启了NX保护

一个创建堆的程序
IDA分析
将文件丢入IDA32位 进行反汇编分析
main函数就是一些选择

咱们进入相关的函数分析
我们先看add_note()函数

仔细研究后可以发现,咱们可以控制第二个chunk

...]]></description><category></category></item><item><title><![CDATA[BUUCTF-PWN-[HarekazeCTF2019]baby_rop]]></title><link>https://blog.youkuaiyun.com/Henlenl/article/details/117065637</link><guid>https://blog.youkuaiyun.com/Henlenl/article/details/117065637</guid><author>Henlenl</author><pubDate>Thu, 20 May 2021 10:34:03 +0800</pubDate><description><![CDATA[文章目录查看文件信息IDA 分析exp
查看文件信息
checksec 一下 开了个NX保护

IDA 分析
我们扔进IDA64里面 查看反汇编代码 以及 伪代码,给我的感觉就是v4 能溢出 然后连到/bin/sh  利用万能的gadget，pop rdi ret


exp
from pwn import *

elf = ELF('./babyrop')

#r = process('babyrop')
r = remote('node3.buuoj.cn',28916)

system = elf.s]]></description><category></category></item><item><title><![CDATA[BUUCTF-PWN-not_the_same_3dsctf_2016]]></title><link>https://blog.youkuaiyun.com/Henlenl/article/details/117017515</link><guid>https://blog.youkuaiyun.com/Henlenl/article/details/117017515</guid><author>Henlenl</author><pubDate>Wed, 19 May 2021 10:18:46 +0800</pubDate><description><![CDATA[文章目录查看文件信息IDA静态分析exp
查看文件信息
开了个NX保护

IDA静态分析
开始看上去  其实就是利用gets()来溢出的

我们可以 shift+f12 查看字符串 可以看到 flag.txt 这个字符串

我们进去看一看…开始的思路其实是利用gets函数溢出来覆盖返回地址去读出flag，然后利用get_secret函数的输入点造成溢出覆盖返回地址到write函数的地址，打印出unk_80CF91B里面储存flag的内容,但是要知道的是,fgets函数其实是有保护机制的,所以我们利用这个是读]]></description><category></category></item><item><title><![CDATA[BUUCTF-PWN-ciscn_2019_en_2]]></title><link>https://blog.youkuaiyun.com/Henlenl/article/details/116974736</link><guid>https://blog.youkuaiyun.com/Henlenl/article/details/116974736</guid><author>Henlenl</author><pubDate>Wed, 19 May 2021 08:02:14 +0800</pubDate><description><![CDATA[文章目录查看文件信息IDA 分析exp
查看文件信息
amd 64位系统  NX保护

IDA 分析
nc 程序连接一下

没什么东西  给了几个选择的按钮
IDA 64分析一波

发现其实程序就只能选择1  而且关键函数是encrypt
我们进去看一下

所以 只要让 var[13] = 17就行了
exp
但是 这里要说明一下  32位程序是能直接去内存中寻址执行的
64位就是要依靠寄存器来寻址  然后找到地址返回给程序去执行的

...]]></description><category></category></item><item><title><![CDATA[BUUCTF-PWN-ciscn_2019_n_8]]></title><link>https://blog.youkuaiyun.com/Henlenl/article/details/116974036</link><guid>https://blog.youkuaiyun.com/Henlenl/article/details/116974036</guid><author>Henlenl</author><pubDate>Tue, 18 May 2021 08:43:15 +0800</pubDate><description><![CDATA[文章目录查看文件信息IDA 分析exp
查看文件信息
checksec 一下,保护还开的挺满 canary(栈保护)，nx(堆栈不可执行)，PIE(地址随机化)

IDA 分析
其实我们应该nc 连一下的查看远程程序运行情况

丢入 32位IDA分析一下

很显然 程序的意思就是让 var[13] == 17就能拿到shell了
exp
from pwn import *
r = remote('node3.buuoj.cn',27168)
#r = process('./ciscn_2019_n_8')
]]></description><category></category></item><item><title><![CDATA[攻防世界-RE-csaw2013reversing2]]></title><link>https://blog.youkuaiyun.com/Henlenl/article/details/116779883</link><guid>https://blog.youkuaiyun.com/Henlenl/article/details/116779883</guid><author>Henlenl</author><pubDate>Fri, 14 May 2021 09:57:27 +0800</pubDate><description><![CDATA[文章目录查看文件信息IDA 静态分析动态调试getflag
查看文件信息
无壳

IDA 静态分析
来到 main()函数处

我们可以看到  程序有个if  判断  进入sub_40102A()函数 发现没什么  IsDebuggerPresent()函数猜测应该是判断程序是否进入调试阶段
_debugbreak()   //在代码中引起断点 提示用户运行调试程序

我们进入 sub_40100()函数

他返回result  明显是加密后的flag  但是 他应该没有调用
那么我们就可以用OD动调就可以]]></description><category></category></item><item><title><![CDATA[BUUCTF-RE-no-strings-attached]]></title><link>https://blog.youkuaiyun.com/Henlenl/article/details/116779124</link><guid>https://blog.youkuaiyun.com/Henlenl/article/details/116779124</guid><author>Henlenl</author><pubDate>Fri, 14 May 2021 08:47:30 +0800</pubDate><description><![CDATA[文章目录查看文件信息IDA 分析调试get flag
查看文件信息
32位 elf文件 无壳

IDA 分析
可以看到  最后一个函数  进去


我们可以知道decrypt()这个函数  我们查看反汇编代码

我们可以看到 汇编代码,可以知道 flag大概在eax这个寄存器里面,那么我们可以通过运行这个函数后 查看eax里的值 就是flag

调试

先查看decrypt 汇编代码 disass decrypt

将程序断点在 0x08048707

那么  我们再单步一步时就运行在

这上面  那么我们]]></description><category></category></item><item><title><![CDATA[BUUCTF-PWN-jarvisoj_level0]]></title><link>https://blog.youkuaiyun.com/Henlenl/article/details/116708954</link><guid>https://blog.youkuaiyun.com/Henlenl/article/details/116708954</guid><author>Henlenl</author><pubDate>Wed, 12 May 2021 15:22:37 +0800</pubDate><description><![CDATA[文章目录查看文件信息IDA 分析exp
查看文件信息
64位elf文件

IDA 分析
我们来到main()函数

再进入vulnerable_function()函数

典型的read()栈溢出漏洞,buf有0x80 [rbp + 80h]  所以 如果要覆盖的话 需要0x80 + rbp本身的8字节

同时我们发现 callsystem函数  地址为  0x400596，所以payload = ‘a’ * (0x80 + 8) + p64(0x400596)

exp
from pwn import *]]></description><category></category></item><item><title><![CDATA[BUUCTF-RE-[GUET-CTF2019]number_game]]></title><link>https://blog.youkuaiyun.com/Henlenl/article/details/116601800</link><guid>https://blog.youkuaiyun.com/Henlenl/article/details/116601800</guid><author>Henlenl</author><pubDate>Mon, 10 May 2021 17:36:24 +0800</pubDate><description><![CDATA[文章目录查壳IDA 分析IDA动调get flag
查壳
我们知道这是没有壳的

IDA 分析
我们来到关键的函数 main函数

我们进入到 sub_4006D6函数看看

上述函数主要是,让用户输入的长度为10  且输入范围只能是 ‘0’ - ‘4’

IDA动调
既然显示wrong 那我们就可以在该位置断点

我们先在服务端输入0123456789

然后 F8单步就行  到jz这个地方将数值改为0 使其代码继续执行

执行到此处的时候我们就可以知道v7的值了



那么我们就知道对应下标的值了

解]]></description><category></category></item><item><title><![CDATA[BUUCTF-RE-[ACTF新生赛2020]Universe_final_answer]]></title><link>https://blog.youkuaiyun.com/Henlenl/article/details/116531098</link><guid>https://blog.youkuaiyun.com/Henlenl/article/details/116531098</guid><author>Henlenl</author><pubDate>Sat, 08 May 2021 16:33:32 +0800</pubDate><description><![CDATA[[ACTF新生赛2020]Universe_final_answer查壳IDA 分析get flag
查壳

无壳程序
IDA 分析
进入main函数

我们进入主要的函数(sub_860)看看

这种题目一看就知道是z3求解器
z3学习与安装
脚本
from z3 import *
s = Solver()
v1 = Int('v1')
v2 = Int('v2')
v3 = Int('v3')
v4 = Int('v4')
v5 = Int('v5')
v6 = Int('v6')
v7 = Int(']]></description><category></category></item><item><title><![CDATA[BUUCTF-RE-[FlareOn6]Overlong]]></title><link>https://blog.youkuaiyun.com/Henlenl/article/details/116446869</link><guid>https://blog.youkuaiyun.com/Henlenl/article/details/116446869</guid><author>Henlenl</author><pubDate>Thu, 06 May 2021 09:42:11 +0800</pubDate><description><![CDATA[[FlareOn6]Overlong查壳IDA 静态分析get flag
查壳
程序无壳

IDA 静态分析
我们可以看到汇编码  压入栈的大小为 0x1C  ，接着我们查看数据  B7-08 = AF 肯定是不够的,所以我们只要改变栈里面的值就可了


我们可以看到16进制码 为6A 1C 所以我们可以用winhex改一下就行了



get flag

flag{l_a_M_th_e_e_n_C_o_D_i_n_g@flare-on.com}


...]]></description><category></category></item><item><title><![CDATA[BUUCTF-RE-[MRCTF2020]Xor]]></title><link>https://blog.youkuaiyun.com/Henlenl/article/details/116295727</link><guid>https://blog.youkuaiyun.com/Henlenl/article/details/116295727</guid><author>Henlenl</author><pubDate>Fri, 30 Apr 2021 11:04:29 +0800</pubDate><description><![CDATA[[MRCTF2020]Xor查壳IDA分析get flag
查壳
发现是无壳的

IDA分析
查找字符串,找到这个Give Me Your Flag
通过交叉引用 来到sub_401090

然后 F5 发现报错了  不能F5,而且不是sp错误

那我们干脆直接看汇编
首先我们看到 这里压入了byte_4212C0 和 %s
这个我们就知道 flag其实储存在byte_4212C0中

然后我们看到 loc_4010B6 我们可以知道 edx 寄存器不断自增,最后退出循环,然后再与27 进行比较,这个时候我]]></description><category></category></item><item><title><![CDATA[BUUCTF-RE-[FlareOn4]IgniteMe]]></title><link>https://blog.youkuaiyun.com/Henlenl/article/details/116293190</link><guid>https://blog.youkuaiyun.com/Henlenl/article/details/116293190</guid><author>Henlenl</author><pubDate>Fri, 30 Apr 2021 10:25:39 +0800</pubDate><description><![CDATA[[FlareOn4]IgniteMe查壳IDA (静动)分析静态动调get flag
查壳
发现程序是没有壳的

IDA (静动)分析
静态

然后 我们再F5 查看start的伪代码

然后我们进入 sub_4010F0 看看
读取某个字符串 然后传入全局变量当中

再进入sub_401050 看看
那么我们现在未知v4的值 为了避免麻烦 其实我们可以直接在IDA动态调试该程序来获取v4的值
动调
我们首先在v4的位置下一个断点


然后选择这个 然后我们在Debugger-&gt;Stare proce]]></description><category></category></item><item><title><![CDATA[BMZCTF-RE-easy_re]]></title><link>https://blog.youkuaiyun.com/Henlenl/article/details/116225630</link><guid>https://blog.youkuaiyun.com/Henlenl/article/details/116225630</guid><author>Henlenl</author><pubDate>Wed, 28 Apr 2021 09:47:22 +0800</pubDate><description><![CDATA[BMZCTF-RE-easy_re查壳知识点学习x64Debug调试get flag
查壳
发现是无壳的

知识点学习
perl是解释语言，perlapp只是把你的perl程序压缩后放在资源里面，执行的时候会自行解压
关键之处…自行解压,那就好办了，我们只需要x64Debug慢慢跑就行
x64Debug调试
看雪相关帖子
通过这个帖子我们可以知道,我们可以搜索关键字符串,“script”

在解密字符串的call后面的cmp下断点
F9开始运行程序
按两次F9后就能看到我们需要的字符串

get flag
]]></description><category></category></item><item><title><![CDATA[BMZCTF-RE-时间管理大师]]></title><link>https://blog.youkuaiyun.com/Henlenl/article/details/116225115</link><guid>https://blog.youkuaiyun.com/Henlenl/article/details/116225115</guid><author>Henlenl</author><pubDate>Wed, 28 Apr 2021 09:30:10 +0800</pubDate><description><![CDATA[BMZCTF-RE-时间管理大师查壳IDA静态分析get flag
查壳
例行检查

无壳
IDA静态分析
打开程序发现，You can get your flag here,but u have to be patient ,each 10000ms passed,you can get one byte of the flag(你可以在这里得到你的flag，但是你必须有耐心，每通过10000毫秒，你可以得到一个字节的flag)

毫无疑问,要等,我们先用IDA打开试试

关键函数,每过1000毫秒,就会]]></description><category></category></item></channel></rss>