逆向软件设计和开发

news/2025/2/27 23:06:23/文章来源:https://www.cnblogs.com/lstrence/p/18742264

在软件技术迅猛发展的今天,逆向工程已成为理解、分析和改进现有软件系统的重要手段。旨在深入剖析目标软件的内部结构、功能逻辑和数据流,为软件维护、安全评估和功能扩展提供可靠依据。
在本次实验中,本人基于同学提供的一份C++课程设计的员工信息管理系统进行逆向工程开发以培养逆向工程的相关能力。
以下为系统的源代码:

这份代码已经基本实现了一个员工信息管理系统所需的基本功能,如添加、修改、删除信息,展示信息等。
运行展示:

但此系统仍然存在一部分问题:
1.用户交互界面不够清晰明了,且交互后存在显示冗余的情况
示例:

于是我对系统进行修改,新增了一个封装的通用清屏函数的同时,对用户界面的显示进行了优化
#include <cstdlib> // 用于 system() 函数 void clearScreen() { system("cls"); // Windows 清屏 }
优化示例:主菜单界面
`void showEditMode() {
while (true) {
clearScreen(); // 清屏
std::cout << "=\n"
<< "编辑员工信息\n"
<< "
=\n"
<< "1. 新增员工信息\n"
<< "2. 删除员工信息\n"
<< "3. 修改员工信息\n"
<< "4. 返回主菜单\n"
<< "===========================\n"
<< "请输入需要跳转的系统: ";

    int choice;std::cin >> choice;switch (choice) {. . .}
}

} 2.当前代码中缺少对文件异常情况的处理,例如文件读写失败、无效输入等。需要引入异常处理机制来提高程序的健壮性。 添加if (!file.is_open()) {
throw std::runtime_error("无法打开文件: " + filename);
}3.除此以外,还可以引入日志系统,记录操作详情,便于调试和排查问题。#include

include

include

class Logger {
private:
std::ofstream logFile;

public:
Logger(const std::string& filename) {
logFile.open(filename, std::ios::app); // 以追加模式打开日志文件
if (!logFile.is_open()) {
throw std::runtime_error("无法打开日志文件: " + filename);
}
}

~Logger() {if (logFile.is_open()) {logFile.close();}
}void log(const std::string& message) {auto now = std::chrono::system_clock::now();auto now_time = std::chrono::system_clock::to_time_t(now);logFile << std::put_time(std::localtime(&now_time), "%Y-%m-%d %H:%M:%S") << " - " << message << "\n";
}

};`
经过修改后的系统运行图:


我的思考:
在逆向工程中,通过阅读代码、调试和运行测试用例,逐步理解每个模块的功能和相互关系,理解现有代码的逻辑是最关键的一步。如果代码缺乏注释或文档,理解代码的逻辑会变得更加困难。因此在自己编写代码时也需要注意添加注释和文档,同时养成梳理代码的逻辑,并绘制模块之间的关系图的好习惯。
逆向软件工程不仅是对代码的优化,更是对开发人员技术能力和耐心的考验。通过本次优化,我们不仅提升了代码的质量,还检验了自身阅读和理解代码及其逻辑的能力,同时通过逆向开发而认识到了编写代码时保持良好编写习惯的重要性

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何构建多模态AI知识库?

转载:如何构建多模态AI知识库?摘要 在科技飞速发展的当下,人工智能(AI)已成为推动各行业变革的关键力量。其中,多模态 AI 知识库作为 AI 领域的重要创新,正引领我们迈向一个全新的智能时代。它打破了传统数据处理的单一模式,融合文本、图像、音频、视频等多种数据模态,…

使用 DeepSeek R1 和 Ollama 开发 RAG 系统

