- 博客(86)
- 收藏
- 关注
原创 BUUCTF——[SWPU2019]ReverseMe
不得不说,如果仅是靠IDA去纯肉眼看,那必然是非常消耗时间的,这个函数的作用是,将input作为参数输入,然后输出v30。参数从右到左push进去,因此v30变量的地址就是 [ebp - 0x88],于是乎我们在这个地址下硬件写入断点。然后发现断在这个地方,这是一个循环,调试后很容易发现,是将input与一个固定值进行异或加密。这时候我们不一定要用IDA,可以用x32dbg下硬件写入断点帮我们看看具体是咋整的。就是让人眼乱,里面还参杂着一些函数,鬼知道会不会给你来一个对v30的值的改变。
2024-05-10 11:09:34
451
原创 Ollydbg和x96dbg开发插件及VS调试踩的坑
这个回调函数允许插件执行与菜单项相关的操作,比如执行特定的分析、跳转到特定的地址等。这个回调函数允许插件在调试器启动时执行一些初始化操作,比如注册一些特定的事件处理器或者设置一些调试环境。这个回调函数允许插件在调试器停止时执行一些清理工作,比如释放资源或者关闭一些已经打开的文件。: 当调试器捕获到调试事件时调用此回调函数。这些回调函数是针对调试器插件开发的,在 x96dbg 中用于处理不同类型的调试事件。还有值得一提的是x96dbg的回调导出函数,我这该死的中文文档并未提及,我找了半天。
2024-03-30 09:03:02
1033
原创 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
1013
原创 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
1568
原创 BUUCTF——CrackMe 反调试操作
这题主要是反调试而且不是不让你调试,而是加入了很多干扰项,很磨人下面列举出这道题的反调试操作上述操作主要集中在函数中。
2023-12-20 18:25:56
1626
3
原创 【每日逆向】BUUCTF--[ACTF新生赛2020] easyre
就是将V6扩展到18个字节大小,V5也扩展到12个字节大小,这样更符合源代码的习惯。后面的解密我采用的是逐字节爆破,在可见字符范围内,狠狠地爆。拿到exe文件先查下信息,是一个32位程序,加了壳。注意不是ACTF{U9X_1S_W6@T?不会脱,直接拿到自动脱壳机潦草结束。看着有点乱,稍微改改。
2023-11-12 19:28:09
2919
2
原创 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
1055
原创 【逆向】导入表注入
很淦的是,当学到动态链接库的时候尝试过自己用def导出dll文件,当时啥问题都没有,一路畅通,但是很淦的是,昨天却死活导不出,只有dll没有lib文件,导致把dll放到Depend什么东东都没看见。谈谈我的理解,当exe想要调用dll里的函数的时候,首先去导入表找对应的函数名或者导出序号,如果IAT有现成的已经绑定好的地址,那么就直接调用,如果没有,则需要通过INT IAT表存着的函数名或者导出序号,然后调用GetProcAddress() 函数去导出表找对应的函数真实地址,填在IAT,然后调用函数。
2023-10-24 20:36:51
757
原创 【逆向】通过新增节移动导出表和重定位表(附完整代码,直接可运行)
但是我之前一直不理解,特么为毛要挪动函数名字符串啊,这玩意不是等dll解密出来就能用了吗?百思不得其解,去问大佬们,大佬们说的我都听又听不懂,学又学不会。很淦但是我只能装作听懂的样子,感谢大佬们的赐教,其实我是不懂的,经过一番摸索,我终于悟了!首先给大家看看用def导出的dll应该怎么使用首先 ,加了密后,只有使用Dll的时候,dll才会解密,那在dll外想要调用dll
2023-10-17 17:34:36
916
原创 【逆向】导出表:1.编写程序打印所有的导出表信息 2.编写GetFunctionAddrByName 3.编写GetFunctionAddrByOrdinal
结果我试了半天,最后获得函数的真正地址也是正确的,结果就是运行不起来,tnnd,搞了好久,最后经过高人指点才知道,原来堆也是需要有运行权限的,貌似堆貌似没有运行权限。申请一个堆,里面存Dll的数据,通过分析可以找到Dll文件中函数的偏移嘛,然后我就想着,这个偏移,加上堆的基地址,赋值给一个函数指针,那不是直接就可以调用吗?注意注意:有个踩过的坑我想分享给大家。通过函数的序号获取函数在DLL的偏移。这是从数据目录中获取每个表的地址。
2023-10-12 22:21:33
1321
原创 快速排序算法(C++递归版)
2.将大于Pivot的数字放在Pivot的右边。3.将小于Pivot的数字放在Pivot的左边。参考b站视频:BV1at411T75o。4.分别对左右子序列重复前三步操作。1.选定Pivot中心轴。
2023-10-06 21:18:59
97
原创 【逆向】用代码实现合并节操作和打印数据目录结构,以及记录踩过的坑
但我发现这也似乎不太行,修改结束后,节表数目变成一个,但是得到的exe文件甚至连图标都没有了,当我把节的数目改回来时,惊奇的发现图标又出现了。百思不得其解,百度了好久,也没得到一个答案,最后问题解决了,原来是申请空间太小了,都进去的东西太多,可能覆盖掉了不该覆盖的东西,进而报错。说来惭愧,这一节课的作业写了超级久,原因是听完课就感觉,就这?那么简单,直接上手写!先讲讲合并节的步骤吧,我的实验是将第一个节表复制到最后一个节表后面,节表数量不变。所以我尝试了下只把最后一个节和新增节合并,还是可以的。
2023-10-03 23:51:02
677
原创 【逆向】03-20扩大节 c++代码完成 ;类当作函数参数却调用了析构函数疑难分析
因为对象按值传递时,编译器自动生成的复制构造函数进行了指针的简单拷贝,像指针直接赋值 str=s 一样,而没有拷贝指针指向的内容,这样当你将对象传递给函数时确实会有一个拷贝,但是这个拷贝会有一个指针的拷贝,所以两个对象中的 str 指向的内存一样,在退出函数时,析构销毁了函数中对象中的指针,但不幸的是这样实参对象 str 指向的内容也被销毁。另外新添加了函数Expand_Section函数,可以自动扩大最后一个节,并写入新的文件中,亲测可以使用,程序可以完美运行。
2023-10-02 20:05:06
927
原创 【逆向】对PE结构缩小,拉伸,添加节,写入文本等功能做成c++的类
不知道大家看别人代码的时候,会不会很讨厌别人使用一些奇奇怪怪的宏定义,明明非常简单的一些指针,除非是结构体指针,确实蛮好用的,但是有些我实在难以理解,于是我的代码几乎没有那些奇奇怪怪的宏定义,主要是自己看着也舒服(其实是我水平确实不高,对比其他人,开发水平实在低)。昨天闲的蛋疼,一想如果每次完成的作业都需要重新写一次完整的PE结构缩小,放大,写入文件等功能,对于我这个上了年纪的老人来说实在难绷,因此我昨天花了大力气,调试了蛮久的,封装在c++的类里面,结构看起来也清晰,功能我也会按照进度持续更新。
2023-10-02 13:00:32
877
原创 【逆向】(c++)分析pe结构,拉伸pe结构,缩小pe结构
建议大家认认真真写一遍,收获蛮大的,是可以加深对pe结构的理解,尤其是对指针的使用,和对win32的一些宏的定义的理解和使用。
2023-09-30 15:43:50
1289
1
原创 【逆向】在程序空白区添加Shellcode
随便写一个简单的GUI程序。,功能就是简单地弹出一个窗口我们的目的是在代码空白区段添加一个shellcode,添加一个MessageBox函数。
2023-09-27 22:58:10
1003
原创 [滴水逆向]03-12 pe头字段说明课后作业,输出pe结构
所以重点来了:用完ftell()这个函数,就会将文件内部指针的位置移动到最末尾(如果设置的是SEEK_END),所以需要重新使用一下fseek重新设置文件内部指针的一个位置。有个问题,因为我认为前面一个已经判断指针移动失败了,于是我把第二个注释了,发现少了第二个fseek就会输出错误的答案。如果执行成功 , 则返回 0 , 失败返回非 0 , 并设置 error 错误代码;偏移量参数 , 可以为正数 , 也可以为负数;设置的指针的位置是 起始位置 + 偏移量;
2023-09-21 20:08:00
1109
原创 [OGeek2019 Final]OVM——详细入门VM pwn
仔细分析代码都可以发现,这些操作都没有对数组的下标进行检查,这样会导致什么后果呢,举个例子,如果有一个重要数据B存在数组array[10]的内存前面,如果不对数组的下标进行检查的话,那么我就可以构造array[-1]并输出,就可以得到B的内容了。也就是说,我们给程序输入一串指令,这个程序会有自己独特的,对代码的理解,并进行像分解成机器码那样,执行,而像寄存器,栈空间,存储空间都是程序自己设计的,而不是系统分配的。这两个条件判断语句的目的是确保在进行内存释放操作之前,所提供的指针和大小都是有效的。
2023-08-06 21:43:46
1196
原创 BUUCTF——reverse3 适合新手的关于base64加密算法代码的分析
这个代码的作用是取byte_41A144[1]的高四位,再右移四位充当第二个加密字符的低四位,然后再取byte_41A144[0]的低2位再左移4位充当第二个加密字符的高二位(这里的*16就是相当于
2023-07-29 22:21:00
611
原创 用c++实现大小端序互转(字符串方法)
今天在逆一个RC4加密算法,忘了IDA如何自动将大小端序互转的按键,索性自己写了一个,因为是用字符串方法,所以理论上长度是管够的。非常简单,直接ctrl cv走就行。
2023-07-11 00:12:57
493
原创 C语言链表(头节点也包含数据)的冒泡排序法
和冒泡排序法一样,外循环次数是总元素数-1,内循环次数是总元素数-1-外循环次数。网上的都是写头节点不包含数据的写法,我习惯头节点也存着数据,就当做个记录。可恶啊,为什么那么长呜呜。
2023-06-06 22:21:41
159
原创 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
908
原创 C++格式化输入,sscanf的使用
函数用于从一个字符串中按照指定的格式解析数据,并将解析后的结果存储到指定的变量中。它的第一个参数是待解析的字符串,第二个参数是格式字符串,后续参数是待填充的变量。scanf在微软的编译器几乎都被禁用了,确实这玩意不安全,不检查输入的长度。众所周知,c++的cin虽然是方便的,但是对于格式化字符串输入确实有一些限制。我们想要从这个字符串提取出10,20,30分别赋值给x,y,z这三个变量,很显然cin难堪大用。当然它也给出了自己的建议,就是改用sscanf_s,用法几乎没有差别!sscanf的用法是这样的。
2023-05-29 01:00:41
1569
原创 低版本下的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
544
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人