yulian's blog - FlareOn6 https://dirtycow.cn/tag/FlareOn6/ BUUCTF [FlareOn6]Overlong https://dirtycow.cn/54.html 2023-10-19T21:49:00+08:00 思路:拿到题目 使用exeinfo查看程序信息是一个无壳32位程序image-20230407103641150.png直接ida分析 v6是sub_401160函数的返回值Text[v6] = 0 在c语言中字符串是以0结尾的 这里的意思是取v6的值为字符串长度查看sub_401160函数的参数是Text &unk_402008 28image-20230407110654182.png双击&unk_402008查看值发现这是个数组image-20230409194556653.png转换一下是一个长度为176的数组image-20230409194644102.png跟进sub_401160函数查看image-20230409194415881.png继续跟进sub_401000函数这个函数对Text进行了操作image-20230409195258303.png运行程序查看发现程序消息框的内容正好是28位 也就是sub_401160函数中的第三个参数 循环的次数大胆猜想 每循环一次就处理一个&unk_402008中的字符&unk_402008中有176个字符 去掉最后一位0 就是175分字符我们只要把28次循环改成175次就可以得到flagimage-20230409200207447.png现在有两种解题思路1.将程序的代码dump下来 将循环次数改成1752.使用动调 直接将循环次数改成175我选第二种方法(太懒了)exp:使用x32dbg打开程程序发现内存地址和ida中的内存地址不一样image-20230409201225904.png接下来计算偏移地址找一个比较明显的特征就这个push Outputimage-20230409201607101.png在动调中搜索字符串image-20230409201800012.png找到output双击进去image-20230409201844690.png在动调中的内存地址为003E11EFida中的地址为004011EF将这两个地址相减就是偏移地址了image-20230409202108436.png在ida中找到push 1Ch 复制他的内存地址在动调中跳转到这个地址-20000image-20230409202254106.pngimage-20230409202454745.pngimage-20230409202508746.png右键这个地址->在内存窗口中转到->选定的地址image-20230409202557852.png右键这个1C->修改image-20230409202735076.png修改成AF(十进制的175)image-20230409202837372.png按f9运行程序image-20230409203006505.pngflag:flag{I_a_M_t_h_e_e_n_C_o_D_i_n_g@flare-on.com}