[一千道逆向题] 攻防世界1-5题刷题题解(偏动调)

wuchangjian2021-11-15 00:29:31编程学习

目录

      • 前言
      • 0x00 Hello, CTF
      • 0x01 insanity
      • 0x02 python-trade
      • 0x03 re1
      • 0x04 game

前言

立了个flag,刷满一千道逆向。先从攻防世界开始。


0x00 Hello, CTF

查壳
在这里插入图片描述

新手区应该没壳,下面不查了。
在这里插入图片描述

逻辑很清晰,你可控的输入点在v9,然后把你输入的v9每一个字符以16进制读取存到v10,最后再用v10和v13进行比对。
所以输入
437261636b4d654a757374466f7246756e

这一串代表的字符就是flag

在这里插入图片描述


0x01 insanity

在这里插入图片描述

flag与打印出来的内容有关
flag与“Reticulatingsplines,pleasewait…”无关
字符串flag与随机数无关
然后直接字符串里找到了…
在这里插入图片描述


0x02 python-trade

是个pyc文件,直接反编译一下
在这里插入图片描述

按照他的加密脚本写解密脚本就行
在这里插入图片描述


0x03 re1

在这里插入图片描述
不是很理解,放od里看看

在这里插入图片描述

…本来想在输入点下个断点,没想到flag就在上面了。


0x04 game

在这里插入图片描述

一个游戏,满足条件能够跳到关键函数

在这里插入图片描述

然后看到 flag is …
说明如果能到这个函数就可以输出flag

这里提供两种不用将算法逆向的思路:
第一种,直接用ida的patch,直接把图里第一个函数地址patch成第二个函数地址

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

然后就直接输出flag了,这不比直接逆向轻松?

然后我决定再试试用od来直接跳转,锻炼下动调水平

动调可以直接关闭虚拟机的地址随机化aslr,这样可以跟ida里的地址相同,然后随便修改一个call的地址为ida里输出flag的函数的地址即可。

如果不关闭地址随机化的话,这道题也可以自己找,比较好找,因为有关键词
在这里插入图片描述

我们只要让他运行到这里就行

在这里插入图片描述

但是不能直接跳到这个语句,要跳到函数入口,也就是push ebp的地址0x0044E940

接下来就是运行程序,找可以改call的地方
在这里插入图片描述

停在输入的地方,然后随便找个call的地址修改成0044E940

在这里插入图片描述

像这样,你无论输入什么都会有flag出来,但是却是一闪而过
所以你可以F8一步步走,这样就能清楚看到flag了

在这里插入图片描述

看到熟悉的%s,直接F4运行至此,flag就全出来了

在这里插入图片描述

在这里插入图片描述

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。