- 博客(126)
- 资源 (3)
- 收藏
- 关注
原创 汇编---Nasm
特点环境下说使用simd的一些优化操作,就需要使用simd指令集来操作数据,从而实现快速计算,那么此时的汇编代码块就起到了一个处理数据集功能的作用。这一块就是构造函数调用时的参数,上面我声明了必须是64bit的系统,因为rdi、rsi、rdx就是64bit ELF文件中的常用寄存器。 那么这里就很容易理解了其实就是构造了3个参数(1,message,13),这里的message就是一个字符串常量的地址。在进入到另一个函数地址时,会首先进行一个开栈操作,至于开多少取决于你的函数代码块有多少和编译器。
2023-04-29 00:16:37
2231
原创 Linux LD链接器 -静、动库编译or链接
使用动态、静态链接只会影响你链接后的可执行文件类型$ gcc main.c func.o #动态链接 $ file a.out && du a.out16K a.out$ gcc main.c func.o -static #静态链接 $ file a.out && du a.out880K a.out使用动态、静态打包,并链接不会影响文件大小如果需要编译静态程序那么链接的共享库是也必须是静态库。
2023-04-29 00:14:58
2131
原创 ffmpeg-mov-metadate不识别Bug修复
有趣的是,我试图将更多的元数据导入Plex,但这个选项实际上恰恰相反。在上面的代码中,我可以看到MDTA的方式是写入所有键,然后写入所有值,而我想大多数程序都期望列表中的键/值对,因此不知道如何读取MDTA元数据。结果是ffmpeg将Meta Box放在了Movie->UserData->Meta Box的位置。fftools/ffmpeg_opt.c -> ffmpeg_parse_options->open_files() 会读取输入文件并打印输入文件的数据,比如metadata。
2023-04-29 00:02:00
1883
原创 ffmpeg-源码
本文只是分析FFmpeg执行流程并不具有教学意义,都是以笔记形式记录,所得结论并不严谨,教学系列原理找官网。面向源码学习FFmpeg框架:为了方便调用ffmpeg api需要使用静态编译ffmpeg,一般开发大多数都是动态库为了节省应用内存,也有全静态的场景(嵌入式设备),就静态库而言大小就有编译后的头文件、动态库都放在源代码工作路径,方便管理,但是需要手动的添加头文件、链接库、动态\静态链接执行库。觉得麻烦可以直接将安装到默认用户环境目录下,在下面脚本中去掉参数就可以了。
2023-03-31 14:12:28
3707
原创 glibc-malloc申请堆空间流程分析
fast chunk就直接进入fast bin先进后出,其他bin则先进入unsort bin充当缓存作用。进行unsort bin遍历进行free chunk合并、归类在对应的bin区域查找。大于fast bin后进入unsort bin查找合适大小free chunk。小于fast bin大小时在fast bin中查找。:为了更快的找到最合适的堆块搜索顺序为如下。top chunk(切分chunk)bins(是否有最小能满足的)(满足一个条件即退出流程)top chunk划分。
2023-03-16 11:58:30
524
原创 交叉编译(NDK)
交叉编译是指在一种计算机体系结构上编译和构建应用程序,但是生成的可执行文件和库是针对另一种不同的体系结构,比如等。GNU 工具链:比如编译ARM64架构可以使用工具,并可以使用工具来进行调试,一般用qemu来运行多架构的可执行文件然后使用进来远程调试Clang/LLVM 工具链:Clang/LLVM 工具链支持许多不同的架构和操作系统Android NDK:专门为 Android 平台提供的交叉编译工具集。使用的编译工具链为Clang/LLVM。
2023-03-15 22:32:15
1052
原创 linux内核-内存管理
*分配一块给某个数据结构使用的缓存描述符name:对象的名字 size:对象的实际大小 align:对齐要求,通常填0,创建是自动选择。flags:可选标志位 ctor: 构造函数 */ struct kmem_cache * kmem_cache_create(const char * name , size_t size , size_t align , unsigned long flags, void(* ctor)(void *));
2023-01-29 23:17:47
1479
1
原创 RSA加密算法
# 因为$eb~~mod ~~\phi(n) = 1 $ —> eb = k$\phi(n) $ +1 #k表示正整数。因为p、q是一对不相等且互质的数,那么n只有在 n /[p,q,1,n]时才能被整除,其中M为明文它本身就是一个不是特别大的数,所以在加密过程中。,其中在n为一个很大的数的情况下,且a与n大小差距非常大时,就有。就等同于定义中的a,那么就需要证明n为一个很大的数,同为互质,且。## 实际加密中n为一个很大的数,那么当。与 n大小距离非常大,,,因为。互质,则有整数d使得–>
2023-01-29 23:13:36
464
原创 RC4加密算法
将输入的种子密钥填充至大小为256byte的K表,一般不超过256byte,少于则循环补充例如密钥为123,则K表的值填充为123123123123…1(len = 256)按升序填充S表内容,S[0] = 0 、S[1] = 1、、、、、S[255] = 255。
2023-01-29 23:13:01
581
原创 AES加密算法
先转换为二进制->(00000011) * (a7 a6 a5 a4 a3 a2 a1 a0) = (00000010 xor 00000001) * (a7 a6 a5 a4 a3 a2 a1 a0) = (00000010 * (a7 a6 a5 a4 a3 a2 a1 a0)) xor (a7 a6 a5 a4 a3 a2 a1 a0) ####可理解为a乘以2再加上一个a。第三行:(03,01,01,02) * (1e,27,98,e5) = 4c。
2023-01-29 23:11:43
7092
原创 音视频xxxx
本文章是以学习笔记形式展开记录。https://ffmpeg.xianwaizhiyin.net/base-knowledge/raw-yuv.html (理论)https://blog.youkuaiyun.com/leixiaohua1020/article/details/50534150 (实际)大概看了一下网上的音视频文章,目前来看文章大部分知识都是雷神那些CSND来的,难怪我leader说国内玩ffmpeg的搞来搞去就是那么点人,和我在学校期间学习Pwn和文章也是一样的现象内容都有雷同之处,~嗯。
2023-01-29 23:01:23
26520
原创 Arm汇编---寄存器
----------------------------------------- 三、段寄存器 ----------------------------------------------------------------------------------------- 四、标志位 -----------------------------------------------段寄存器是根据内存分段的管理模式而设置的。flag寄存器是按位起作用的,也就是说,它的每一位都有专门的含义,记录特定的信息。
2023-01-18 17:45:23
1924
1
原创 C\C++中结构体-字节对齐
内存对齐是以内存占用最长的基本数据类型作为对齐单位的,且对齐后的总大小是最长字节的倍数。数据结构的各类型数据的顺序也会影响内存占用大小,所以一般顺序都是从小->大的顺序进行结构体成员添加,这样就可以节省内存空间了。(相邻的成员类型占用长度不要多大,如(char -> double就浪费了7个字节))
2023-01-18 17:44:43
355
原创 汇编Assembly
特点环境下说使用simd的一些优化操作,就需要使用simd指令集来操作数据,从而实现快速计算,那么此时的汇编代码块就起到了一个处理数据集功能的作用。这一块就是构造函数调用时的参数,上面我声明了必须是64bit的系统,因为rdi、rsi、rdx就是64bit ELF文件中的常用寄存器。 那么这里就很容易理解了其实就是构造了3个参数(1,message,13),这里的message就是一个字符串常量的地址。在进入到另一个函数地址时,会首先进行一个开栈操作,至于开多少取决于你的函数代码块有多少和编译器。
2023-01-18 17:44:09
1064
原创 各类bin介绍
也是双链表结构,它在bins处于bin64~bin126,那么64bit中最小large bin为 2 * 8 * 64 = 1024byte,哎,这个时候前面说的fd、bk、fd_nextsize、bk_nextsize就来到用武之地了,为了加快检索速度,fd_nextsize和bk_nextsize指针会指向一个大小与自己不一样的chunk,故在加入了大小不同的chunk时,这两个指针才会被修改。由free chunk组成的链表,当用户再次申请时从中寻找合适的chunk返回给用户。
2023-01-18 17:43:18
2249
原创 堆漏洞要点
重点:fast、unsort bin拿出来的chunk它的fd和bk会被保存 ->例题(ByteCTF/mulnote、攻防世界noleak)
2023-01-18 17:42:51
289
原创 WebAssembly
在浏览器里播放H.265需要借用Webassembly+FFmpeg,因为FFmpeg 是用 C\汇编 语言开发的所以Emscripten会很方便的配置FFmpeg。Emscripten版的ffmpeg编译:https://cloud.tencent.com/developer/article/1467813。能从C/C++等语言将代码编译到WebAssembly格式.并在浏览器中运行它们,也就是可以在Web端跑C/C++代码,后缀名为.wasm。但是项目整体还是有很大的问题,播放的h265画质会错乱。
2023-01-18 17:40:40
1911
原创 SIMD性能优化
SIMD(Single Instruction Multiple Data)是CPU硬件层面支持的用于对数据进行并行操作。原理:采用一个控制器来控制多个处理器,同时对一组数据(又称“数据向量”)中的每一个分别执行相同的操作从而实现空间上的并行性的技术它的指令集存在如下:X86下的实现为MMXSSEAVX指令集ARM下的实现为NEON指令集。
2023-01-18 17:40:19
1587
原创 认识ffmpeg编译、以及参数解释
这个工具不是特别了解,国内文章对它的解释也比较模糊,其中有一篇文章说道**“j后面的数字应该为CPU核心数的两倍”**不知道是不是准确的,至此我还特意用shell分别对16线程和无限制线程测试(我的电脑是8核心的),很明显无限制线程花费的时间要比16少的多(可能是我不太明白shell多线程和程序进程多线程的区别吧),有兴趣的可以自己研究一下。,如果只需要可执行文件,可以指定不生成这些库,但是可能程序会缺少某个库的功能。是用来给第三方软件找到 FFmpeg 静态库,动态库的安装目录的。
2023-01-18 17:38:27
1923
原创 记录一次ffmpeg编译
记录一次ffmpeg编译网上搜的linux编译都是xxxx,懒得说了不知道为什么下我使用最大量编译都无法编译出等文件夹(linux可用,手动打开注释)执行configurion+make后的发现ffmpeg报错找不到so之前没有执行make install …先不管它,遇到问题一个个解决,找到了根源就好办了在目录下用找了一下发现对于的so都在对应的模块里面编写调用ffmpeg库api的源文件:手动指定路径编译(编译是可以编译的,但是还不能运行)然后手动添加动态库路径到变量中ok,可以运行了。
2023-01-18 17:38:05
1405
2
原创 调用FFmpeg API
编译器:Apple clang version 13.0.0。环境,默认会下载到用户主目录下。linux也可以用下面脚本。使用下面脚本一键搭建。
2023-01-18 17:37:23
327
原创 编解码-性能优化-SIMD
SIMD(Single Instruction Multiple Data)是CPU硬件层面支持的用于对数据进行并行操作。原理:采用一个控制器来控制多个处理器,同时对一组数据(又称“数据向量”)中的每一个分别执行相同的操作从而实现空间上的并行性的技术它的指令集存在如下:X86下的实现为MMXSSEAVX指令集ARM下的实现为NEON指令集。
2023-01-17 15:55:20
2228
原创 记录一次ffmpeg编译
执行configurion+make后的发现ffmpeg报错找不到so。我暂时的解决方法是将全部so文件手动转移到一个目录下来(注意改路径)经过前面的分析最终的暂时提出下面解答方法。先不管它,遇到问题一个个解决,找到了根源就好办了。网上搜的linux编译都是xxxx,懒得说了。找了一下发现对于的so都在对应的模块里面。(编译是可以编译的,但是还不能运行)下我使用最大量编译都无法编译出。然后手动添加动态库路径到变量中。记录一次ffmpeg编译。然后就可以正常执行了。
2022-11-11 20:03:55
932
原创 2021 ciscn-pwn 初赛
2021全国大学生信息安全竞赛-pwny_init分析mainreadwrite这个程序其实就是两个核心函数,和名字一样,因为操作的fd指针是个随机参数文件,我们通过修改fd指针为0,也就是控制台就可以实现任意读写了,那么程序就简单了很简单我们看这个这里组的偏移是由我们决定的且没有大小限制(是int64类型的变量)。ok看看bss段qword_202060和随机函数的fd指针只相差0x100偏移,那么就可以间接的控制fd为0了,具体利用如下:这里就可以将fd置为0,我也是gdb调试调试着就发现的,仔细
2022-06-05 02:29:36
755
原创 2022春秋杯:chunzhiIot
题目2022年春秋杯:chunzhiIot一道vmpwn题,和今年(2022年)的国赛一道题类似保护$ checksec pwn[*] '/home/hnhuangjingyu/chunqiubei/chunzhiIot/pwn' Arch: amd64-64-little RELRO: Full RELRO Stack: Canary found NX: NX enabled PIE: PIE enabled$
2022-05-30 17:44:27
516
原创 沙盒禁用+tcache
题目2021全国大学生信息安全竞赛-ciscn_2021_silverwolf保护$ checksec silverwolf[*] '/home/hnhuangjingyu/sliverwolf_my/silverwolf' Arch: amd64-64-little RELRO: Full RELRO Stack: Canary found NX: NX enabled PIE: PIE enabled FO
2022-05-25 02:00:38
998
原创 Makefile学习
定义Makefile 是一个工程文件的编译规则,描述了整个工程的编译和链接等规则使用场景数学计算库 math 中的函数,我们得手动添加参数 -Im;小型数据库 SQLite 中的函数,我们得手动添加参数 -lsqlite3;线程,我们需要去手动添加参数 -lpthread。多个文件链接Makefile 支持多线程并发操作,会极大的缩短我们的编译时间,并且当我们修改了源文件之后,编译整个工程的时候,make 命令只会编译我们修改过的文件,没有修改的文件不用重新编译,不增加或者
2022-05-18 15:58:42
817
原创 linux sh解释器
Shell定义Shell 是一个命令解释权,它为用户提供了一个向 Linux 内核发送请求以便运行程序界面系统级程序,用户可以用 Shell 来启动、挂起、停止甚至是编写一些程序变量定义变量:变量名=变量值,等号两侧不能有空格,变量名一般习惯用大写。删除变量:unset 变量名 。声明静态变量:readonly 变量名,静态变量不能unset。使用变量:$变量名将命令返回值赋给变量:A=`ls` 或 A=$(ls) 反引号,执行里面的命令环境export 变量名=变量值,将 Sh
2022-05-18 15:57:17
665
原创 GCC __ATTRIBUTE__机制
在glibc源代码中你可能会看到大量的__attribute__关键字,譬如常用的stdio.h中开头处就能见到它的身影了#ifndef _STDIO_H# if defined __need_FILE || defined __need___FILE || defined _ISOMAC# include <libio/stdio.h># else# include <libio/stdio.h>/* Now define the internal interfa
2022-05-18 15:56:39
291
原创 快速排序算法
冒泡排序每次对相邻的两个数进行比较,类似于密码爆破一个个比对。显然比较浪费时间,且比较笨。快速排序冒泡排序的一种改进,也可以理解为多线程的冒泡排序工作原理在一串乱序数据中随机取一个值(一般代码实现都是取第一个值),然后对该数列进行分类,比随机值小的在随机值的左边,反之在右边例子对[0x10, 0x37, 0x4f, 0x39, 0x3e ,0x39 ,0x13 ,0x2b ,0x4f ,0x8]进行排序,其中“●”表示取的随机值,“<”表示向左移动,“>”表示向右移动 “pivot
2022-05-18 15:26:30
2176
原创 2019 *CTF hack_me
题目2019 *CTF hack_me保护$ checksec ./hackme.ko[*] '/home/hnhuangjingyu/hackme/hackme.ko' Arch: amd64-64-little RELRO: No RELRO Stack: No canary found NX: NX enabled PIE: No PIE (0x0)-------------------------------
2022-05-08 14:01:51
858
原创 祥云杯-2020babydev
文章目录前言题目保护分析思路解法一:(思路不错)解法二:(最精简)解法三:(最简单)参考文章前言个人觉得exp要写的精简,适当注释,至少不应该留有冗余的代码,对于刚学习的pwner来说看wp是个难熬的过程,甚至误导我记录下自己踩的坑,给大家节省查资料的时间题目2020祥云杯babydev保护start.shqemu-system-x86_64 \-s \-m 256M \-kernel bzImage \-initrd core.cpio \-append "root=
2022-05-04 18:13:54
434
原创 提权姿势modprobe_path修改文件权限
最近看内核exp时候一些题目的另一种解法可以通过modprobe_path方式读取flag,好像挺好玩的定义在内核运行一个未知类型的文件时,modprobe_path就会指向这个未知文件,当内核运行一个错误格式的文件后,内核会自动调用这个modprobe_path指向的文件,因为内核执行的权限是root权限,当我们将modprobe_path指向一个我们用于查看具有root权限的flag文件,那么就能得到flag//源码定义如下:kernel/kmod.cchar modprobe_path[KMO
2022-05-02 20:20:11
601
原创 2019 suctf sudrv
前言bb一句,这题太好玩了,过程中学习了很多新姿势。保护系统保护模块保护版本信息分析模块加载函数sudrv_init:注意下这个模块在加载时就已经申请了0x1000大小的内存sudrv_exitsudrv_ioctl这里可以自定义kmalloc的大小,打印全局变量su_buf的数据,和kfree释放内存sudrv_ioctl_cold_2格式化字符漏洞,printk相对于printf来说它所支持的格式化字符也越少,通常在printf中使用%p来泄漏地址,相应的prin
2022-04-23 17:48:33
805
计算机网络学习笔记,计算机网络学习笔记,计算机网络学习笔记,计算机网络学习笔记,计算机网络学习笔记
2023-07-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人