ISCC2021-re
Garden下载下来,题目给了一个pyc文件,很明显要反编译成py文件,python2的可以用下uncompyle2转换,这里是python3的,用在线工具就可以python反编译 - 在线工具 (tool.lu)
反编译的结果如下
第八行def了check函数,第32行调用此函数,函数先判断了flag的长度是不是等于f的长度,然后就是异或a^b^123<=>a=b^c
python中的chr和 ord 用法
ord()取字符对应ascii码,chr()返回ascii码对应字符
12345f = '2(88\x006\x1a\x10\x10\x1aIKIJ+\x1a\x10\x10\x1a\x06'flag = ''for i in f:flag += chr(ord(i)^123)print(flag)
得到flag
RC4加密算法原理与实现
RC4 的算法原理RC4算法的特点是算法简单,运行速度快,而且密钥长度是可变的,可变范围为1-256字节(8-2048比特),在如今技术支持的前提下,当密钥长度为128比特时,用暴力法搜索密钥已经不太可行,所以可以预见 RC4的密钥范围任然可以在今后相当长的时间里抵御暴力搜索密钥的攻击。实际上,如今也没有找到对于128bit密钥长度的RC4加密算法的有效攻击方法。
基本概念RC4算法有4个关键的变量
密钥流:RC4 算法的关键是根据明文和密钥生成相应的密钥流,密钥流的长度和明文的长度是对应的,也就是说明文的长度是 500 字节,那么密钥流也是 500 字节。当然,加密生成的密文也是 500 字节,因为密文第 i 字节 = 明文第 i 字节 ^ 密钥流第 i 字节;
状态向量 S:长度为 256Byte,S[0],S[1]…S[255]。每个单元都是一个 Byte,算法运行的任何时候,S 都包括 0-255 的 8Bit 的排列组合,只不过值的位置发生了变换;
临时向量 T:长度也为 256Byte,每个单元也是一个 Byte。如果密钥的长度是 256Byte,就直接把密钥的值赋给 T ...
2021CISCN-glass
GLASS360的出题被人称为让师傅们有经历了次高考
看到题目是一个apk文件
jeb打开,找到checkflag的函数,是native
但是没有想到上面引入了native-lib,看了别人的writeup后才知道,核心函数在lib.so里面,把apk文件改成zip就可以得到libnative-lib.so
看到另一种找到主函数的方法
将apk改为.zip解压反编译classes.dex 使用dex2jar反编译
接下来IDA打开lib.so
找到checkflag这个函数
分别打开sub_FFCC sub_1088 sub_10D4
sub_1088中看到了256的循环,想起来是不是RC4算法
sub_FFC初始化,sub_1088 RC4加密 sub_10D4是个异或加密函数
直接上脚本
123456789101112131415161718192021222324252627282930313233343536373839404142434445key = '12345678'key2 = [163, 26, 227, 105, ...
PE 文件 —— 区块表
前述在 NT 头结束后,紧接着就是区块表,区块表包含每个块在映象中的信息,分别指向不同的区块实体。
区块表区块表是一个 IMAGE_SECTION_HEADER 结构数组,这个结构包含区块的信息,比如位置、长度、属性等,区块的数目是由 NT 头中的文件头里的 NumberOfSections 给出。以下为 IMAGE_SECTION_HEADER 结构:
在上述图中,有两个字段比较重要,分别为 VirtualAddress、PointerToRawData,这两个字段用于将相对虚拟地址或虚拟地址转换为文件偏移地址,以下为 RVA 转 FOA 函数:
123456789101112131415161718192021222324251. // RVA 转 FOA2. DWORD RVAtoFOA(DWORD dwRva)3. {4. // 获取区段表的数量5. DWORD dwCounts = g_NtHeader->FileHeader.NumberOfSections;6. 7. // 获取区段表数组的首元素8. auto Sections = IM ...
攻防世界re2
re1双击点开,让我输入flag
IDA直接看
F5
看到 strcmp() 函数,输入的是v9,和v5比较,所以数据就应该在v5里面,再看第10行,把xmmword_413E34的值赋给v5,所以双击xmmword_413E34看它的数据。把qword_413E44和xmmword_413E34的数据拼起来
按A直接得到flag