zoukankan      html  css  js  c++  java
  • 第八届极客大挑战 Re

    0x01.Writeup-RE-CM_2

    题目:

     

    解题思路:

    1.这个是经过xor的,王老师提示说用xortool,于是放进kali,装好之后执行

    xortool CM_2.exe -b,

    0.out变为PEexe,于是放进IDA32得到flag。

    0x02.Writeup- RE-CM_3

    解题思路:

    1.拿道题之后直接丢进DIE扫一下,如图,可以看出是32位,于是用32位IDA打开。

     

    2.shift+F12看字符串,看到敏感字符SYC{%s}于是点进去,于是知道关键函数是sub_45BFF0。

    3.分析函数sub_45BFF0。

     

    上面这张图是关键代码,不难发现,这是将byte_52E000数组里的元素转换位置。然后看到上有一串数字,如右图,这些数字是被当做byte_52E000数组的下标从而实现转换byte_52E000数组元素位置。

    接下来需要知道byte_52E000数组里的元素,双击即可看到。

     

    4.分析清楚后接下来写脚本,由于需要取数组下标,我用c写的脚本,如下

     

    得到flag,大功告成!

    0x03.Writeup- RE-APK_1

    题目:

     

    于是知道如果找到password就能过这题。

    解题思路:

    1.用Apktool打开,

     

    2.

     

    可以看到,username = ‘SycGeek2017’,

    一开始以为Password就是username的base64编码“U3ljR2VlazIwMTc=”,交了一发不对。

    然后仔细看了看,发现还有个re函数,可以很快的了解到re函数就是一个倒置字符串的函数,于是password = “=cTMwIzalV2Rjl3U”。

    得flag:SYC{=cTMwIzalV2Rjl3U }

    0x04.Writeup- RE-Linux_1

    题目:

     

    解题思路:

    1.还是拿IDE扫一下,

    gcc((Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609)[executable AMD64-64]

    2.用IDA64位打开,shift+F12看字符串,如图

     

    点进去,看到它所在函数为sub_4009AE,点进去,F5查看伪代码。

    3.函数sub_4009AE

     

    一开始看到这个函数有点懵逼,然后点了点里面跳转的函数,惊喜的看到一个非常“好看”的,如下图

     

    根据这个函数把a1数组的每一个元素找到,即L1nux_1s_51mple,找到flag啦。

    0x04.Writeup- RE-Convolution

    题目:

     

    解题思路:

    1.丢进IDE看文件类型,如图

     

    2.IDA32位打开,看字符串,如图

     

    点进去,F5查看伪代码。

    3.从后往前看。

    首先,从下面这段代码可以看出,若v6==0,则输出Yes,那么

     

    就是说v8要和unk_41E8B0这个数组完全匹配。

    继续往上看v8是如何赋值的。

    很容易看到,下图的代码为关键,它的作用是将v9与byte_41C658的元素异或之后再赋给v8,可以看到byte_41C658是已经有值的,

     

    那么接下来看v9,如下图,知道v9是我们输入的字符串。

     

    现在可以开始逆算法了,从上面的关键代码的图可以看出,

    V8[i+j] =( v9[i] ^ byte[j] )求和。为了理清这个关系,我写了个脚本,结果如下图。

     

    通过上图可以很快理清其中的关系,通过第一行我们可以直接得到v9[0],通过第二行可以借助第一行v9[0]算出v9[1],以此类推,v9的全部元素都可以得到。

    写输出flag的脚本:

    byte_41C658数组的元素如下图,别忘了第一个21h。

     

    V8的元素由于过长不在这里显示。

    关键代码如下图

     

    得到flag

     

    总结:这个题的难度主要在分析v8,v9,byte之间的关系,如果能理清这个的话相信得到flag是很容易的,还有就是在找v8和byte元素的时候不要忘了第一个!!!比如说下图

     

    我就是一开始忘了byte数组的第一个导致脚本崩了。。。然后第三天重新看的时候才发现。。。

    re部分还有两道题,比赛的时候没写出来。。。

    作者: LB919
    出处:http://www.cnblogs.com/L1B0/
    该文章为LB919投入了时间和精力的原创;
    如有转载,荣幸之至!请随手标明出处;

  • 相关阅读:
    Tomcat全攻略
    JAVA必备——13个核心规范
    利用Node.js实现模拟Session验证的登陆
    Android中关于JNI 的学习(六)JNI中注冊方法的实现
    pomelo源代码分析(一)
    怎样解决栈溢出
    String,StringBuffer与StringBuilder的差别??
    ERWin 7.1 和7.2 的官方FTP下载地址
    C/C++中各种类型int、long、double、char表示范围(最大最小值)
    下拉刷新,上拉装载许多其他ListView
  • 原文地址:https://www.cnblogs.com/L1B0/p/7763016.html
Copyright © 2011-2022 走看看