题解HGAME2022 creakme
链接:https://pan.baidu.com/s/1_BHVmOej_oIT3kp5A8Zu9Q提取码:tuyt
题解HGAME2022 creakme
发现这种格式,就想起tea加密,但是很容易发现,这里的sum值改了,而且在v0和v1这里多加了一个异或,得知这是一个魔改的tea
做tea的题目我们需要去寻找key和明文
这里的while语句就知道我们的明文是跟这个v11(这里是拿输入的东西与v11+sum进行比较如果一样就是正确的)有关的于是我们去看v11是什么
发现是这个,明文找到了,但还要确定这个明文是怎样进去tea解密的循环的
我们可以从这里发现它这是是相当于v0为前四个字节,v1为后四个字节进行输入,然后循环了四次(i=v8+8),然后我们就知道v[8]={0X48D93488,0X030C144C,0X52EB78C2,0XED9CE5ED,0XAE1FEDE6,0XBA5A126D,0XCF9284AA,0X65E0F2E3}(两组两组一取,总共分成了八个小段,因为这个v0和v1是char类型四个字节,先从后面取,按顺序!)
然后我们去找密匙key,
因为 ...
ctfshow七夕杯2022easy_magic
ctfshow七夕杯2022easy_magic分析
首先查壳,64位无壳
然后放入IDA中分析,先去字符串那里查找关键词
然后交叉引用进去就能够看到了
首先可以看到43行有一个累加的过程,然后下面有一个sub_219B函数不知道是什么,然后点进去看
这里有三个函数分别点进去看一下第一个sub_AB6
没发现什么去下一个看一下sub_1F7D
又有一个函数,进去看一下
看到这里的时候就联想到之前做的题目,知道这是md5的加密,那么sub_219B这一整个大的函数就是将v10 md5进行加密然后给s1,最后通过if语句与s2进行md5值比较来判断输出是否正确
那么解题的思路应该就是直接将s2去md5解密就可以得到v10也就是flag了,去网站看一下能否解出
可惜网站破不出,那么只能写脚本来还原v10数组了
逻辑很简单,就是将v5的值累加给v10,但是这个累加过程没有v10[0],而v10[0] = v4;由于这是ctfshow比赛,那么猜一下v4=v5=v10[0]=’c’,然后就开始写脚本
脚本
#include<stdio.h>#include<s ...
强网杯[GameMaster]
强网杯[GameMaster]分析首先查壳,C#,NET的,直接放入ILSpy去分析
然后去goldfunc函数中找到加密信息,这里是第一个加密
第二个加密看见了key为16位,然后ECB,就想到了AES-ECB
然后去破解
这里的Brainstorming!!!就是key的ASCII码,解出来之后将它保存成EXE文件,转成之后要去掉前面多余部分一直到MZ(是exe文件的标志)
改成这样保存即可,然后再一次放入ILSpy
这里有两个加密函数,一个是Check1另一个是ParseKey,看到最后一个for循环,可以知道要得到flag就是要用array4^array5,array5已知,求array4用到ParseKey函数,但是不知道array的值,就要用到Chek1函数,看到if (first.SequenceEqual(array2))就能知道first的值就是array2的值,然后进去Check1函数
很容易知道是用z3求解,求出array之后去看一下ParseKey函数
逻辑很清楚了,直接写脚本
脚本from z3 import *sol = Solver()xo ...
SCTF2019 babyre
[SCTF2019]babyre分析首先查壳,64位无壳
放入对应的IDA中看,直接进入字符串去看
看到关键句子直接索引
这里发现jb和jnb都是跳转重复后面的loop语句也是个错的,直接将他们全部nop掉(后面还有几个类似的都是一样的操作)
到后面的时候发现了奇怪的东西
因为没见过这个in就觉得很奇怪而且后面还跟着一大段为编译成功的内容
然后就去看一下in的字节码
一下是in指令接着又是mov指令,这里就知道这是花指令,直接将E4改为90(nop)然后选中这一段主函数按P申明一下,接着反编译
这里发现有个地方不对是C22这个函数引用出了错,接着去看看
发现这一段没有申明函数,要给他变成函数,重新进去这个程序,按之前步骤来,在按P之前先将其申明
按Y键进行修改类型,将它变成独立的函数,然后再最后的那个test按D将其变为数据,那么C22就会变成一个独立函数,接着选中前面一部分按P申明一下main,再反编译
第一段
可以看出来这里是一个迷宫,但是不止上下左右四个键它还有25步的加键,然后我们还知道它的迷宫图,按照上下左右的排布我们可以知道它是5个5*5的迷宫
...
NepCTF we_can_go
NepCTF we_can_go分析首先查壳,32位无壳
然后直接去运行一下看看,随便输入点什么
这里弹出了false,然后去IDA字符串中去找到false
然后交叉引用它,去找到突破口
然后进去看
这里的23告诉我们flag总共是23个字符,出去NepCTF{}就还剩15个,然后这里的+7应该表示的是”NepCTF{“,所以我就觉得flag应该会在dword_10DB6E0函数中,于是进去看一下
我在这第12行result = v1;这里下了断点,去动调一下,看看会不会有什么东西
看见这里有东西传进去这些寄存器中,然后按F8走一下,去看一下寄存器里的是什么东西
然后就出flag了
NepCTF{U9eT_t0_th3TRUE}
总结这题其实就是考你会不会动态调试,以及去别开不必要的调试找到有用的,以及观察能力