hgame week re
hgame week3 的re,
链接: https://pan.baidu.com/s/1jdYHLzhz3ygEtW0NPgqQsw 密码: w03a
文章目录
hidden
首先搜索字符串找到输出正误的函数,然后查看调用找到check函数:
程序逻辑比较清晰,就是在encode函数中加密,然后查看是否和两个值相等,
然后进入函数后看到对函数的处理只在后半段,前面只是处理数据,但是我们动调会发现函数会莫名的在前面这个函数中间跑飞:
动调时最关键的在于这个函数内部的这个调用:
步入调用内部,然后似乎还是一个比较完整的函数,一直找到后面的ret位置,然后按P, 分析为函数,还可以f5
得到一个加密的位置,而且最后调用的函数为我们直接输出正误的那个函数,所以这个程序前面静态看到的都是假的,真正的流程是运行到这个位置,然后直接判定了flag正误, 我们前面动调在这里推出也是因为程序已经运行完了。
然后看下程序的逻辑中间的几个运算基本可以直接反着写, 动调发现需要注意一个&0xff的操作,然后key是flag最后的两位,直接断到判定位置发现flag的加密是19×2的形式,避开了最后两位,所以我们后面的data中的对应flag位置就是key, 可以直接取出来。
然后就得到解密脚本:
key = [0x7d,0x65]
cipher_data = [8896099