实战逆向RUST语言程序

news/2024/10/9 9:20:50

实战为主,近日2024年羊城杯出了一道Rust编写的题目,这里将会以此题目为例,演示Rust逆向该如何去做。

题目名称:sedRust_happyVm

题目内容:unhappy rust, happy vm

关于Rust逆向,其实就是看汇编,考验选手的基础逆向能力。在汇编代码面前,任何干扰都会成为摆设。

1、初步分析

64为程序,使用IDA 64打开

image

通过字符串定位分析点

image

image

现在我们知道 inputflag的长度大于 0x15

image

接下来在汇编层面下一个断点,输入假flag,去观察相关寄存器的值

image

image

image

好像并没有什么内容

image

继续单步 步过,直到发现下一个要注意的地方!

image

image

字符串长度:0x28

【----帮助网安学习,以下所有学习资料免费领!加vx:dctintin,备注 “博客园” 获取!】

 ① 网安学习成长路径思维导图
 ② 60+网安经典常用工具包
 ③ 100+SRC漏洞分析报告
 ④ 150+网安攻防实战技术电子书
 ⑤ 最权威CISSP 认证考试指南+题库
 ⑥ 超1800页CTF实战技巧手册
 ⑦ 最新网安大厂面试题合集(含答案)
 ⑧ APP客户端安全检测指南(安卓+IOS)

我们继续单步步过跟踪

image

开辟空间的时候,说明快到真正函数处理过程了。

image

image

image

image

2、分析加密流程

2.1 base64分割模块

这里简单将 3 字节变成4字节的操作,称之为 base64分割模块

这里举个例子

输入的:"111"
->二进制字符串 001100010011000100110001
经过base64分割模块
->001100 010011 000100 110001

image

发现程序执行完后正好是这样的结果

image

2.2 组合

image

举个例子:

假如分割之后的4字节为:

0xC、0x13、0x4、0x31

那么组合后的字符串

rax = 0xC
rcx = 0x1300
edx = 0xB1130C18 

image

2.3 VM处理模块

image

发现func3 非常乱

并且频繁调用sub_40A800()

image

发现这是一道VM类型的题,那么VM的题加密应该会很简单,基本是异或之类。

image

在 sub_40A800 里面找到 异或,下断点

image

image

image

image

这个al每经过两次就是秘钥

image

image

解题脚本

int main() {   //提取的密文   unsigned char s1[] = { 0x00,0x82,0x11,0x92,0xa8,0x39,0x82,0x28,0x9a,0x61,0x58,0x8b,0xa2,0x43,0x68,0x89,0x4,0x8f,0xb0,0x43,0x49,0x3a,0x18,0x39,0x72,0xc,0xba,0x76,0x98,0x13,0x8b,0x46,0x33,0x2b,0x25,0xa2,0x8b,0x27,0xb7,0x61,0x7c,0x3f,0x58 };   //提取的秘钥   unsigned char s2[] = { 0x18,0xb1,0x9,0xa4,0xa6,0x2a,0x9e,0x1b,0x96,0x57,0x5d,0xad,0xae,0x75,0x65,0xac,0x9,0x8c,0xa0,0x76,0x47,0x2c,0x10,0x1,0x7c,0xf,0xba,0x47,0x95,0x30,0x9b,0x74,0x3f,0x2d,0x2d,0x9a,0x87,0x31,0xba,0x43,0x70,0x2c,0x4c };
​   unsigned char s3[128] = { 0 };
​   for (int i = 0; i < 43; i++) {       s3[i] = s1[i] ^ s2[i];   }   //还原base64分割模块   char s4[128] = { 0 };   int j = 0;   for (int i = 0; i < 44; i += 4, j += 3) {       s4[j] = (s3[i] << 2) | (s3[i + 1] >> 4);       s4[j+1] = (s3[i+1] << 4) | (s3[i + 2] >> 2);       s4[j+2] = (s3[i+2] << 6) | s3[i + 3];
​   }
​   printf("%s", s4);    return 0;
}

更多网安技能的在线实操练习,请点击这里>>

‍  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/69273.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

AI课堂教学质量评估系统

AI课堂教学质量评估系统利用摄像头和人脸识别技术,AI课堂教学质量评估系统实时监测学生的上课表情和课堂行为。同时,系统还结合语音识别技术和听课专注度分析算法,对学生的听课专注度进行评估。AI课堂教学质量评估系统通过收集和分析这些数据,生成教学质量报告,并提供针对…

在线表格技术如何助力企业实现全面预算?

最新技术资源(建议收藏) https://www.grapecity.com.cn/resources/前言 在当今快速变化和竞争激烈的商业环境中,企业需要通过精细化的管理手段来确保自身的市场竞争力和持续发展。全面预算管理(Comprehensive Budget Management)作为企业管理的重要组成部分,不仅为企业的…

大数据运维集大成者修行之路

搭建 华为私有云大数据平台 的组件

石油化工领域生产作业流程合规检测

石油化工领域生产作业流程合规检测通过引入AI视觉数据智能分析技术,石油化工领域生产作业流程合规检测对生产作业流程进行实时监测和合规性检测。石油化工领域生产作业流程合规检测利用现场监控摄像头对关键环节、设备和操作进行监测,采集数据并进行实时分析。石油化工领域生…

怎样解决连接数据库失败的问题

解决连接数据库失败的问题通常需要从以下几个方面入手:检查数据库地址:确认数据库服务器的地址是否正确。 检查是否使用了正确的端口号。验证数据库凭证:确保使用的用户名和密码正确无误。 如果使用的是环境变量或配置文件,请确认这些值是否设置正确。网络连接检查:测试从…

如何在网站后台设置网站底部联系方式

要在网站后台设置网站底部的联系方式,通常可以通过以下步骤来实现:登录后台: 首先,你需要登录到网站的内容管理系统(CMS)后台。这通常是通过输入网址后加上/admin或者特定的后台登录路径来访问。找到设置或编辑页面: 在后台管理界面中,寻找“设置”、“页面编辑”或者“模…

织梦CMS遇到数据库连接失败怎么办?

当遇到织梦CMS(Dedecms)数据库连接失败的问题时,可以按照以下步骤进行排查和解决:检查数据库配置确认include/config.php文件中的数据库配置是否正确,包括数据库服务器地址、用户名、密码以及数据库名称。验证数据库服务状态检查MySQL或使用的其他数据库服务是否正常运行。…

公司网站显示脚本错误怎么解决

公司网站出现脚本错误可能由多种原因造成,下面是一些常见的解决步骤:清除浏览器缓存:清除浏览器中的缓存和Cookies,有时候旧的缓存文件会导致脚本加载失败。检查JavaScript代码:查看浏览器开发者工具中的Console标签页,查看是否有具体的错误信息。 确认所有外部脚本(如广…