自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(86)
  • 收藏
  • 关注

原创 BUUCTF——[SWPU2019]ReverseMe

不得不说,如果仅是靠IDA去纯肉眼看,那必然是非常消耗时间的,这个函数的作用是,将input作为参数输入,然后输出v30。参数从右到左push进去,因此v30变量的地址就是 [ebp - 0x88],于是乎我们在这个地址下硬件写入断点。然后发现断在这个地方,这是一个循环,调试后很容易发现,是将input与一个固定值进行异或加密。这时候我们不一定要用IDA,可以用x32dbg下硬件写入断点帮我们看看具体是咋整的。就是让人眼乱,里面还参杂着一些函数,鬼知道会不会给你来一个对v30的值的改变。

2024-05-10 11:09:34 246

原创 Ollydbg和x96dbg开发插件及VS调试踩的坑

这个回调函数允许插件执行与菜单项相关的操作,比如执行特定的分析、跳转到特定的地址等。这个回调函数允许插件在调试器启动时执行一些初始化操作,比如注册一些特定的事件处理器或者设置一些调试环境。这个回调函数允许插件在调试器停止时执行一些清理工作,比如释放资源或者关闭一些已经打开的文件。: 当调试器捕获到调试事件时调用此回调函数。这些回调函数是针对调试器插件开发的,在 x96dbg 中用于处理不同类型的调试事件。还有值得一提的是x96dbg的回调导出函数,我这该死的中文文档并未提及,我找了半天。

2024-03-30 09:03:02 481

原创 buuctf 逆向 number_game

也应该要知道是二叉树了,这就是中序遍历,也就是将刚刚按照输入的flag层次遍历建立起来的树,用中序遍历重新得到一个字符串。重新建立树,再进行层次遍历,得到的就是1 1 3 4 2 4 0 0 2 4。其实就是自动给树结点赋值了,相当于将输入进来的flag按照层序遍历赋值建树。对应的中序遍历的数组就是0 4 2 1 4 2 1 4 3 0。这里将得到的中序遍历出来的字符串插入到待检测的数组中。将地址为0x601060的数组每五个一行。每一行的每一个字符都不能重复。每一列的元素不能相同。

2024-01-06 17:46:47 945

原创 buuctf 逆向 findkey wp

右键会校验String(实际上是没有地方给我们输入String的,需要我们手动的去改String的值)。HP_ALGID 的值是 0x0001,HP_HASHSIZE 的值是 0x0004,HP_HASHVAL 的值是 0x0002。把Str拖出来,找个在线MD5网站解码 其实哈希是不能解码的,但是可以用穷举,先正向加密,和密文对比。点开也就这样了,没有输入的点,感觉和之前的 “刮开有奖” 有一点点相像。:如果哈希算法是带密钥的,则传入密钥的句柄;:指定要使用的哈希算法的 ALG_ID 值。

2024-01-04 22:11:29 1424

原创 BUUCTF——CrackMe 反调试操作

这题主要是反调试而且不是不让你调试,而是加入了很多干扰项,很磨人下面列举出这道题的反调试操作上述操作主要集中在函数中。

2023-12-20 18:25:56 1266 2

原创 【每日逆向】BUUCTF--[ACTF新生赛2020] easyre

就是将V6扩展到18个字节大小,V5也扩展到12个字节大小,这样更符合源代码的习惯。后面的解密我采用的是逐字节爆破,在可见字符范围内,狠狠地爆。拿到exe文件先查下信息,是一个32位程序,加了壳。注意不是ACTF{U9X_1S_W6@T?不会脱,直接拿到自动脱壳机潦草结束。看着有点乱,稍微改改。

2023-11-12 19:28:09 1453

原创 BUUCTF——刮开有奖

有个GetDlgItemText,我实在没搞懂,明明没有用MFC画出对话框,为什么要来一个GetDlgItemText获取输入框内容,并传给了edit_string。直接找到WinMain,发现里面只有一个对话框API(如果只有一个对话框,那真就没有输入框了),CallBack函数是DialogFunc。这里有几个比较坑的点,sub_4010F0这个函数的第一个参数是地址,但是我们追进去发现IDA对类型判断有误。按照这个解密,v7[0],v10,v8,v16,v4,v5都知道了。进入DialogFunc。

2023-11-11 14:49:14 706

原创 【逆向】二叉树的实现

【逆向】二叉树的实现。

2023-11-03 20:57:20 734

原创 [逆向]容器的实现(c++)

【代码】[逆向]容器的实现(c++)

2023-11-01 22:44:33 483

原创 【逆向】导入表注入

很淦的是,当学到动态链接库的时候尝试过自己用def导出dll文件,当时啥问题都没有,一路畅通,但是很淦的是,昨天却死活导不出,只有dll没有lib文件,导致把dll放到Depend什么东东都没看见。谈谈我的理解,当exe想要调用dll里的函数的时候,首先去导入表找对应的函数名或者导出序号,如果IAT有现成的已经绑定好的地址,那么就直接调用,如果没有,则需要通过INT IAT表存着的函数名或者导出序号,然后调用GetProcAddress() 函数去导出表找对应的函数真实地址,填在IAT,然后调用函数。

2023-10-24 20:36:51 571

原创 【逆向】通过新增节移动导出表和重定位表(附完整代码,直接可运行)

但是我之前一直不理解,特么为毛要挪动函数名字符串啊,这玩意不是等dll解密出来就能用了吗?百思不得其解,去问大佬们,大佬们说的我都听又听不懂,学又学不会。很淦但是我只能装作听懂的样子,感谢大佬们的赐教,其实我是不懂的,经过一番摸索,我终于悟了!首先给大家看看用def导出的dll应该怎么使用首先 ,加了密后,只有使用Dll的时候,dll才会解密,那在dll外想要调用dll

2023-10-17 17:34:36 757

原创 【逆向】导出表:1.编写程序打印所有的导出表信息 2.编写GetFunctionAddrByName 3.编写GetFunctionAddrByOrdinal

结果我试了半天,最后获得函数的真正地址也是正确的,结果就是运行不起来,tnnd,搞了好久,最后经过高人指点才知道,原来堆也是需要有运行权限的,貌似堆貌似没有运行权限。申请一个堆,里面存Dll的数据,通过分析可以找到Dll文件中函数的偏移嘛,然后我就想着,这个偏移,加上堆的基地址,赋值给一个函数指针,那不是直接就可以调用吗?注意注意:有个踩过的坑我想分享给大家。通过函数的序号获取函数在DLL的偏移。这是从数据目录中获取每个表的地址。

2023-10-12 22:21:33 1258

原创 快速排序算法(C++递归版)

2.将大于Pivot的数字放在Pivot的右边。3.将小于Pivot的数字放在Pivot的左边。参考b站视频:BV1at411T75o。4.分别对左右子序列重复前三步操作。1.选定Pivot中心轴。

2023-10-06 21:18:59 58

原创 【逆向】用代码实现合并节操作和打印数据目录结构,以及记录踩过的坑

但我发现这也似乎不太行,修改结束后,节表数目变成一个,但是得到的exe文件甚至连图标都没有了,当我把节的数目改回来时,惊奇的发现图标又出现了。百思不得其解,百度了好久,也没得到一个答案,最后问题解决了,原来是申请空间太小了,都进去的东西太多,可能覆盖掉了不该覆盖的东西,进而报错。说来惭愧,这一节课的作业写了超级久,原因是听完课就感觉,就这?那么简单,直接上手写!先讲讲合并节的步骤吧,我的实验是将第一个节表复制到最后一个节表后面,节表数量不变。所以我尝试了下只把最后一个节和新增节合并,还是可以的。

2023-10-03 23:51:02 622

原创 【逆向】03-20扩大节 c++代码完成 ;类当作函数参数却调用了析构函数疑难分析

因为对象按值传递时,编译器自动生成的复制构造函数进行了指针的简单拷贝,像指针直接赋值 str=s 一样,而没有拷贝指针指向的内容,这样当你将对象传递给函数时确实会有一个拷贝,但是这个拷贝会有一个指针的拷贝,所以两个对象中的 str 指向的内存一样,在退出函数时,析构销毁了函数中对象中的指针,但不幸的是这样实参对象 str 指向的内容也被销毁。另外新添加了函数Expand_Section函数,可以自动扩大最后一个节,并写入新的文件中,亲测可以使用,程序可以完美运行。

2023-10-02 20:05:06 890

原创 【逆向】对PE结构缩小,拉伸,添加节,写入文本等功能做成c++的类

不知道大家看别人代码的时候,会不会很讨厌别人使用一些奇奇怪怪的宏定义,明明非常简单的一些指针,除非是结构体指针,确实蛮好用的,但是有些我实在难以理解,于是我的代码几乎没有那些奇奇怪怪的宏定义,主要是自己看着也舒服(其实是我水平确实不高,对比其他人,开发水平实在低)。昨天闲的蛋疼,一想如果每次完成的作业都需要重新写一次完整的PE结构缩小,放大,写入文件等功能,对于我这个上了年纪的老人来说实在难绷,因此我昨天花了大力气,调试了蛮久的,封装在c++的类里面,结构看起来也清晰,功能我也会按照进度持续更新。

2023-10-02 13:00:32 794

原创 【逆向】(c++)分析pe结构,拉伸pe结构,缩小pe结构

建议大家认认真真写一遍,收获蛮大的,是可以加深对pe结构的理解,尤其是对指针的使用,和对win32的一些宏的定义的理解和使用。

2023-09-30 15:43:50 1167 1

原创 【逆向】在程序空白区添加Shellcode

随便写一个简单的GUI程序。,功能就是简单地弹出一个窗口我们的目的是在代码空白区段添加一个shellcode,添加一个MessageBox函数。

2023-09-27 22:58:10 936

原创 【排序】插入排序法

插排对于冒泡排序法就是在一般情况下,算法复杂度小于O(n^2)代码还是非常好理解的,写下练练手。

2023-09-26 17:21:54 32

原创 【队列】用双向链表加队列实现窗口查询问题

算法复杂度 比每次滑动都重新判断一次要简单,这也是优势之一,但是代码量较多。

2023-09-26 13:19:47 71

原创 【队列】用c++链表实现队列

【队列】用c++链表实现队列。

2023-09-25 23:28:35 34

原创 【队列】队列的静态实现 c++代码

【代码】【队列】队列的静态实现 c++代码。

2023-09-25 21:15:50 27

原创 [滴水逆向]03-13 用c++打印出节表结构

【代码】[滴水逆向]03-13 用c++打印出节表结构。

2023-09-22 23:35:14 759

原创 【栈】线性表模拟栈实现四色地图染色

思路就是当循环判断无论1-4颜色都不行,就要回溯到上一个元素加1,接着判断。

2023-09-22 20:58:02 94

原创 【栈】中缀表达式转后缀表达式

【栈】中缀表达式转后缀表达式。

2023-09-22 18:54:14 44

原创 [滴水逆向]03-12 pe头字段说明课后作业,输出pe结构

所以重点来了:用完ftell()这个函数,就会将文件内部指针的位置移动到最末尾(如果设置的是SEEK_END),所以需要重新使用一下fseek重新设置文件内部指针的一个位置。有个问题,因为我认为前面一个已经判断指针移动失败了,于是我把第二个注释了,发现少了第二个fseek就会输出错误的答案。如果执行成功 , 则返回 0 , 失败返回非 0 , 并设置 error 错误代码;偏移量参数 , 可以为正数 , 也可以为负数;设置的指针的位置是 起始位置 + 偏移量;

2023-09-21 20:08:00 1055

原创 滴水3期逆向 ——内存分配,文件读写

【代码】滴水3期逆向 ——内存分配,文件读写。

2023-09-20 22:13:50 816

原创 【栈】用栈实现等价类划分问题

书上的例子实在晦涩难懂,写了好久,代码能运行,但是待改进。

2023-09-17 20:35:03 77

原创 【栈】用链表实现栈

【栈】用链表实现栈。

2023-09-17 12:44:38 69

原创 【栈】用数组实现栈,c++代码

【代码】【栈】用数组实现栈,c++代码。

2023-09-17 11:11:51 101

原创 【栈】用栈实现检测括号是否配对

要记住的是一开始stack->top要初始化为-1,因为当存第一个值的时候,栈顶RSP和RBP是指向同一个值。

2023-09-17 10:18:41 143

原创 [OGeek2019 Final]OVM——详细入门VM pwn

仔细分析代码都可以发现,这些操作都没有对数组的下标进行检查,这样会导致什么后果呢,举个例子,如果有一个重要数据B存在数组array[10]的内存前面,如果不对数组的下标进行检查的话,那么我就可以构造array[-1]并输出,就可以得到B的内容了。也就是说,我们给程序输入一串指令,这个程序会有自己独特的,对代码的理解,并进行像分解成机器码那样,执行,而像寄存器,栈空间,存储空间都是程序自己设计的,而不是系统分配的。这两个条件判断语句的目的是确保在进行内存释放操作之前,所提供的指针和大小都是有效的。

2023-08-06 21:43:46 858

原创 BUUCTF——reverse3 适合新手的关于base64加密算法代码的分析

这个代码的作用是取byte_41A144[1]的高四位,再右移四位充当第二个加密字符的低四位,然后再取byte_41A144[0]的低2位再左移4位充当第二个加密字符的高二位(这里的*16就是相当于

2023-07-29 22:21:00 427

原创 用c++实现大小端序互转(字符串方法)

今天在逆一个RC4加密算法,忘了IDA如何自动将大小端序互转的按键,索性自己写了一个,因为是用字符串方法,所以理论上长度是管够的。非常简单,直接ctrl cv走就行。

2023-07-11 00:12:57 402

原创 c++链表,含链表的构造,删除某链表节点,和链表冒泡排序

【代码】c++链表,含链表的构造,删除某链表节点,和链表冒泡排序。

2023-06-07 17:04:26 71

原创 C语言链表(头节点也包含数据)的冒泡排序法

和冒泡排序法一样,外循环次数是总元素数-1,内循环次数是总元素数-1-外循环次数。网上的都是写头节点不包含数据的写法,我习惯头节点也存着数据,就当做个记录。可恶啊,为什么那么长呜呜。

2023-06-06 22:21:41 138

原创 pwn中利用off by null的一个思路,构造假chunk的难以触及pre_size咋整

但是如果这个程序比较精明,把指针的free掉的时候清空了,这就需要好好利用这个off by null了,也就是利用这个off by null,去借助假的堆块把东西东西打出来,有时甚至能够double free(在2.27的glibc中直接double free的方法似乎已经不多见了,现在检查都很严格)。以上是unlink的源码,可以注意到,进行unlink操作的时候,构造假的fd,bk指针还不够呢,它还要去检查chunk的size和next_chunk的prev_size是否一致。

2023-05-29 15:30:26 820

原创 C++格式化输入,sscanf的使用

函数用于从一个字符串中按照指定的格式解析数据,并将解析后的结果存储到指定的变量中。它的第一个参数是待解析的字符串,第二个参数是格式字符串,后续参数是待填充的变量。scanf在微软的编译器几乎都被禁用了,确实这玩意不安全,不检查输入的长度。众所周知,c++的cin虽然是方便的,但是对于格式化字符串输入确实有一些限制。我们想要从这个字符串提取出10,20,30分别赋值给x,y,z这三个变量,很显然cin难堪大用。当然它也给出了自己的建议,就是改用sscanf_s,用法几乎没有差别!sscanf的用法是这样的。

2023-05-29 01:00:41 1016

原创 1.重载输入流(重载<<),为什么要返回引用?2.派生类的构造函数为什么要借助基类进行初始化?

今天c++课,不得不吐槽自己确实掌握的不够好。

2023-05-24 00:21:41 394

原创 低版本下的unlink漏洞攻击

首先unlink操作是发生在unsortedbin里的,也就是说我们构造的堆块必须要大小要是大于等于0x80(包括chunk头的话实际上是0x90,这是最起码的),然后就是构造假的chunk,注意注意,unlink的漏洞利用的条件是,首先最最最起码要有一个off by one的漏洞,接着就是构造一个假的chunk,最重要的是构造它的fd,bk指针,还要去修改下一个chunk的presize位和假chunk的size对得上,注意注意,假chunk的size位的in_use位要为1。

2023-05-22 19:33:37 407

空空如也

空空如也

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

TA关注的人

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