SN:B4D682C8BF2DE13AD9B6AEF24A80CB22
设计说明:
本题是个数字替换的小游戏。
预设一个【0-255】的乱序表,隐藏前8字节。用户输入32位16进制字符串,转换成16字节数值,前8字节填入乱序表。验证过程分三步:
1.统计表格,每一位分别按*p++和**p查表,查8次后,统计所有能到达的格子,形成256*256的方阵,分别统计第0、14、40、79列,验证col0==169 && col14==172 && col40==167 && col79>200。
2.变形表格,每一位按**p循环替换,要求256步之内能回到当前值。
3.验证表格,取表格前8位,分别按用户输入的后8位的二进制值进行查表,为0时取**p,为1时取*p++,查表8次后,验证结果是否为“GoodJob~”。成功则输出“GoodJob~”。否则输出“TryAgain”。
本题使用VC6+WTL制作。
破解建议:
1.程序没有任何ANTI,可以直接在IDA中查看源码,找到上述三步验证。
2.根据验证第2步分析可知,256个数在256个位置全部都能循环替换回来,对每一个数都必然存在*p=i这一步,也就是说0-255这256个数都要存在,统计给出的258位,找出缺失的8位为:[30, 40, 75, 109, 140, 163, 210, 251]。
3.把8位进行排列,分别用第1步的算法进行验证,一共有40320种组合,数量级很小,很快就能穷举出结果,得到唯一解:[0x4B, 0x6D, 0x28, 0x8C, 0xFB, 0xD2, 0x1E, 0xA3]。
4.把8位值放入256数表格,运行第2步进行表格变换。
5.取变换后的表格的前8位[193, 155, 127, 88, 100, 213, 119, 33],按第1步的算法列举出每一位能到达的值,然后查表找出“GoodJob~”每一位的运行步骤为[0x9D, 0x6B, 0xEA, 0x2F, 0xA4, 0x08, 0xBC, 0x22],都是唯一解。
6.把前8位的解与后面的运行步骤组合并按输入逆序排列,得到答案:B4D682C8BF2DE13AD9B6AEF24A80CB22
[培训]《安卓高级研修班(网课)》月薪三万计划
最后于 2021-11-18 13:11
被kanxue编辑
,原因: