BUU CrackRTF
BUU CrackRTF分析首先去查壳,无壳32位,放入DIA中去分析
逻辑很简单,唯一要怀疑的就两个函数sub_40100A函数和sub_401019函数,分别点进去看
sub_40100A函数
这是一个哈希加密,去看一下它对应的加密是啥
是Sha1的哈希加密,解密脚本
import hashlibflag2='@DBApp'for i in range(100000,999999):#前面提示位六位的数 h2 = hashlib.sha1((str(i)+flag2).encode("utf-8")) flags = h2.hexdigest() if "6e32d0943418c2c33385bc35a1470250dd8923a9" == flags: print (str(i)+flag2) print(flags)#123321@DBApp#6e32d0943418c2c33385bc35a1470250dd8923a9
那么第一段 ...
TEA加密
TEA加密
在IDA中识别TEA加密:
其中可以发现TEA的显著特征0xC6EF3720,和 -0x61C88647(即0x9E3779B9)还有十六个字节的key
看到这种新式差不多都是TEA加密,上图是一个魔改TEA,更换的delta的值,并且多异或了一个sum
首先这个v3 +=xxxx这个就代表了v3是sum
然后这个v5和v6就是y和z
这个(v3+v6)和(v3+v5)是(z或y+sum)的意思
同理这个(v10[3或1]+(v5或6 >> 5)是((z或y>>5)+k[1或3])的意思
然后这个(16*xxx)这个表示的是左移
tea加密的例题
BUU[FlareOn5]Ultimate Minesweeper
BUU[FlareOn5]Ultimate Minesweeper分析首先拿到文件后,去查壳发现是.net后缀文件是C#写的,然后就放入dnSpy中去分析
这几个分别是分配内存,派生valloc类,初始化,第一次点击反馈,关键点,内存处理,方正显示反馈,时间暂停
很容易知道,如果要找到解题点,就要先看最后方正的反馈是什么,点进去看看
简单的翻译一下,第一个failurepopup是失败,后面的successpopup是成功,这里直接把错误的判断去掉,那么就只剩下成功与非成功非失败状态了(鼠标右击编辑方法中进行编辑)
后面的successpopup引用了getkey,点进去看看
发现了最后的3哥array值在做一些算法操作,也就是说最后的非地雷格子只有3个
编辑好后按 CTRL+shift+s另存,按右上角的启动
我这里用的是傻瓜发,一直到乱点试出了三个点记下来之后再一次点那三个非雷区就得到flag了
flag{Ch3aters_Alw4ys ...
BUU[QCTF2018]Xman-babymips
BUU[QCTF2018]Xman-babymips分析首先查壳,32位无壳,放入IDA分析。先shift+F12去看一下关键的string
然后交叉引用去找到它在干嘛
去看一下fdata是什么
不难猜出这个是用来弄flag前缀的,接着去看一下sub_4007F0函数
其实就是简单的判断i是否为偶数(i&1是用来判断奇偶的),这里for循环中i=5和后面strncmp函数中a1+5都是因为前面的前缀占了5个字节,然后看一下 off_410D04里面是什么
这些都知道后就开始写脚本(因为是BUU下载的题就直接舍弃第一个那个前缀,就不写那一部分脚本了)
脚本a = [0x52, 0xFD, 0x16, 0xA4, 0x89, 0xBD, 0x92, 0x80, 0x13, 0x41, 0x54, 0xA0, 0x8D, 0x45, 0x18, 0x81, 0xDE, 0xFC, 0x95, 0xF0, 0x16, 0x79, 0x1A, 0x15, 0x5B, 0x75, 0x1F]flag = " "for i in range(0, len(a)): ...
BUU[ACTF新生赛2020]rome
BUU[ACTF新生赛2020]rome分析
首先查壳,无壳32位,放入IDA分析
就是简单的分析,两个函数处理大小写字母和符号然后比较字符
脚本(这里用穷举法)
#include<stdio.h>#include<string.h>int main(){ char flag[16]={0}; char a[16] = { 'Q','s','w','3','s','j', '_','l','z','4','_','U','j','w','@','l' }; for(int i=0;i<16;i++) { for(int j=0;j<127;j++) { i ...