zoukankan      html  css  js  c++  java
  • getit

    getit

    难度系数: ⭐⭐⭐
    题目来源: SharifCTF 2016
    题目描述:菜鸡发现这个程序偷偷摸摸在自己的机器上搞事情,它决定一探究竟
    题目场景: 暂无
     

    拿到手,查一下是否有壳

    无壳,ELF,64位

    直接ida打开,啊好复杂,直接f5看伪代码,main函数的伪代码

     哇,看我看见了什么,flag.的气息,十有八九就分析这部分内容就okk啦。

    第一部分是定义了一些变量,然后是一个循环,再往下就是写一个文件,往文件内写一些目前还不知道的东西。

    最后还有一个remove,是不是不删除就可以最后看到文件里的内容,我觉得还行,那我就先看看往文件里写了什么

    以我不深厚的代码功底,粗略扫一下,v5,u,t,p,这几个都比较可疑

    v5是在开头定义的,__int64类型,还是从零开始,排除。

    找u的值

     看我发现了什么,u,t,p,s的值都有了,经过我慎重的思考,这个t的值的这个大括号是不是很想flag的样子

    t的值是啥子呦,怎么还有个53h,作为一个逆向小萌新,肯定是不知道怎么解决的啦,但是我偶然,看见了题目来源是 SharifCTF 2016 是不是和辣个harifCTF一样,53h代表着S?

    这是什么神秘的转换,我查查,最后发现ASCLL码的16进制53是S,好像恍然大悟,嗯??~~!!!

    继续看我们的代码,在while循环里有t的值,现在就需要让那一串问号现形了。

    开始着手写代码啦

    多余的变量统统删掉,把报错的地方修修改改

     1 #include <stdio.h>
     2 #include<string.h> 
     3 int main()
     4 {
     5   char v3; // al
     6   long long v5=0; // [rsp+0h] [rbp-40h]
     7   char s[] = "c61b68366edeb7bdce3c6820314b7498";
     8   char t[] = "SharifCTF{????????????????????????????????}";
     9   
    10   while ( (signed int)v5 < strlen(s) )
    11   {
    12     if ( v5 & 1 )
    13       v3 = 1;
    14     else
    15       v3 = -1;
    16     *(t + (signed int)v5 + 10) = s[(signed int)v5] + v3;
    17     v5++;
    18   }
    19   printf("%s",t);
    20   return 0;
    21   
    22 }

    哈!成功!

     敲开心!!

    年轻的我还是太年轻啦,看大佬的评论才知道,原来用文本打开可以直接看到t的值

    收获满满!!!

    加油!未来可期

  • 相关阅读:
    VC++中使用内存映射文件处理大文件
    802.1x协议解析
    Jscript中window.setInterval和window.setTimeout区别
    在C#中使用代理的方式触发事件
    JavaScript实用的一些技巧
    控制C#编的程序内存的占用
    纯C#钩子实现及应用(转)
    DES的建立过程
    C# 显示占用内存
    解决“由于应用程序的配置不正确,应用程序未能启动,重新安装应用程序可能会纠正这个问题”
  • 原文地址:https://www.cnblogs.com/rebirther/p/13046497.html
Copyright © 2011-2022 走看看