xxxorrr

无壳直接看源码

__int64 __fastcall main(int a1, char **a2, char **a3)
{int i; // [rsp+Ch] [rbp-34h]char s[40]; // [rsp+10h] [rbp-30h] BYREFunsigned __int64 v6; // [rsp+38h] [rbp-8h]v6 = __readfsqword(0x28u);sub_A90(sub_916);fgets(s, 35, stdin);for ( i = 0; i <= 33; ++i )s1[i] ^= s[i];return 0LL

看到主函数,输入的s1与s1的元素进行异或,点击sub_916函数找s1

unsigned __int64 sub_916()
{unsigned __int64 v1; // [rsp+8h] [rbp-8h]v1 = __readfsqword(0x28u);if ( !strcmp(s1, s2) )puts("Congratulations!");elseputs("Wrong!");return __readfsqword(0x28u) ^ v1;
}
#.data:0000000000201060 s2              db 'VNWXQQ',9,'F'       ; DATA XREF: sub_916+17↑o
.data:0000000000201068                 db  17h
.data:0000000000201069                 db  46h ; F
.data:000000000020106A                 db  54h ; T
.data:000000000020106B                 db  5Ah ; Z
.data:000000000020106C                 db  59h ; Y
.data:000000000020106D                 db  59h ; Y
.data:000000000020106E                 db  1Fh
.data:000000000020106F                 db  48h ; H
.data:0000000000201070                 db  32h ; 2
.data:0000000000201071                 db  5Bh ; [
.data:0000000000201072                 db  6Bh ; k
.data:0000000000201073                 db  7Ch ; |
.data:0000000000201074                 db  75h ; u
.data:0000000000201075                 db  6Eh ; n
.data:0000000000201076                 db  7Eh ; ~
.data:0000000000201077                 db  6Eh ; n
.data:0000000000201078                 db  2Fh ; /
.data:0000000000201079                 db  77h ; w
.data:000000000020107A                 db  4Fh ; O
.data:000000000020107B                 db  7Ah ; z
.data:000000000020107C                 db  71h ; q
.data:000000000020107D                 db  43h ; C
.data:000000000020107E                 db  2Bh ; +
.data:000000000020107F                 db  26h ; &
.data:0000000000201080                 db  89h

这里将s1和s2对比,相同就正确,所以s1应该就是flag加密后的字符串

unsigned __int64 sub_84A()
{int i; // [rsp+Ch] [rbp-14h]unsigned __int64 v2; // [rsp+18h] [rbp-8h]v2 = __readfsqword(0x28u);for ( i = 0; i <= 33; ++i )s1[i] ^= 2 * i + 65;return __readfsqword(0x28u) ^ v2;
}

这是加密s1的函数,看到进行了一次异或

函数整体分析,函数先将输入的s与s1进行异或得到新s1,新s1经过sub_84A()函数加密后得到的s1与s2相同

解题思路:将s2与s1异或得到s1异或前的元素,通过加密函数逆向推出正确的flag

exp

s2=[ 0x56, 0x4E, 0x57, 0x58, 0x51, 0x51, 0x09, 0x46, 0x17, 0x46, 0x54, 0x5A, 0x59, 0x59, 0x1F, 0x48, 0x32, 0x5B, 0x6B, 0x7C, 0x75, 0x6E, 0x7E, 0x6E, 0x2F, 0x77, 0x4F, 0x7A, 0x71, 0x43, 0x2B, 0x26, 0x89, 0xFE, 0x00]
s1 = 'qasxcytgsasxcvrefghnrfghnjedfgbhn'
flag=''
for i in range(33):flag+=chr(ord(s1[i])^ (2 * i + 65)^s2[i])
print(flag)
# flag{c0n5truct0r5_functi0n_in_41f}

菜狗的reverse学习——攻防世界xxxorrr相关推荐

  1. 攻防世界-MISC-练习区-12(功夫再高也怕菜刀)

    题目描述:菜狗决定用菜刀和菜鸡决一死战 这是攻防世界里面训练区的一道流量分析题,用wireshark 打开流量包 然后一级搜索http,二级用分组字节流搜索flag(按CTRL+F),并找到no.13 ...

  2. 攻防世界[刷题笔记]之Web方向(练习区)(后半)

    网络安全学习 攻防世界[刷题笔记] Web方向(新手区)(后半) xff_referer webshell command_execution simple_js 小结 攻防世界[刷题笔记] Web方 ...

  3. 攻防世界reverse进阶easyre-153 writeup(#gdb调试父子进程、#ida版本差异)

    文章目录 学习目标: 引言 第一步.查脱壳 1.查壳 2.脱壳 3.查看文件格式 第二步.IDA静态分析 1.IDA版本的小坑 2.分析main函数 3.分析lol函数 第三步.gdb动态分析 1.m ...

  4. file upload 攻防世界_菜鸡 CTF 之旅 Writeup (攻防世界)

    前言 我是个菜鸡,菜鸡就要先走新手练习区. 这次 CTF Writeup 的指定训练站点为 攻防世界 新手练习区 Web 区 view_source 题目描述:X老师让小宁同学查看一个网页的源代码,但 ...

  5. 攻防世界 Reverse高手进阶区 2分题 reverse-for-the-holy-grail-350

    前言 继续ctf的旅程 攻防世界Reverse高手进阶区的2分题 本篇是reverse-for-the-holy-grail-350的writeup 发现攻防世界的题目分数是动态的 就仅以做题时的分数 ...

  6. 攻防世界Reverse进阶区-EasyRE-writeup

    1. 介绍 本题是xctf攻防世界中Reverse的进阶区的题EasyRE. 下载下来以后是一个exe文件:210f1e18ac8d4a15904721a2383874f5.exe 2. 分析 首先看 ...

  7. 攻防世界Reverse进阶区-answer_to_everything-writeup

    本题是xctf攻防世界中Reverse的进阶区的题answer_to_everything 题目来源: 2019_ISCC 题目描述:sha1 得到了一个神秘的二进制文件.寻找文件中的flag,解锁宇 ...

  8. Revers篇:攻防世界reverse进阶re2-cpp-is-awesome

    攻防世界reverse进阶re2-cpp-is-awesome IDA分析 很简单的一个程序 程序流程分析 首先检查参数,参数少于2就退出,并提示:Usage: ./re2-cpp-is-awesom ...

  9. 攻防世界 Reverse高手进阶区 3分题 crackme

    前言 继续ctf的旅程 攻防世界Reverse高手进阶区的3分题 本篇是crackme的writeup 攻防世界的题目分数是动态的 就仅以做题时的分数为准了 解题过程 查壳,显示nsPack壳 找了个 ...

最新文章

  1. AngularJs--过滤器(filter)
  2. 自动驾驶第一案结果敲定,谷歌无人驾驶和Uber达成2.5亿美元和解协议
  3. Lucene的评分(score)机制的简单解释
  4. Stanford UFLDL教程 微调多层自编码算法
  5. 另一个分区工具:GNU 的 parted(转)
  6. 日志级别_SpringBoot实战(十三):Admin动态修改日志级别
  7. Vue-Treeselect 的下拉菜单不出Table的框
  8. mysql 树形结构_Mysql安装:基础入门知识
  9. 温故js系列(11)-BOM
  10. 关于Mac电脑更新IP地址的解决方法!
  11. xcode 重新来过openssl项目历程
  12. protues仿真器51单片机定时器内部定时方式
  13. ntfs linux,NTFS-3G (简体中文)
  14. 概率论复习总结——基本概念
  15. 使用IEEE802.1Q VLAN实现单线复用之牛刀小试篇
  16. VS Code 报Windows找不到文件‘chrome‘. 请确定文件名是否正确后,再试一次。八种解决办法
  17. 深度学习系列2:框架tensorflow
  18. web 页面的提交方式
  19. 2007年最杰出十大新锐站长评选-------关注!
  20. VC Formal FPV 启动脚本简单模板

热门文章

  1. comsol结构力学-应力应变仿真
  2. Python对Excel文件多表对多表之间的匹配(两种不同表头)——之json版
  3. 想设计一个母亲节小程序c语言,用小程序做一张精美海报,对母亲说一句:祝您母亲节快乐!...
  4. SpringCloud Getway服务网关
  5. 1838.最高频元素的频数
  6. C语言--getchar()函数超详细解析(多维度分析,小白一看就懂!!!)
  7. 全面认识MOS管,一篇文章就够了
  8. 尝试Ping百度域名后的思考
  9. android p 华为p10,华为p10p使用十天感受
  10. 菜鸡学Unity 之 了解 Unity 中的五个视图窗口