Android逆向题解-攻防世界-Ph0en1x-100

news2024/12/28 1:49:02

jeb反编译apk

主要代码是if 那个判断,getFlag取字符串用getSecret加密,和输入字符串encrypt加密后再getSecret加密,进行比较,两边同样都是getSecret加密,那比较可以简化成this.getFlag() == this.encrypt(s) 。
也就是输入字符经过encrypt加密后等于getFlag的字符串即可。

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.setContentView(0x7F040019);  // layout:activity_main
        this.etFlag = (EditText)this.findViewById(0x7F0C004F);  // id:flag_edit
    }

    public void onGoClick(View v) {
        String s = this.etFlag.getText().toString();
        **if(this.getSecret(this.getFlag()).equals(this.getSecret(this.encrypt(s)))) {**
            Toast.makeText(this, "Success", 1).show();
            return;
        }

        Toast.makeText(this, "Failed", 1).show();
    }

Hook获取getFlag返回值

直接上objection 获取到getFlag的返回值:ekfz@q2^x/t^fn0mF^6/^rbqanqntfg^E`hq|

(agent) [360023] Return Value: ekfz@q2^x/t^fn0mF^6/^rbqanqntfg^E`hq|

ida分析so

ida看下encrypt 的实现。
循环遍历字符串。每个字符-1;

jstring __fastcall Java_com_ph0en1x_android_1crackme_MainActivity_encrypt(JNIEnv *a1, jobject a2, jstring a3)
{
  const char *v4; // r4
  const char *i; // r5

  v4 = (*a1)->GetStringUTFChars(a1, a3, 0);
  for ( i = v4; i - v4 < strlen(v4); ++i )
    --*i;
  return (*a1)->NewStringUTF(a1, v4);
}

算法还原

循环遍历字符串ekfz@q2^x/t^fn0mF^6/^rbqanqntfg^E`hq|,每个字符+1;

    public static void main(String[] args) {
        String aa = "ek`fz@q2^x/t^fn0mF^6/^rb`qanqntfg^E`hq|";
        char[] chars = new char[aa.length()];
        for (int i = 0; i < aa.length(); i++) {
            chars[i] = (char) (aa.charAt(i) + 1);
        }
        System.out.println(chars);
    }

得到flag:
在这里插入图片描述

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

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

相关文章

深入探讨C语言中的高级内存管理技术

目录 深入探讨C语言中的高级内存管理技术 高级动态内存分配策略 1. 内存池&#xff08;Memory Pool&#xff09; 2. 对象池&#xff08;Object Pool&#xff09; 内存碎片化与其优化技术 1. 内存碎片化的成因 2. 优化内存碎片化的策略 内存泄漏检测与修复 1. 内存泄漏…

uniapp__微信小程序分享好友朋友圈的功能

1、 实现效果 这个如果不写代码就是灰色的不能使用 2、api地址 uniapp这是使用的api地址点击即可进入 uniapp 3、这是 找到个大佬的文章很好用给大家看下 uni-app小程序分享功能实现_uniapp onsharetimeline-CSDN博客 4、记录是方便自己学习 4.1 把这个建一个文件 ex…

【人工智能】如何在白嫖的阿里云PAI平台上跑模型?

在“交互式建模&#xff08;DSW&#xff09;”中新建实例&#xff0c;阿里云自带的示例镜像是很少的&#xff0c;所以我们只需要筛选出适合你的项目的CUDA版本就好。DSW实例可以看作是一个Linux虚拟机&#xff0c;之后我们在实例中新建另一个Python环境使用即可。 新建完实例后…

C++静态数组的用法

每日诗词&#xff1a; 疏影横斜水清浅&#xff0c;暗香浮动月黄昏。 ——《山园小梅其一》林逋 目录 数组的基础操作&#xff1a; 数组元素的增加&#xff1a; 演示&#xff1a; 数组元素的删除&#xff1a; 演示&#xff1a; 数组元素的访问和修改&#xff1a; 演示&am…

【音视频 | YUV格式】深入理解 YUV 数据格式,一文弄懂

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

【数据结构与算法】快速排序

快速排序目录 一.快速排序的原理二.快速排序的图解三.快速排序的实现1.基准两边分2.分而治之 四.完整代码 一.快速排序的原理 每次选取第一个数为基准数.然后使用乾坤大挪移将大于或者小于基准的元素分别放置于基准数两边.继续分别对基准数两侧未排序的数据使用分治法进行处理…

计算机网络之IPv4深度解析

一.IP地址 IP地址的组成方式&#xff1a;网络号 主机号 可以这样理解&#xff0c;根据网络号找路由器&#xff0c;根据主机号找连着路由器的主机 早期分类的IP地址 表示如下&#xff1a; 其中&#xff0c;有些特殊的IP地址&#xff1a; 主机号全为0&#xff0c;表示本网…

CDD数据库文件制作(十一)——服务配置(0x19_DTC Code)

