首先执行file命令得到如下信息

ELF 64-bit LSB executable, x86-64

尝试用IDA64打开,定位到关键函数main发现无法F5,尝试了修复无果,于是用gdb动态调试一发。

在scanf处下断点

b *0x0400660

输入12346789之后next

=> 0x40066c <main+102>:	call   0x4004c0 <strlen@plt>
0x400671 <main+107>: mov DWORD PTR [rbp-0x8],eax
0x400674 <main+110>: cmp DWORD PTR [rbp-0x8],0xe

可以看到调用了strlen函数,然后将长度和0xe比较,于是知道flag长度为0xe。

再次运行

Please input flag:abcdefghijklmn

通过长度验证之后可以看到

0x40067a <main+116>:	mov    edx,0x600b00
0x40067f <main+121>: lea rax,[rbp-0x20]
0x400683 <main+125>: mov rdi,rax
0x400686 <main+128>: call rdx

接着调用了0x600b00处的内容,于是

b *0x600b00
c(ontinue)

然后看到一连串的数

   0x600b08 <judge+8>:	mov    BYTE PTR [rbp-0x20],0x66
0x600b0c <judge+12>: mov BYTE PTR [rbp-0x1f],0x6d
0x600b10 <judge+16>: mov BYTE PTR [rbp-0x1e],0x63
=> 0x600b14 <judge+20>: mov BYTE PTR [rbp-0x1d],0x64
0x600b18 <judge+24>: mov BYTE PTR [rbp-0x1c],0x7f
0x600b1c <judge+28>: mov BYTE PTR [rbp-0x1b],0x6b
0x600b20 <judge+32>: mov BYTE PTR [rbp-0x1a],0x37
0x600b24 <judge+36>: mov BYTE PTR [rbp-0x19],0x64
0x600b28 <judge+40>: mov BYTE PTR [rbp-0x18],0x3b
0x600b2c <judge+44>: mov BYTE PTR [rbp-0x17],0x56
0x600b30 <judge+48>: mov BYTE PTR [rbp-0x16],0x60
=> 0x600b34 <judge+52>: mov BYTE PTR [rbp-0x15],0x3b
0x600b38 <judge+56>: mov BYTE PTR [rbp-0x14],0x6e
0x600b3c <judge+60>: mov BYTE PTR [rbp-0x13],0x70
0x600b40 <judge+64>: mov DWORD PTR [rbp-0x4],0x0
0x600b47 <judge+71>: jmp 0x600b71 <judge+113>

这串数字在后面会用到,接着调试

RAX: 0x7fffffffe2c0 ("abcdefghijklmn")
RBX: 0x0
RCX: 0x0
RDX: 0x61 ('a')
EFLAGS: 0x206 (carry PARITY adjust zero sign trap INTERRUPT direction overflow)
[-------------------------------------code-------------------------------------]
0x600b60 <judge+96>: add rdx,rcx
0x600b63 <judge+99>: movzx edx,BYTE PTR [rdx]
0x600b66 <judge+102>: mov ecx,DWORD PTR [rbp-0x4]
=> 0x600b69 <judge+105>: xor edx,ecx

可以看到,rdx=0x61('a'),rcx=0x0,然后rdx=rdx^rcx。于是大致知道是异或加密了flag。

接着调试发现在下一次,rdx=0x62('b'),rcx=0x1。

于是知道flag[i] = key[i] ^ i && 0 <= i < strlen(flag)

而这里的key便是上面的一连串数字,脚本输出flag

#!/usr/bin/python
# -*- coding: utf-8 -*-
__Author__ = "LB@10.0.0.55" key = [0x66,0x6d,0x63,0x64,0x7f,0x6b,0x37,0x64,0x3b,0x56,0x60,0x3b,0x6e,0x70]
flag = ''
for i in range(len(key)):
flag += chr(key[i]^i)
print flag
#flag{n1c3_j0b}

>###作者: LB919
>###出处:http://www.cnblogs.com/L1B0/
>###如有转载,荣幸之至!请随手标明出处;