1.概述 掌握如何借助 DeepSeek R1 与 Ollama 搭建检索增强生成(RAG)系统。本文将通过代码示例,为你提供详尽的分步指南、设置说明,分享打造智能 AI 应用的最佳实践。 2.内容 2.1 为什么选择DeepSeek R1? 在这篇文章中,我们将探究性能上可与 OpenAI 的 o1 相媲美、但成本却…

[NCTF 2022]qrssssssssqrssssssss_revenge WP

[NCTF 2022]qrssssssss&qrssssssss_revenge WP[NCTF 2022]qrssssssss&qrssssssss_revenge WP 本来最近是想练习写 python 脚本的,无意之中刷到了这道题,看到是关于二维码的,于是正好研究一下。 看了官方 WP有些概念没怎么懂,又去借鉴了别人的二维码学习笔记,不过…

昆明理工大学25年材料工程考研预计调剂158人

--材测材料物理与化学材料学材料表征与分析材料工程F001现代材料测试技术F002材料成型技术基础864材料科学基础

7.4.1 Inception 块

白色的\(1\times 1\)卷积层是用来降低通道数的,蓝色的卷积层是用来学习特征的 大致解释一下这些数字是怎么分配的。现在我们的通道数是\(192\),于是我们假设最后输出的通道数是\(256\);考虑这些通道如何分配:我们知道\(3\times 3\)的卷积层性质很好(参数不算太多,学习能力…

Windows安装ollama运行deep seek R1模型+Page Assist浏览器插件本地使用

在Windows系统上安装Ollama并运行DeepSeek R1模型,同时结合Page Assist浏览器插件实现本地使用,可以按照以下步骤操作: 一、安装Ollama 下载Ollama: 访问Ollama官方网站,下载适用于Windows的版本。安装路径默认在c盘创建符号链接 原路径:C:\Users\18368\.ollama目标路径:…

上海海洋大学软件开发与创新课程设计作业

我给上学期其他同学的大作业添加了一些功能,已有的功能只有用户注册并填写账号密码,然后点击登录按钮成功登录 现在添加的新功能如下: 1,添加了一个真正可以选课的页面,添加了一些课程选项 2,可以存储用户选课的历史和方案 3,添加了一个管理员页面用于查看用户账号密码以…

Qwen2.5-0.5B siglip 预训练 / 微调实验

前言视频 | 仓库跟着教程做的,记录学习过程。 环境双卡 3090 24G CUDA 12.2 transformers 4.49概述 通过在 Qwen2.5-0.5B 和 siglip 之间训练一个中间层构造 VLM。作者提到首次微调时,只冻结了视觉模型的参数,导致阶梯状的 loss 曲线,即发生过拟合。应冻结文本和视觉模型的…

2025.2.27(Java的输出换行)

如图输出println,这个ln相当于输出完后自动换一次行。如图输出print,去掉ln不换行。

优化职工信息系统文件读写错误

该系统取自于大一时期的一个同班同学的期末大作业,该职工信息系统分别实现了职工信息的增删改查,以及计算职工的总工资和平均工资等功能。但是在编写了该系统之后,出现了一些问题,其中一个文件读写的问题我觉得需要进行改进,这个代码不能自己创建文本文档在指定的文件夹,…

PL端DDR4的MIG IP核配置及example design分析(个人记录)

第一种配置方法如下。按最高2666MHz配置,这边输入的参考时钟看个人板卡情况,我这边输入是200MHz。第二种配置方法如下。按2400MHz配置(需要换芯片型号),这边输入的参考时钟看个人板卡情况,我这边输入是200MHz。这边是输入时钟设置及输出时钟设置。我这边输入是差分时钟,…

Linux上部署deepseek-r1:7b模型

通过ollama在debian上安装部署deepseek-r1:7b模型。一、安装ollama框架 访问 ollama 官网,点击下载,选择 Linux,复制安装命令执行即可。二、下载并运行模型 选择 deepseek:7b 模型,复制安装命令执行即可。 (这里的模型参数大小,可根据自己的显存大小选择,可简单安装 0.5b…