首页
社区
课程
招聘
[原创]第五题 争分夺秒
2023-9-13 18:00 2113

[原创]第五题 争分夺秒

xym 活跃值
4
2023-9-13 18:00
2113
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字节需要满足*0x7d450x346F87171,遍历后得到0x3153622A0x65C2E9410x9A3270580xCEA1F76F4个;第二组的前4字节需要满足*0xD7110x729969FF1,遍历后得到0x4372A49D0xB60C0E9C2个。依据出题人的意思应该取小于模数的2个。
后续数据需要解密才能使用,解密所需的解密数组依照该组前4字节作为随机数种子得到,由于是异或加密,因此只要再运行一次就可以实现加密。解密得到的大数和前4字节一样,均需要分别乘上一个较小的数,然后模上一个数得到1。此时无法再使用遍历获得结果。于是观察两组数据,发现0x346F87170x729969FF具有最大公约数3,而两组大数0xD3C1B8D6ABC0588ED1A30D41E3A4792C2E832E483BCE9617767E331240BE8E28AA7DC706C5A4B9AF288E91231D9F50F62B909FBA56D4E19856AEECE69951602C57AC73DB8ABDBBB68D030xB5B441AF57592C12EC5C722D5B377BFC3D5FECB8BA3DAF5B7812EF8FD1255E50913D2E7A6CB48837833074E78DCFEC0689D4219C8B98A1C617596A6DFBA28C973BEBF711EFB09844B305存在最大公约数9。因此可以使用sagemath直接求逆得到符合条件的结果。
将填充设置为00,得到符合题意的字节为2A6253314A0000000957686C8A01D976349B1C99583EDC6C948A41D2C221A8489A60FB3BAF966C5A8A5374CB9CEB99611C68E13B8EB0A8AD081A00BFFD16DEC3FF37F3D3A0611C24BC76364991E190F7DE6D9DA472434A000000587D5C024B3A901EE0D8202FF50702246236834BF99B25A2BD85B5EAE79607D37EFB139480C214F0912072D99D325A64C5EF0C0D277C7559940ABE0D3B72F21B4B15C9418A9BD8013F5F098BE66E,加密计算校验并base64编码后得到最终flag为

KmJTMUoAAAD1UMTRG+iFRaF+30mmANMCEqF3YPgU8FTyUvX6yePJFbEZXZ8tUvO70stWkJgshd+8oMQQITLP8l5HQPPJxxF0gCxZp/r5ja68Up2kckNKAAAAVESbyOlxOm8t5prM6tsrtV9VApTX9NiH1WHIWMEtdKohjkV2bQeZORqMYX9eP7AP1JlenlB3EAchhYJhoiP7R3NzbOYCcnXnqewe7SYM。


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
点赞0
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回