吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3775|回复: 16
收起左侧

[Android 原创] Android安全(一)使用proguard或obfuscapk进行代码混淆

  [复制链接]
Rytter 发表于 2023-10-6 17:29
本帖最后由 Rytter 于 2023-10-7 17:36 编辑

使用ProGuard与obfuscapk进行Android代码混淆

写在前面

android逆向系列的正篇真的再写了,过签名真的写起来不是很简单,而且还遇到了许多奇奇怪怪的问题,所以打算先发一下之前的存货,让我可以继续鸽几天(bushi),这一期就是关于代码混淆的一些东西,希望带给大家一些帮助

Proguard用法

一、ProGuard的功能

ProGuard是一个混淆代码的开源项目,可以直接在android studio中直接使用,不需要额外操作,主要是用来对java代码进行混淆,当然也就可以对android代码进行混淆,ProGuard主要有四个功能:压缩(Shrink),优化(Optimize),混淆(Obfuscate)和预检(Preveirfy)。

压缩: 就是将代码中没用的东西给删掉,比如你留下的没用的但是忘记删除的一些测试代码或者无用的类等。

优化: 对字节码进行优化删除无用的指令。

混淆: 使用cu2yjn3o4asdf(这是我用脸在键盘上摩擦打出来的)等无意义的名称对类,字段和方法进行命名。

预检: 检查处理后代码能否正确执行。

ProGuard的这四个步骤都是可选的,我们可以通过配置脚本来决定执行其中的哪几个步骤。

二、开启ProGuard

如果要开启proguard,我们首先要把下面这个东西给添加到build.gradle中(这个是:app下的build.gradle,初学者可能会搞错),一般来说,Android studio会自动帮我们给添加好了,然后我们把这个minfyEnable改为true。就像下面这样。

