RE WP November 06, 2019

2019 hectf re wp

Words count 2.3k Reading time 2 mins. Read count 1000000

官方wp
https://www.yuque.com/docs/share/e6c5d1fd-8d27-456a-88ab-823226503f56#helloRE

qiandao

放在od中

helloRe

放在ida中,反编译

main函数:输入字符串,长度不能超过25,通过一个if语句即可获得success
查看sub_401080

sub_401080是对输入a1进行了处理
sub_401080的返回值是一个判断,函数sub_401000如果不等于0,则返回True
并且调用sub_401000时,传入经过处理的输入a1
进入sub_401000

if成立的条件是v3和输入相同,strcpy函数将aAy9ZZx9xoc9zI9复制给v3
阅读汇编可知

是经过sub_401080处理后的等于这一串字符串

明白后写出脚本:

if __name__ == "__main__":
`f_flag = 'aY9)Z(?|ZX9xOC9z_i9eOYCw'`
`flag = [0]*25`
`f_ord = [0]*25`
`for i in range(len(f_flag)):`
   ` f_ord[i] = ord(f_flag[i])`
`for i in range(len(f_flag)):`
    `if(f_ord[i]>=40 and f_ord[i] < 48):`
        `flag[i] = f_ord[i] + 80`
    `else:`
        `if(f_ord[i]>=62 and f_ord[i]<=73):`
            `flag[i] = f_ord[i] + 3`
        `else:`
            `if(f_ord[i]>=79 and f_ord[i]<92):`
                `flag[i] = f_ord[i] -2`
            `else:` 
                `if(f_ord[i]>=93 and f_ord[i]<=107):`
                    `flag[i] = f_ord[i] + 4`
                `else:`
                    `if(f_ord[i]>=115 and f_ord[i]<=125):`
                        `flag[i] = f_ord[i] - 3`
                    `else:`
                        `if (f_ord[i] < 38 and f_ord[i]>29):`
                            `flag[i] = f_ord[i] +1`
                        `else:`
                            `flag[i] = f_ord[i]`
`for i in range(len(flag)):`
    `flag[i] = chr(flag[i])`
`flag1 = ''`
`for i in range(len(flag)):`
    `flag1 += flag[i]`
`print(flag1)`  

最后出来是eW91X0ByZV9uMF9wcm9iMWFt
最后进行base64解码
flag: flag{you_@re_n0_prob1am}

0%