攻防世界安卓刷题笔记(新手模式)1-4

1.基础android

进入后是这样的页面。查看源代码看看。首先要注意这个软件并没有加壳,所以我们可以直接着手分析。搜索错误提示“Failed”定位到关键代码,看样子就是检验输入的内容

注意到这里有一行关键代码,cond_39对应的正是failed那个地方,我们直接采用修改跳转条件的方法,看看会不会直接提示出flag。 

进去是进去了,结果还有第二关,看样子貌似和图片隐写相关?这里先存疑,继续分析代码 。这里并没有错误提示,不太好直接定位。那么我们就从图片入手,看看图片本身是否存在问题。

并没有直接找到图片,而是找到了一个压缩包。怀疑压缩包内部有猫腻,但是解压失败,利用winhex分析文件头,可知这其实是一个jpg文件。用电脑打开后就是flag。软件故意让图片显示不完全,因为flag其实被用文字的方式放在原图女士裙子上,如下图所示

 

2.  android2.0 

老办法定位到了关键代码, 看来关键就是在type!本来在上面看到一个pwd的资源id挺开心的,结果发现原来这只是代表输入框,那么思路还需要改变一下,如何改变呢?

其实,只要输入的内容符合great的要求,就会提示great,因此我们要找到特定的算法

 看看这个就像是函数的东西干了什么事

问了AI,意思是调用了一个so文件。so文件在IDA里面打开就行了,锁定到一个JAVA开头的函数,反编译得到:

看样子v4就是目标字符串 。查看WP,这是一种分组加密。(原谅我逆向功底差,只能看wp)

下面代码估计是分组的实现,由%3推测是分了3组,v5一直在加一,应该是实现索引的。

第一组的关键代码

注意这里传的参数是指针,也就是v5这个字符串已经变成加密后的了。这个会影响第二组的操作。 

根据算法,要让a1==那个字符串。a1就是经过异或后的v5,反向操作以下就行。简单编写python得到:

a='LN^d'
b=''
i=0
#原c++循环在4终止 等于说剩下一个l没有异或
while(i<4):b+=(chr(int((ord(a[i])^128)/2)))i+=1
print(b+'l')

得到结果fgorl

第二组:

 

a5就是图示的byte_2888! 

首先双击a5,选中a5的所有元素,点击shift+e导出。然后继续在python里面写exp!

a=[32, 53, 45, 22, 97]
b='LN^dl'
for i in range(0,4):a[i]=a[i]^ord(b[i])print(chr(a[i]),end='')
print(chr(a[4]))

得到l{sra。

V7则和第二组一样的解密思路。结果是asoy}

第三组解题代码如下:

#只需要前四组就好
a=[32, 53, 45, 22]
b='AFBo'
c=''
for i in range(0,4):c+=chr(a[i]^ord(b[i]))
print(c)

三组字符进行栅栏解密就好啦/ 

3.APK逆向

这道题很直白,而且进去就让输入flag。我们直接用MT管理器打开看。这道题并没有加固,所以可以直接分析dex文件。

在arsc搜索错误提示,定位到代码位置。

改一个这里的代码看看会不会扭转提示。提示确实变了,但是没有弹出来flag,转变思路 

//
// Decompiled by Jadx - 562ms
//
package com.example.crackme;import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.widget.Button;
import android.widget.EditText;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;public class MainActivity extends Activity {private Button btn_register;private EditText edit_sn;String edit_userName;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(0x7f040019);setTitle(0x7f06001d);this.edit_userName = "Tenshine";this.edit_sn = (EditText) findViewById(0x7f0c0051);this.btn_register = (Button) findViewById(0x7f0c0052);this.btn_register.setOnClickListener(new MainActivity$1(this));}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(0x7f0d0000, menu);return true;}public boolean checkSN(String userName, String sn) {if (userName == null) {return false;}try {if (userName.length() == 0 || sn == null || sn.length() != 22) {return false;}MessageDigest digest = MessageDigest.getInstance("MD5");digest.reset();digest.update(userName.getBytes());byte[] bytes = digest.digest();String hexstr = toHexString(bytes, "");StringBuilder sb = new StringBuilder();for (int i = 0; i < hexstr.length(); i += 2) {sb.append(hexstr.charAt(i));}String userSN = sb.toString();return new StringBuilder().append("flag{").append(userSN).append("}").toString().equalsIgnoreCase(sn);} catch (NoSuchAlgorithmException e) {e.printStackTrace();return false;}}private static String toHexString(byte[] bytes, String separator) {StringBuilder hexString = new StringBuilder();for (byte b : bytes) {String hex = Integer.toHexString(b & 255);if (hex.length() == 1) {hexString.append('0');}hexString.append(hex).append(separator);}return hexString.toString();}
}

