热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Android应用安全防护和逆向分析——apk混淆成其他语言代码

现在很多人对于app的安全是越来越重视了,尤其是金融相关的行业,对于app的防范可是下足了功夫。各种加固,各种加密算法,层出不穷。我个人觉得,在安全技术这块,没有绝对安全的。也许今天这个技术起到了防范

现在很多人对于app的安全是越来越重视了,尤其是金融相关的行业,对于app的防范可是下足了功夫。各种加固,各种加密算法,层出不穷。我个人觉得,在安全技术这块,没有绝对安全的。也许今天这个技术起到了防范作用,但是也许一段时间后,就有人把这个技术给破解了。所以说如果我们可以给对方破解我们的app增加难度,那也是起到了一个很大的防护功能了。

我们每个app在上线的时候,都会进行代码混淆。将一些类名,包名,方法名等等混淆成大小写字母的形式,即使对方反编译出我们的app,如果进行了混淆,那些对方看到的代码将会是这个样子的,如何反编译?可以看看这篇文章:https://www.cnblogs.com/huangjialin/p/10039704.html

这样的代码读取的难度就大大的增加了。由于英文字符是全世界通用,在加上目前市场上大部分的app都是这样混淆的,所以说在反编译后都去代码,基本上都有一定的心得了,所以说难度相比于以前大大的减弱了。那么能不能混淆成其他语言呢?

我们知道Java语言是支持双字符的,所以可以将包名,类名,变量名,方法名定义成中文,或者其他国家的语言都可以的。也就是说我们可以将包名,类名,方法名命名为其他语言,比如中文,英文,法文等等。

 1 package com.hjl.proguardchinese;
 2 
 3 import android.support.v7.app.AppCompatActivity;
 4 import android.os.Bundle;
 5 import android.util.Log;
 6 
 7 public class 测试 extends AppCompatActivity {
 8     String 黄家磷 = "我叫黄家磷";
 9 
10     @Override
11     protected void onCreate(Bundle savedInstanceState) {
12         super.onCreate(savedInstanceState);
13         setContentView(R.layout.activity_main);
14         Log.d("huangjialin","--------->" + 黄家磷);
15     }
16 }

结果:

1 2019-02-22 14:31:44.813 18913-18913/? D/huangjialin: --------->我叫黄家磷

言归正传,我们继续说混淆,要想了解混淆的原理,那得看源码。而混淆架包proguard.jar又是开源的。

项目地址:https://sourceforge.net/projects/proguard/需要FQ。将项目导入,运行,当然还需要其他一些资源包,大家自行下载。

具体的可以参考这篇文章:https://blog.csdn.net/jiangwei0910410003/article/details/61618945

 

当然,上面那种修改proguard源码来实现混淆成其他语言,也是可以实现的,不过这里,说一种更加简单的方式。

在项目目录下也就是和proguard-rules.pro同目录下新建一个txt文件

然后在该文件夹中加入对应的语言,如果想混淆成中文,你就加中文,如果你想混淆成其他语言你就加其他语言。

然后在proguard-rules.pro文件中加入下面三行代码,完成

1 -obfuscationdictionary proguard_huangjialin.txt
2 -classobfuscationdictionary proguard_huangjialin.txt
3 -packageobfuscationdictionary proguard_huangjialin.txt

注意,如果文件中有-optimizations开头的,请把该行注释掉,到这里就完成了。我这里弄了藏文,反正我也看不懂,看看效果

 

看看中文的效果

 

 


推荐阅读
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
author-avatar
冷月荐向_878
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有