浅谈Android应用安全防护和逆向分析之apk反编译

作者:handsome黄 时间:2022-07-08 01:15:21 

概述

这里是Mac环境,如果是window环境的同学,在环境搭建和工具上可以选择Window环境的。先看看需要到的工具;

1、apktool:https://ibotpeaches.github.io/Apktool/install/

2、dex2jar:https://github.com/pxb1988/dex2jar

3、jd-gui:http://jd.benow.ca

注意:工具一定要是当前最新版本的,否则很容易出现一些莫名其妙的错误。

先看一下项目的包结构

浅谈Android应用安全防护和逆向分析之apk反编译

然后在简单看MainActivity中的内容。(这里给出该类的内容,只是为了后期和反编译出来的内容做个对比)

浅谈Android应用安全防护和逆向分析之apk反编译

好了,下面开始我们的反编译之路了 。我们一个一个工具来说。

安装apktool

当我们下载好apktool.jar以后,可能有的人会有后缀名,都改为apktool.jar,然后终端输入命令open /usr/local/bin,然后将apktool和apktool.jar移到/usr/local/bin文件夹下,就OK了,判断apktool是否安装成功,可以通过命令:apktool 来判断

浅谈Android应用安全防护和逆向分析之apk反编译

如果出现红色圈的这一大片,则说明安装成功。

注意:dex2jar和jd-gui不需要安装,直接解压即可。

使用apktool反编译

1、首先使用命令:cd xxx/xxx/xxx (xxx/xxx/xxx代表apk的存放路径)

2、使用命令:apktool d app-debug.apk (app-debug.apk是你的apk名称)

浅谈Android应用安全防护和逆向分析之apk反编译

到这一步以后,会在你存放apk包的路径下生成一个文件夹

浅谈Android应用安全防护和逆向分析之apk反编译

进入文件夹,你会发现,有我们项目的资源文件和xml文件。那么代码呢???没有看到,别急

在执行一个命令:apktool b xxx (xxx代表刚刚我们生成的文件夹的名称)

执行完上面的命令以后,可以看到文件夹中多了一个build文件夹,而这个build文件夹下的classes.dex文件就是我们最终需要的。

浅谈Android应用安全防护和逆向分析之apk反编译

好了,apktool的工作到这里就结束了,下面我们需要另外两个工具dex2jar,jd-gui。

dex2jar

1、使用命令:cd xxx/xxx/xxx  (xxx/xxx/xxx代表dex2jar的路径)

2、使用命令:sh d2j-dex2jar.sh -f xxx/xxx/xxx  (xxx/xxx/xxx代表classes.dex的路径)

浅谈Android应用安全防护和逆向分析之apk反编译

然后在dex2jar文件夹下会生成classes-dex2jar.jar的架包,这个包,就是我们的Java文件代码。

那么怎么看代码呢?jd-gui上场了。打开jd-gui,直接将classes-dex2jar.jar拖进来,就可以可以看到了。

浅谈Android应用安全防护和逆向分析之apk反编译

对比一下最前面的MainActivity代码全部被反编译出来了。

很多人就会说,你这个项目是demo,并没有做混淆,所以可以反编译出来??但是,需要知道的是,如果做了混淆,一样可以反编译出来,只不过说里面的很多类名,方法名,变量名等等都是以a,b,c这样的形式存在,但是这种并不影响能过看出你的代码逻辑,只是给阅读增加了一丝的难度而已。所以,项目做混淆,只是最基础的一种方式,还有很多很多我们需要考虑的。

来源:https://www.cnblogs.com/huangjialin/p/10039704.html

标签:Android,反编译
0
投稿

猜你喜欢

  • Spring Cloud Config对特殊字符加密处理的方法详解

    2021-11-22 15:16:48
  • anroid开发教程之spinner下拉列表的使用示例

    2023-10-05 05:42:22
  • java jdbc连接和使用详细介绍

    2023-01-13 18:12:52
  • Java实现快速排序过程分析

    2023-07-27 18:40:57
  • 使用FeignClient设置动态Url

    2022-07-04 05:55:39
  • 手把手教你SpringBoot过滤器N种注册方式

    2023-08-08 08:28:45
  • 举例讲解Java编程中this关键字与super关键字的用法

    2023-03-09 01:46:02
  • C#使用ICSharpCode.SharpZipLib.dll进行文件的压缩与解压功能

    2022-01-09 15:30:45
  • 解析Android游戏中获取电话状态进行游戏暂停或继续的解决方法

    2023-09-09 00:31:09
  • Java案例使用比较排序器comparator实现成绩排序

    2023-10-16 01:37:24
  • SpringBoot线程池和Java线程池的使用和实现原理解析

    2022-06-27 07:22:30
  • Java实现将PDF转为PDF/A

    2023-03-16 00:54:22
  • C# for循环的经典案例集锦

    2022-11-18 20:01:53
  • Mybatis-Plus 全局配置无效的解决方案

    2022-06-29 12:46:02
  • spring-boot-maven-plugin 配置有啥用

    2022-08-27 19:09:25
  • Android 安全加密:Https编程详解

    2023-11-08 06:58:51
  • kotlin gson反序列化默认值失效深入讲解

    2022-04-07 15:28:59
  • 浅谈spring的重试机制无效@Retryable@EnableRetry

    2021-12-12 10:42:57
  • Android通过实现GridView的横向滚动实现仿京东秒杀效果

    2023-06-08 22:53:46
  • 老生常谈Java异常处理和设计(推荐)

    2023-08-21 02:26:06
  • asp之家 软件编程 m.aspxhome.com