但是浏览到MAINactivity,确实发现了关键代码,看起来就是MD5加密。分析代码查看。 

注意看这一块代码,首先对指定的消息md5加密,而后通过循环,每2次循环就取出一个数,当作flag。用PY的切片秒了 

4.人民的名义:抓捕赵德汉

点进去,映入眼帘的就是一个main函数。

大致意思就是获取用户输入的字符串,然后调用checkPassword方法进行检查,如果正确就是提示正确,否则让你检查。

定位到checkPassword方法。

看一下boolean方法,结尾是返回hashbytes是否等于后面的那一串(怀疑是MD5加密后的结果),大胆猜测是先对输入的数据进行md5摘要计算,然后再进行下面方法的计算,最后看计算的结果是否等于给定的数值 

(错误做法!!!)

询问豆包验证了自己的猜想,那么接下来就是分析如何实现的算法。

 首先定义了一个循环,循环内首先求解出halfbyte,然后看do...while。这个do...while只会进行两次,因为第一次,计数器i会被two_halfs计算为0,而后第二次i就会变成1,不满足条件,终止循环。在这个循环之中,根据half byte的不同规则,添加进了最终的数组。

要想倒回去,就要逆向分析。原代码的forxunhuanl多少次?每循环一次for,do..while进行两次,也就是添加两个数进结果。结果的十六进制一共是32位,因此for循环进行16次。下面根据for循环来写出解题代码:

解出来有负数?

正确思路

其实下面的方法的用处不是对md5进行复杂的操作,而是把字节数组转为十六进制。我也是参考了wp才发现这一个问题!所以直接对md5进行解密就可以了。 

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

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

相关文章

C++核心day3作业

作业&#xff1a; 1.整理思维导图 2.整理课上代码 3.把课上类的三个练习题的构造函数写出来 函数全部类内声明&#xff0c;类外定义 定义一个矩形类Rec&#xff0c;包含私有属性length、width&#xff0c;包含公有成员方法&#xff1a; void set_length(int l); //设置长度v…

Scala:正则表达式

