- 博客(30)
- 收藏
- 关注
原创 BUUCTF-[GWCTF 2019]xxor
HIWORD和LOWORD就是把每一个元素对半分,高位分给HIWORD低位分给LOWORD。这里把输入的数组的高低位分开,高位保留,低位进行tea加密。这里最需要注意的是,v6 和 v7数组的声明是i64,也就是每个元素64bit,也就是8个字节。得到flag{re_is_great!能推出来数组,然后再看tea加密部分。解密就是加密的逆过程,写脚本。先看加密合并后的数组。
2023-07-07 21:40:14
399
原创 BUUCTF-[FlareOn4]IgniteMe
_ROL__经过搜索发现是汇编的循环左移指令,那么循环右移就是__ROR__,但这里是__ROL4__,我们不知道是什么,于是就通过调试来找到这个值。这里,v4本来等于0x00700004的,我的理解是:因为目标字符里面都是两位的,其实v4也应该保留两位,不然就行不通。就是对输入的字符串进行读取和要求:输入的值不能等于10或13,否则就不读取该元素,最后输出的就是我们输入的字符串。无非就是读取字符串,进行 in()的操作,然后再check()判断,都是逆向题的基操了。再看看check()
2023-07-05 17:26:57
387
原创 BUUCTF-[WUSTCTF2020]level3
那就很有只能是base64加密的地方改了,我们先猜测最有可能更改的地方,密码表,字符串交叉引用并不行,那就搜放字符串的数组里面,交叉引用发现有另一个地方在用这个密码表。找到flag{Base64_is_the_start_of_reverse}PS:主程序的过程就那个老套路,我也就不分析了。原来是吧密码表更改了啊,根据程序写脚本。base64都贴脸上了。
2023-07-04 16:47:25
196
原创 BUUCTF-[MRCTF2020]Xor 题解
这个得靠经验了,本菜鸟也是半推半猜弄出来的,叫我详细讲解,我也讲不太懂,可以去看大佬们的,我反编译成C++流程就是,输入的字符串进行异或操作,与目标字符串对比,那么脚本就很好写了。反正汇编代码已经给你了,而且又不难,所以我们通过读汇编来手动写程序。得到flag{@_R3@1ly_E2_R3verse!
2023-06-19 16:46:44
310
原创 【无标题】
发现被分解了,下方是一大坨数据,这个数据其实是汇编代码,但因为前一段的混淆,让机器认为下面一串是数据,点击找到数组头,点击数组头之后按C,进行重组,然后后面的数据就变成了指令了,然后选择这一串指令后按P进行函数的重载,之后就可以反编译了。有一处异常,这处异常让代码无法反汇编,我们叫做“加花”,就是通过加入一段简单的指令让代码无法反汇编,但能正常运行。可以大致猜测,该迷宫有7列,然后我们找迷宫,通过查找string 获得迷宫。数出来有70个字符,所以我们推测这个迷宫7列10行,将迷宫还原出来。
2023-06-18 22:17:51
40
原创 BUUCTF-[ACTF新生赛2020]usualCrypt
for()循环内的作用就是把base64 table 字符转换,反正我懒得推算,直接学大佬们下断点运行得到变化后的table 表。回到主程序,流程就很好推了,输入字符串进行加密操作后与目标字符串对比,若相等则成功,不等则失败并退出。跟进函很明显的base64加密特征,但该加密函数头和尾新加了函数,先看头。得到flag{bAse64_h2s_a_Surprise}具体功能就是大小写互转。其中两个数组值分别为。
2023-06-18 19:34:12
166
原创 BUUCTF-[SUCTF2019]SignIn
输入数字的v5次方mod v4 后与 flag 的数值相比,本菜鸟这学期刚好学了密码学,这种算法很熟悉,是RSA加密!有模幂运算,通常是一个很多位的数(n)配上一个位数不多的数(e)毕竟我们方向主要还是逆向,所以我们记住RSA出现的特征就行了。得到flag{Pwn_@_hundred_years}就是把输入的字符串当成数字。我们把n分解成p和q。然后写RSA解码脚本。
2023-06-16 09:57:51
356
原创 BUUCTF-[WUSTCTF2020]level2
PS:看了别人的攻略,他在windows不能正常使用脱壳器,要去linux上脱壳,但我的就运行完成了,linux的脱壳步骤在。得到flag{Just_upx_-d}提示检测到upx,那么我们就脱壳。然后发现答案就出现在眼前了。脱壳成功,在ida中打开。
2023-06-16 06:29:22
295
原创 BUUCTF-[MRCTF2020]Transform
tmp的单位为db(double bits)的时候提取出的值,我们要不到那么多0啊,所以我们大胆猜测,其单位为dd(double word)其实你仔细看tmp中不为0的数据,其实是从1到32的乱序排列,所以说第一个for循环里面的第一句其实就是将输入的字符串。分析一下程序,其实逻辑很简单,输入的字符串先进行乱序排列,再与值异或,最后与目标进行对比。已知,LOBYTE()应用与32bit(dd)时,取后16bit,且tmp的存储方式为。得到flag{Tr4nsp0sltiON_Clph3r_1s_3z}
2023-06-16 02:52:06
253
原创 [2019红帽杯]easyRE1
程序分别给v12,v13,v14赋值,这时候条件反射查看计算三者的地址,发现是连着的,也可以通过后面36位的v15异或v12也能察觉。这个函数也看的我云里雾里,看了攻略也没看懂,自己写的脚本也没运行正确,这里就用攻略使用的脚本。到这里就没有路了,看了攻略,发现在target密文下面有俩个没有出现过的数组。PS:新找到的函数真的一句都没看懂,大佬们又觉得太简单,分析过程也不写(悲)一连串的base64加密(base64函数易证),加密后与targ。根据程序,得知,v15异或等于v12,v13,v14的值。
2023-06-11 15:54:56
149
原创 BUUCTF - CrackRTF
这个记住函数的特征吧:有‘+’和‘-’ ,有 v5 = 10 *v5 + C - '0' 这类的出现(目前不确定)操作2的函数跟进。代码已经稍微修改过,不影响步骤差不多就是 密文1+@DBApp 加密后与密文比较,密文2与密文1拼接后加密并与另一段密文比较找出密文1和密文2后输入,然后系统会进行某种操作从开头的atio()函数开始分析。得知是windows的函数,并且第二个参数是选择hash类型,搜了一下第二个参数,发现是sha1加密,结合之前的程序分析,写脚本(别人的)结合之前的分析,得到密文2是~!
2023-06-09 23:33:06
153
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人