攻防世界 三 (进阶篇)

CRACKME

这一道题对OD的使用进行了一定的训练,虽然相比真真正的使用还是差很多,首先是一个注册问题的exe文件,有窗口,打开OD寻找messagebox。
在这里插入图片描述
尝试设置断点
在这里插入图片描述
然后尝试打开软件点击注册,发现到了断点,说明断成功了。然后这时候看栈口,会发现之前压进来的数据有失败的提示字面,说明我们没有到判断正误的界面找到最下面的提示字面的地址,跳转,发现函数,设置断点
在这里插入图片描述
在这里插入图片描述
再次运行,然后发现不行,还是没到选择判断的地方继续如刚才的方法进行跳转,直接跳到一个比较前的地方,这时候看到一个updata说明是判断之前的汇编,所以单步往后走就可以了
在这里插入图片描述
遇到跳转点,猜测是后面又都有函数,猜测应该是这里,attach掉这个jnz
在这里插入图片描述
单步进入函数0dc17c69.00401630,看到cmp就有希望,走到cmp果然,有flag的字符,然后循环走flag就好,这里可以直接用F4,更快捷一点,或者用ida动态可以直接显示所有字符更方便(因为作者还不懂怎么用OD显示所有寄存器字符,所以用的比较笨的办法)
在这里插入图片描述
最后的到flag
在这里插入图片描述

ReverseMe-120

这里如果逻辑清晰一点就会很简单,扔到ida,看到比较函数,v13是关注点
在这里插入图片描述
往上看,v13这一段数组做了异或
在这里插入图片描述
在往上看,就有一个v13给v7赋值,忽略,还有一个sub_401000函数,把函数目的得出来,逆回去就是我们输入的flah啦,然后分析函数,里面有一个byte_414E40的字符表,发现是乱序的base64表,但是此函数和base64不同,而且表是乱序,估计形式结果还是和base64一样,所以先异或在base64加密,得到flag
在这里插入图片描述

zorropub(重要!!)

这几天一直死在这道题上,难度其实不大,但主要考研的还是编程水平,同时菜鸡作者又学会了一种可以用python进行程序运行爆破的方法,废话不多说,上解题流程。
程序运行,ida分析,开始以为是一个很长的流程题,但是后面注意到了,前面这一段部分,第一个输入酒的数量,第二次输入每个酒的id,并判断是否符合条件,但我们发现前半部分和后面的关系只是由一个小小的seed联系起来的,所以困难减少一半
在这里插入图片描述
这里有一个seed知识,它是一个rand()随机数的一个取值范围,emmmmmm,虽然很简单,但我也是后来才明白,所以记下来吧。然后分析后面就是对这个seed值运用各种MD5,估计公式逆向不太可能,所以直接爆破,这里就用到了python进行程序运行爆破的方法。

根据第一步的代码我们将所有可能的数输出到一个数组中去,这里可以在py编辑器里运行一下,代码如下:

c=[]
for i in range(16,0xffff):
    a=0
    j=i
    while(j):
        a=a+1
        j = j & (j - 1)
    if(a==10):
        c.append(i)

运行linux,这一部分作者的kali出了点问题,这也是拖延了很长时间的原因之一,因为opensell版本的问题,所以程序里的MD5函数运行不起来,导致kali一直运行不了这个程序,最后换了Ubuntu才解决了问题。
linux打开python,将刚才的代码段打进去,然后输出后面的代码段,这里是看了大佬的wp才明白的,这里我解析一下,大佬的具体地址在这里
https://www.cnblogs.com/whitehawk/p/10933552.html
主要是用了一个subprocess函数

for i in c:
    proc = subprocess.Popen(['./zorro_bin'], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
    #这里是用Popen进行一个子程序的打开,建立输入输出流的通道(注意大小写)
    out = proc.communicate(('1\n%s\n' % i).encode('utf-8'))[0]
    #这里是Popen的communicate函数,1是酒的数量,i是酒的id,既我们逆出来的数组里的值,后面encode是进行了转码,[0]记住就好了具体用处我也不太清楚
    if "nullcon".encode('utf-8') in out:
    #判断最后输出匹配
      print(out)
    #输出

最终得到flag
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
攻防世界Shuffle是一个在攻防世界平台上的题目,属于Reverse(逆向工程)类别的进阶区的题目。该题目的具体来源是SECCON-CTF-2014比赛。题目要求参与者找到一个字符串在随机化之前的顺序。关于该题目的详细解法可以在提供的博客链接中找到。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [攻防世界 Shuffle](https://blog.csdn.net/afanzcf/article/details/119462993)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [攻防世界Wire1杂项](https://download.csdn.net/download/m0_59188912/87097386)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [攻防世界Reverse进阶区-Shuffle-writeup](https://blog.csdn.net/qq_35056292/article/details/108676766)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值