自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

古月浪子的博客

纵使身死道消,不叫我心蒙尘。

  • 博客(70)
  • 收藏
  • 关注

原创 【Python】一行代码打印八皇后问题所有解

【Python】一行代码打印八皇后问题所有解

2022-09-08 01:22:22 708 1

原创 【Windows】去除Visual Studio 2019的绿色波浪线

当我在使用VS2019编写项目的时候,喜欢直接使用enum作为枚举常量但是,微软偏偏推荐用enum class作为替代因此每个文件中第一次用到枚举的时候都会有一个绿色的波浪线,令我觉得非常碍眼解决方法非常简单,并不需要像网上说的那样一刀切的关闭代码分析功能首先,找到目录 C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Team Tools\Static Analysis Tools\Rule Sets ,这里我是以自己的安

2021-04-20 12:02:31 6241 2

原创 【Windows】Shellcode免杀,过360、火绒、Defender 静态及主防

Shellcode,顾名思义是一段拿来执行的代码片段,我们可以使用Shellcode来完成我们需要的任务弹窗的代码,可以被认为是一段Shellcode,获取某个模块的基址的代码,也可以被认为是一段Shellcode,同理,拿来干坏事的代码,也是Shellcode如今的杀毒软件都拥有查杀病毒木马的能力,除了静态的查杀,还有动态的主动防御,若恶意代码片段(拿来干坏事的Shellcode)被杀软发现,则可以认为当前运行的程序是病毒木马或是被感染的文件,理应“杀掉”有些时候,我们不想让自己写的代码被杀毒软件当

2021-02-17 10:56:24 6799 7

原创 【Windows】CVE-2017-11882漏洞利用

CVE-2017-11882是一个Office的漏洞,虽然该漏洞已经有补丁了,且杀毒软件也能查出利用了该漏洞的恶意文档,但是学习和复现该漏洞仍是一项令人受益颇多的过程为了复现该漏洞,我们需要准备Office2016及以前的版本,这里我选择的是2016版本利用漏洞的主要手段是,依靠公式编辑器中的缓冲区溢出执行短长度命令行以及Office自动在TEMP目录下临时释放附件的特性,达到执行任意代码的效果导致漏洞的罪魁祸首就是一个叫EQNEDT32.EXE的程序,该文件的位置可以用任务管理器查看进程文件来定位

2021-02-09 14:15:42 2962

原创 【Windows】从零开始写一个加密壳

从零开始写一个加密壳认识PE文件结构DOS头NT头EPImageBase重定位表Section TablePE结构总览加壳思路新增Section更改EP加密.text段保存ImageBaseShellCode获取编译好的shellcode编写shellcode获取所需函数手动修复重定位集成shellcode输入与输出成品检验ExeInfoPEIDA 7.5直接运行x32dbg总结及源代码ShellShellcodeGenerator(本文仅为个人学习记录,不保证文章中没有学术性错误或笔误)认识PE文件结

2021-02-02 16:13:02 2446 2

原创 【2020XCTF/华为杯】PYPY WriteUp

题目是一个PYPY打包的elf程序,使用pygame写了一个贪吃蛇游戏,现有的pyinstaller的解包脚本好像不太好使,那么自己动手根据输出报错信息定位代码,这个qword_6077E0应该是反序列化pyc代码的函数,gdb断在这里,即可拿到对应的pyc文件这个函数会被执行4次,第4次是我们期望的代码,第四次断下后使用 dump memory ./dmp $rdi $rdi+$rsi 拿到文件,补上前4个字节的文件头以后,加上.pyc后缀然后使用uncompyle6反编译,得到源码DEFAULT

2020-12-24 17:41:29 621 1

原创 【KCTF2020秋季赛】异常信号 WriteUp

这道题做出来的时候还是非常激动的,不枉费本菜鸡从中午肝到半夜/(ㄒoㄒ)/~~这道题的壳是出题方自己写的,强度其实是非常不错的,这里我投机取巧了,直接dump内存后转静态分析,这壳子直接木大后面的哥隆尺算法卡了我好久,最后只能去找金牌爷了= =下面是照搬的发在看雪的WriteUp:肝了个一血出来哈哈哈直接运行,然后x32dbg附加,注意开启sharpod的anti anti attach,然后ollydumpex,点search image,选择module、binary(virtual),.

2020-12-18 00:22:39 395

原创 【2020安洵杯线下赛】AWD的第一道pwn题

