前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >逆向专题 | Writeup分享二

逆向专题 | Writeup分享二

作者头像
安恒网络空间安全讲武堂
发布2018-02-06 15:06:55
7280
发布2018-02-06 15:06:55
举报

逆向WP分享二

0x01 Re11 [链接地址](Jarvisoj.com)

我们拿到的是一个ELF文件,在Linux中可执行,我们直接丢进IDA中shift+F12,观察到flag字符串之后双击进入主函数,再F5观察函数:

- 随手注释,代码很长,慢慢看,从最后看起,可以得知v22=0,所以逆推得知,前面的v16-20 = 48···,按R可以得知v16-20 = 0823},而且v21=22,可以推测出v15为我们所要找的flag并且长度为22,找到定义v15的代码处,则根据上述的关键条件,其中前17位存入字符串v15中,后5位覆盖v16~v20的取值,使v16~v20分别等于0823}

- 继续向下分析,找到输入的代码块,经过分析可得到关键信息如上图,其中v21即为输入的长度,通过关键条件v21==22验证了猜测输入字符串长度为22,同时需要保证输入的后五位为0823}

- 向下分析v15需要满足的条件,着重分析v15[i] != (*((_DWORD *)&v6 + i) - 1) / 2,&v6为取v6的地址;(_DWORD *)&v6强制z转化为_DWORD型指针,即两个字节;((_DWORD *)&v6 + i)为从&v6向后取sizeof(_DWORD)*i个字节;*((_DWORD *)&v6 + i) - 1)为取从&v6向后取4i个字节的值

- [指针地址加减问题](http://www.cnblogs.com/WangAoBo/p/6365114.html)

后面我们需要找到v6-v13的内存地址

翻回前面得到:

即可得到内存地址,再写脚本即可拿到flag:

0x02 CrackMe.exe [题目链接](jarvis.com)

我们先点开尝试玩一玩,结果是密钥无效,所以我们丢进IDA时搜索字符串“密钥无效”来找到关键函数,之后再看整体大纲:

我们可以看到函数的分支,所以我们点开密钥的分支F5来观察函数

仔细观察函数,可以得到string为输入的用户名,而string1为输入的注册码,后面又对用户名进行了一系列的转换,再将用户名加到"Happy@"的后方形成一个新的字符串,形成的新的字符串再与string1,即注册码相比较,所以我们可以确定新形成的字符串就是题目所要找的注册码。(strcpy函数是复制!加到字符串的后方!不是覆盖!注意!!!)

所以我们可以在最后方的比较函数处断点,运行程序,利用程序本身所转换得到的注册码来拿到flag而不用自己写脚本解得注册码

F9运行

即可拿到注册码

0x03 隐写诶13 [实验室平台](10.12.16.15)

打开,是一个EF可执行文件,先自己运行一下,放入IDA,找到main函数,F5:

随手注释,v6为输入值,可以注意到输入的值的长度规定为7位,直接观察关键的if函数:

关键的if函数是已知的v8字符串和输入值v3的一个循环函数,在此处进行断点,F9进行运行调试,输入'hellowo'字符串,F7单步调试,可以观察到我们所输入的h的字符先被处理,处理之后变成了0x61的字符,随即对比和0x49对比不成功,直接跳出循环结束程序

所以可以根据前面的伪代码写脚本,得到flag,脚本如下:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-12-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 恒星EDU 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档