object test03 {//正则表达式def main(args: Array[String]): Unit {//定义一个正则表达式//1.[ab]:表示匹配一个字符&#xff0c;或者是a&#xff0c;或者是b//2.[a-z]:表示从a到z的26个字母中的任意一个//3.[A-Z]:表示从A到Z的26个字母中的任意一个//4.[0-9]:表示从0到9的10…

可视化建模以及UML期末复习篇----UML图

这是一篇相对较长的文章&#xff0c;如你们所见&#xff0c;比较详细&#xff0c;全长两万字。我不建议你们一次性看完&#xff0c;直接跳目录找你需要的知识点即可。 --------欢迎各位来到我UML国&#xff01; 一、UML图 总共有如下几种&#xff1a; 用例图&#xff08;Use Ca…

[创业之路-191]:《华为战略管理法-DSTE实战体系》-2-BLM战略规划与执行的基本框架

目录 一、战略规划&#xff1a;BLM的核心内容 1. 战略规划部分 2 战略执行部分&#xff08;战略解码&#xff09; 二、BLM模型对企业战略制定和执行的价值 2.1 说法1&#xff1a; 1、共同的目标 2、同一种语言&#xff1a;提高团队协作效率 3、最基本的方法 4、执行的…

go引入skywalking

前置条件&#xff1a;安装好jdk11&#xff0c;linux服务器&#xff08;centos7.9&#xff09;&#xff0c;go版本&#xff08;我的是1.18&#xff0c;1.21都可以&#xff09; 1.下载skywalking Downloads | Apache SkyWalking 2.下载agent源码 Downloads | Apache SkyWalkin…

操作系统Lesson11 - 进程调度和批处理系统调度

文章目录 调度三个问题&#xff1a; 进程行为何时调度调度分类依据时钟中断来分类系统环境分类 调度 调度&#xff1a; 一个程序。 调度对象&#xff1a;进程和内核级线程。 1.调度程序调度P1&#xff0c;读取PCB块在CPU中恢复它的现场(ctx)&#xff1b; 2.当CPU执行完了P1之…

java各种锁介绍

1. synchronized锁&#xff1a; • 定义&#xff1a;Java内置的关键字锁&#xff0c;用于实现线程间的同步。它可以修饰方法或代码块。 • 特性&#xff1a;隐式获取和释放锁&#xff0c;自动处理锁的粒度&#xff08;方法级或代码块级&#xff09;&#xff0c;支持重入性。 •…

国产化(三):中间件——东方通TongWeb7.0

一、准备工作 1、软件包和license文件 2、检查jdk是否安装 二、安装 1、创建tongweb文件夹 我是把软件包放在了桌面&#xff0c;通过命令将软件包移动到指定文件夹下。 1—切换到opt文件夹 cd /opt 2—查看文件夹里的文件 ls 3—创建tongweb文件夹 sudo mkdir tongweb 4—检…

Java面试题精选:设计模式(二)

1、装饰器模式与代理模式的区别 1&#xff09;代理模式(Proxy Design Pattern ) 原始定义是&#xff1a;让你能够提供对象的替代品或其占位符。代理控制着对于原对象的访问&#xff0c;并允许将请求提交给对象前后进行一些处理。 代理模式的适用场景 功能增强 当需要对一个对…

Java版-图论-最小生成树-Prim算法

实现描述 如图&#xff1a; Prim算法的基本思想是从一个顶点开始&#xff0c;逐步构建最小生成树。具体步骤如下&#xff1a; 随机选取一个顶点作为起始点&#xff0c;并将其加入最小生成树的集合中。从该顶点出发&#xff0c;选择一条边连接到其他未被访问的顶点中的最小权…

Linux WEB服务器的部署及优化

1.用户常用关于web的信息 1.1.什么是www www是world wide web的缩写&#xff0c;及万维网&#xff0c;也就是全球信息广播的意思。 通常说的上网就是使用www来查询用户所需要的信息。 www可以结合文字、图形、影像以及声音等多媒体&#xff0c;超链接的方式将信息以Internet…

【HarmonyOS学习日志(13)】计算机网络之TCP/IP协议族(二)

文章目录 TCP/IP协议族ARPDNS标志字段&#xff1a;协商具体的通信方式和反馈通信状态DNS查询问题的格式资源记录&#xff08;Resource Record, RR&#xff09;格式&#xff1a;被用于应答字段、授权字段和额外信息字段 IP协议IP服务的特点无状态无连接不可靠 IP头部结构IPv4头部…

Python + Playwright:集成 Applitools 进行视觉回归测试(快速入门)

集成 Applitools 进行视觉回归测试(快速入门) 简介Applitools 的核心特点Applitools 的应用场景1. 准备工作2. 获取示例项目2.1 下载示例代码2.2 安装依赖2.3 选择测试运行方式3. 代码解析3.1 测试用例示例4. 运行测试4.1 设置 Applitools API 变量4.2 设置 Applitools Eyes …

javaScript交互补充

1、元素的三大系列 1.1、offset系列 1.1.1、offset初相识 使用offset系列相关属性可以动态的得到该元素的位置&#xff08;偏移&#xff09;、大小等 ●获得元素距离带有定位祖先元素的位置 ●获得元素自身的大小&#xff08;宽度高度&#xff09; ●注意&#xff1a;返回的…

【Linux】-学习笔记09

第六章、nfs网络文件系统 1.nfs网络文件系统简介 NFS(Network File system&#xff0c;网络文件系统)是由SUN公司研制的UNIX表示层协议&#xff0c;它允许网络中的计算机(不同的计算机、不同的操作系统)之间通过TCP/IP网络共享资源&#xff0c;主要在unix系列操作系统上使用。…

【C++】LeetCode:LCR 078. 合并 K 个升序链表

题干&#xff1a; 给定一个链表数组&#xff0c;每个链表都已经按升序排列。 请将所有链表合并到一个升序链表中&#xff0c;返回合并后的链表。 解法&#xff1a;优先队列 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *ne…

minGW安装教程

一、下载 1.通过官网WinGW官网下载 http://www.mingw-w64.org 2.通过SourceForge网站下载MinGW https://sourceforge.net/projects/mingw/files/latest/download 二、安装 右键mingw-get-setup.exe&#xff0c;以管理员身份运行 点击Install安装 点击“Change”修改安装地…

BFS入门

目录 定义二叉树层次遍历电梯问题倒可乐BFS基本思想算法 四方访问 定义 BFS 通常是指广度优先搜索&#xff08;Breadth - First Search&#xff09;&#xff0c;它是一种图形数据结构的遍历算法。从给定的起始顶点开始&#xff0c;首先访问起始顶点的所有邻接顶点&#xff0c;然…

如何将CSDN的文章保存为PDF?

目录 1、打开CSDN文章2、按F12或者鼠标右键选择检查并进入控制台3、在控制台输入以下代码4、然后回车&#xff08;Enter&#xff09;如果纵向显示不全就横向 1、打开CSDN文章 2、按F12或者鼠标右键选择检查并进入控制台 3、在控制台输入以下代码 (function(){ $("#side&q…

25考研软件工程 西南大学跟重庆大学哪个难?

需知晓&#xff0c;西南大学每年报考人数众多&#xff0c;可这不代表报考软件工程专业的人数就多呀&#xff0c;况且西南大学的优势学科并非工科&#xff0c;故而软件工程的报考热度不会如题主所言那般高呢。 其次得明白&#xff0c;软件工程专业上岸难度方面&#xff0c;重庆大…