硬核rust逆向

首先去学了一天rust。。。我TMD

IDA打开,跟踪主函数

看一下伪代码,发现有一串密文

跟进去发现一串数据,猜测有可能是flag的加密数据,于是回头去分析算法

发现一个关键点

if ( v16 == v24 )

break;

v2 = ((*(_DWORD *)(v33 + 4 * v25) >> 2) ^ 0xA) == *(_DWORD *)(v16 + 4 * v25);

++v25;

v26 += v2;

v24 -= 4LL;

这段被加密过的字符串解密方式为(data[i] >> 2) ^ 0xA,data是uint32_t类型的数组,解密之后的字符串即为flag,然后会拿来和自己输入的字符串作比较。

于是我们可以根据上面的密文构造payload

#!-*-coding:utf-8 -*-
flag=[0x154,0x180,0x1FC,0x1E4,
0x1F8,0x154,0x190,0x1BC,
0x1BC,0x1B8,0x154,0x1F8,
0x194,0x154,0x1B4,0x1BC,
0x1F8,0x154,0x1F4,0x188,
0x1AC,0x1F8,0x154,0x18C,
0x1E4,0x154,0x190,0x1BC,
0x1BC,0x1B8,0x1BC,0x1B8,0x22,0x000,0x220]
decript=''
for
i in flag:
decript += chr(( i >> 2) ^0xA)
print (
decript)

最后getflag,但是算出来的flag有乱码,于是一路穷举,最后两位猜出来是下划线和点号

Flag: _just_need_to_get_what_is_needed_.

最新文章

  1. js文章列表的树形结构输出
  2. LInux下修改 ~/.bashrc 文件source ~/.bashrc 后 shell 命令 失效 任何命令都显示 “ bash XX :未找到命令”
  3. 【转】准确理解CSS clear:left/right的含义及实际用途
  4. android 的通知管理
  5. centos彻底删除mysql
  6. JMeter性能测试介绍学习一
  7. CSS处理溢出
  8. CSS基础知识—【结构、层叠、视觉格式化】
  9. 分享我的2014年3月unity3d面试题与参考答案
  10. caffe简易上手指南(一)—— 运行cifar例子
  11. Redis学习手册
  12. Python-方法重载的问题
  13. HUST 1586 数字排列
  14. 号称精通Java的你,是否真的名副其实
  15. C++负数取模
  16. tensorflow-线性函数训练例子一
  17. 原生JS实现三级联动
  18. python基础一 ------利用生成器生成一个可迭代对象
  19. 常见模块(三) pickle模块和json模块
  20. 处理全站请求编码,无论是GET还是POST,默认是UTF-8

热门文章

  1. TensorFlow-线程回归模型
  2. 调用k8s api遇到CERTIFICATE_VERIFY_FAILED的问题解决方法
  3. 集群服务器+定时任务(Quartz) 重复执行的问题
  4. 树莓派插入U盘自动拷贝系统日志到U盘或通过U盘升级程序
  5. Java程序运行机制
  6. mysql left join和union结合的用法
  7. 解决Python模块报错:ModuleNotFoundError: No module name 'StringIO'
  8. react-native-typescript-项目环境搭建
  9. Python学习日记(一) String函数使用
  10. Prism