• http://ctf.bugku.com/challenges#love:bugku--love


      做了一道逆向题目,主要关联到base64编码的知识点。下面做一分析。
    题目如下:
      通过测试,可知它没有加壳。尝试使用IDA进行分析。
    1.IDA分析文件
      打开文件后,按【shift+F12】即可转到本程序的字符窗口,运行程序可见【please enter the flag:】,找到此字符语句进行下一步分析。如下图。
      双击即可进入相关上下文程序。此时是汇编语言,emmmmmmm,找它的交叉引用,函数名为【sub_4156E0】,进入此函数,按【F5】查看伪代码。如下图所示。
      开始分析。程序首先通过【sub_4110BE】函数处理了输入的Str值,然后通过for循环对上一函数的输出值进行处理,再和Str2比较。双击Str2,可知其值是【e3nifIH9b_C@n@dH】。中间还有个函数,emmmmm,完全看不出其作用。
      (接下来应该是对函数【sub_4110BE】分析)
     
      全观这一块的逻辑可知还有个不能看到的函数【sub_411127】,它会是什么、会有什么影响呢?这个稍后分析。
      现在的流程应该是,首先分析sub_4110BE,再分析sub_411127,最后分析for循环,这三块使用户的输入变成了迷,那窥迷就得一个一个来。
    (1)sub_4110BE分析
      进入了它的真实函数中,分析代码。

      留意标注的地方,可知这其实是一个base64编码的过程(后面会附上base64的相关内容)。此函数将输入值进行了base64编码操作。
    (2)sub_411127分析
      在伪代码中发现打不开这个函数,说明它被保护了,那只好愉快地看对应的汇编代码了。
      在伪代码中,可知eax是决定分支走向的唯一因素。如下图。
      因此,要做的就是检测sub_411127是否变换了eax的值。下面是函数的内容。
      我做了标注,第7个和第8个红是紧挨着call那个调用函数的两个参数,我点进这个call并反汇编查看了,嗯,没有错。如下图。
      所以,前6个和后6个标注的红分别是进这个函数时对应参数的入栈和出栈情况,可知eax的值还是进这个函数之前的值。
      综上,此函数对判断的结果没有影响。
    (3)for循环分析
      这个看来就很简单了,单纯地对base64编码后的每位数加了个固定值。
    2.编码获取输入值
      上一大步骤说明了:用户输入值经过base64编码和那个for循环处理即可成为Str2,那反过来编个码就成功获取到初始值了。以下是我的代码。
    import base64
     
    str2="e3nifIH9b_C@n@dH"
    slen=len(str2)
    j=0
    str1=""
    for i in str2:
        str1+=chr(ord(i)-j)
        j=j+1
        
    print str2
    print str1
    print base64.b64decode(str1)
     
      运行后,flag=。愉快地结束。
     
    3.base64
  • 相关阅读:
    laravel-13-笔记-1
    laravel-14-笔记-2
    supervisor监听器-linux安装配置
    laravel-12-artisan命令创建view文件
    linux修改主机名
    laravel-11-laravel 模型Eloquent ORM
    laravel-composer安装laravel
    laravel-10-laravel collection集合
    laravel-8-laravel数据填充
    laravel-9-laravel数据库查询 查询组件
  • 原文地址:https://www.cnblogs.com/HYWZ36/p/10297682.html
Copyright © 2020-2023  润新知