简单的PE文件逆向(.exe-IDA)

下载下来文件之后发现是一个exe文件,运行以后发现。

然后利用IDA对它进行操作。然后

选择strings

再按ctrl+F,在下方框框中输入plz enter the flag:

双击进入以后找到format那块,就是主函数使用F5可以使函数变成c代码。

 int sub_4113A0()
 {
   int v1; // [sp+Ch] [bp-194h]@1
   int i; // [sp+D4h] [bp-CCh]@8
   int v3; // [sp+E0h] [bp-C0h]@8
   int v4; // [sp+ECh] [bp-B4h]@1
   int v5; // [sp+F0h] [bp-B0h]@1
   int v6; // [sp+F4h] [bp-ACh]@1
   int v7; // [sp+F8h] [bp-A8h]@1
   int v8; // [sp+FCh] [bp-A4h]@1
   int v9; // [sp+100h] [bp-A0h]@1
   int v10; // [sp+104h] [bp-9Ch]@1
   int v11; // [sp+108h] [bp-98h]@1
   int v12; // [sp+10Ch] [bp-94h]@1
   int v13; // [sp+110h] [bp-90h]@1
   int v14; // [sp+114h] [bp-8Ch]@1
   int v15; // [sp+118h] [bp-88h]@1
   int v16; // [sp+11Ch] [bp-84h]@1
   int v17; // [sp+120h] [bp-80h]@1
   int v18; // [sp+124h] [bp-7Ch]@1
   int v19; // [sp+128h] [bp-78h]@1
   int v20; // [sp+12Ch] [bp-74h]@1
   int v21; // [sp+130h] [bp-70h]@1
   int v22; // [sp+134h] [bp-6Ch]@1
   int v23; // [sp+138h] [bp-68h]@1
   int v24; // [sp+13Ch] [bp-64h]@1
   int v25; // [sp+140h] [bp-60h]@1
   char v26; // [sp+14Fh] [bp-51h]@1
   ]; // [sp+178h] [bp-28h]@2
   char v28; // [sp+189h] [bp-17h]@13
   char v29; // [sp+18Ah] [bp-16h]@14
   char v30; // [sp+18Bh] [bp-15h]@15
   char v31; // [sp+18Ch] [bp-14h]@16
   char v32; // [sp+18Dh] [bp-13h]@17
   unsigned int v33; // [sp+19Ch] [bp-4h]@1
   int savedregs; // [sp+1A0h] [bp+0h]@1

   memset(&v1, 0xCCu, 0x194u);
   v33 = (unsigned int)&savedregs ^ dword_417000;
   v26 = ;
   v4 = ;
   v5 = ;
   v6 = ;
   v7 = ;
   v8 = ;
   v9 = ;
   v10 = ;
   v11 = ;
   v12 = ;
   v13 = ;
   v14 = ;
   v15 = ;
   v16 = ;
   v17 = ;
   v18 = ;
   v19 = ;
   v20 = ;
   v21 = ;
   v22 = ;
   v23 = ;
   v24 = ;
   v25 = ;
   printf("plz enter the flag:");
   sub_411136();
    )
   {
     getch();
     v1 = sub_411136();
     v27[v26] = v1;
      )
       break;
      )
     {
       printf("\b\b");
       sub_411136();
       --v26;
     }
     else
     {
       printf("%c", v27[v26]);
       sub_411136();
       ++v26;
     }
   }
   v3 = ;
   ; i < ; ++i )
   {
     if ( v27[i] != byte_415768[*(&v4 + i)] )
       v3 = ;
   }
    || v29 !=  || v30 !=  || v31 !=  || v32 !=  )
     v3 = ;
   v27[v26] = ;
   printf("\r\n");
   sub_411136();
   if ( v3 )
   {
     printf("u r wrong\r\n\r\n");
     sub_411136();
     sub_41113B();
   }
   else
   {
     printf("u r right!\r\n");
     sub_411136();
   }
   system("pause");
   sub_411136();
   sub_411082();
   sub_411014();
   return sub_411136();
 }

我们发现如果要得到正确的flag,那么v3 = 0。

在这段函数中

  ; i < ; ++i )
  {
    if ( v27[i] != byte_415768[*(&v4 + i)] )
      v3 = ;
  }

光标移动到byte_415768上,IDA会提示你这是一个char[]的数组,双击它

就可以发现这个数组的内容是wfxc{gdv}fwfctslydRddoepsckaNDMSRITPNsmr1_=2cdsef66246087138。

然后*(&v4 + i)。这句话的意思大概就是取v4的地址,然后++,从v4取到v20吧。写个小程序跑一下就能发现得到wctf{Pe_cRackme1_。

然后
  || v29 !=  || v30 !=  || v31 !=  || v32 !=  )
         v3 = ;

选择转化成char型。得到v28 = ‘1‘, v29 = '0' .......

后半段flag便是1024}

综上得到答案。

