136-nago

news2024/11/15 12:41:27

PEID查看你程序有没有壳,发现是汇编语言程序
在这里插入图片描述
打开程序,我们发现程序是由Nag提示窗口的。
在这里插入图片描述
我们先进行去Nag提示。
在这里插入图片描述
进入回调函数,进行分析
在这里插入图片描述

保存修改到文件。
重新打开文件,我们发现没有Nag窗口。
在这里插入图片描述
再次使用OD进行附加进行分析。

在这里插入图片描述
我们通过分析发现,这个注册框是一个模态框,我们找到它的回调函数,简单分析它的回调函数,发现并没有我们需要的关键算法。
继续分析,我们发现输入用户名和密码之后跳转到这里进行执行。
在这里插入图片描述
进入这个004013E8的call,进行分析
在这里插入图片描述
简单模拟这个算法,其实就是判断的过程,对小于0x39的字符,也就是’9’进行处理,放到Buffer缓冲区里。但是通过程序单步调试发现,如果我们输入全是大于’9’的字符,程序不能到达第二个关键算法。

for (int i = 0; i < nLen; i++)
	{
		int nTemp = szName[i];
		if (nTemp > 0x39) continue;
		nTemp -= 0x30;
		if (nTemp <= 0) continue;
		szBuffer[j++] = nTemp;
	}

继续往下分析,来到第二个算法,经过第二个算法之后把结果放到0x402125这个地址里。
在这里插入图片描述
之后进行一个比较,我们发现,上面计算出来的结果,如果和0x3039相等,则可以通过验证。
在这里插入图片描述

总结:

这个算法就是把name字符串小于0x39的减去0x30,再放到另一个缓冲区地址里。当然如果一个都没有,转化后的字符串长度为0,直接无法通过验证。
之后再把转换字符串每一位的ascii码取出来,经过一个计算的算法。
我们可以设计一个随机的字符串,为了方便通过验证计算,字符串的所有字符都小于0x39,大于0,通过程序的单步调试发现,name字符串并不会太长,我们随机一个字符串长度,为10以内,通过逆向的思维,我们构造一个结果字符串,并且回推回去。

算法KeyGen:

#include <iostream>
#include <time.h>
using namespace std;

/*
  第一个算法就是
  for (int i = 0; i < nLen; i++)
	{
		int nTemp = szName[i];
		if (nTemp > 0x39) continue;
		nTemp -= 0x30;ec
		if (nTemp <= 0) continue;
		szBuffer[j++] = nTemp;
	}
  通过第一个算法计算出来的结果字符串、
  每一位的ascii码*8之和是0x3039
*/

int main()
{
	srand((unsigned int)time(NULL));
	unsigned int nSum = 0;
	char szName[10] = { 0 };
	unsigned int nEbx = 0;
	int nRandomLen = 0;

	while (1)
	{
		//得到一个随机长度
		nRandomLen = rand() % 10 + 1;
		//根据随机长度,随机一个字符串
		for (int i = 0; i < nRandomLen; i++)
		{ 
			nSum <<= 1;
			nEbx = nSum;
			nSum <<= 2;
			//由于要满足循环条件,我们直接让它在0-9之间循环
			szName[i] = rand()%9;
			nEbx += szName[i];
			nSum += nEbx;
		}
		if (nSum == 0x3039) break;
		nSum = 0;
	}

	char szRealName[10] = { 0 };
	//得到真实名字 根据第一段算法
	for (int i = 0; i < nRandomLen; i++)
	{
		szRealName[i] = szName[i] + 0x30;
	}
	cout << szRealName << endl;
	return 0;
}

执行结果:

我们发现每次运行注册机,结果都是12345字符串。所有这就是答案。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

项目中遇到的问题总结(四)

GateWay和Nginx的相同点和不同点在哪里&#xff1f; Gateway 和 Nginx 都是常见的反向代理服务器&#xff0c;它们的相同点和不同点如下&#xff1a; 相同点&#xff1a; 都可以作为反向代理服务器&#xff0c;接收来自客户端的请求并转发到后端服务器进行处理。 都支持负载均…

67、C#调用Visual Studio 2019生成的Paddle+OCR(使用ncnn库),去完成业务任务

基本思想&#xff1a;这里使用飞哥写的android代码&#xff0c;将其取出纯c代码逻辑&#xff0c;自己尝试转了paddleocr模型&#xff0c;可以成功转换&#xff0c;不在详细阐述生成ncnn模型的过程和写后处理ocr识别过程&#xff0c;这里要实现的目的是使用c#调用ncnn的ocr工程&…

Ps修改文字

第一步&#xff1a;打开ps软件&#xff0c;选择菜单栏“文件”中的“打开”选项。 第二步&#xff1a;在弹出的“打开”对话框中&#xff0c;选择一张需要修改文字的图片&#xff0c;单击“打开”按钮。 第三步&#xff1a;在左侧工具栏中&#xff0c;选择“仿制图章工具”。 第…

【Python 随练】输出 9*9 口诀

题目&#xff1a; 输出 9*9 口诀 简介&#xff1a; 在本篇博客中&#xff0c;我们将使用 Python 代码输出 9*9 口诀表。口诀表是一个常见的数学乘法表格&#xff0c;用于展示从 1 到 9 的乘法结果。我们将给出问题的解析&#xff0c;并提供一个完整的代码示例来生成这个口诀…

全志V3S嵌入式驱动开发(USB camera驱动)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 soc和mcu的一个重要区别&#xff0c;就是soc会涉及到大量的音视频操作&#xff0c;当然音视频也就包括了camera摄像头这部分。v3s本身支持csi接口和…

