170915 逆向-问鼎杯题库(小磊生病了)

1625-5 王子昂 总结《2017年9月15日》 【连续第348天总结】
A. 问鼎杯题库-逆向
B.

小磊生病了

题目:小磊生病了,医生检查出小磊体内有两种有害病菌B和C是引发的关键,同时也找到的消灭病菌的有益菌A ,现在要你帮助A战胜B和C,治好小磊,小磊会告诉你flag是什么。

直接运行会显示Andy,Bob,Carl三种菌的数量
观察代码结构可以发现最后flag的生成处:
这里写图片描述
很明显,当通过了23次循环以上时,会以v24数组的值作为下标来打印neFO字符串
分别将两个数组复制下来进行处理,得到flag:

s = "neFolieIhrTHe"
h = [2, 5, 9 ,6 ,7 ,0 ,10 ,8 ,12 ,11 ,3 ,4 ,1]
for i in h:
    print(s[i], end='')

FireInTheHoLe

还可以爆破:

00A31297   . /75 36         jnz short qqqq.00A312CF
00A31299   . |8BBD 60FFFFFF mov edi,dword ptr ss:[ebp-0xA0]          ;  di=v23,循环量
00A3129F   . |33F6          xor esi,esi
00A312A1   . |85FF          test edi,edi
00A312A3   . |7E 2A         jle short qqqq.00A312CF
00A312A5   . |EB 09         jmp short qqqq.00A312B0
00A312A7   . |8DA424 000000>lea esp,dword ptr ss:[esp]
00A312AE   . |8BFF          mov edi,edi
00A312B0   > |8B94B5 64FFFF>mov edx,dword ptr ss:[ebp+esi*4-0x9C]    ;  选取flag字符
00A312B7   . |0FBE4415 B0   movsx eax,byte ptr ss:[ebp+edx-0x50]
00A312BC   . |50            push eax
00A312BD   . |68 48BAA300   push qqqq.00A3BA48                       ;  %c
00A312C2   . |E8 14010000   call <qqqq.Print>                        ;  输出
00A312C7   . |46            inc esi
00A312C8   . |83C4 08       add esp,0x8
00A312CB   . |3BF7          cmp esi,edi
00A312CD   .^|7C E1         jl short qqqq.00A312B0
00A312CF   > \68 4CBAA300   push qqqq.00A3BA4C                       ;  pause
00A312D4   .  E8 25000000   call qqqq.00A312FE

直接将EIP改到这里00A31299即可
注意要在初始化赋值工作进行之后,否则堆栈中无这些局部变量
edi要手动写入23,因为我们未合法进行若干次循环
esi注意要执行清空置0,否则Print不从第0个开始

同样能得到flag

至于算法
这里写图片描述
粗略地分析了一下,整个程序一共有三层循环:
第一层随机生成数
第二层依次比较第一名、第二名和第三名
第三层交换名称和值
最复杂的三个第四层循环是写入字符串用的,分别为tmp=a,a=b, b=tmp
最后验证是否第一名(即值最高的)为益生菌Andy,是则继续循环,不是则直接结束
如果Andy连续胜利23次以上则输出flag
嗯……概率有点感人哈,不过好像还是有可能的 不像掷骰子要求7那种完全没戏
反正就是要求爆破咯╮(╯_╰)╭

C. 明日计划
问鼎杯正赛

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值