Hello World
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.
Quick StartCreate a new post1$ hexo new "My New Post"
More info: Writing
Run server1$ hexo server
More info: Server
Generate static files1$ hexo generate
More info: Generating
Deploy to remote sites1$ hexo deploy
More info: Deployment
常见加密算法和编码识别
常见加密算法和编码识别Base64Base64 是一种基于 64 个可打印字符来表示二进制数据的表示方法。转换的时候,将 3 字节的数据,先后放入一个 24 位的缓冲区中,先来的字节占高位。数据不足 3 字节的话,于缓冲器中剩下的比特用 0 补足。每次取出 6 比特(因为 ),按照其值选择ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/中的字符作为编码后的输出,直到全部输入数据转换完成。
通常而言 Base64 的识别特征为索引表,当我们能找到 ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/ 这样索引表,再经过简单的分析基本就能判定是 Base64 编码。
当然,有些题目 base64 的索引表是会变的,一些变种的 base64 主要 就是修改了这个索引表。
Tea在密码学中,微型加密算法(Tiny Encryption Algorithm,TEA)是一种易于描述和执行的块密码,通常只需要很少的代码就可实现。其设计者是剑桥大学 ...
angr求解器学习(一)
Angr前言: 最早学长就提到过angr求解器,最近在碰到过angr类的题目,趁这个机会学习一下。完了完了,昨天一天就把Cyberpunk: Edgerunners看完了,现在满脑子都是露西和大卫🤩🤩🤩
angr简介:说起来angr首先肯定要说符号执行的概念,维基百科这样说
https://zh.wikipedia.org/wiki/%E7%AC%A6%E5%8F%B7%E6%89%A7%E8%A1%8C
写的很好,但看的不是很懂,又找了很多博客大概记一下
符号执行就是在运行程序时,用符号来替代真实值。符号执行相较于真实值执行的优点在于,当使用真实值执行程序时,我们能够遍历的程序路径只有一条, 而使用符号进行执行时,由于符号是可变的,我们就可以利用这一特性,尽可能的将程序的每一条路径遍历,这样的话,必定存在至少一条能够输出正确结果的分支, 每一条分支的结果都可以表示为一个离散关系式,使用约束求解引擎即可分析出正确结果
假设有这样一个程序
12345user_input = int(input())if user_input - 10 >= 0: prin ...
buu刷题re(8.6)
[BJDCTF2020]BJD hamburger competition打开是一个游戏
6
自己没有写出来,看的wp
由于unity是用C#开发,所以用dnspy
https://github.com/dnSpy/dnSpy
在相同文件夹中找到Assembly-CSharp.dll
然后用dnspy打开
在这个类里面找到了关键代码
将字符串找个在线网站解密之后就是1001
所以flag就是 BJDCTF{MD5(1001)}
取前二十位
flag{B8C37E33DEFDE51CF91E}
[ACTF新生赛2020]OrugaIDA打开
找到主函数
1234567891011121314151617181920212223242526272829303132__int64 __fastcall main(int a1, char **a2, char **a3){ __int64 result; // rax int i; // [rsp+0h] [rbp-40h] char s1[6]; // [rsp+4h] [rbp-3Ch] BYREF char ...
buuMisc+Crypto
面具下的flag下载完附件打开,《你的名字》
拖进010发现一推PS字眼,但是拖进PS没有任何线索,拖进Kali分离一下试试
OK,存在压缩包,分离出来是一个带了伪加密的压缩包,解开之后是一个vmdk文件
看了一眼WP,是用7z解压
试一试,格式是这样的
17z x flag,vmdk -o./
key1
+++++ +++++ [->++ +++++ +<] >.+ +++++ .<+++ [->– -<]>- -.+++ +.<[ ->+ +<]>+ +++.< +++++ +[->- —– <]>– —– –.<+ +[- >—-<]>– —– .<+ [-> +<]>+ +++++ .<+ +[->- —<] >-.<+ +++++ [->++< ]>+ +++.< +++++ [->– —<] >—- -.+ .<+++ [->– -<]& ...
BuuReverse开学倒数第三周
[网鼎杯 2020 青龙组]singal此题目涉及到VM逆向保护
自己学的比较浅就放一下大佬的文章
https://xz.aliyun.com/t/3851
IDA32位直接打开
很容易找到主函数
12345678910nt __cdecl main(int argc, const char **argv, const char **envp){ int v4[117]; // [esp+18h] [ebp-1D4h] BYREF __main(); qmemcpy(v4, &unk_403040, 456u);//拷贝opcode表 vm_operad(v4, 114);//关键函数 puts("good,The answer format is:flag {}"); return 0;}
点进去关键函数
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 ...
Linux基本指令
Linux基本命令pwd命令pwd是Print Working Directory的缩写,其功能是显示当前所在工作目录的全路径。主要用在当不确定当前所在位置时,通过pwd来查看当前目录的绝对路径。
语法1pwd [--help][--version]
–help 在线帮助。
–version 显示版本信息。
效果酱紫
cd命令Linux cd(英文全拼:change directory)命令用于切换当前工作目录。
其中 dirName 表示法可为绝对路径或相对路径。若目录名称省略,则变换至使用者的 home 目录 (也就是刚 login 时所在的目录)。
另外,**~** 也表示为 home 目录 的意思, . 则是表示目前所在的目录, .. 则表示目前目录位置的上一层目录。
实例
123cd /usr/bin // 跳到 /usr/bin/ :cd ../.. // 跳到自己的 home 目录 :cd ~ // 跳到目前目录的上上两层 :
cat命令cat(英文全拼:concatenate)命令用于连接文件并打印到标准输出设备上。
实例
把 textfile1 的 ...
buu刷题re(7.30)
[WUSTCTF2020]level3拖进IDA找到主函数
123456789101112131415161718192021222324252627int __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 = __readfsqword(0x28u); printf("Try my base64 program?.....\n>"); __isoc99_scanf("%20s", v6); v5 = time(0LL); srand(v5); if ( (rand() & 1) != 0 ) { v3 = base64_encode(v6); ...
密码学知识基础
对称加密对称加密相较于非对称加密更加快速,但是安全性不如非对称加密
百度简介
对称加密(也叫私钥加密)指加密和解密使用相同密钥的加密算法。有时又叫传统密码算法,就是加密密钥能够从解密密钥中推算出来,同时解密密钥也可以从加密密钥中推算出来。而在大多数的对称算法中,加密密钥和解密密钥是相同的,所以也称这种加密算法为秘密密钥算法或单密钥算法。它要求发送方和接收方在安全通信之前,商定一个密钥。对称算法的安全性依赖于密钥,泄漏密钥就意味着任何人都可以对他们发送或接收的消息解密,所以密钥的保密性对通信的安全性至关重要
简单解释一下
假如 张三要给李四发送一个数字1,两者约定一个公钥1
那么张三给李四发送的就是 数字2(1+1=2)
李四拿到的是数字2,李四可以通过公钥处理信息(-1)最终拿到数字1
当然正常情况肯定会比较复杂
整个对称加密的关键就在于双方约定的公钥(算法可以很复杂,但是一旦被监听就存在破解的可能)
例子:AES加密
非对称加密
对称加密算法在加密和解密时使用的是同一个秘钥;而非对称加密算法需要两个密钥来进行加密和解密,这两个密钥是公开密钥(public key,简称公 ...
汇编动调学习
上周公开课讲了动调和汇编之类的
自己的汇编基础太过差劲通过一道题复习一下汇编知识,再来学习动调
[MRCTF2020]Xor
这一题直接能找到关键函数,但是不能够反汇编
所以需要直接用汇编分析
首先看第一个call sub_401050,压入了一个byte_4212C0和一个%s,说明输入的flag最终会存放到byte_4212C0
JNZ(或JNE,jump if not zero, or not equal),是汇编语言中的条件转移指令,结果不为零(或不相等)则转移
Test命令将两个操作数进行逻辑与运算,并根据运算结果设置相关的标志位。 但是,Test命令的两个操作数不会被改变。 运算结果在设置过相关标记位后会被丢弃
inc指令对操作数oprd加1 (增量),它是一个单操作数指令。
猜测edx是flag的长度
出循环之后与1Bh比较
如果最后edx的值大于0x1b,流程就会往右走,直接提示Wrong:
看见了关键的比较
1cmp cl, ds:byte_41EA08[eax]
这是一个异或运算
1cmp eax, edx
开始猜测edx为flag长度 ...