WHCTF-babyre的更多相关文章

  1. Whctf 2017 -UNTITLED- Writeup

    Whctf 2017 -UNTITLED- Writeup 转载请表明出处http://www.cnblogs.com/WangAoBo/p/7541481.html 分析: 下载下来的附件是一个py ...

  2. Whctf - OLDDRIVER - Writeup

    Whctf - OLDDRIVER - Writeup 转载请标明出处http://www.cnblogs.com/WangAoBo/p/7541536.html 题目: 分析: 给了10组RSA的加 ...

  3. 攻防世界 reverse BABYRE

    BABYRE   XCTF 4th-WHCTF-2017 int __cdecl main(int argc, const char **argv, const char **envp) { char ...

  4. 羊城杯wp babyre

    肝了好久,没爆破出来,就很难受,就差这题没写了,其他三题感觉挺简单的,这题其实也不是很难,我感觉是在考算法. 在输入之前有个smc的函数,先动调,attach上去,ida打开那个关键函数. 代码逻辑还 ...

  5. (笔记)CTF入门指南

    [考项分类] Web: 网页安全 Crypto: 密码学(凯撒密码等) PWN: 对程序逻辑分析 系统漏洞利用 Misc: 杂项 图片隐写 数据还原 脑洞类 信息安全有关的 Reverse: 逆向工程 ...

  6. 符号执行-基于python的二进制分析框架angr

    转载:All Right 符号执行概述 在学习这个框架之前首先要知道符号执行.符号执行技术使用符号值代替数字值执行程序,得到的变量的值是由输入变 量的符号值和常量组成的表达式.符号执行技术首先由Kin ...

  7. WHCTF2017线上小记

    第四届XCTF开始,首战因素,加上团队刚加入了两个新人的原因,还是决定一块参与一下.水了3题.2个RE和1个MISC,照顾新人,写的比较啰嗦. [MISC] PY-PY-PY 下载题目之后是一个pyc ...

  8. 【wp】HWS计划2021硬件安全冬令营线上选拔赛

    逆向手在夹缝中艰难求生系列. 这篇真的存粹是做题笔记了,对内核驱动啥的不太懂,pwn也不会,能做出来的题都是硬逆出来的( childre最后死活没整出来,后来看大佬的wp才知道对子进程有修改(.)呜呜 ...

随机推荐

  1. 小实验3:实现haproxy的增、删、查

    # Author:Alano # -*- conding:utf-8 -*- # 这里有一个问题:为什么手动删除了haproxy_new中的内容,但是执行添加命令的时候依然显示数据已经存在? f = ...

  2. python 字符串格式化输出 %d,%s及 format函数

    旧式格式化方式:%s,%d 1.顺序填入格式化内容 s = "hello %s, hello %d"%("world", 100) print(s) 结果: ' ...

  3. 手机端仿ios的单级联动脚本三

    脚本 <script>var weekdayArr=['非公司企业法人','个体工商户','私营独资企业','私营合伙企业','有限责任公司','股份有限责任公司'];var mobile ...

  4. Hibernate【与Spring整合】

    前言 前面已经学习了如何使用Spring与Struts2进行整合,本博文主要讲解如何使用Spring对Hibernate进行整合 Spring和Hibernate整合的关键点: SessionFact ...

  5. 【BZOJ2442】修建草坪(动态规划,单调队列)

    [BZOJ2442]修建草坪(动态规划,单调队列) 题面 权限题..洛谷 题解 设\(f[i]\)表示前\(i\)个里面选出来的最大值 转移应该比较显然 枚举一个断点的位置,转移一下就好 \(f[i] ...

  6. 【BZOJ1500】【NOI2005】维修数列(Splay)

    [BZOJ1500][NOI2005]维修数列(Splay) 题面 不想再看见这种毒瘤题,自己去BZOJ看 题解 Splay良心模板题 真的很简单 我一言不发 #include<iostream ...

  7. [HAOI2011]problem a

    题目大意: 网址:https://www.luogu.org/problemnew/show/2519 大意: 一次考试共有\(n\)个人参加, 第\(i\)个人说:"有\(a_i\)个人分 ...

  8. javascript使用闭包模拟私有属性和方法

    最近因为做了一个项目,其中涉及到了js私有方法,这个概念在其语言里面是很常见的,很多语言都有private这个关键字,只要在一个类的前面加上private就表示申明了一个私有方法,但是javascri ...

  9. 如何利用wireshark破解网站密码

    在有进行破解意愿的想法诞生之前,博主得先来给各位泼一盆凉水,本文介绍的方法破解http的轻而易举,而对于https的就算了.因为Wireshark 没有session key ,不能解密SSL数据流. ...

  10. 15.MySQL(三)

    索引类型 先创建表 mysql> CREATE TABLE test( -> id INT, -> username VARCHAR(16), -> city VARCHAR( ...