[网鼎杯 2020 青龙组]singal

打开IDA查看

重点在红框那个函数中

发现是一堆switch case 主要分析一下逻辑 每次遇到a1的数组元素为7时 进入case7进行一次比较 这个比较实际是通过case1 v4传的值与a1的下一个元素进行的 所以v4数组我们可以通过找到a1数组的所有7后面的元素来得到 然后再根据v4数组的值 通过逆向switch case的过程来把flag 也就是Str的值找到 这道题手工做也不太复杂 但这种条件约束用angr去跑的话会事半功倍

也是在网上学习到了angr的基本用法 angr求解这种题不需要用到进阶的方法 所以只是简单地看了一下angr的入门用法 就可以写脚本直接求解了

import angr

p = angr.Project('./signal.exe')   #指定angr跑的程序
state = p.factory.entry_state()    #新建一个SimState的对象,得到一个初始化到二进制入口函数的SimState对象。
simgr = p.factory.simgr(state)   #创建simulation manager,angr的主要入口

simgr.explore(find=0x004017A5 ,avoid=0x004016E6)  #争取跑到输出成功的地址,避免跑到输出wrong的地址
flag = simgr.found[0].posix.dumps(0)[:15]     #得到flag
print(flag)

flag{757515121f3d478}

参考链接:https://blog.csdn.net/Breeze_CAT/article/details/106139253

发表评论

您的电子邮箱地址不会被公开。