「 兴趣研究 」
May 13, 2020
Words count
6.4k
Reading time
6 mins.
一、什么是angr?
angr 是一个功能强大的二进制程序分析框架,可用于程序的静态分析和动态符号执行。支持 x86、ARM、MIPS 和 PPC 架构中 32 bit 和 64 bit 可执行程序的分析,是一款非常强大的python库。
二、angr怎么安装?
1、安装 virtualenvwrapper
virtualenv 是一个可以在同一台计算机中隔离多个 Python 环境的工具。它能够用于创建独立的 Python 环境,使得多个 Python 环境互不影响。virtualenvwrapper...
Read article
「 PWN 」
May 09, 2020
Words count
200k
Reading time
3:02
前言
之前一直有2.31的题目出现在赛场上,趁着这个机会,整理一波2.31下的tcache机制和利用技巧,以学习的目的为主。
一、check机制和利用技巧说明
1、fastbin的double free
只要填满了7个tcache,下一步就是放入到fastbin中,接着如果存在uaf的话,可以直接121实现和2.23一样的double free效果
2、tcache的double free
我们先来看下2.31下的源码:关于tcache结构体和key结构体
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16... |
Read article
「 密码学 」
May 08, 2020
Words count
8.3k
Reading time
8 mins.
一、RC4算法原理
1、概念
rc4是一种基于密钥流的加密算法,它的密钥长度可变,密钥长度在1-256字节范围,主要是因为这个算法的非线性度良好,因为加解密使用的是相同的密钥,所以也是对称加密算法。
2、原理
最关键的点就是明文x和密钥经过动态的s盒生成的密钥流进行了一一异或加密,得到了密文,这里rc4是对明文进行一个个加密的,密钥流的长度和要加密的明文长度一致。
3、代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35... |
Read article
「 RE 」
April 23, 2020
Words count
3.7k
Reading time
3 mins.
一、什么是壳
加壳的全称是可执行程序资源压缩,是保护文件的常用手段。加壳过的程序可以直接运行,但是不能查看源代码。要经过脱壳才可以查看源代码。
加壳是利用特殊的算法,对EXE、DLL文件里的资源进行压缩、加密。类似WINZIP 的效果,只不过这个压缩之后的文件,可以独立运行,解压过程完全隐蔽,都在内存中完成,因此我们需要dump内存。
壳的类型通常分为压缩壳和加密壳两类。压缩壳的特点是减小软件体积大小,加密保护不是重点,
例如: Aspack, UPX(ctf比赛中中最常见的壳), PeCompact...
Read article
「 RE 」
April 17, 2020
Words count
2.6k
Reading time
2 mins.
一、keygenme(逆向)
是一个crackme,已经知道用户名是KCTF的情况下,计算出序列号。这题真的是很好地锻炼了动态调试的能力,学到了~
1、首先ida分析逻辑:
这里要求输入name是大于3位小于20位,sn一定是64位的
接着进入check
这里因为进行了去符号表:
所以我们可以通过修复符号表+自定义函数名来进行加密算法的查看:
ida中shift+f5然后导入我们的静态链接库,这个库可以从github下载:
https://github.com/push0ebp/sig-database...
Read article
「 ANDROID 」
January 29, 2020
Words count
138k
Reading time
2:06
一、准备工作
1、android studio +自带模拟器(或者真机root)
2、frida(一个hook神器)
3、jeb(反编译利器)
4、java环境变量jdk的配置(谷歌)
5、gradle安装
6、ndk的配置与安装
二、开始编程
1、程序基础
1 2 3 4 5 6 7 8
| public class MainActivity extends AppCompatActivity {
@Override protected void onCreate(Bundle savedInstanceState... |
Read article
「 PWN 」
January 03, 2020
Words count
4.3k
Reading time
4 mins.
一、做栈题的心得:
1、看栈的大小
2、判断栈溢出的字节数(够的话直接栈上操作再跳回main函数再次操作,不够的话,栈迁移到bss上)
命令:cyclic n cyclic -l 报错(4位)
3、如果开了canary,先泄露出canary(覆盖低字节或者格式化字符串泄露),记得函数调用完要回填canary
4、如果开了pie,先利用write或者puts函数(覆盖0截断)或者格式化字符串泄露基地址
5、NX开了的话,一般不管,没开的话直接填shellcode,可以手写也可以工具直接生成
6、一般...
Read article
「 PWN 」
January 03, 2020
Words count
29k
Reading time
26 mins.
一、堆的分析:
通过系统调用brk和mmap实现malloc内存分配:
thread有个arena空间,可以申请chunk
arena的个数是跟系统中处理器核心个数相关的:
1 2 3 4
| For 32 bit systems: Number of arena = 2 * number of cores + 1. For 64 bit systems: Number of arena = 8 * number of cores + 1.
|
多Arena的管理,可能就会有阻塞,资源的竞争关系
3种数据结构:
...
Read article
「 PWN 」
January 03, 2020
Words count
2.8k
Reading time
3 mins.
缓冲区:stack、heap
1、栈溢出:当前输入的字符的数量大于buf的大小,造成溢出,ret地址被覆盖,造成任意地址跳转
来道题目直接看看:
这里很清晰,一个main函数,调用puts函数和read函数和puts函数,下面简单的例子演示下参数入栈:
单步走:先调用puts函数,先将参数“give me some thing?”压入栈中
执行完puts函数,借助栈中的0x8048489可回到下一条将要执行的指令的地址(return地址),回到了现场,此过程pop出0x8048489(因...
Read article