文章目录 1.新建DTC2.将DTC库中的DTC加载到Variant中3.19服务设置4.一些参数设置5.会话切换配置/安全等级配置6.寻址方式/禁止肯定响应位(SPRMIB)7.DTC Code 以文件形式进行导入导出1.新建DTC 先看一下诊断调查表中定义 如何创建一个新的DTC code? 选择DTC数据库点击新建DT…

Havoc C2 上线Windows 11

1、环境配置 Windows11 更新到最新补丁(文章编写时间&#xff1a;‎2023‎年‎8‎月‎)&#xff0c;安全软件打开 Kali更新&#xff1a; apt update -y && apt upgrade -y安装设置Havoc //下载项目 cd /opt && git clone https://github.com/HavocFramework…

百度 测试|测试开发 面试真题|面经 汇总

百度测开 开发测试工程师 提前批一二三面面经 事业群&#xff1a;MEG base&#xff1a;北京 一面&#xff1a;2022.8.12 时长&#xff1a;50min 自我介绍 个人项目&#xff0c;我的项目是围绕着学校课程的项目来的&#xff0c;面试官就让我介绍这门课讲了些什么 &#xf…

【vue】编辑器段落对应材料同步滚动交互

场景需求 编辑器段落对应显示材料编辑器滚动时&#xff0c;材料同步滚动编辑器段落无数据时&#xff0c;材料不显示 实现方法 编辑器与材料组件左右布局获取编辑器高度&#xff0c;材料高度与编辑器高度一致禁用材料组件的滚动事件获取编辑器段落距离顶部的位置&#xff0c;…

鸿蒙开发5.0【基于自定义注解和代码生成实现路由框架】

场景描述 在应用开发中无论是出于工程组织效率还是开发体验的考虑&#xff0c;开发者都需要对项目进行模块间解耦&#xff0c;此时需要构建一套用于模块间组件跳转、数据通信的路由框架。 业界常见的实现方式是在编译期生成路由表。 1. 实现原理及流程 在编译期通过扫描并解…

吴恩达机器学习-C2W3-应用机器学习的建议

在本实验中&#xff0c;您将探索评估和改进机器学习模型的技术。 1-调包 首先&#xff0c;让我们运行下面的单元格来导入在此任务中需要的所有包。 numpymatplotlibscikitlearntensorflow import numpy as np %matplotlib widget import matplotlib.pyplot as plt from skle…

模拟实现queue适配器【队列】【C++】

P. S.&#xff1a;以下代码均在VS2022环境下测试&#xff0c;不代表所有编译器均可通过。 P. S.&#xff1a;测试代码均未展示头文件stdio.h的声明&#xff0c;使用时请自行添加。 博主主页&#xff1a;LiUEEEEE                        …

私域经济的挖掘:多元渠道下的流量引爆方法

近年来&#xff0c;私域经济越来越受到品牌企业的青睐。基于个性化需求的私域市场&#xff0c;既有精准定位的成本优势&#xff0c;又有巨大的潜力空间。然而&#xff0c;想要把私域做成&#xff0c;其实也是充满了挑战&#xff0c;其中&#xff0c;怎样有效吸引流量&#xff0…

01、Redis入门:数据类型、基本操作、SpringDataRedis

Redis快速入门 Redis的常见命令和客户端使用 1.初识Redis Redis是一种键值型的NoSql数据库&#xff0c;这里有两个关键字&#xff1a; 键值型 NoSql 其中键值型&#xff0c;是指Redis中存储的数据都是以key、value对的形式存储&#xff0c;而value的形式多种多样&#xf…

错误信息“缺少msvcr120.dll”或“找不到msvcr120.dll”应该如何修复?几种方法快速修复

由于这个msvcr120.dll文件与应用程序的运行密切相关&#xff0c;任何与之相关的问题都可能导致应用程序无法正常运行。错误信息如“缺少msvcr120.dll”或“找不到msvcr120.dll”&#xff0c;通常出现在软件安装不正确或系统更新后。接下俩就教大家几种方法快速修复msvcr120.dll…

7 周岁自闭症儿童可以去普校上学吗?

对于许多自闭症儿童的家长来说&#xff0c;孩子能否去普通学校上学是一个至关重要的问题。而星贝育园给出了充满希望的答案。 星贝育园向家长郑重承诺&#xff0c;4 周岁之前开始干预可以 100%摘帽&#xff0c;即消除自闭症症状。在这里&#xff0c;为自闭症儿童提供个性化教学…

Spring源码解析(34)之Spring事务回滚流程

一、前言 在上一个篇章我们主要介绍了Spring事务的运行流程&#xff0c;也带着一步步debug看了整个事务的运行流程&#xff0c;但是还是欠缺了Spring事务的回滚的流程。 在上篇也主要介绍了Spring事务的传播特性&#xff0c;这里还是要看一下Spring事务的传播特性&#xff0c;因…

思博伦测试每秒最大新建、并发、吞吐

详细方法查看本文资源链接 一、最大新建测试说明 1、新建测试的主要目标是测试被测设备&#xff08;DUT&#xff09;的处理器能力。在单位时间内能够建立的连接数越多&#xff0c;说明被测设备的处理器的能力越强。 2、由于在测试过程中&#xff0c;我们只关心成功的建立TCP…