自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Tokameine的博客

"The unexamined life is not worth living."

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

原创 [Asis CTF 2016] b00ks —— Off-By-One笔记与思考

前言: 这道题做得有点痛苦......因为本地通常都很难和服务器有相同的环境,使用mmap开辟空间造成的偏移会因此而变得麻烦,并且free_hook周围很难伪造chunk,一度显然恐慌...... 不过本来应该很早就开始Off-By-One的学习的,竟然现在才注意到......惭愧正文: book结构:struct book{ int id; char *name; char *description; in...

2021-09-13 00:03:47 1190 2

原创 [BUUCTF]inndy_rop 杂谈、32位与64位系统调用、与思考

总之先从题目开始看吧,是一道非常简单但却让我长见识的题......int overflow(){ char v1[12]; // [esp+Ch] [ebp-Ch] BYREF return gets(v1);} 明显的栈溢出,且程序基本没有特别的保护,正常构造rop链即可拿到shell 主要是想拓展一下系统调用与一个简单的获取ROP方法ROPgadget --binary rop --ropchainROP chain...

2021-09-07 22:43:53 478

原创 [pwnable] 3x17 分析与思考

有点炫酷的利用方式,不得不承认,确实让我长见识了。正文:void __fastcall __noreturn start(__int64 a1, __int64 a2, int a3){ __int64 v3; // rax int v4; // esi __int64 v5; // [rsp-8h] [rbp-8h] BYREF void *retaddr; // [rsp+0h] [rbp+0h] BYREF v4 = v5; v5 = v3;...

2021-09-04 19:05:41 557

原创 360chunqiu2017_smallest —— 从例题理解SROP

前言: 本篇博客为个人学习过程中的理解,仅记录个人理解,WIKI写的要比本篇详细得多。若与其存在矛盾,请以WIKI为准,也感谢读者指出问题。正文:SROP(Sigreturn Oriented Programming),与常规ROP的区别在于通过sigreturn函数来进行返回而不是retn指令 这里引用WIKI中对Signal机制的介绍: Signal 机制¶Signal 机制是类 unix 系统中进程之间相互传递信息的一...

2021-08-29 00:44:27 1233 2

原创 [SECCON CTF 2016 Quals] Chat 分析与思考

CTFSHOW吃瓜杯,PWN方向第三题竟是SECCON原题,于是当时没有仔细研究,直接套用了其他大佬的EXP(第二第三第四题都是各大比赛的原题,网上可以直接找到写好的EXP......) 既然现在比赛结束了,正好来补一下WP。收获很大,说明我还非常菜.....正文:函数: Main:int __cdecl main(int argc, const char **argv, const char **envp){ int v3; //...

2021-08-21 01:30:43 388

原创 【FastBinAttack实战】babyheap_0ctf_2017

分析利用: 无壳,IDA打开后可以看出题目是基本的增删与展示(函数名为方便阅读而修改)__int64 __fastcall main(__int64 a1, char **a2, char **a3){ char *v4; // [rsp+8h] [rbp-8h] v4 = initMmapList(); while ( 1 ) { Menu(); switch ( getInput() ) { case 1LL: ...

2021-08-09 14:30:10 484

原创 关于如何理解Glibc堆管理器(Ⅹ——完结、补充、注释——Arena、heap_info、malloc_*)

本篇实为个人笔记,可能存在些许错误;若各位师傅发现哪里存在错误,还望指正。感激不尽。若有图片及文稿引用,将在本篇结尾处著名来源(也有置于篇首的情况)。 截至到本节内容,该系列算是正式完结了,后续或许会有补充,但基本上都将添加在本节内容中。在前几节中,笔者已经按照自己的思路尽可能详尽的将Glibc的堆管理器Ptmalloc2的方式做了一定的介绍,尽管Ptmalloc2的内容肯定不止这些,但已能大致了解其工作方式了 但也有一些必要的内容未曾在前几节中放出,诸如突然出现...

2021-08-07 19:12:48 708

原创 关于如何理解Glibc堆管理器(Ⅸ——从源代码理解free)

本篇实为个人笔记,可能存在些许错误;若各位师傅发现哪里存在错误,还望指正。感激不尽。若有图片及文稿引用,将在本篇结尾处著名来源(也有置于篇首的情况)。 为了文章的可读性,笔者将使用“块引用”来表示分支情况,在没有特别标注的情况下(没有说明引用来源时),其中内容均为笔者所写目录源代码:__libc_free:分支1:free(0)分支2:该内存由mmap分配分支3:否则_int_free:分支1:使用Tcache分支2:符合Fast Bin...

2021-08-07 16:59:55 691

原创 关于如何理解Glibc堆管理器(Ⅷ——从源代码理解malloc)

本篇实为个人笔记,可能存在些许错误;若各位师傅发现哪里存在错误,还望指正。感激不尽。若有图片及文稿引用,将在本篇结尾处著名来源(也有置于篇首的情况)。 关于glibc堆管理器Ptmalloc2的实际讨论在前几节已经大致结束了,但是笔者仍觉得对其分配机制缺少完整的认识,于是最后两节将直接通过源代码来对其分配和释放规则进行分析 尽管笔者所用的Ubuntu18.04使用glibc-2.27,但笔者在对照源代码后发现,实际的操作和官方放出的glibc2.29更加接近,因此...

2021-08-07 14:12:03 1247

原创 关于如何理解Glibc堆管理器(Ⅶ——Tcache Bins!!)

本篇实为个人笔记,可能存在些许错误;若各位师傅发现哪里存在错误,还望指正。感激不尽。若有图片及文稿引用,将在本篇结尾处著名来源(也有置于篇首的情况)。 笔者本该将这一节的内容与第二节合并的,因为Tcache的并入并没有带来非常多的内容。但从结构上考虑,笔者一直以来都在使用glibc-2.23进行说明,在该版本下尚且没有引入Tcache Bins,因此这一节的内容一直拖欠到今。直到glibc-2.27开始,官方才引入了Tcache Bins结构,因此本节内容也将在该版本下进行说明(不...

2021-08-06 22:09:20 776

原创 关于如何理解Glibc堆管理器(Ⅵ——从House of Orange理解Heap是如何被拓展的)

本篇实为个人笔记,可能存在些许错误;若各位师傅发现哪里存在错误,还望指正。感激不尽。若有图片及文稿引用,将在本篇结尾处著名来源(也有置于篇首的情况)。目录参考文章:正文:mmap:brk: 调试代码:参考文章:https://ctf-wiki.org/pwn/linux/user-mode/heap/ptmalloc2/house-of-orange/https://blog.csdn.net/le119126/artic...

2021-08-04 23:34:39 246 1

原创 关于如何理解Glibc堆管理器(Ⅴ——从Large Bin Attack理解malloc对Bins的分配)

本篇实为个人笔记,可能存在些许错误;若各位师傅发现哪里存在错误,还望指正。感激不尽。若有图片及文稿引用,将在本篇结尾处著名来源(也有置于篇首的情况)。参考文章: 同样先引用如下两篇文章。如果读者能够通过如下三篇文章掌握Large Bin Attack,那么本篇便只是附带品,没有什么其他内容 https://dangokyo.me/2018/04/07/a-revisit-to-large-bin-in-glibc/ https://ctf...

2021-08-03 00:55:30 491

原创 关于如何理解Glibc堆管理器(Ⅳ——从Unlink攻击理解指针与chunk寻址方式)

本篇实为个人笔记,可能存在些许错误;若各位师傅发现哪里存在错误,还望指正。感激不尽。若有图片及文稿引用,将在本篇结尾处著名来源。参考文章:在此先给出几篇可供参考的文章。笔者认为几位师傅所写的都比笔者所写要来得更加精炼。倘若您通过如下几篇文章已经能够完全理解Unlink为何,那么大可以不再阅读这篇冗长的文章。 安全客:https://www.anquanke.com/post/id/197481 看雪:https://bbs.pedi...

2021-08-01 17:43:54 449

原创 关于如何理解Glibc堆管理器(Ⅲ——从DoubleFree深入理解Bins)

本篇实为个人笔记,可能存在些许错误;若各位师傅发现哪里存在错误,还望指正。感激不尽。若有图片及文稿引用,将在本篇结尾处著名来源。环境与工具: Ubuntu16.4 / gcc / (gdb)pwn-dbg 范例:howtoheap2搭建调试环境:git clone https://github.com/shellphish/how2heap.gitcd how2heapmake 对于GitHub可能速度过慢的情况,可以尝...

2021-08-01 15:58:49 353

原创 关于如何理解Glibc堆管理器(Ⅱ——Free与Bins)

本篇实为个人笔记,可能存在些许错误;若各位师傅发现哪里存在错误,还望指正。感激不尽。若有图片及文稿引用,将在本篇结尾处著名来源。目录Free与Bins:SmallBinLargeBinUnsortedBinFast BinTcacheBin额外说明Free与Bins: malloc如果一旦和free混用,情况就变得复杂了。我们可以先思考一下下面的问题:如果只能malloc的话,那么内存最终必然会被消耗殆尽,因此free函数的存在...

2021-08-01 14:30:17 362

原创 关于如何理解Glibc堆管理器(Ⅰ——堆结构)

本篇实为个人笔记,可能存在些许错误;若各位师傅发现哪里存在错误,还望指正。感激不尽。若有图片及文稿引用,将在本篇结尾处著名来源。目录:什么是堆实际操作—————————————————————— 首先从 什么是堆 开始讲起吧。 在操作系统加载一个应用程序的时候,会为程序创建一个独立的进程,这个进程拥有着一套独立的内存结构。大致结构如下图:进程在运行之处会创建一块固定大小的堆空间,但当用户需要申请一块超出已有堆空间大小的内存时,...

2021-08-01 13:25:02 424

原创 [GKCTF 2021]checkin调试与分析

目前笔者刚刚开始入门PWN,算是通过这题涨了点见识吧主要函数:int sub_4018C7(){ char buf[32]; // [rsp+0h] [rbp-20h] BYREF puts("Please Sign-in"); putchar(62); read(0, s1, 0x20uLL); puts("Please input u Pass"); putchar(62); read(0, buf, 0x28uLL); if ( str...

2021-07-23 23:32:11 1299

原创 [N1BOOK PARTofPWN] ROP本地

这道题在BUU远程服务器上没能通过,只是在本地测试成功了,该问题将留到最后去,还请知道的大佬指教。------------------------------------------------ 首先先查询一下保护,只有NXa@ubuntu:~/Desktop/test$ checksec rop[*] '/home/giantbranch/Desktop/test/rop' Arch: amd64-64-little RELRO: ...

2021-07-17 00:24:39 314

原创 [2019红帽杯]childRE 分析与拓展

十分特殊也有趣的一题,特此记录。流程并非难以理解,但有些需要注意的点。 无壳,可以直接用IDA分析,但由于存在一些动态变量,一旦开始动调,代码将会变得更难理解,因此目前只用静态调试来审计int __cdecl main(int argc, const char **argv, const char **envp){ __int64 v3; // rax __int64 v4; // rax const CHAR *v5; // r11 __int64...

2021-07-01 15:54:20 509

原创 [BUUCTF][网鼎杯 2020 青龙组]jocker 分析与记录

无壳,IDA打开可以直接进入main函数: 第12行调用VirtualProtect函数更改了offset encrypt处的访问保护权限BOOL VirtualProtect( LPVOID lpAddress, SIZE_T dwSize, DWORD flNewProtect, PDWORD lpflOldProtect);参见:https://docs.microsoft.com/en-us/windows/win32/memor...

2021-06-30 12:59:07 356

原创 [2019红帽杯]easyRE 分析与自省

稍微......有那么一点离谱 程序无壳,可以直接放入IDA,通过字符串找到如下函数:__int64 sub_4009C6(){ __int64 result; // rax int i; // [rsp+Ch] [rbp-114h] __int64 v2; // [rsp+10h] [rbp-110h] __int64 v3; // [rsp+18h] [rbp-108h] __int64 v4; // [rsp+20h] [rbp-100h] __int...

2021-06-24 18:15:14 435

原创 [Zer0pts2020]easy strcmp 分析与加法

无壳,放入IDA自动跳到main函数__int64 __fastcall main(int a1, char **a2, char **a3){ if ( a1 > 1 ) { if ( !strcmp(a2[1], "zer0pts{********CENSORED********}") ) puts("Correct!"); else puts("Wrong!"); } else { printf("Usage: ...

2021-06-23 12:13:43 1306 1

原创 [WUSTCTF2020]level3 笔记与自省

解题过程: 直接放入IDA分析,跳入main函数,得到如下内容int __cdecl main(int argc, const char **argv, const char **envp){ char *v3; // rax char v5; // [rsp+Fh] [rbp-41h] char v6[56]; // [rsp+10h] [rbp-40h] BYREF unsigned __int64 v7; // [rsp+48h] [rbp-8h] v7 = _..

2021-06-21 21:43:32 286

原创 加壳原理及实现流程与导入表结构分析(C++源代码)

参考文章: 《加密与解密》 https://blog.csdn.net/qq_31507523/article/details/89438410

2021-05-29 19:28:29 1407 1

原创 [GWCTF 2019] xxor 笔记与思考

对我这种新手来说算是比较怪异的一题了,故此记录一下过程。解题过程: 直接放入IDA,并找到main函数,得到如下代码(看了一些其他师傅的WP,发现我们的IDA分析结果各不相同,最明显的就是HIDOWRD和LODWORD函数,该差异将在下文分析)__int64 __fastcall main(int a1, char **a2, char **a3){ int i; // [rsp+8h] [rbp-68h] int j; // [rsp+Ch] [rbp-64h] _...

2021-05-12 21:23:15 619 2

原创 伪加壳器制作记录(增节区/修改导入表)

写在前面: 真正的加壳器应该包括代码压缩、加解密、增删节区、修改PE头、破坏导入/导出表等内容,但受限于笔者目前的技术水平,还无法完全兼顾这些所有内容,仅记录一些比较关键的原理和操作(之后将另择时间完整地实现一遍壳,届时再考虑是否开新贴还是就此处补充吧)前置知识: 至少要知道PE文件格式有哪些内容(我们当然可以现查,只是在查找的时候不要显得那么手足无措的程度就行) 内容涉及一些基础的API,现查官方文档即可正文: 壳的实现在本质上似乎与ShellCode注入并...

2021-05-05 01:42:31 420 2

原创 [BUUCTF] Youngter-drive笔记与思考 (线程)

Ⅰ. 解题步骤(省略细节的描述)Ⅱ. 知识拓展(对各函数作用进行解释)Ⅰ. 如下为IDA分析得到的main函数。//main函数(主流程)int __cdecl main_0(int argc, const char **argv, const char **envp){ HANDLE v4; // [esp+D0h] [ebp-14h] HANDLE hObject; // [esp+DCh] [ebp-8h] sub_4110FF(); ::hObje...

2021-04-30 00:07:16 348

原创 [BUUCTF]RE-SimpleRev笔记与思考

背景: 初学逆向,遇到的最大问题是“在知道原算法的情况下要如何得出逆算法”;一般的加减乘除确实只需要做相反操作即可,但对于异或和取余等运算则有些麻烦,于是试着写一些可能的解决方案。似乎是数论的内容,但题主目前还未学到那种程度,诸多密码学内容尚且不明,所以以后再作更新。 题目本身是个简单的入门题,在逻辑上并没有难点。 (如下是IDA反编译Decry函数的伪代码,可能会因版本不同而略有差错)unsigned __int64 Decry(){ char v1; ...

2021-04-24 23:23:26 312

原创 XXTEA加密流程分析

代码与图解来自:https://www.jianshu.com/p/4272e0805da3 对于我这种相关知识欠缺的人来说,光是如此有些难以理解,因此基于该作者的图片与代码试着分析了一下实际的加密过程(也因为网上没能找到具体的文字描述过程,甚至图解的字符解释也没有,所以只能自己对着代码分析了)。图解:C代码:#include <stdio.h> #include <stdint.h> #define DELTA 0x9e377...

2021-03-17 01:00:35 1934 1

原创 内嵌补丁 与 洞穴代码分析案例

示范案例:unpackme#1.aC.exe,学习过程参照《逆向工程核心原理》如您发现了某些错误和不规范,请务必指正内嵌补丁: 如名字所述,是指将补丁内嵌进程序中的一种打补丁的办法。与常规补丁不同的是,内嵌补丁嵌入在程序的代码当中,也就是说,每次执行该程序时相当于打了一次补丁(常规补丁通常打下第一次就不需要再有第二次了)。洞穴代码: 内嵌补丁常用的一种打补丁的方法。目前我个人只了解到其对于“为加密或压缩过的代码下补丁”时的作用,因此也引之为例。 在反调试过程中...

2021-03-10 20:33:50 234

原创 UPack PE文件分析与调试

参考文章:https://blog.csdn.net/learn112/article/details/112029389 您可以将本篇文章当作该参考文章的拓展版、翻译版、压缩版,总之算是结合之后自己上手的过程记录。若您发现文章中出现错误,请务必指正。 范例:notepad_upack.exe 准备工具:010Editor、Stud_PE UPack:个人对其理解为一种压缩方法。将文件经过一定的算法编码压缩,在启动被压缩文件时将会按照逆过程解码。而其中比...

2021-03-06 22:20:09 318

原创 PE结构笔记

范本与工具:010Editor & Notepad.exe种类 主拓展名 可执行 EXE / SCR 驱动程序 SYS / VXD 库 DLL / OCX / CPL / DRV 对象文件 OBJ (但这并不是可执行的,在逆向分析中不怎么需要关心) 正经的PE结构头包括:DOS头(DOS header) & DOS存根(Dos Stub) & 节区头(Section header) &a...

2021-02-25 16:28:57 291

原创 桶排序 与 基数排序 与 外部排序(C++)

桶排序: 对于任何一种需要比较的排序算法,其最优的时间下界也在NlogN处,但如果已知了一部分的信息,甚至能将这个时间优化为近乎线性,这便是桶排序的一种想法。对于已知的数据量上下界,为其建立好一个个桶,每遇到一个元素,就将其放进相应的桶里,最后来统计桶中的球的数量。但即便这样还是有些抽象,建议看一些大佬们画的图解。 以及有的时候,我们的数据块并不是整数,而是一个个非常大的节点。它们无法全都装到内存里面去,所有如果仍然执行交换操作,将会浪费非常多的时间在这里。一种简单的操作方法是,为这些数...

2021-02-21 15:35:32 720

原创 快速排序代码实现与分析(C++)

学习过程跟进《数据结构与算法分析》,主要代码大致与书中例程相同,若有疏漏或错误,请务必提醒我,我会尽力修正。快速排序:在实践中最快的已知排序算法(但也有一些毛病)。 先放一下全代码://-----------快速排序-----------//#define Cutoff 2//规定操作的左右范围长度void Quicksort(int *Source,int N)//驱动例程{ Qsort(Source, 0, N - 1); }int Median3(int *...

2021-02-21 15:25:13 177

原创 归并排序代码实现与分析(C++)

学习过程跟进《数据结构与算法分析》,主要代码大致与书中例程相同,若有疏漏或错误,请务必提醒我,我会尽力修正。归并排序: 不做特别介绍,其实现的基本思想是朴素的,只是过程的梳理有些复杂(我总觉得是因为递归的操作让代码看起来十分抽象......)。 以及,与其看代码不如看看大佬的图解。对于排序一整节的内容,我都推荐看图解要胜于看代码。 这里放一位大佬制作的图解,只要看一张图再对比一些如下代码,基本上能搞明白这个代码的意图:https://www.cnblogs.co...

2021-02-21 14:52:23 84

原创 二项队列——流程分析与代码实现(C++)

学习过程跟进黑皮书《数据结构与算法分析》,主要代码大致与树种例程相同,若有疏漏或错误,请务必提醒我,我会尽力修正。二项队列Binomial Queue:(以下不只是简介,还包括了一些个人理解,如果您学习过程遇到什么麻烦,不妨先看看) 根据书上的描述,似乎是左式堆的一种改良版。虽然左式堆和斜堆每次操作都花费logN时间,且有效支持了插入、合并与最小值出堆,但其每次操作花费常数平均时间来支持插入。而在二项队列中。每次操作的最坏情况运行时间为logN,而插入操作平均花费常数时间。...

2021-02-15 22:47:32 424

原创 左式堆—流程分析与代码实现(C++)

学习过程跟进黑皮书《数据结构与算法分析》,主要代码大致与树种例程相同,若有疏漏或错误,请务必提醒我,我会尽力修正。左式堆Leftist Heap: 因为基础的堆结构由数组实现,并不支持合并等高级操作(有办法实现,但效率并不那么理想),为解决这些问题,左式堆提供了一些方案。 左式堆同样遵守最小堆的基本堆序——任意节点的关键字值低于其子树中的所有节点,但与之不同的是,左式堆的基本结构还包含了Npl(Null path length),即从该结点到达一个没有两个孩子的结点的最短距离。...

2021-02-14 15:08:36 252 2

原创 堆——最小堆代码实现与分析(C++)

最近跟着黑皮书学习数据结构,主要代码均与书上相仿。代码量有些大,所以全代码之后丢在结尾。先摘抄部分来进行分析吧。优先队列(堆): 一种能够赋予每个节点不同优先级的数据结构。有“最小堆”和“最大堆”两种基础类型。实现的根本原理有两种,一种是“数组”,另外一种则是“树”(大多是指二叉树)。但在实现最大/最小堆时,使用数组更优。因为堆并不像树那样需要很多功能支持,自然也不需要用到指针(当然,高级结构还是会用到的,比如“左式堆”等)。 如果您此前已经看过堆的基本结构概念,那应该大致明白...

2021-02-14 11:20:19 743 1

原创 散列——再散列与双散列(C++)

双散列: 原理很朴素。既然第一个哈希值会发生冲突,那再来一个哈希值不就好了? 比如,现在有两个哈希函数,分别记作Hash1(X)与Hash2(X),其中,X为关键字。 假如现在我们得到的第一个哈希值Hash1所对应的位置已经有先来的人了,位子已经被占了,那这个X肯定没办法放进去了;那么,便再计算这个X的Hash2,发现第二个位子还是空的,于是我们把Hash2放进去。这就是原理,但论谁都应该会有一些疑问,写在下面。对双散列的思考: 很明显,这种策略并不能从根本上解决...

2021-02-11 19:29:44 1989 2

原创 散列——开放定址的平方探测分析(C++实现)

以下均为个人的学习笔记。写出来是为了在写的过程中看看自己的想法有没有什么毛病。如果您找到了什么问题,请务必告知我,谢谢! 学习过程完全参照了黑皮书《数据结构与算法分析》,所以实现代码大致与书中一样(也有些许改动,因为我的黑皮书是C语言实现,而我实际实现所用却是C++,多少有一些不必要的不同啦),或许现在已经有更好的写法了,所以仅供参考吧。 先贴出完全的代码,再进行逐步分析:#include<iostream>using namespace std;//...

2021-02-11 15:09:54 246

空空如也

空空如也

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

TA关注的人

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