• 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的值

    收获满满!!!

    加油!未来可期

  • 相关阅读:
    分别使用Nginx反向代理和Haproxy调度器实现web服务器负载均衡
    CentOS7.4 源码编译安装LNMP
    LVS-DR+keepalived高可用群集
    Weex 和 Web 平台的差异
    Weex 和 Vue 2.x 的语法差异
    如何将原有 Weex 项目改造成 Vue 版本
    Vue 2.x 在 Weex 和 Web 中的差异
    使用 Vuex 和 vue-router
    使用 Vue 开发 Weex 页面
    weex快速上手
  • 原文地址:https://www.cnblogs.com/rebirther/p/13046497.html
Copyright © 2020-2023  润新知