当前位置: 首页 > news >正文

攻防世界——re2-cpp-is-awesome

64位

我先用虚拟机跑了一下这个程序,结果输出一串字符串+flag  ——没用

IDA打开后 F5也没有什么可看的

那我们就F12查看字符串找可疑信息

这里一下就看见了

__int64 __fastcall main(int a1, char **a2, char **a3)
{char *v3; // rbx__int64 v4; // rax__int64 v5; // rdx__int64 v6; // rax__int64 v7; // rdx_BYTE *v8; // rax__int64 v10[2]; // [rsp+10h] [rbp-60h] BYREFchar v11[47]; // [rsp+20h] [rbp-50h] BYREFchar v12; // [rsp+4Fh] [rbp-21h] BYREF__int64 v13; // [rsp+50h] [rbp-20h] BYREFint v14; // [rsp+5Ch] [rbp-14h]if ( a1 != 2 ){v3 = *a2;v4 = std::operator<<<std::char_traits<char>>(&std::cout, "Usage: ", a3);v6 = std::operator<<<std::char_traits<char>>(v4, v3, v5);std::operator<<<std::char_traits<char>>(v6, " flag\n", v7);exit(0);}std::allocator<char>::allocator(&v12, a2, a3);std::string::basic_string(v11, a2[1], &v12);std::allocator<char>::~allocator(&v12);v14 = 0;v10[0] = std::string::begin(v11);while ( 1 ){v13 = std::string::end(v11);if ( !(unsigned __int8)sub_400D3D(v10, &v13) )break;v8 = (_BYTE *)sub_400D9A(v10);if ( *v8 != off_6020A0[dword_6020C0[v14]] )sub_400B56();++v14;sub_400D7A(v10);}sub_400B73();std::string::~string(v11);return 0LL;
}

这个就是我们运行程序得到的东西

正常来说

这个while(1)和if里面比较关键——经验之谈,你们也可以联想一下写过的

先看第一个sub

bool __fastcall sub_400D3D(__int64 a1, __int64 a2)
{__int64 v2; // rbxv2 = *(_QWORD *)sub_400DAC(a1);return v2 != *(_QWORD *)sub_400DAC(a2);
}
__int64 __fastcall sub_400DAC(__int64 a1)
{return a1;
}

 ...就是一个比较函数

按N改名

__int64 __fastcall sub_400D9A(__int64 a1)
{return *(_QWORD *)a1;
}

第二个函数,就是一个复制,姑且叫他get吧

_QWORD *__fastcall sub_400D7A(_QWORD *a1)
{++*a1;return a1;
}

 最后这个也是一个简单的++操作

最后就是这样了

关键的关键就是if

off就是我们之前找到的那个字符串

dword就是一串数据

我们先脚本走下

a=[36,   0,   0,   0,   0,   0,   0,   0,   5,   0,0,   0,  54,   0,   0,   0, 101,   0,   0,   0,7,   0,   0,   0,  39,   0,   0,   0,  38,   0,0,   0,  45,   0,   0,   0,   1,   0,   0,   0,3,   0,   0,   0,   0,   0,   0,   0,  13,   0,0,   0,  86,   0,   0,   0,   1,   0,   0,   0,3,   0,   0,   0, 101,   0,   0,   0,   3,   0,0,   0,  45,   0,   0,   0,  22,   0,   0,   0,2,   0,   0,   0,  21,   0,   0,   0,   3,   0,0,   0, 101,   0,   0,   0,   0,   0,   0,   0,41,   0,   0,   0,  68,   0,   0,   0,  68,   0,0,   0,   1,   0,   0,   0,  68,   0,   0,   0,43,   0,   0,   0]
b=[]
for i in range(0,len(a),4):b.append(a[i])
print(b)
a='L3t_ME_T3ll_Y0u_S0m3th1ng_1mp0rtant_A_{FL4G}_W0nt_b3_3X4ctly_th4t_345y_t0_c4ptur3_H0wev3r_1T_w1ll_b3_C00l_1F_Y0u_g0t_1t'
flag=''
for i in b:flag+=a[i]
print(flag)

结果就出来了

 

http://www.lryc.cn/news/298994.html

相关文章:

  • 问山海——天涯海角——桃花渊boss攻击顺序
  • springboot181基于springboot的乐享田园系统
  • Dubbo集成Zookeeper embbed模式
  • 156基于Matlab的光纤陀螺随机噪声和信号
  • 秋招上岸大厂,分享一下经验
  • 使用 C++23 从零实现 RISC-V 模拟器
  • Hugging Face 刚刚推出了一款开源的 AI 助手制造工具,直接向 OpenAI 的定制 GPT 挑战
  • powershell 雅地关闭UDP监听器
  • Google Cloud 2024 年报告重点介绍了关键的网络威胁和防御
  • 【算法题】102. 二叉树的层序遍历
  • 【龙年大礼】| 2023中国开源年度报告!
  • 本地搭建three.js官方文档
  • 【seata自动化治愈数据库问题解决方案】
  • Node.js之npm单独与批量升级依赖包的方式
  • 66.加一
  • UI自动化之Poco常用断言方式
  • c语言_实现类class的功能 实例
  • [2024]常用的pip指令
  • 【Java EE初阶十二】网络编程TCP/IP协议(二)
  • Idea Git Review插件
  • python的turtle可以定义多个海龟对象
  • LocalAI 部署(主要针对 mac m2 启动)
  • Swift Combine 管道 从入门到精通三
  • 【RISC-V DSP设计】基于CEVA DSP架构的指令集分析(二)-函数列表
  • 蓝桥杯(Web大学组)2022国赛真题:水果消消乐
  • LeetCode--代码详解 155.最小栈
  • 第6讲后端鉴权拦截器实现
  • uniapp从入门到进阶
  • CDN缓存404、403状态码
  • 【Python网络编程之DHCP服务器】