-
-
[原创]KCTF2022春季赛逆向第2题 末日邀请WP
-
发表于: 2022-6-9 14:38 8776
-
运行程序,没有静态混淆,动态反调试,让输入满足判断逻辑即可。输入长度最大41,输入范围1234567890_ABCDEFGHIJKLMNOPQRSTUVWXYZ。
第一阶段:
0x004012AF,0x004012DE,0x0040131D和0x00401356三个分支,判断输入的4-7位,即input[3-6]是否为'KCTF'。
第二阶段:
后9位,loc_40142D开始的冒泡排序之后,在loc_401454判断是1-9,9个数字。这9个数字的序列需要满足loc_4013BE的判断条件。
写代码筛选满足的序列:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | for line in f.readlines(): b = line.strip( "\n" ).split( "," ) flag = 0 a = 0 for i in range ( 9 ): a = a * 0xA c = int (b[i]) a = a + c e = a % (i + 1 ) if e! = 0 : flag = 1 break if flag = = 0 : print ( "," .join(b) + "\n" ) |
得到序列:
3,8,1,6,5,4,7,2,9
第三阶段:
在最后需要判断整个序列的计算数值,需要是0xf52e0765,计算过程在loc_4011F8。计算方法如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | def hashmy( input ): c = 0xFFFFFFFF j = 0 for i in input : if i = = "": i = "," a = ord (i) a = a^c if c& 0x80000000 > 0 : c = (c>> 8 ) c = c + 0xff000000 else : c = (c>> 8 ) a = a& 0xff d = a * 4 + 0xB20 e = int (hash_table[d], 16 ) + ( int (hash_table[d + 1 ], 16 )<< 8 ) + ( int (hash_table[d + 2 ], 16 )<< 16 ) + ( int (hash_table[d + 3 ], 16 )<< 24 ) c = e^c c = 0xffffffff - c return c |
穷举前三位,最终获得flag:
421KCTF381654729
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
最后于 2022-6-9 16:01
被kanxue编辑
,原因:
赞赏
他的文章
- [原创]KCTF2022春季赛逆向第2题 末日邀请WP 8777
- [原创]KCTF2022春季赛逆向第七题 一触即发WP 8134
- [原创]KCTF2022春季赛Crypto虫洞末世WP 12228
- [原创]第四题飞蛾扑火WP 6235
看原图
赞赏
雪币:
留言: