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

【安卓】拿注册码的两种方式

【安卓】拿注册码的两种方式


文章仅用于学习交流,请勿利用文章中的技术对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。首发吾爱:https://www.52pojie.cn/thread-1826802-1-1.html言归正传,前段时间和朋友聊到某项功能,他说他是之前买的一个手机设备,那个手机可以实现这个功能,我当时就来了兴致,做了底层修改这么牛?
后来拿来看了看,手机刷了第三方rom和Magisk,利用一个app实现了这个功能(虽然爱思助手就有这个功能),但是有现成的app就想着研究一番,结果好家伙要验证码?于是就有了下文(在安卓逆向中属于非常基础了)

微信公众号:小惜渗透,欢迎大佬一起交流进步

1. java理逻辑

打开软件,图片如下

image-20230828182848108

随便填写点信息,然后点确定

image-20230828182929765

查一下有没有壳

image-20230828183254668

没有壳,直接拖进jadx,然后搜索关键字校验失败,发现两处,并且都在一个类中,先看第一处如下图所示,主要是有两个判断分支,首先我们要知道我们想要激活成功肯定是需要让代码不能走到else分支里

  • 先看最外层if语句判断了regCode的长度是否大于6,这个regCode看出是从控件中获得,也就是我们输入的注册码,所以这里得到信息,我们的注册码长度要大于6

  • 紧接着看内层的

//可以看出它new了一个Date也就是当前的日期,然后判断finalDate是否大于当前的日期
//finalDate的值为aqnuzcxq.getFinalDate(date),这个date是我的当初输入的注册码字符串从下标为6(也就是第七个数)到最后的截断
//所以接下来我们需要跟进,看下getFinalDate函数
if (finalDate.compareTo(new Date()) > 0) 

image-20230828183645596

为了注释方便,我将看下getFinalDate函数直接粘贴到下方

public static Date getFinalDate(String num) {//声明一个calendar对象Calendar c = Calendar.getInstance();//设定其日期为2019/12/1c.setTime(new Date("2019/12/1"));//调用add函数增加日期,其中6代表增加数字代表的是天数(依据如下图),增加的值为hexDecode(num),也就是对num进行16进制转10进制后得到的数字c.add(6, hexDecode(num));//返回日期return c.getTime();}

image-20230828185928713

至此,整理得到逻辑,当我们输入注册码的时候,软件会截取从第7个起到末尾的字符串,然后利用hexDecode函数对其解码得到一个数字,计算2019年12月1日加上这个数字并到的新的日期,用这个新的日期去对比今天的日期,判断是否过期。

hexDecode和hexEncode在代码中都有,比如我这里想让其增加9999天,那么解码前的原字符串应该为多少呢,我这里写了个demo,字符串为38259

image-20230828201734880

加完之后,日期是多少呢?2047年,可以够用了,所以这里我们得出我们激活码的第后半部分可以写个38259

image-20230828201857987

既然后半部分有了,就差前半部分了,前办部分的逻辑如下

可以看到代码正常走的话,又会触发校验失败的提示,所以我们要让其走到前面的if分支即可,因为前面的if分支有return关键字,我们看一下这个if分支,它获取了tvMachineCode这个控件的值作为第一个参数,这个控件为前面图中的机器码字段,并调用getFingerPrint函数,将返回值于regCode进行比对

regCode从前面的代码中声明了(在第一张代码图中),它是我们注册码的前6位

image-20230828190807495

我们跟进一下getFingerPrint函数,如下很简单,它就是将传入的两个参数想加然后进行md5加密,然后获取前6位,看上图,第一个参数我们知道了是机器码,第二个参数是keyCode

image-20230828191346750

接下来找这个keyCode,从下向上看,最后追溯到show函数的第三个参数,这里我们只需找到哪里调用了show函数即可,在show函数上按x,找到调用

image-20230828191756808

只找到一处调用,就是它了,看第三个参数123456(脱敏了)

image-20230828192016783

ok,既然如此我们前6位字符串也知道了,将机器码和123456拼接,然后进行md5加密,然后取前6位,最后拼接上我们之前逆出来的38259得到的字符串拿去激活

image-20230828202004601

2. 改smali代码的判断分支

打开dex,搜索校验失败,翻到第一个判断分支如下,这里v7是6,应该是判断长度大于6那个位置,if-le表示a小于等于b则调,所以我们默认长度大于6这里不跳,接着往下看下一个判断分支出现

image-20230828205041094

这里的if-gtz表示如果v9大于0则跳,所以我们这里需要将其改成反过来小于等于0则跳,所以这里改成if-ltz

image-20230828205757690

第一个判断分支解决,继续向下找第二个,如图这个位置正对代码中的equals比较处,这里if-eqz表示a等于0则跳,那我们改成a不等于0,也就是if-nez

image-20230828210031319

然后胡乱输入即可

image-20230828210253858

​ 这种方法不推荐,因为每次进应用会有检验是否过期函数,当然也可以对这个函数进行修改或置空,当然还有其它方式例如用frida进行hook,这里由于时间关系就不多做赘述了。

相关文章:

【安卓】拿注册码的两种方式

【安卓】拿注册码的两种方式 文章仅用于学习交流,请勿利用文章中的技术对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。首发吾爱:https://www.52pojie.cn/thread-1826802-1-1.html言归…...

【C++】—— 异常处理

前言: 本期,我将给大家讲解的是有关 异常处理 的相关知识! 目录 (一)C语言传统的处理错误的方式 (二)C异常概念 (三)异常的使用 1、异常的抛出和捕获 1️⃣ 异常的…...

cookie和session是什么,区别是什么?

cookie HTTP 协议中的 Cookie 包括 Web Cookie 和浏览器 Cookie,它是服务器发送到 Web 浏览器的⼀ ⼩块数据。服务器发送到浏览器的 Cookie,浏览器会进⾏存储,并与下⼀个请求⼀起发送到服务器。通 常,它⽤于判断两个请求是否来⾃…...

linux的mmc子系统与块设备关联

1.前言 本文主要block组件的主要流程,在介绍的过程中,将详细说明和block相关的流程,涉及到其它组件的详细流程再在相关文章中说明。 2.主要数据结构和API 2.1 struct mmc_card Elemete Namestruct mmc_cardPathinclude/linux/mmc/card.hRe…...

【Spring MVC】

目录 🍮1 什么是 MVC ? 🎁2 Spring MVC 的连接 🍘2.1 RequestMapping 实现 POST 和 GET 请求 🥣2.2 GetMapping 只支持 GET 请求 🫖2.3 PostMapping 只支持 POST 请求 🍬3 Spring MVC 获取参数的…...

【ES】笔记-生成器函数与调用

function* function* 这种声明方式 (function关键字后跟一个星号)会定义一个生成器函数 (generator function),它返回一个 Generator 对象。 function * gen(){console.log("heloo generator")}如何调用呢?先看下里面的内容 返回…...

将Spring Boot与Redis集成

一、引言 1、SpringBoot: Spring Boot是一个用于创建独立且可执行的Spring应用程序的框架。它简化了基于Spring框架的应用程序的开发过程,并提供了一种快速和简便的方式来构建Java应用程序。 Spring Boot提供了自动配置机制,通过引入适当的…...

vue echarts

安装 npm i -D echarts使用 <script setup lang"ts"> import * as echarts from echarts import { onMounted } from vueonMounted(() > {interface DataItem {value: [string, number]}let myChart echarts.init(document.getElementById(main))let dat…...

idea上利用JDBC连接MySQL数据库(8.1.0版)

1.了解jdbc概念 JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API&#xff0c;可以为多种 关系数据库提供统一访问&#xff0c;它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准&#xff0c;据此可以构建 更高级的工具和接口&#…...

【100天精通python】Day47:python网络编程_Web编程基础

目录 1 网络编程与web编程 1.1 网络编程 1.2 web编程 2 Web开发概述 3 Web开发基础 3.1 HTTP协议 3.2 Web服务器 3.3 前端基础 3.4 静态服务器 3.5 前后端交互的基本原理 4 WSGI接口 4.1 CGI 简介 4.2 WSGI 简介 4.3 定义 WSGI 接口 4.4 运行 WSGI 服务 4.5…...

DockerCompose介绍与使用

DockerCompose介绍与使用 1、DockerCompose介绍 DockerCompose用于定义和运行多容器 Docker 应用程序的工具。 通过 Compose可以使用 YAML 文件来配置应用程序需要的所有服务。一个使用Docker容器的应用&#xff0c;通常由多个容器组成&#xff0c;使用Docker Compose不再需要…...

Windows Qt 5.12.10下载与安装

Qt 入门实战教程&#xff08;目录&#xff09; C自学精简实践教程 目录(必读) 1 Qt5.12.10下载 qt-opensource-windows-x86-5.12.10.exe 官方离线安装包 Download Source Package Offline Installers | Qt 下载巨慢&#xff08;也可能很快&#xff09; 只能下载到最新的&…...

RustDesk最新版本编译与打包

本文环境 主要参考&#xff1a; https://www.yuque.com/shikangsi/efy0cp/wei3g1?https://blog.csdn.net/hualuohuakai2014/article/details/121605631 问题 flutter 生成 bridge 文件。 先安装工具&#xff0c;再生成ffi文件。 PS C:\Users\Administrator> cargo ins…...

Gin 框架入门实战系列(一)

GIN介绍 Gin是一个golang的微框架,封装比较优雅,API友好,源码注释比较明确,具有快速灵活,容错方便等特点 对于golang而言,web框架的依赖要远比Python,Java之类的要小。自身的net/http足够简单,性能也非常不错 借助框架开发,不仅可以省去很多常用的封装带来的时间,…...

【测试】pywinauto的简单使用(安装、常用对象、元素控件、鼠标操作、键盘操作)

1.说明 pywinauto是一个用于自动化Python 模块&#xff0c;适合Windows系统的软件&#xff08;GUI&#xff09;&#xff0c;可以通过Pywinauto遍历窗口&#xff08;对话框&#xff09;和窗口里的控件&#xff0c;也可以控制鼠标和键盘输入&#xff0c;所以它能做的事情比之前介…...

Java基础十八(正则表达式 + 日期时间)

1. 正则表达式 1.1 普通字符 字符描述示例[abc]匹配 […] 中所有字符[hlo] 匹配字符串 "hello world" 中所有的 h l o 字母[^ABC]匹配除了 […] 中所有字符[hlo] 匹配字符串 "hello world" 中除了 h l o 的所有字母[^a-z]匹配除了 […] 中所有字符[hlo] 匹…...

Linux C 多进程编程(面试考点)

嵌入式开发为什么要移植操作系统&#xff1f; 1.减小软硬件的耦合度&#xff0c;提高软件的移植性 2. 操作系统提供很多库和工具&#xff08;QT Open CV&#xff09;&#xff0c;提高开发效率 3.操作系统提供多任务机制&#xff0c;______________________? (提高C…...

c++一级

与7无关的数 #include<iostream> #include<iomanip> using namespace std; int main() {   int n,a,sum0,c0;   cin>>n;   for(int i1;i<n;i){     if(i%7!0){       ai;       c0; …...

Code Lab - 34

GAT里面有一些地方看的不是太懂&#xff08;GAT里Multi Attention的具体做法&#xff09;&#xff0c;暂时找了参考代码&#xff0c;留一个疑问 1. 一个通用的GNN Stack import torch_geometric import torch import torch_scatter import torch.nn as nn import torch.nn.fun…...

后端返回文件流,前端怎么导出、下载(8种方法可实现)

在前端导出和下载后端返回的文件流时&#xff0c;可以使用以下几种方法&#xff1a; 使用window.open()方法&#xff1a; 在前端使用window.open()方法打开一个新的窗口或标签页&#xff0c;并将后端返回的文件流作为URL传递给该方法。浏览器会自动下载该文件。例如&#xff1a…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我&#xff0c;后续持续新增专题博文&#xff0c;谢谢&#xff01;&#xff01;&#xff01;】 上一篇我们讲了&#xff1a; 这一篇我们开始讲&#xff1a; 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下&#xff1a; 一、场景操作步骤 操作步…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

【网络安全产品大调研系列】2. 体验漏洞扫描

前言 2023 年漏洞扫描服务市场规模预计为 3.06&#xff08;十亿美元&#xff09;。漏洞扫描服务市场行业预计将从 2024 年的 3.48&#xff08;十亿美元&#xff09;增长到 2032 年的 9.54&#xff08;十亿美元&#xff09;。预测期内漏洞扫描服务市场 CAGR&#xff08;增长率&…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

&#x1f50d; 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术&#xff0c;可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势&#xff0c;还能有效评价重大生态工程…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode&#xff1a; 2.利用 authorizationCode 获取 accessToken&#xff1a;文档中心 3.获取手机&#xff1a;文档中心 4.获取昵称头像&#xff1a;文档中心 首先创建 request 若要获取手机号&#xff0c;scope必填 phone&#xff0c;permissions 必填 …...