Zip伪加密
什么是Zip文件:有压缩源文件数据区+压缩源文件目录区+ 压缩源文件目录结束标志
这三个不同颜色的就对应上面三个不同的区
压缩源文件数据区:
50 4B 03 04:这是头文件标记【也就是PK】
14 00:压缩文件所需pkware版本
00 00:全局方式位标记【有无加密】
00 00表示没有伪加密
如果是其他的比如:00 09 就是伪加密
—–【下面的基本没啥用】
08 00:压缩方式
5A 7E:最后修改文件时间
F7 46:最后修改文件日期
16 B5 80 14:CRC-32校验
19 00 00 00:压缩后尺寸(25)
17 00 00 00:未压缩尺寸(23)
07 00 文件名长度
压缩源文件目录区
50 4B 01 02:目录中文件文件头标记
1F 00:压缩使用的pkware版本
14 00:解压文件所需pkware版本
00 00:全局方式位标记(有无加密,这个更改这里进行伪加密,改为09 00打开就会提示有密码了)
压缩源文件目录结束标志50 4B 05 06:目录结束标记
如何解密? 把压缩源文件目录区(或者数据区)的全局方式位标记的01 00 或 ...
gb2312编码
gb2312编码这个只是一种编码的格式罢了。
这里只是记录一下当在写CTF题目的时候,过程是正确的,但是最后在控制台打印出来是乱码的情况。这个乱码也不是全乱码,而是部分的吧。【应该】比如flag{}这种就会是正确的,中间是乱码
这种情况是因为flag里面是中文。这种情况下就得用gb2312的方式
12345a= [某个数列]byte_obj = bytes(a)output_string = byte_obj.decode('gb2312')print(output_string)
12345678# 使用 bytes() 函数将新列表转换为字节对象byte_obj = bytes(result_list)# 使用 'gb2312' 编码对字节对象进行解码,生成字符串output_string = byte_obj.decode('gb2312')# 打印最终的输出字符串print(output_string)
SMC加密方法
SMC基本原理SMC(Software-Based Memory Encryption)是一种局部代码加密技术。
SMC的基本原理是在编译可执行文件时,将需要加密的代码区段(例如函数、代码块等)单独编译成一个section(段),并将其标记为可读、可写、不可执行(readable, writable, non-executable),然后通过某种方式在程序运行时将这个section解密为可执行代码,并将其标记为可读、可执行、不可写(readable, executable, non-writable)。这样,攻击者就无法在内存中找到加密的代码,从而无法直接执行或修改加密的代码。
主要步骤:
读取PE文件并找到需要加密的代码段。
将代码段的内容进行异或加密,并更新到内存中的代码段。
重定向代码段的内存地址,使得加密后的代码能够正确执行。
执行加密后的代码段
上面都比较官方,下面是我自己的理解:
SMC是一种加密的手段,主要是对地址进行加密,比如我现在遇到的这个题,对地址进行了加密。
123456789101112131415161718192021222324+---------- ...
base64编码
base64基本原理他可以将8位字节转化成6位字节。用等式3*8==4*6
将3个字节3个字节的数化成一组,然后将这组数据化成6个字节6个字节的4个小组,每6个字节的高位用00填充。
数据的大小会变大 数据大小会变为原来的4/3,
38 * 8 = x *6
x = 38*8/6
CTF题1.直接的base编码
当字符串中有只有ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=的时候就可能是单词的base64编码
2.base64换表的操作
当你在使用IDA的时候 利用shift + F12 看字符串的时候,如果看到类似于base64字符集的东西,可能会有换表的操作。
比如出现:0123456789+/abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
这种和base64字符集很相似,但是顺序有改变的时候就很有可能会使用
用python脚本解密
123456789import base64import stringstr1 = "eyD4sN1 ...
rc4加密方法
rc4基本原理生成密钥之后,由密钥与明文异或后生成密文(加密过程),由同一密钥与密文异或后得到明文(解密过程)
CTF题首先如果有rc4加密你会看到一个莫名其妙的字符串【该字符串是定义好的】,这个莫名奇妙的字符串不是密文而是key。
会有一个对key进行i循环的取模的操作【也就算是得到key循环的东西】
比如:key==abc123,就会有一个循环来得到abc123abc123abc123…【这个主要是用于后面 ^ 操作】
某个函数有4个传参:
密文
密文的长度
Key
Key的长度
当发现如上的时候,点进去看。如果还有for循环比如for(i ; i<256;i++)这种对256次循环进行操作的。并且在for循环里面是进行xor操作的。可能是rc4加密。
而RC4加密算法的特征也是比较明显的:
有很多取模操作
有很多256
有多个次数为256的循环
最后操作为异或
题目:
sub_140001120 和 sub_140001240 函数组合在一起就是rc4加密。
sub_140001120这个函数有256
sub_140001240这个函 ...
SICTF 2023
[签到PYC]直接在线工具解密
chbase用IDA打开
看到base64换表
123456789import base64import stringstr1 = "F0lWEVA7BmUzAGB0C2UuAU9hbnIpATEidDdnACQ9"string1 = "ZYXWVUTSRQPONMLKJIHGFEDCBAabcdefghijklmnopqrstuvwxyz0123456789+/"string2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"print (base64.b64decode(str1.translate(str.maketrans(string1,string2))))
Myobject用IDA打开就 看到是rc4
看一下rc4加密的原理:https://blog.csdn.net/weixin_43408412/article/details/108956701
看到上面传rc4函数的一个是:s【密 ...
GUET-CTF2019 re
用die 打开看到是一个UPX壳的ELF文件
先把它放在kali里面运行看看
upx 壳,直接下载一个脱壳的工具【github】然后
1upx -d re
脱壳
放到IDA中看
这里重要的是:sub4009AE 这个函数_
进去一看全是if,这里就不能返回0 所以得全部都=
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263{ if ( 1629056 * *a1 != 166163712 ) return 0LL; if ( 6771600 * a1[1] != 731332800 ) return 0LL; if ( 3682944 * a1[2] != 357245568 ) return 0LL; if ( 10431000 * a1[3] != 1074393000 ) return 0LL; if ( 3977328 * a1[4] != 4 ...
CrackRTF(22)
CrackRTF拿到这个题的时候,首先看了看,第一个反应就是动态调式一下。看能不能把程序运行下去,满足所有条件看看,但是中间有一个错误
1401492: The instruction at 0x401492 referenced memory at 0x42F260. The memory could not be written -> 0042F260 (exc.code c0000005, tid 10132)
401492:0x401492的指令在0x42F260引用内存。无法写入内存 -> 0042F260(exc.code c0000005,tid 10132)
啊?内存写入….不是很懂耶,反正就是我太垃圾弄不出来。
这里点过去,看不懂没关系,查一下
很容易就得知了,这个是一个sha1加密
这里想着解密一下….但是貌似解密不出来
这里https://blog.csdn.net/qq_42967398/article/details/96492843
看了他才知道 这个比较厉害
1234567891011import hashlibflag = &quo ...
FlareOn4 login(21)
Rot13加密
看到 13 26 可以猜测一下rot13加密
这里可以用chatGPT分析一下