IDF实验室:倒行逆施的更多相关文章

  1. IDF 实验室部分题目WriteUp

    前天花了一个下午的时间刷了几道IDF实验室的题目, 这个网站实在是有点冷清, 题目也比较少, 所以就被我和师兄们刷榜了2333... 因为我最先开始做, 所以就干脆刷到第一去了. 题目很水, 切莫见怪 ...

  2. IDF实验室-CTF训练营-牛刀小试CTF

    自从开始玩CTF后,发现这个游戏还是比较有意思,发现了一个练习场地IDF实验室:http://ctf.idf.cn/ 刷刷里面的题目,今天完成了其中的牛刀小试,分享一下解题思路: 1. 被改错的密码 ...

  3. IDF实验室:牛刀小试

    被改错的密码[从格式和长度来推测出是MD5] 迷醉..人生第一道ctf题?据说是因为看起来像是MD5加密的格式,但是数了一下发现有33个字符,就推测???熊孩子多敲了一位进去.从32个变33个了,然后 ...

  4. IDF实验室WORD隐写术

    上帝也哭泣http://ctf.idf.cn/index.php?g=game&m=article&a=index&id=48 下载下来,发现是一个word文档,看来信息应该就 ...

  5. IDF实验室-简单编程-特殊的日子 writeup

    题目:http://ctf.idf.cn/index.php?g=game&m=article&a=index&id=50 题目提示要爆破,代表加密应该是不可逆的. 密文:4D ...

  6. IDF实验室-简单的ELF逆向 writeup

    题目:http://ctf.idf.cn/index.php?g=game&m=article&a=index&id=39 下载得到ElfCrackMe1文件,直接用IDA打开 ...

  7. IDF实验室-python ByteCode writeup

    题目地址:http://ctf.idf.cn/index.php?g=game&m=article&a=index&id=45 下载来发现是crackme.pyc 可以用unc ...

  8. IDF实验室-简单编程-字符统计 writeup

    题目地址:http://ctf.idf.cn/index.php?g=game&m=article&a=index&id=37 网站:http://ctf.idf.cn/gam ...

  9. IDF实验室解题学习笔记1

    1.图片里的英文 图片可以有很多种打开方式,破解该题,需将图片下载下来. 对于图片,我们可以使用图片编辑软件,进行各种调明暗,变色调等操作. 我们还可以使用2进制或者16进制的文件打开方式打开.该图使 ...

随机推荐

  1. Alpha阶段第九次Scrum Meeting

    情况简述 Alpha阶段第九次Scrum Meeting 敏捷开发起始时间 2016/11/2 00:00 敏捷开发终止时间 2016/11/3 00:00 会议基本内容摘要 汇报进度,安排工作 参与 ...

  2. Linux下C高手成长过程

    建议学习路径:  首先先学学编辑器,vim, emacs什么的都行. 然后学make file文件,只要知道一点就行,这样就可以准备编程序了.  然后看看<C程序设计语言>K&R, ...

  3. 图解JVM的Class文件格式(详细版)

          了解JAVA的Class文件结构有助于掌握JAVA语言的底层运行机制,我在学习的过程中会不断的与ELF文件格式作对比(当然他们的复杂程度.格式相去甚远,比如可执行ELF的符号表解析在静态链 ...

  4. [原创]Linq to xml增删改查Linq 入门篇:分分钟带你遨游Linq to xml的世界

    本文原始作者博客 http://www.cnblogs.com/toutou Linq 入门篇(一):分分钟带你遨游linq to xml的世界 本文原创来自博客园 请叫我头头哥的博客, 请尊重版权, ...

  5. ACM 计算几何中的精度问题(转)

    http://www.cnblogs.com/acsmile/archive/2011/05/09/2040918.html 计算几何头疼的地方一般在于代码量大和精度问题,代码量问题只要平时注意积累模 ...

  6. 如何给Apache添加虚拟路径和虚拟主机?

    在本地开发,一般只用一个Apache服务器,然后通过配置文件实现多个站点访问,要么是“虚拟路径(别名)”的形式,要么是“虚拟主机”的形式,相关配置参考如下: 说明:我给Apache设置的端口为:,即  ...

  7. Linux设置Memcached开机启动

    Memcached开机启动方式 方法一: 在 /etc/rc.d/rc.local 文件中追加启动命令 /usr/local/memcached/bin/memcached  -u root -d - ...

  8. linux常用命令-文件处理命令

    ls -a -l -d -h -i mkdir [-p] 创建目录,-p递归创建目录 rmdir 删除一个空目录 cp [-r,-p] -r,拷贝目录,-p,保持属性,新文件的修改时间为源文件的修改时 ...

  9. $.prop()和$.attr() 区别用法

    都用于读取和设置DOM元素节点的属性 不同: $.attr()用于DOM元素本身的属性 $.prop()用于DOM节点对应的JS属性(源于DOM元素到JS对象的映射) 源于两者在jquery类库的实现 ...

  10. 调用webservice 总结

    最近做一个项目,由于是在别人框架里开发app,导致了很多限制,其中一个就是不能直接引用webservice . 我们都知道,调用webserivice 最简单的方法就是在 "引用" ...