encode

首先是upx脱壳

1
upx -d encode

然后是IDA分析,shitf F12找到位置后F5看看具体流程,根据运行的情况知道printf函数

image-20230919140510539

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分析是这样的】

image-20230919141420154

来看看sub_805BBD0()函数,只有一个参数,点进去过后非常的复杂…可以直接猜到是一个返回字符串长度的函数。因为下面有一个&v6[50]!=21还有一个 i%v3 。

image-20230919141952851

看到:sub_8048E24(&v5[18], v4, v5, v3); 这个函数:// 4个参数的加密,有v5‘Flag{This_a_Flag}’,有v5长度v3,还有&v5[18]和他的长度,我前2天刚写了一个rc4的题,一模一样。我就猜测是rc4加密。但是还是去分析了一下。【用chatGPT得知】

image-20230919142634370

是rc4的加密方法。我在之间的文章里面也有谈及过这里就不啰嗦了。

最后得到的结果是:

image-20230919144217065

所以我们逆向,首先将v6进行rc4解密然后再进行base64解密应该就可以了吧。

image-20230919152350489

得到rc4解密回去的16进制:23152553081a5938126a3931275b0b1313085c330b356101511f105c

然后上面有一个for循环

1
2
3
4
5
6
7
8
9
10
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]
flag = ""
key = "Flag{This_a_Flag}"

for i in range(len(a)):
temp = a[i] ^ ord(key[i%len(key)])
flag += chr(temp)

print(flag)
#eyD4sN1Qa5Xna7jtnN0RlN5i8lO=

然后进行base64换表后解码

1
2
3
4
5
6
7
8
9
import base64
import string

str1 = "eyD4sN1Qa5Xna7jtnN0RlN5i8lO=" # 需要换表的字符串

string1 = "0123456789+/abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" #IDA中看到的表
string2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" #原表
print(base64.b64decode(str1.translate(str.maketrans(string1,string2))))
#b'BJD{0v0_Y0u_g07_1T!}'

v6的值

细心的兄弟都发现v6的值变换了,我现在也不知道为什么。等知道了再来解答。

easy

用IDA打开

image-20230919204228152

“Can you find me?”

看来需要找找了,但是找啥呢?

image-20230919204308291

这个里面也啥都没有。

没有思路..看了Wp原来是有函数没有被调用过,这个函数就是flag

image-20230919204414879

这个ques(tion)函数没有被调用。那就手动改改让他调用吧。

我随便该了一个跳转【地址是固定的,我在IDA里面找到了地址,直接拿OD就改了】

然后F9了一下

image-20230919204910945

好像就出来了

flag{HACKIT4FUN}

emmm以后没有用过的函数都得多多注意。因为IDA静态看有点烧脑壳,该函数没有被调用,猜测出题人的目的就是让我们去调用这个函数然后就flag了

BJD_hamburger_competition

首先打开就发现不是PE文件也不是ELF文件也不是安卓

【我是第一次写Unity】

image-20230919214916459

通过上网查询得知了

ILSpy这个工具

并且知道了Unity:Assembly-CSharp.dll这个最关键

image-20230919215124624

打开【Ctrl + O】

image-20230919215154718

打开后在左边就会得到一个

image-20230919215229537

这个东西,右键选中“保存代码”【这里自己建立一个文件夹,放在文件夹里面】我这里建立了一个‘123’文件夹

image-20230919215317714

打开123:右键这个,然后用vs2022打开【这里其他的也可以,我用的vs2022。因为刚好有C#】

image-20230919215512882

打开后:

image-20230919215651299

右边就是C#,左边就是代码。然后就找了找找到这里

image-20230919215828255

看函数名字就知道第一个是Sha1,第二个是Md5

image-20230919221840243

str == 1001

这里通过简单的Md5解密是无法得到flag的,我们要去看Md5这个函数加密的过程是什么。【F12转到定义】

image-20230919220605334

然后就得到:

image-20230919220633834

这里因为我看不懂C#【但是大致内容还是勉勉强强,但是没学过所以就交给了Ai】

image-20230919220510037

这里只返回了前面20个字符。

OKOK这下就拿下了

image-20230919221704925

我也不知道为什么反正我之前写Md5的题就小写不对就尝试大写【总之粗制滥造的造出来了】

flag{B8C37E33DEFDE51CF91E}

JustRE

image-20230920103521877

打开看到

image-20230920220541172
emmm

我们放进去就得到flag

BJD{1999902069a45792d233ac}