0

0

Android中怎么进行静态分析

WBOY

WBOY

发布时间:2023-05-11 22:28:12

|

1291人浏览过

|

来源于亿速云

转载

android逆向就是反编译的过程,因为看不懂android正向编译后的结果所以ctf中静态分析的前提是将出现文件反编译到我们看得懂一层源码,进行静态分析。

0X01 基础说明

Android应用的逻辑代码是由Java进行开发,所以是第一层就是java代码

Java虚拟机JVM运行的是java文件编译过后的class文件

Android虚拟机Dalvik并不是执行Java虚拟机JVM编译后生成的class文件,而是执行再重新整合打包后生成的dex文件编译之后的smali文件

APK:是编译完成后的Android应用程序安装包

dex文件:是class文件的打包文件

smali文件:是Dalvik字节码文件

class文件:是JVM字节码文件

0X02 工具使用

在CTF中Android题目不一定给你完整编译完成后的APK,可能是编译过程中任意文件类型,下面斗哥分以下文件类型利用工具来得到斗哥看得懂的java源码

类型一:class文件

这种情况比较简单,推荐工具jd-gui

直接将class文件拉进去就可以看到java源码。


Android中怎么进行静态分析

类型二:APK程序

Android工程编译完成会得到我们想要的APK安装包,APK文件其实是一个压缩包。

修改后缀名为zip后解压,解压后的文件如下图所示:


Android中怎么进行静态分析

META-INF文件夹:

存放apk签名信息,用来保证apk包的完整性和系统的安全。

res文件夹:

存放资源文件,包括icon,xml文件。

AndroidManifest.xml文件:

应用程序配置文件,每个应用都必须定义和包含的,它描述了应用的名字、版本、权限、引用的库文件等信息。

classes.dex文件:

可以直接在Dalvik虚拟机上加载运行的文件,由java文件经过IDE编译生成。

resources.arsc文件>

二进制资源文件,包括字符串等。

反编译APK推荐工具ApkIDE、JEB

1. JEB使用:

JEB直接导入APK,反编译完成看到smali文件。


Android中怎么进行静态分析

很多Android逆向工具就反编译到smali文件这步。

JEB选中smali文件中按Q,就可以看到java文件。


Android中怎么进行静态分析

优点:从smali文件反编译成的java文件代码结构清晰。

缺点:无法修改。

2. ApkIDE使用:

项目->打开Apk

等待反编译完成。


Android中怎么进行静态分析

看到smali文件。

Android中怎么进行静态分析

选择要java源码的smali文件,点击下图按钮,打开Java源码。

Android中怎么进行静态分析

ApkIDE关联了jd-gui,点击后将跳转到jd-gui。

Android中怎么进行静态分析

ApkIDE是将APK反编译到class再用jd-gui拿到Java源码。

在ApkIDE的ApkIDE_v3.3\ApkIDE\Worksrc的项目目录下可以看到反编译后的class文件。

Android中怎么进行静态分析

优点:功能强大,可以修改反编译出来的smali文件,重新编译生成APK。

缺点:编译成后的java代码不够清晰。

3.反编译区别

Smali文件是由Smali语法编写,Smali语法宽松式的语法

所以反编译过程不同,工具不同,java源码肯定不同

下面是同一个APK用上面两个工具逆向的结果:

Android中怎么进行静态分析

Android中怎么进行静态分析

斗哥作为一名Java开发的爱好者喜欢JEB的逆向结果,看着比较舒服。

类型三:dex文件

推荐工具dex2.jar

classes.dex文件,这个是Android源码编译过的字节码包

尝试使用dex2.jar工具拿到java源码命令如下

.\d2j-dex2jar.bat C:\Users\lin\Desktop\classes.dex


Android中怎么进行静态分析

jar文件可以理解为classes文件的压缩包,java虚拟机可以直接运行

用Jd-gui打开classes-dex2jar.jar就可以看到java源码


Android中怎么进行静态分析

类型四:smali文件

当只有一个单独的smali文件时就无法用上述的工具直接进行反编译

斗哥想到ApkIDE可以对一个APK进行反编译到smali文件,对smali文件进行增删改查的操作

于是用ApkIDE打开任意一个完整的APK然后添加smali文件(APK可以用自己开发的)


Android中怎么进行静态分析

将smali文件添加ApkIDE项目中。


Android中怎么进行静态分析

重新编译生成APK。

Android中怎么进行静态分析