webpack优化代码运行之Code split

一、 什么是code split Webpack的code split是一种技术&#xff0c;它能够将代码分割成多个块&#xff0c;从而优化应用程序的性能。这样做可以实现按需加载和并行加载&#xff0c;从而减少初始化时间和请求次数。Code split在Webpack中通过使用entry语法和各种Loader和插件来…

享元模式:减少内存占用的诀窍

一&#xff0c;概要 享元模式&#xff08;Flyweight Pattern&#xff09;是一种结构型设计模式&#xff0c;它主要通过共享对象来降低系统中对象的数量&#xff0c;从而减少内存占用和提高程序性能。这听起来有点像单例模式&#xff0c;但它们在实现和用途上有很大的区别。享元…

JavaScript Day01 初识JavaScript

文章目录 1.初识JavaScript1.1.什么是JavaScript1.2.JavaScript的组成部分1.3.JavaScript的历史-JavaScript发展历史-系统环境-编辑器-运行环境-调试&#xff1a; 2. js组成2.1 ECMAScrpt 【js标准】&#xff08;兼容性100%&#xff09; (类似于CoreJava&#xff0c;制定了基础…

【备战秋招】每日一题:2023.05-B卷-华为OD机试 - 阿里巴巴找黄金宝箱(III)

为了更好的阅读体检&#xff0c;可以查看我的算法学习博客阿里巴巴找黄金宝箱(III) 题目描述 贫如洗的樵夫阿里巴巴在去砍柴的路上&#xff0c;无意中发现了强盗集团的藏宝地&#xff0c;藏宝地有编号从0-N的箱子&#xff0c;每个箱子上面贴有一个数字。 阿里巴巴念出一个咒…

SpringMVC 学习整理

文章目录 一、SpringMVC 简介1.1 什么是MVC1.2 什么是Spring MVC1.3 Spring MVC的特点 二、SpringMVC 快速入门三、RequestMapping注解说明四、SpringMVC获取请求参数4.1 通过ServletAPI获取请求参数4.2 通过控制器方法的形参获取请求参数4.3 通过RequestParam接收请求参数4.4 …

Elasticsearch:实用 BM25 - 第 3 部分:在 Elasticsearch 中选择 b 和 k1 的注意事项

这是系列文章的第三篇文章。之前的文章是&#xff1a; Elasticsearch&#xff1a;实用 BM25 - 第 1 部分&#xff1a;分片如何影响 Elasticsearch 中的相关性评分 Elasticsearch&#xff1a;实用 BM25 - 第 2 部分&#xff1a;BM25 算法及其变量 选择 b 和 k1 值得注意的是&…

【备战秋招】每日一题:2023.05-B卷-华为OD机试 - 比赛的冠亚季军

为了更好的阅读体检&#xff0c;可以查看我的算法学习博客比赛的冠亚季军 题目描述 有个运动员&#xff0c;他们的id为0到N-1,他们的实力由一组整数表示。他们之间进行比赛&#xff0c;需要决出冠亚军。比赛的规则是0号和1号比赛&#xff0c;2号和3号比赛&#xff0c;以此类推…

014、数据库管理之配置管理

配置管理 TiDB配置系统配置集群配置配置的存储位置区分TiDB的系统参数和集群参数 系统参数系统参数的作用域系统参数的修改 集群参数集群参数的修改配置参数的查看 实验一&#xff1a; 在不同作用域下对数据库的系统参数进行修改session级别global级别 实验二&#xff1a; 修改…

Redis入门(二)

3.7 Redis 默认16个库 1&#xff09;Redis默认创建16个库,每个库对应一个下标,从0开始. 通过客户端连接后默认进入到0 号库&#xff0c;推荐只使用0号库. 127.0.0.1:6379> 16个是因为配置文件中是这样的 [aahadoop102 redis]$ vim redis.conf 2&#xff09;使用命令 sele…

DataX和SQLServer的导入导出案例

DataX和SQLServer的导入导出案例 文章目录 DataX和SQLServer的导入导出案例写在前面SQLServer数据库的简单使用SQLServer数据库一些常用的Shell脚本命令创建数据库 DataX 导入导出案例创建表并插入数据读取 SQLServer 的数据导入到 HDFS读取 SQLServer 的数据导入 MySQL 总结 写…

【C++Coppeliasim】UR机械臂位置正逆解Coppeliasim集成测试

前言&#xff1a; 基于改进的 Denavit-Hartenberg 参数的UR机械臂正向运动学求解和基于几何分析的逆运动学求解。该代码在 C 和 MATLAB 中可用&#xff0c;两者都与 CoppeliaSim 集成。 该解决方案是使用 Microsoft Visual Studio 2022 和 C 20 标准构建的。 依赖&#xff1a; …

C++ 类继承

目录 类继承基类派生一个类构造函数访问权限派生类与基类之间的特殊关系 完整demo 类继承 基类 #ifndef __TEST_1_H_ #define __TEST_1_H_ #include <iostream> #include<string> using namespace std; typedef unsigned int uint;//father class class TableTen…

《编译原理》2022年期末试卷

北京信息科技大学《编译原理》2022年期末考试 试卷附录

双指针-链表相交

面试题 02.07. 链表相交 同&#xff1a;160.链表相交 力扣题目链接 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保…

用c语言查找交通肇事者。

问题&#xff1a; 一辆卡车违反交通规则&#xff0c;撞人后逃跑。现场有3人目击事件&#xff0c;但都没有记住车号&#xff0c; 只记下车号的一些特征。 甲说&#xff1a;“牌照的前两位数字是相同的”。 乙说&#xff1a;“牌照的后两位…