攻防世界 三 (进阶篇)

CRACKME

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

ReverseMe-120

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

zorropub(重要!!)

这几天一直死在这道题上,难度其实不大,但主要考研的还是编程水平,同时菜鸡作者又学会了一种可以用python进行程序运行爆破的方法,废话不多说,上解题流程。
程序运行,ida分析,开始以为是一个很长的流程题,但是后面注意到了,前面这一段部分,第一个输入酒的数量,第二次输入每个酒的id,并判断是否符合条件,但我们发现前半部分和后面的关系只是由一个小小的seed联系起来的,所以困难减少一半
攻防世界 三 (进阶篇)_第8张图片
这里有一个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
在这里插入图片描述

你可能感兴趣的:(逆向题目练习)