Easy_Re(逆向)

这篇博客讲述了如何通过OD(OllyDbg)逆向分析.exe程序,找到判断flag正确性的条件并获取正确答案的过程。作者通过智能搜索找到关键字符串,设置断点,逐步调试,最终在寄存器窗口揭示了flag。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

下载是个.exe文件,随便输入显示答案不对

OD载入,右键-中文搜索引擎-智能搜索

双击,“flag get”的字符串对应的地址

向上翻阅,可以看到jnz指令,这是判断是否是正确的标志,再此下一个断点。如果它跳转会跳转到下面,显示flag不太对,不跳转就会显示出flag get

### ISCTF2023 RE easy_z3 Writeup #### 逆向工程概述 对于ISCTF2023中的`easy_z3`题目,这是一道典型的反汇编与逻辑还原类挑战。目标是从给定的二进制文件中提取出特定算法并求解其内部验证条件以获得最终标志(flag)[^1]。 #### 初步分析 通过静态分析工具如IDA Pro或Ghidra加载该程序后发现, 主要功能围绕着输入字符串处理展开。程序接收用户输入并通过一系列复杂的算术运算和位操作来判断输入是否满足预设模式[^2]。 #### 动态调试辅助理解 为了更好地了解执行流程,在关键分支处设置断点有助于观察实际运行时的数据变化情况。借助于动态调试器(gdb/pwndbg),可以逐步跟踪函数调用链直至定位到核心校验环节[^3]。 #### Z3约束求解应用 注意到某些计算过程涉及到了非线性的表达式组合,此时引入符号执行框架Z3能够有效简化问题建模难度。具体做法是将待测变量抽象成未知数,并按照原程序定义的关系建立相应方程组提交给solver求解最优解集[^4]。 ```python from z3 import * # 定义符号变量 input_str = BitVec('input', 64) # 建立等价关系 (假设) constraints = [ input_str & 0xFFFFFFFF == 0xdeadbeef, LShR(input_str >> 32, 5) ^ 0xbadc0de == 0xf00dcafe ] # 创建求解器实例 s = Solver() # 添加约束条件至求解环境 for c in constraints: s.add(c) if s.check() == sat: m = s.model() flag_value = hex(m[input_str].as_long()) else: print("No solution found.") ``` 上述代码片段展示了如何利用Python绑定库PyZ3构建基本模型并尝试获取符合条件的结果。当然实际情况下的公式可能更为复杂,需依据样本特征灵活调整[^5]。 #### 结果确认 一旦得到候选答案,则返回至初始界面进行测试验证。如果一切顺利的话,应该能成功触发预期输出从而揭示隐藏的信息——即本次竞赛所需的flag格式:"CISCN{...}"。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值