编译成功后将在原APK目录生成一个APK。


Android中怎么进行静态分析

再用JEB等工具打开就能看到Ezreal.smali文件。


Android中怎么进行静态分析

其他工具:

编辑器:notepad++、Sublime等

Android模拟器:夜神模拟器等

0X04 例题分析

将应用安装到模拟器查看界面是否有提示。

在文本框输入字符点击按钮提示错误,猜想是否用来判断正确的flag。


Android中怎么进行静态分析

使用JEB工具编译成java文件,Android文件下是sdk文件,我们要分析是com包下的源码文件。


Android中怎么进行静态分析

代码量不多就三个类,先从程序入口MainActivity分析,找到关键代码块。

这句if就是判断flag是否正确。

Android中怎么进行静态分析

搜索类查看哪里调用了此方法。

分析得到arg12就是界面要输入的参数,这时我们知道了v5的值就是我们要的flag。


Android中怎么进行静态分析

onCreate函数调用了checkSN方法并传入两个参数为:

Gatekeep
Gatekeep

Gatekeep AI是一个专注于将文本转化为教学视频的智能教学工具,主要用于数学和物理等学科的教育。

下载

MainActivity.this.edit_userName.trim()

MainActivity.this.edit_sn.getText().toString().trim()

//OnCreate是Android中的一个特别的函数,用来“表示一个窗口正在生成”。

//其不产生窗口,只是在窗口显示前设置窗口的属性如风格、位置颜色等。

public void onCreate(Bundle arg3) {

   super.onCreate(arg3);

   this.setContentView(0x7F040019);

   this.setTitle(0x7F06001D);

   this.edit_userName = "Tenshine";

   this.edit_sn = this.findViewById(0x7F0C0051);

   this.btn_register = this.findViewById(0x7F0C0052);

   this.btn_register.setOnClickListener(new View$OnClickListener() {

       public void onClick(View arg5) {

           if(!MainActivity.this.checkSN(MainActivity.this.edit_userName.trim(), MainActivity.this.edit_sn.getText().toString().trim())) {

               Toast.makeText(MainActivity.this, 0x7F06001E, 0).show();

           }

           else {

               Toast.makeText(MainActivity.this, 0x7F06001B, 0).show();

               MainActivity.this.btn_register.setEnabled(false);

               MainActivity.this.setTitle(0x7F060019);

           }

       }

   });

}

分析v5的值,v5是由v3和v4生成的,v4是一个int并直接赋值为0用于循环就可以直接使用

而v3则是toHexString方法的返回值,并要传入,v1是v1.update(arg11.getBytes());生成

arg11就是传入的参数"Tenshine"

private boolean checkSN(String arg11, String arg12) {

   boolean v7 = false;

   if(arg11 != null) {

       try {

           if(arg11.length() == 0) {

               return v7;

           }

           if(arg12 == null) {

               return v7;

           }

           if(arg12.length() != 22) {

               return v7;

           }

           MessageDigest v1 = MessageDigest.getInstance("MD5");

           v1.reset();

           v1.update(arg11.getBytes());

           String v3 = MainActivity.toHexString(v1.digest(), "");

           StringBuilder v5 = new StringBuilder();

           int v4;

           for(v4 = 0; v4

               v5.append(v3.charAt(v4));

           }

           if(!"flag{" + v5.toString() + "}".equalsIgnoreCase(arg12)) {

               return v7;

           }

       }

       catch(NoSuchAlgorithmException v2) {

           goto label_40;

       }

       v7 = true;

   }

   return v7;

label_40:

   v2.printStackTrace();

   return v7;

}

将上面的分析结果,取出生成v5的关系代码

都是纯java代码,不需要Android的包引入,只需引入java的依赖包。

import java.security.MessageDigest;

import java.security.NoSuchAlgorithmException;

public class Code {

   static String toHexString(byte[] arg8, String arg9) {

       StringBuilder v3 = new StringBuilder();

       byte[] v0 = arg8;

       int v5 = v0.length;

       int v4;

       for(v4 = 0; v4

           String v2 = Integer.toHexString(v0[v4] & 255);

           if(v2.length() == 1) {

               v3.append('0');

           }

           v3.append(v2).append(arg9);

       }

       return v3.toString();

   }

