xyctf 何须相思煮余年

我们下载下来文件,看到的是这样的东西
在这里插入图片描述不知道是什么,百度搜了搜前面几个十六进制数,发现是字节码。那就好办了,我们需要做的就是把字节码还原为汇编指令。

把所有十六进制码弄成一个数组(这个可以用高级语言的字符串处理),然后把所有十六进制码弄成一个二进制文件:

hex_data=[0x55,0x8b,0xec,0x81,0xec,0xa8,0x0,0x0,0x0,0xa1,0x0,0x40,0x41,0x0,0x33,0xc5,0x89,0x45,0xfc,0x68,0x9c,0x0,0x0,0x0,0x6a,0x0,0x8d,0x85,0x60,0xff,0xff,0xff,0x50,0xe8,0x7a,0xc,0x0,0x0,0x83,0xc4,0xc,0xc7,0x85,0x58,0xff,0xff,0xff,0x27,0x0,0x0,0x0,0xc7,0x85,0x5c,0xff,0xff,0xff,0x0,0x0,0x0,0x0,0xeb,0xf,0x8b,0x8d,0x5c,0xff,0xff,0xff,0x83,0xc1,0x1,0x89,0x8d,0x5c,0xff,0xff,0xff,0x83,0xbd,0x5c,0xff,0xff,0xff,0x27,0xf,0x8d,0xed,0x0,0x0,0x0,0x8b,0x95,0x5c,0xff,0xff,0xff,0x81,0xe2,0x3,0x0,0x0,0x80,0x79,0x5,0x4a,0x83,0xca,0xfc,0x42,0x85,0xd2,0x75,0x25,0x8b,0x85,0x5c,0xff,0xff,0xff,0x8b,0x8c,0x85,0x60,0xff,0xff,0xff,0x3,0x8d,0x5c,0xff,0xff,0xff,0x8b,0x95,0x5c,0xff,0xff,0xff,0x89,0x8c,0x95,0x60,0xff,0xff,0xff,0xe9,0xac,0x0,0x0,0x0,0x8b,0x85,0x5c,0xff,0xff,0xff,0x25,0x3,0x0,0x0,0x80,0x79,0x5,0x48,0x83,0xc8,0xfc,0x40,0x83,0xf8,0x1,0x75,0x22,0x8b,0x8d,0x5c,0xff,0xff,0xff,0x8b,0x94,0x8d,0x60,0xff,0xff,0xff,0x2b,0x95,0x5c,0xff,0xff,0xff,0x8b,0x85,0x5c,0xff,0xff,0xff,0x89,0x94,0x85,0x60,0xff,0xff,0xff,0xeb,0x73,0x8b,0x8d,0x5c,0xff,0xff,0xff,0x81,0xe1,0x3,0x0,0x0,0x80,0x79,0x5,0x49,0x83,0xc9,0xfc,0x41,0x83,0xf9,0x2,0x75,0x23,0x8b,0x95,0x5c,0xff,0xff,0xff,0x8b,0x84,0x95,0x60,0xff,0xff,0xff,0xf,0xaf,0x85,0x5c,0xff,0xff,0xff,0x8b,0x8d,0x5c,0xff,0xff,0xff,0x89,0x84,0x8d,0x60,0xff,0xff,0xff,0xeb,0x38,0x8b,0x95,0x5c,0xff,0xff,0xff,0x81,0xe2,0x3,0x0,0x0,0x80,0x79,0x5,0x4a,0x83,0xca,0xfc,0x42,0x83,0xfa,0x3,0x75,0x20,0x8b,0x85,0x5c,0xff,0xff,0xff,0x8b,0x8c,0x85,0x60,0xff,0xff,0xff,0x33,0x8d,0x5c,0xff,0xff,0xff,0x8b,0x95,0x5c,0xff,0xff,0xff,0x89,0x8c,0x95,0x60,0xff,0xff,0xff,0xe9,0xf7,0xfe,0xff,0xff,0x33,0xc0,0x8b,0x4d,0xfc,0x33,0xcd,0xe8,0x4,0x0,0x0,0x0,0x8b,0xe5,0x5d,0xc3]
machine_code = bytearray(hex_data)
with open('machine_code.bin', 'wb') as file:

    file.write(machine_code)

然后把生成出来的.bin文件拖入IDA,我使用的是32模式(因为我尝试了只有32位模式成功了)。

对着00000000这个地址按p,然后ida就会从这里开始的区域分析为函数。
在这里插入图片描述然后就可以按F5反汇编了。
在这里插入图片描述这里就简单了,enc的数据就在这里解密,跟着反汇编的代码反着来就可以了,例如case 0我就-=i, case 1我就+=i,以此类推,就可以弄出flag了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
俗话说,‘熟读唐诗三百首,不会吟诗也会吟’,请分析附件的唐诗300首文本文件。 完成下列功能:(部分功能需要使用jieba第三方库) 统计每首诗歌的作者,如果第一行输入‘作者’,第二行则输入一个整数n,输出出现最多的作者前n个,出现次数相同时,按作者出现顺序排序。每行输出一个名字和出现次数,以空格间隔,程序结束 统计作者的名字出现的次数,如果第一行输入‘人物’,第二行则输入一个整数n,输出出现最多的作者前n个,出现次数相同时,按作者出现顺序排序。每行输出一个名字和对应出现次数,以空格间隔,程序结束 注:有的诗人在诗名或诗句中用到了别的诗人的名字。如’梦李白二首之一‘。因此第1,2项目之间的数据可能有所差异。 如果输入某个字符串编号,范围和格式在’010‘-’320‘之间(测试用例保证编号存在),输出对应该编号的诗句。 输出格式:去掉首行诗歌编号,其余格式与文件中诗歌显示格式相同。 如果输入‘唐诗’,输出文件中的诗词数量,程序结束 飞花令,如果第一行输入'飞花',则可以在第二行输入s中文字符(长度为1),然后按照在文件中出现的顺序,输出唐诗300首文件包含该中文字符的诗句(长度不超过7的诗句),每行一句。 如果非以上输入,输出‘输入错误’,程序结束 请严格按照输入输出示例的格式编写程序输出 输入输出示例 示例仅为格式示例,与测试数据无关 示例1: 输入: 作者 1 输出: 杜甫 37 示例2: 输入: 人物 2 输出: 杜甫 37 李白 33 示例3: 输入: 084 输出: 李白 行路难三首之三 有耳莫洗颍川水 有口莫食首阳蕨 含光混世贵无名 何用孤高比云月 吾观自古贤达人 功成不退皆殒身 子胥既弃吴江上 屈原终投湘水滨 陆机雄才岂自保 李斯税驾苦不早 华亭鹤唳讵可闻 上蔡苍鹰何足道 君不见 吴中张翰称达生 秋风忽忆江东行 且乐生前一杯酒 何须身后千载名 示例4: 输入: 飞花 秦 输出: 秦地罗敷女 孔子西行不到秦 居人未改秦衣服 始与秦塞通人烟 况复秦兵耐苦战 赐名大国虢与秦 城阙辅三秦 河山北枕秦关险 渭水自萦秦塞曲 山色遥连秦树晚 夜泊秦淮近酒家 嵩云秦树久离居 秦时明月汉时关 示例5: 输入: 21 输出: 输入错误。请帮我编写详细代码
02-06

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值