-
-
[原创]第五题 争分夺秒
-
发表于: 2023-9-13 18:00 2656
-
1 2 3 4 5 6 | 用ida打开exe,发现识别出来的自定义非常少,但是有个别比较大的函数无法使用F5反编译,因此修改ida下cfg目录的hexrays.cfg文件,将MAX_FUNCSIZE设置为一个比较大的值。 挨个点击函数查看,发现sub_401000和sub_401870会检测当前调试状态,而这两个函数都只被sub_402220调用。因此直接修改sub_402220的返回值就可以跳过调试。 剩下的分析就比较简单,虽然掺杂了大量的无用代码,但是转成C语言后一路删除,就可以得到较为清晰的执行过程。目标程序先把输入进行base64解码,然后计算长度 - 4 字节的crc32与最后 4 个字节比较。校验成功后的数据分为两组,两组格式相同,均为:一个 4 字节的DWORD数 + 2 字节的后续数据长度 + 2 字节的填充 + 后续数据。 其中第一组的前 4 字节需要满足 * 0x7d45 模 0x346F8717 为 1 ,遍历后得到 0x3153622A 、 0x65C2E941 、 0x9A327058 、 0xCEA1F76F 共 4 个;第二组的前 4 字节需要满足 * 0xD711 模 0x729969FF 为 1 ,遍历后得到 0x4372A49D 、 0xB60C0E9C 共 2 个。依据出题人的意思应该取小于模数的 2 个。 后续数据需要解密才能使用,解密所需的解密数组依照该组前 4 字节作为随机数种子得到,由于是异或加密,因此只要再运行一次就可以实现加密。解密得到的大数和前 4 字节一样,均需要分别乘上一个较小的数,然后模上一个数得到 1 。此时无法再使用遍历获得结果。于是观察两组数据,发现 0x346F8717 和 0x729969FF 具有最大公约数 3 ,而两组大数 0xD3C1B8D6ABC0588ED1A30D41E3A4792C2E832E483BCE9617767E331240BE8E28AA7DC706C5A4B9AF288E91231D9F50F62B909FBA56D4E19856AEECE69951602C57AC73DB8ABDBBB68D03 和 0xB5B441AF57592C12EC5C722D5B377BFC3D5FECB8BA3DAF5B7812EF8FD1255E50913D2E7A6CB48837833074E78DCFEC0689D4219C8B98A1C617596A6DFBA28C973BEBF711EFB09844B305 存在最大公约数 9 。因此可以使用sagemath直接求逆得到符合条件的结果。 将填充设置为 00 ,得到符合题意的字节为 2A6253314A0000000957686C8A01D976349B1C99583EDC6C948A41D2C221A8489A60FB3BAF966C5A8A5374CB9CEB99611C68E13B8EB0A8AD081A00BFFD16DEC3FF37F3D3A0611C24BC76364991E190F7DE6D9DA472434A000000587D5C024B3A901EE0D8202FF50702246236834BF99B25A2BD85B5EAE79607D37EFB139480C214F0912072D99D325A64C5EF0C0D277C7559940ABE0D3B72F21B4B15C9418A9BD8013F5F098BE66E ,加密计算校验并base64编码后得到最终flag为 |
KmJTMUoAAAD1UMTRG+iFRaF+30mmANMCEqF3YPgU8FTyUvX6yePJFbEZXZ8tUvO70stWkJgshd+8oMQQITLP8l5HQPPJxxF0gCxZp/r5ja68Up2kckNKAAAAVESbyOlxOm8t5prM6tsrtV9VApTX9NiH1WHIWMEtdKohjkV2bQeZORqMYX9eP7AP1JlenlB3EAchhYJhoiP7R3NzbOYCcnXnqewe7SYM。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
赞赏
他的文章
- [原创]第十二题 深入内核 4071
- [原创]第十一题 步步逼近 4534
- [原创]第八题 AI核心地带 3459
- [原创] 第七题 智能联盟计划 3632
- 第六题 至暗时刻 10394
看原图
赞赏
雪币:
留言: