BJDCTF2020
encode
首先是upx脱壳
1 | upx -d encode |
然后是IDA分析,shitf F12找到位置后F5看看具体流程,根据运行的情况知道printf函数
v6[50]就是v6后面的地址,因为上一句是:“Please input your flag”猜测sub_806DA80函数是scanf。
看到if ( sub_805BBD0(&v6[50]) != 21 )
知道我们输入的字符串长度是21byte【一般情况下我们输入的就是flag】
sub_804EAF0(0);
猜测长度不对的时候就错了退出去了,所以这个函数应该是退出的函数【不用分析因为不会进入】
看到v0 = sub_8048AC2(&v6[50]);
因为我们输入的flag是v6[50]后面的,所以这里是对flag进行了以第一次处理
点进去看看这个函数,最后分析可得是一个base64编码的函数:因为里面有base64字符集【这里可能是的,用ChatGPT分析是这样的】
来看看sub_805BBD0()函数,只有一个参数,点进去过后非常的复杂…可以直接猜到是一个返回字符串长度的函数。因为下面有一个&v6[50]!=21还有一个 i%v3 。
看到:sub_8048E24(&v5[18], v4, v5, v3);
这个函数:// 4个参数的加密,有v5‘Flag{This_a_Flag}’,有v5长度v3,还有&v5[18]和他的长度,我前2天刚写了一个rc4的题,一模一样。我就猜测是rc4加密。但是还是去分析了一下。【用chatGPT得知】
是rc4的加密方法。我在之间的文章里面也有谈及过这里就不啰嗦了。
最后得到的结果是:
所以我们逆向,首先将v6进行rc4解密然后再进行base64解密应该就可以了吧。
得到rc4解密回去的16进制:23152553081a5938126a3931275b0b1313085c330b356101511f105c
然后上面有一个for循环
1 | a= [0x23,0x15,0x25,0x53,0x08,0x1a,0x59,0x38,0x12,0x6a,0x39,0x31,0x27,0x5b,0x0b,0x13,0x13,0x08,0x5c,0x33,0x0b,0x35,0x61,0x01,0x51,0x1f,0x10,0x5c] |
然后进行base64换表后解码
1 | import base64 |
v6的值
细心的兄弟都发现v6的值变换了,我现在也不知道为什么。等知道了再来解答。
easy
用IDA打开
“Can you find me?”
看来需要找找了,但是找啥呢?
这个里面也啥都没有。
没有思路..看了Wp原来是有函数没有被调用过,这个函数就是flag
这个ques(tion)函数没有被调用。那就手动改改让他调用吧。
我随便该了一个跳转【地址是固定的,我在IDA里面找到了地址,直接拿OD就改了】
然后F9了一下
好像就出来了
flag{HACKIT4FUN}
emmm以后没有用过的函数都得多多注意。因为IDA静态看有点烧脑壳,该函数没有被调用,猜测出题人的目的就是让我们去调用这个函数然后就flag了
BJD_hamburger_competition
首先打开就发现不是PE文件也不是ELF文件也不是安卓
【我是第一次写Unity】
通过上网查询得知了
ILSpy这个工具
并且知道了Unity:Assembly-CSharp.dll这个最关键
打开【Ctrl + O】
打开后在左边就会得到一个
这个东西,右键选中“保存代码”【这里自己建立一个文件夹,放在文件夹里面】我这里建立了一个‘123’文件夹
打开123:右键这个,然后用vs2022打开【这里其他的也可以,我用的vs2022。因为刚好有C#】
打开后:
右边就是C#,左边就是代码。然后就找了找找到这里
看函数名字就知道第一个是Sha1,第二个是Md5
str == 1001
这里通过简单的Md5解密是无法得到flag的,我们要去看Md5这个函数加密的过程是什么。【F12转到定义】
然后就得到:
这里因为我看不懂C#【但是大致内容还是勉勉强强,但是没学过所以就交给了Ai】
这里只返回了前面20个字符。
OKOK这下就拿下了
我也不知道为什么反正我之前写Md5的题就小写不对就尝试大写【总之粗制滥造的造出来了】
flag{B8C37E33DEFDE51CF91E}
JustRE
打开看到
emmm
我们放进去就得到flag
BJD{1999902069a45792d233ac}