   public static void main(String[] args)throws NoSuchAlgorithmException{

       MessageDigest v1 = MessageDigest.getInstance("MD5");

       v1.reset();

       v1.update("Tenshine".getBytes());

       String v3 = Code.toHexString(v1.digest(), "");

       StringBuilder v5 = new StringBuilder();

       int v4;

       for(v4 = 0; v4

           v5.append(v3.charAt(v4));

       }

       System.out.println("flag{" + v5.toString() + "}");

   }

}

用IDEA编辑运行,拿到flag。


Android中怎么进行静态分析

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Golang 测试体系与代码质量保障:工程级可靠性建设
Golang 测试体系与代码质量保障:工程级可靠性建设

Go语言测试体系与代码质量保障聚焦于构建工程级可靠性系统。本专题深入解析Go的测试工具链(如go test)、单元测试、集成测试及端到端测试实践,结合代码覆盖率分析、静态代码扫描(如go vet)和动态分析工具,建立全链路质量监控机制。通过自动化测试框架、持续集成(CI)流水线配置及代码审查规范,实现测试用例管理、缺陷追踪与质量门禁控制,确保代码健壮性与可维护性,为高可靠性工程系统提供质量保障。

28

2026.02.28

Golang 工程化架构设计:可维护与可演进系统构建
Golang 工程化架构设计:可维护与可演进系统构建

Go语言工程化架构设计专注于构建高可维护性、可演进的企业级系统。本专题深入探讨Go项目的目录结构设计、模块划分、依赖管理等核心架构原则,涵盖微服务架构、领域驱动设计(DDD)在Go中的实践应用。通过实战案例解析接口抽象、错误处理、配置管理、日志监控等关键工程化技术,帮助开发者掌握构建稳定、可扩展Go应用的最佳实践方法。

23

2026.02.28

Golang 性能分析与运行时机制:构建高性能程序
Golang 性能分析与运行时机制:构建高性能程序

Go语言以其高效的并发模型和优异的性能表现广泛应用于高并发、高性能场景。其运行时机制包括 Goroutine 调度、内存管理、垃圾回收等方面,深入理解这些机制有助于编写更高效稳定的程序。本专题将系统讲解 Golang 的性能分析工具使用、常见性能瓶颈定位及优化策略,并结合实际案例剖析 Go 程序的运行时行为,帮助开发者掌握构建高性能应用的关键技能。

27

2026.02.28

Golang 并发编程模型与工程实践:从语言特性到系统性能
Golang 并发编程模型与工程实践:从语言特性到系统性能

本专题系统讲解 Golang 并发编程模型,从语言级特性出发,深入理解 goroutine、channel 与调度机制。结合工程实践,分析并发设计模式、性能瓶颈与资源控制策略,帮助将并发能力有效转化为稳定、可扩展的系统性能优势。

16

2026.02.27

Golang 高级特性与最佳实践:提升代码艺术
Golang 高级特性与最佳实践:提升代码艺术

本专题深入剖析 Golang 的高级特性与工程级最佳实践,涵盖并发模型、内存管理、接口设计与错误处理策略。通过真实场景与代码对比,引导从“可运行”走向“高质量”,帮助构建高性能、可扩展、易维护的优雅 Go 代码体系。

18

2026.02.27

Golang 测试与调试专题:确保代码可靠性
Golang 测试与调试专题:确保代码可靠性

本专题聚焦 Golang 的测试与调试体系,系统讲解单元测试、表驱动测试、基准测试与覆盖率分析方法,并深入剖析调试工具与常见问题定位思路。通过实践示例,引导建立可验证、可回归的工程习惯,从而持续提升代码可靠性与可维护性。

2

2026.02.27

漫蛙app官网链接入口
漫蛙app官网链接入口

漫蛙App官网提供多条稳定入口,包括 https://manwa.me、https

164

2026.02.27

deepseek在线提问
deepseek在线提问

本合集汇总了DeepSeek在线提问技巧与免登录使用入口,助你快速上手AI对话、写作、分析等功能。阅读专题下面的文章了解更多详细内容。

8

2026.02.27

AO3官网直接进入
AO3官网直接进入

AO3官网最新入口合集,汇总2026年可用官方及镜像链接,助你快速稳定访问Archive of Our Own平台。阅读专题下面的文章了解更多详细内容。

309

2026.02.27

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Excel 教程
Excel 教程

共162课时 | 19.5万人学习

Java 教程
Java 教程

共578课时 | 74.9万人学习

Uniapp从零开始实现新闻资讯应用
Uniapp从零开始实现新闻资讯应用

共64课时 | 6.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号