buildTypes {
        release {
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

当我们创建Android项目时,Android studio已经帮我们生成了proguard-rules.pro的文件(在Gradle Scripts下面)

4f5f6adb71994b86bef867b04146f85b.png

我们可以在这个文件里面写入一些规则,比如哪些类需要保留,哪些类不保留,然后我们打包apk

我们将apk打包好后放到逆向软件中,然后进行一个逆向

29470e9536eb4b43854e49cd2435b454.png

然后我们发现,原来的变量名全部变成了a,b,c这类没有任何意义的字符,这样别人就很难分析你的代码。

obfuscapk的使用方法

本人使用的系统是Ubuntu 22.04,python版本是3.10

请提前安装好docker和python然后进行相关操作

一、安装

本次安装使用的是docker安装,docker安装是作者推荐的,因为这样是不用继续配置环境的,如果需要源码安装就还需要下载其他软件,并且还要配置许多环境,所以我们最好使用docker去做这些事情。

我们只需要使用命令拉去镜像即可

sudo docker pull claudiugeorgiu/obfuscapk

使用这个命令可以给这个拉取的镜像一个别名

sudo docker tag claudiugeorgiu/obfuscapk obfuscapk

然后我们可以利用docker images命令来查看当前的镜像

804911625d3f44af9275df6a7c08db9a.png

如果出现这个东西,就说明我们已经就安装好了

然后我们运行一下命令开始进行验证

sudo docker run --rm -it obfuscapk --help

20fc0b71d3da4524a88686e5039af5dc.png

如果出现这种情况就说明我们已经安装完成了

二、使用

我们需要将需要混淆的代码放到docker容器中的workdir文件目录中。

其中比较好用的方法是使用docker将我们创建一个文件夹给挂载上去,然后直接使用obfuscapk就可以对我们的一个安装包进行代码的混淆。

  1. 我们首先创建一个文件夹,用来存放我们的apk,这个文件夹尽量的路径简单,而且最好不要有中文路径。

  2. 然后我们打开命令行,以sudo权限运行命令

    sudo docker run --rm -it -u $(id -u):$(id -g) -v "这里是你的文件夹的绝对路径":"/workdir" obfuscapk  -o ClassRename -o MethodRename -o ResStringEncryption -o Rebuild -o NewAlignment -o NewSignature test.apk

    其中:绝对路径是文件夹的绝对路径,不是apk的绝对路径。其中app-release.apk是你需要混淆的apk的名字,记得进行修改,等你运行完后,打开你的文件夹绝对路径,就可以看到这种情况。

58d6c865c94b44779f34f68a6de415cf.png

你会发现多出来一个文件夹,这个文件夹就是我们混淆之后的结果。

里面的apk就是我们混淆之后的apk

  1. 我们可以对这个apk进行一个逆向,查看其混淆的情况

e99aa4fc98934cb9a61399c2e5d7ddb8.png

嗯,要的就是这个效果,要是不说明我都不知道这是我自己开发的软件,毫无意义的变量名,毫无意义的类名,像极了我平时不加注释的代码。

三、一些注意的事项

注意事项1

首先就是混淆选项的顺序问题,我们的

-o Rebuild -o NewAlignment -o NewSignature

这三个选项必须要有而且必须放在最后,其实obfuscapk还提供了其他的一些混淆方法,比如反射等技术,其他的方法一定要放在这三个前面,当然相应的,你混淆的程度越大,那么你的软件运行的就越慢。具体的混淆方法建议直接去查github上的官方文档,文档上讲的很清楚。

注意事项2

这个主要的反编译的注意事项,如果要使用jd-gui软件进行逆向的话,请使用oracle官网的jdk,不要使用openjdk,不然会导致jd-gui无法运行。使用jd-gui之前记得先使用dex-tool对apk进行处理得到jar包,然后再使用jd-gui进行反编译。

四、结尾

欢迎访问本人博客:www.xuanworld.top

一起学习一同进步


免费评分

参与人数 7吾爱币 +14 热心值 +7 收起 理由
youxiaxy + 1 + 1 热心回复!
debug_cat + 2 + 1 谢谢@Thanks!
抱薪风雪雾 + 1 + 1 谢谢@Thanks!
正己 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
Chenda1 + 1 + 1 我很赞同!
21MyCode + 1 + 1 用心讨论,共获提升!
allspark + 1 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| Rytter 发表于 2023-10-9 17:06
huashengyue 发表于 2023-10-9 16:46
小白完全看不懂。这得需要怎样的专业知识?怎样的软硬件配置?

你好,代码混淆就是为了防止别人逆向剽窃你的代码,如果是proguard的话学习一下android开发就可以了解了,obfuscapk的话要求比较高,需要你了解linux,docker这些东西才可以基本搞明白,硬件配置只需要电脑就够了,软件的话proguard需要android studio,也就是android开发工具,obfuscapk需要linux系统和docker软件,最后祝你学习顺利,生活愉快!
RXG 发表于 2023-10-6 21:19
youxiaxy 发表于 2023-10-6 21:33
 楼主| Rytter 发表于 2023-10-6 22:08
youxiaxy 发表于 2023-10-6 21:33
很好。android 开发确实很有用。

谢谢支持!!!!
yrp1226 发表于 2023-10-6 23:35
正好要用,感谢
lianfeng520 发表于 2023-10-7 08:30
感谢分享...
Useropen 发表于 2023-10-7 09:29
刚好在弄这一块
zhangsanABB 发表于 2023-10-7 16:18
学习学习!
Ethan19 发表于 2023-10-7 16:28
Proguard的用法第一段介绍里有个地方写错了吧,“主要是用来对java代码进行混淆,当然也就可以对java代码进行混淆” ,后面的这个java应该是android吧
 楼主| Rytter 发表于 2023-10-7 17:35
Ethan19 发表于 2023-10-7 16:28
Proguard的用法第一段介绍里有个地方写错了吧,“主要是用来对java代码进行混淆,当然也就可以对java代码进 ...

还真是,感谢提醒
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 14:07

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表