首页
社区
课程
招聘
[原创]网鼎杯青龙组re_joker
发表于: 2020-5-18 18:52 3736

[原创]网鼎杯青龙组re_joker

2020-5-18 18:52
3736

进入main,发现无法F5,提示栈帧错误,调整栈帧,可以正常反编译

可以明显看到输入的值拷贝到"v5",并且原始的值会经过wrong,omg两个函数,最后v5进入encrypt,该函数时一个自加密的函数,等v5不等与0的时候进入finally

这里发现,wrong,omg都是错误的路径,与解题并没有太大关系,encrypt与finally都没有办法正常分析,都是错误的函数,这里就要考虑解密自加密的函数了,算法比较简单,直接异或了0x41,这里直接使用idapython脚本Patch一下,就可以分析了

这里经过Patch的函数,进入里面将数据转换为代码(快捷键为“c”),这里用Editer->Function->delete Function -> create Function,ida默认识别的函数会有错误,因此删除再重新创建一个,最终两个函数可以正常分析

分析encrypt函数,需要让第一个式子成立,才能最终让输入的flag进入finally。

编写脚本,可以得到第一个式子的输入。

这里发现接触来的输入是19个字符,与一开始要求输入的24个还差了5个。这时候进入分析finally。

可以看到给了5个值,但是都没用,这一段程序就是拿输入的第一个字符去参与if ( (*a1 != 0x25) == v72 )的判断,这是发现v72返回的是一个1~100的随机数,然而第一个字符不等于“%”时将等于1,然后再去与v72比较是否相等。

这个时候就陷入沉思了,发现这段代码并没由实际的作用,又分析了汇编,发现还是一样的逻辑。最后定位再了这5个值上,19+5==24刚好满足,最后猜测flag的最后一位时“}”,因此求出异或的值

最终flag拼接上就出来了


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 2
支持
分享
最新回复 (1)
雪    币: 259
活跃值: (283)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
mark
2020-5-19 06:50
0
游客
登录 | 注册 方可回帖
返回
//