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

逆向入门(12)程序逆向篇-Acid burn

打开先有个NAG先给他去了
在这里插入图片描述
OD里面找到字符串,跳转到对应代码处
在这里插入图片描述
0042F786处下断,运行,断下后,然后ctrl+F9返回到call
在这里插入图片描述
这个地方有点小坑,用之前的jnz或者改cmp都不行,这里会反复调用好几次,有时候是判断相同,有时候是判断不同,会引起内容报错,但是程序还是可以正常用的。所以就换了种方法,直接使用jmp这样强制跳,接着将修改过的exe另存再重新打开,这次就没有弹窗了。
在这里插入图片描述
打开新的程序,需要破解的有两个,一个是用户名加序列号,另外一个是序列号
在这里插入图片描述
先来序列号的吧,看看样子
在这里插入图片描述
搜索字符串
在这里插入图片描述
找到了对应分支,改je试试
在这里插入图片描述
可以了,但是这里还是写注册机,还原汇编后继续往上看
在这里插入图片描述
这里没有看到明显的cmp之类的比较,大概率是最后一个call引起的标志位的改变,不过这里,可以在最上面下断,然后追一下数值看看。
在这里插入图片描述
上面的call里面也有很多test,这里的字符应该就这个固定字符串Hello Dude!
在这里插入图片描述
ok,再进行下一个,看用户名和序列号的。
在这里插入图片描述
找到对应的代码处
在这里插入图片描述
这里是用来判断用户名长度是否大于等于4的,直接过,然后又回到了之前单序列号的判断流程上来了
在这里插入图片描述
分析写在注释里面了,同时可以结合栈里面的情况,知道序列号组成由固定的CW-开头,接着由用户名算出来的key,最后一部分是固定的-CRACKED
在这里插入图片描述而算法也很简单,用户名的第一位数转成ascii码,先乘以0x29再翻倍,写出注册机

#include <iostream>
#include <string>
#include <cstdint>int main() {std::string username;// 获取用户名输入std::cout << "用户名: ";std::getline(std::cin, username);if (username.length() >= 4) {int key = (username[0] * 0x29) * 2;printf("序列号是:CW-%d-CRACKED",key);}else {printf("用户名长度应该大于3");}return 0;
}

在这里插入图片描述
搞定,其实算法也只取了用户名的首位
在这里插入图片描述

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

相关文章:

  • Docker Compose部署Spring Cloud 微服务系统
  • CppCon 2016 学习:On using singletons in C++
  • 14.2 《3小时从零搭建企业级LLaMA3语言助手:GitHub配置+私有化模型集成全实战》
  • Uniapp性能优化全面指南:从原理到实践
  • 从0开始学习R语言--Day26--因果推断
  • 4. 时间序列预测的自回归和自动方法
  • Docker学习笔记:数据卷
  • 秋招是开发算法一起准备,还是只准备一个
  • 【CUDA编程】OptionalCUDAGuard详解
  • 【6G技术探索】MCP协议整理分享
  • 6.IK分词器拓展词库
  • # 我使用过的 HTML + CSS 实践总结笔记(含说明)
  • 设计模式笔记_创建型_工厂模式
  • 九日集训第六天
  • 【AI News | 20250617】每日AI进展
  • Tomcat本地部署Maven Java Web项目
  • 从C++编程入手设计模式——策略设计模式
  • uniapp 对接deepseek
  • 手术麻醉系统源码 手麻系统源码 Java手术室管理系统源码
  • 2025年渗透测试面试题总结-红队攻防工程师(题目+回答)
  • 缓存系统-基本概述
  • Ajax 核心知识点全面总结
  • 前端开发面试题总结-vue2框架篇(三)
  • 网络层协议 IP 协议介绍 -- IP 协议,网段划分,私有 IP 和 公网 IP,路由
  • KingbaseES 在线体验平台深度评测
  • 计算机硬件——外设、其他部件
  • CentOS7 安装最新版 Docker
  • 【MySQL】MySQL 数据库操作与设计
  • 【系统设计【4】】设计一个限流器:从理论到实践的完整解决方案
  • 从C++编程入手设计模式——外观模式