题目是一个简易代码执行器按照以前的此类题型的经验试了一下,通过指针任意读写的方法好像用不了(不知道是不是我菜了-_-可以看到一个ev函数,我们在sub_21B4函数中找到它的实现可以发现我们能echo4个字符,如果让拼接的字符串变成echo 0;sh即可拿到shell写脚本打全场:#!/usr/bin/python3from pwn import *from LibcSearcher import *import requestsdef submit_flag(flag):

2020-12-18 00:04:18 2314 2

原创 【2020安洵杯】EasyCM WriteUp

这题从早上9点开始,做了快3小时,最后被人领先8分钟拿了一血,只拿到一个二血,呜呜呜/(ㄒoㄒ)/~~这题IDA有点白给,直接上x32dbg动调可以看到要比较的字符串我输入的是111d0g,经过某种加密以后变成了OOOBhKaT前面有判断输入是不是3的倍数,不是则用-补齐的操作推测是3位一组,一组输出4个字符,有点像base64加密操作在这个函数里,会调用length/3次,每次输出4个字符这个函数是动态解密的,而且dump下来后idapython写IDA里patch后也没法F5,懒得修花

2020-12-17 23:39:41 465

原创 【UNCTF】逆向WriteUp以及出题笔记

【UNCTF】逆向WriteUp以及出题笔记WriteUpre_checkin反编译babypyeasyMazeezRustezvmezreTrapBetterCPU出题笔记CTFilter原神WriteUpre_checkinIDA打开,搜索字符串查看交叉引用,定位到主函数可以看到直接比较字符串由于Str2在IDA中没有出现明文值,因此直接x64dbg打开,主函数下断,即可看到flag反编译这道题…有意思???正规解题步骤参照下面的babypy,不过这道题据说运行就有flag?!

2020-11-16 10:20:10 2460

原创 【N1CTF】Oflo WriteUp

二进制文件里面有很多call+e8+jmp+[return address += 1]这种操作,导致IDA无法处理,直接F5出来的几乎不能看,索性手动nop一下对sub_400A69前10个字节进行动态patch,异或的内容是输入的前5个字符,根据flag的格式,猜测是n1ctf,IDAPython脚本:a='n1ctf'for i in range(10): PatchByte(0x400a69+i,Byte(0x400a69+i)^ord(a[i%5]))跑完脚本以后可以正常F5该函

2020-10-22 00:30:30 479 1

原创 【GACTF】EasyRe WriteUp

IDA打开直接能看到main函数可以看到,在执行sub_8048838前,调用了前一个函数,对它进行动态patch(直接点进去sub_8048838会发现是无意义代码)这个动态patch代码的算法有点复杂,直接gdb下断点然后dump memory ./dmp 0x8048838 0x8048de0,然后用WinHex把dump出来的替换掉原本的,IDA重新打开patch后的,就可以了可以看出来,这是一个虚拟机,main函数里有对其进行初始化的函数同样在main函数中我们可以找到opcod

2020-08-31 14:29:55 608 1

原创 【GACTF】Checkin WriteUp

运行程序后隔了半秒才出现输入flag的提示,且用IDA搜索字符串搜索不到出现过的字符串。用OD附加后F9,直接退出,索性慢慢F8跟,一直到跟入sub_404920函数中发现与文件读写有关,继续OD跟踪,一直到标黄处可以在栈窗口中看到被写入的文件的路径程序被断在了这里,文件应该不可能被清理,资源管理器打开看看直接在src目录里有一个Checkin.rb源代码require 'openssl' require 'base64' def aes_encrypt(key,encry

2020-08-31 14:29:34 394

原创 【BUUCTF】ciscn_2019_ne_5 Write Up

题目是一道32位程序,依旧是rop仔细观察可以发现漏洞出在GetFlag函数的strcpy上,我们可以输入的字符有128个,而复制字符串的栈空间只有0x48字节程序本身存在fflush函数,我们可以直接用它的sh来当作system的参数from pwn import *from LibcSearcher import *from struct import packcontext.os='linux'context.arch='i386'context.log_level='deb...

2020-08-06 17:40:36 818

原创 【BUUCTF】jarvisoj_level2_x64 Write Up

漏洞函数里面可以看到,我们可以栈溢出题目使用了system函数,我们可以直接调用程序里面藏了一个binsh接下来只需要构造rop链了64位的函数调用的第一个参数由rdi寄存器传递,很显然需要用到pop rdi这个gadget,并且几乎每个64位程序里面都能找到它再需要注意的就是,system调用的时候需要栈对齐,这里采用一个ret来对齐栈from pwn import *from LibcSearcher import *from struct import packcontext..

2020-08-06 17:16:26 579

原创 【BUUCTF】ciscn_2019_n_5 Write Up

这个反编译有点不准确,不过大概意思能理解到,先读入0x64字符到bss段上,然后用gets函数读入到栈上什么保护都没开,我们发现可以直接执行bss段上的代码思路很简单,将shellcode写入bss段,然后栈溢出rop到bss段上执行shellcode,拿到shell注意栈帧大小from pwn import *from LibcSearcher import *from struct import packcontext.os='linux'context.arch='amd64'.

2020-08-06 17:01:39 444

原创 【BUUCTF】bjdctf_2020_babystack Write Up

继续刷buuoj中…看到上新题了,是当时比赛的时候做过的一道题,顺手打掉程序只开了NX保护,读入字符数可控,直接ret2text解决遇到的小问题是,本地环境打0x4006E6打不通,换成了0x4006EA,后来测试远程环境2个都可以,有点迷 =_=from pwn import *from LibcSearcher import *from struct import packcontext.os='linux'context.arch='amd64'context.log_lev

2020-08-02 19:30:26 674 1

原创 【CYBRICS】Polyglot WriteUp

这道题有毒。。。附件是一个.c源代码我们自己写一下代码跑一下,把key直接写死int main() { char flagged[] = { ...... }; char key[] = "mod3r0d!"; unsigned long long val = *(unsigned long long*)key; unsigned long long *ptr = (unsigned long long*)flagged; while (*ptr != 0) { *ptr = *pt.

2020-07-29 16:20:46 259

原创 【CYBRICS】Baby Rev WriteUp

附件里是一个xml文件可以看到开头有一个链接,好像叫Snap,我们打开发现是一个为小孩子设计的编程语言点击Run Snap Now,导入附件给的文件,可以看到源代码图可能有点糊,总之逻辑就是给了一个长度为33的数组,然后把你输入的内容异或33以后和数组对比,写代码还原一下即可#include <iostream>using namespace std;int main(){ int flag[] = { 66,88,67,83,72,66,82,90,86,18,77.

2020-07-29 16:20:28 310

原创 【CSICTF】Esrever WriteUp

这道题看起来不像是逆向,更像是密码学 =_=import random# TODO: Remember to remove real flag before deployingflag = 'csictf{fake_flag}'key = 'fake_key'def enc1(text): r = random.randint(1,25) return bytes.fromhex(''.join([hex(((ord(i) - ord('a') - r) % 26) + o.

2020-07-23 16:08:46 499 1

原创 【CSICTF】Blaise WriteUp

这个题我感觉很简单,不知道为什么解题人数比起前面的少了这么多display_number函数作用是取一个[15,20]的数既然给了你刚刚的随机数,代码又在你手里,直接copy一份run一下,就能跑出答案了,然后cv到远程,大概率直接拿flag这里直接把IDA里的C函数以及C函数里的f函数全部原封不动的抄到IDE里#include <iostream>using namespace std;signed __int64 __fastcall f(signed int a1).

2020-07-23 16:07:19 174

原创 【CSICTF】pydis2ctf WriteUp

这题我感觉我做的有问题,最后虽然答案是勉强凑出来了题目给了3个附件cipher1: 2 0 LOAD_CONST 1 ('') 2 STORE_FAST 1 (ret_text) 3 4 LOAD_GLOBAL 0 (list) 6 LOAD_FAST 0 (text) .

2020-07-23 16:05:22 554 2

原创 【CSICTF】Vietnam WriteUp

比较str是否等于HELLO\n,相等则获得flag在伪代码中可以看到我们没有办法直接修改str这个jmp有点意思这样肉眼看起来不太直观,写IDAPython脚本处理一下这样就能直接从反汇编窗口中读出要跳转的地址了可以看到,程序将输入的字符减去33然后当作下标索引,跳转到对应地址其中0x4013b0重复出现了很多次,大概没啥用,直接忽略分析一下其他地址是什么作用这里我本来汇总了一下有用的字符,但是好像分析了2个就觉得可以打穿这道题了其他的字符对应的代码我大致看了一下,没看懂有什.

2020-07-23 16:02:54 174 4

原创 【CSICTF】RicknMorty WriteUp

第一道逆向题大致流程就是,随机给你出几道题,题目是这样的:给你2个不是太大的数,求最小公因数,然后计算最小公因数+3的阶乘所有题目回答正确并且用时小于30秒就能获得flag讲真的,这种程度的题目我室友应该能2秒一道口算出结果我算不了这么快,还是老老实实上python脚本吧这里借用一下pwn题的模板from pwn import *from LibcSearcher import *from struct import packcontext.os='linux'contex.

2020-07-23 16:00:56 180

原创 【CSICTF】Smash WriteUp

作为最后一道pwn题,难度还行附件直接给了libc文件main函数里采用动态分配内存来储存输入,无法溢出,但是会将字符串传入say_hello函数中,strcpy函数可以溢出没有后门函数,考虑采取ret2libc的rop方法,先泄露libc基址,然后返回main函数,再system binsh拿到shellfrom pwn import *from LibcSearcher import *from struct import packcontext.os='linux'contex.

2020-07-23 15:57:44 231

原创 【CSICTF】Global Warming WriteUp

一道格式化字符串漏洞的题,以前遇到这种题都是手撸payload,今天来试试pwntools自带的工具由于读取字符数有限制,不能栈溢出,但是发现程序直接将读取的字符串printf,导致可以利用格式化字符串漏洞%n可以将已输出的字符数当作4字节整数写入指向的内存地址,同理%hhn可以写入单字节整数利用这一点去改写admin的值,即可绕过检测如果是有回显的题目,通常用aaaa%p-%p-%p-%p-%p…来找偏移,看到0x61616161即可确定偏移量用%xc来输出x个字符,这样便可控制写入的值.

2020-07-23 15:55:25 197

原创 【CSICTF】Secret Society WriteUp

这道题解题人数明显比前面三道题少了很多,不知道为啥 =_=我感觉还是比较简单的根本不需要读懂它到底在搞什么,只需要知道,我们让puts v5的时候连带着把s也输出出来就好了其实这里的处理就是从换行符截断,然后在后面加上“,we are everywhere.”,因此,把v5的128字节写满即可。后面读flag的时候会覆盖掉,可以成功输出from pwn import *from LibcSearcher import *from struct import packcontext.os=.

2020-07-23 15:52:51 280

原创 【CSICTF】pwn intended 0x3 WriteUp

和第二题不同了,这次是需要溢出覆盖ret addr可以看到后门函数,地址是0x4011CE,并且程序没有开启PIEfrom pwn import *from LibcSearcher import *from struct import packcontext.os='linux'context.arch='amd64'context.log_level='debug'sd=lambda x:io.send(x)sl=lambda x:io.sendline(x)ru=lamb.

2020-07-23 15:51:18 152

原创 【CSICTF】pwn intended 0x2 WriteUp

在上一题的基础上改进了一下,大体上没有多大区别v5不再是要求不等于0了,而是要等于特定的值from pwn import *from LibcSearcher import *from struct import packcontext.os='linux'context.arch='amd64'context.log_level='debug'sd=lambda x:io.send(x)sl=lambda x:io.sendline(x)ru=lambda x:io.recvu.

2020-07-23 15:50:29 123

原创 【CSICTF】pwn intended 0x1 WriteUp

一道pwn的签到题v4的长度为0x30-4,使用的是gets函数读取输入,所以可以溢出只要满足v5不等于0就可以拿到flag,于是通过溢出修改v5的值即可from pwn import *from LibcSearcher import *from struct import packcontext.os='linux'context.arch='amd64'context.log_level='debug'sd=lambda x:io.send(x)sl=lambda x:io.

2020-07-23 15:49:19 138

原创 【BUUCTF】SimpleRev WriteUp

buuoj上的一道稍微有点难度的逆向题用IDA快速定位到main函数可以看到关键逻辑应该在Decry函数里,跟进去看看这里要注意的是,IDA里面按R将整数转成字符串时,是反着的…可以看到,程序是逐位进行运算然后和text比对,因此可以写爆破脚本#include <iostream>using namespace std;int main(){ char key[] = "adsfkndcls"; char text[] = "killshadow"; int v3

2020-07-20 11:03:05 906

原创 【BUUCTF】findit WriteUp

buuoj上的一道安卓逆向题既然是apk,用JEB打开光看代码不是很明白程序要干什么,不过这不碍事可以看到有一行if判断,我们不需要管前面到底判断的啥,直接把后面的代码复制到IDEA里跑一下就出答案了不得不说JEB的反编译真的很好用!...

2020-07-20 11:02:05 1146

原创 【BUUCTF】Java逆向解密 WriteUp

buuoj里面比较基础的一道逆向题目下载附件,发现是一个.class文件,jd-gui走起分析算法,逐个将输入的字符加上@的ascii码再异或32,然后和KEY比较还原脚本非常好写#include <iostream>using namespace std;int KEY[] = { 180, 136, 137, 147, 191, 137, 147, 191, 148, 136, 133, 191, 134, 140, 129, 135, 191, 65 };int ma

2020-07-20 11:01:02 552

原创 【UIUCTF】Redd‘s Art WriteUp

题外话:这个CTF的前端UI非常不错!一道逆向题(截至写WP的时间,这比赛总共就2道逆向,一道200分的 一道500分的 =_=)老规矩,用IDA打开,先Shift+F12看一看这是不是一道送分题还真找着了,可惜提交了不正确,明显不是一道送分题大致看了一下,main函数就是哔哔了一大堆,没有任何逻辑于是从函数窗口中的函数里找一找找到一个明显是动态patch代码的函数,没有发现交叉引用这个函数的作用是返回一个整数,把s的每个char转成int加起来,而这个s就是前面看到的假flag,写

2020-07-20 10:57:26 251

原创 【UIUCTF】Kernel Exploitation WriteUp

这个前端UI非常好看的比赛有一个大的题型,叫Kernel Exploitation,感觉非常有意思,就记录一下我的整个做题过程叭~第一题,教你怎么开始这个题型readme上面有写flag第二题,让你登录这个系统既然他们官方推荐使用RealVNC,那就去网上下一个,然后连上用户名给了,而密码说是4个小写字母,而且提示了第一个字母是p,盲猜pwny猜的一如既往的准 (¬︿̫̿¬☆)!第三题,让你调用syscall看了一下官方文档,写了一大堆,懒得看了帮助文档中有一个demo.

2020-07-20 10:56:34 230

原创 【SCTF2020】signin WriteUp

一道SCTF的逆向题,做了很久很久才做起,唉…下载附件,打开发现是一个GUI程序IDA打开,根据经验分析出这是一个pyqt程序,于是用解包脚本处理这个exe脚本Github:pyinstxtractor执行脚本后得到了一个解包后的文件夹在这里我们重点关注main和struct文件用WinHex打开,发现main其实是一个没有pyc文件头的pyc文件,而struct中有文件头于是我们把struct的前16个字节添加到main的最前面,并改名为main.pyc,得到如下文

2020-07-06 11:03:27 991 5

原创 【SCTF2020】get_up WriteUp

一道SCTF的逆向题,做了很久很久才做起,唉…IDA打开,用shift+f12查找出现的字符串,再通过x交叉引用定位到主函数根据伪代码,大概是判断我们输入的一个长度小于等于6的字符串,跟进判断函数看一看看到32位的a-f+0-9的字符串,盲猜哈希,又因为输入的长度小于等于6,肯定能爆破出来,于是丢到cmd5网站上,解出来“sycsyc”成功绕过第一个判断以后,下面的代码大致意思是查找.reioc段并且改为可写,然后用刚刚输入的字符串进行异或,这里用IDCPython脚本处理一下可以看到处

2020-07-06 11:01:56 512 5

原创 【第五空间2020】twice WriteUp

checksec一下,开了栈溢出保护和栈执行保护IDA打开看看,main函数是一个for循环,InitData函数执行初始化setvbuf操作后返回0跟进这个函数,结合main函数发现,这个函数只会被调用2次,然后main函数将会结束,第一次进这个函数的时候,v3=89,第二次进这个函数的时候,v3=112缓冲区s的大小是88字节,而后面紧跟着canary,因此第一次写满89字节以后可以泄露出canary(canary首位必定为0,所以通过第89个字节覆盖首位可以使得puts函数顺带一并输出

2020-07-06 11:01:24 266

原创 【BUUCTF - PWN】baby_rop2

checksec一下,栈溢出IDA打开看看,明显的栈溢出漏洞题目给了libc文件,使用printf把read的got地址打印出来即可泄露libc地址,然后one_gadget拿shellfrom pwn import *from LibcSearcher import *context.os='linux'context.arch='amd64'context.log_leve...

2020-04-18 02:30:41 440

原创 【BUUCTF - PWN】ciscn_2019_s_3

checksec一下,栈溢出IDA打开看看,main函数内只有一个call vuln注意到vuln函数末尾并没有使用leave指令,即直接把之前push的rbp当作return address我们要ROP的话offset只需要0x10程序里还给了一些gadget,注意到当rax=0x3b时syscall为execve,只需要让rdi="/bin/sh"、rsi=0、rdx=0即可ge...

2020-04-17 01:30:08 728 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除