(52)[HGAME 2023 week1]encode

[HGAME 2023 week1]encode

nss:3480

这个题我们进入IDA

image-20250306175307023

我们可以发现这就是一个加密,然后判断的程序。

如果v4!=dword_403000 的话就会报错,因为那个

sub_401160(Format);这个是报错的函数。

所以我们要提取加密后的东西

image-20250306175427595

我们点开发现这个dword_40300这个进去之后应该是100个数据哇,可是IDA呈现好多,这些0我们就需要去掉。

所以我们需要写一个这个程序

v4_new=[x for x in v4 if x!=0]
if len(v4_new)<100:
 v4_new.extend([0]*(100-len(v4_new)))

然后我们得到正确的enc为

[8, 6, 7, 6, 1, 6, 13, 6, 5, 6, 11, 7, 5, 6, 14, 6, 3, 6, 15, 6, 4, 6, 5, 6, 15, 5, 9, 6, 3, 7, 15, 5, 5, 6, 1, 6, 3, 7, 9, 7, 15, 5, 6, 6, 15, 6, 2, 7, 15, 5, 1, 6, 15, 5, 2, 7, 5, 6, 6, 7, 5, 6, 2, 7, 3, 7, 5, 6, 15, 5, 5, 6, 14, 6, 7, 6, 9, 6, 14, 6, 5, 6, 5, 6, 2, 7, 13, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

以上这个关于正确的enc,有好多帖子他们都没有说怎么求,所以我就写了,他们简直太不负责了嘿嘿嘿。

所以接下来我们分析一下加密部分

image-20250306175812794

这个就是将

flag高位和低位分开了。

第一行是将flag的高四位变为0,留下了第四位

第二行是将flag的高四位变为低四位。

所以我们要做的就是将这两个变换位置。所以我写了两种代码。

网上写的解法跟我不一样,反正能做出来就行了,这个题网上的wp也比较少吧,好像,反正我见了好几个人都写的一样的wp

#v4=[ 8, 6, 7, 6, 1, 6, 13, 6, 5, 6, 11, 7, 5, 6, 14, 6, 3, 6, 15, 6, 4, 6, 5, 6, 15, 5, 9, 6, 3, 7, 15, 5, 5, 6, 1, 6,
#        3, 7, 9, 7, 15, 5, 6, 6, 15, 6, 2, 7, 15, 5, 1, 6, 15, 5, 2, 7, 5, 6, 6, 7, 5, 6, 2, 7, 3, 7, 5, 6, 15, 5, 5, 6,
#        14, 6, 7, 6, 9, 6, 14, 6, 5, 6, 5, 6, 2, 7, 13, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
​
v4=[8, 0, 0, 0, 6, 0, 0, 0, 7, 0,
0, 0, 6, 0, 0, 0, 1, 0, 0, 0,
6, 0, 0, 0, 13, 0, 0, 0, 6, 0,
0, 0, 5, 0, 0, 0, 6, 0, 0, 0,
11, 0, 0, 0, 7, 0, 0, 0, 5, 0,
0, 0, 6, 0, 0, 0, 14, 0, 0, 0,
6, 0, 0, 0, 3, 0, 0, 0, 6, 0,
0, 0, 15, 0, 0, 0, 6, 0, 0, 0,
4, 0, 0, 0, 6, 0, 0, 0, 5, 0,
0, 0, 6, 0, 0, 0, 15, 0, 0, 0,
5, 0, 0, 0, 9, 0, 0, 0, 6, 0,
0, 0, 3, 0, 0, 0, 7, 0, 0, 0,
15, 0, 0, 0, 5, 0, 0, 0, 5, 0,
0, 0, 6, 0, 0, 0, 1, 0, 0, 0,
6, 0, 0, 0, 3, 0, 0, 0, 7, 0,
0, 0, 9, 0, 0, 0, 7, 0, 0, 0,
15, 0, 0, 0, 5, 0, 0, 0, 6, 0,
0, 0, 6, 0, 0, 0, 15, 0, 0, 0,
6, 0, 0, 0, 2, 0, 0, 0, 7, 0,
0, 0, 15, 0, 0, 0, 5, 0, 0, 0,
1, 0, 0, 0, 6, 0, 0, 0, 15, 0,
0, 0, 5, 0, 0, 0, 2, 0, 0, 0,
7, 0, 0, 0, 5, 0, 0, 0, 6, 0,
0, 0, 6, 0, 0, 0, 7, 0, 0, 0,
5, 0, 0, 0, 6, 0, 0, 0, 2, 0,
0, 0, 7, 0, 0, 0, 3, 0, 0, 0,
7, 0, 0, 0, 5, 0, 0, 0, 6, 0,
0, 0, 15, 0, 0, 0, 5, 0, 0, 0,
5, 0, 0, 0, 6, 0, 0, 0, 14, 0,
0, 0, 6, 0, 0, 0, 7, 0, 0, 0,
6, 0, 0, 0, 9, 0, 0, 0, 6, 0,
0, 0, 14, 0, 0, 0, 6, 0, 0, 0,
5, 0, 0, 0, 6, 0, 0, 0, 5, 0,
0, 0, 6, 0, 0, 0, 2, 0, 0, 0,
7, 0, 0, 0, 13, 0, 0, 0, 7, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
#重新排一下序号
​
v4_new=[x for x in v4 if x!=0]
if len(v4_new)<100:
 v4_new.extend([0]*(100-len(v4_new)))
​
​
flag=''
for i in range(50):
 flag_h=(bin(v4_new[2*i+1]<<4))[2:].zfill(8)
 flag_l=(bin(v4_new[2*i]))[2:].zfill(8)
 flag+=chr(int(flag_h,2) | int(flag_l,2))
​
 #flag+=chr(int(flag_h,2)+int(flag_l,2))   这部分可以和上面是一样的作用
print(flag)
​

image-20250306180100220

我们得到flag

hgame{encode_is_easy_for_a_reverse_engineer}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值