一、前言

最近想爆破一个app,没有加壳,简单的使用Jadx打开查看源码,结果把我逗乐了,代码中既然都是中文,而且是一些比较奇葩的中文字句,如图所示:

瞬间感觉懵逼了,这app真会玩,我们知道因为Java语言是支持双字符的,所以可以将包名,类名,变量名,方法名定义成中文,或者其他国家的语言都可以的。所以本身这种做法是不会运行报错的,比如下面我们新建一个Java工程看一下效果:

运行是没有任何问题的。看到这里的时候觉得很好奇,所以就先没去看他的源码了,而是想着怎么实现这种混淆的功能。下面就来介绍一下这种高度混淆的原理:

二、分析混淆工具源码

首先我们知道每个正式app发布之前都会进行代码混淆,而关于混淆的知识点,可以自行搜索了解了,混淆有很多好处,优化代码,增加安全性等,而混淆一般是采用了proguard.jar工具,这个工具混淆之后的代码默认都是26个大小写字母,所以如果想把代码混淆成中文,那么就需要对这个工具下手。幸好这个工具是开源的,所以从网上搜他的源码下载下来,导入工程即可:

找到入口类Proguard,这里为了演示方便,咋们就直接模拟一个命令直接运行看效果,关于命令后面会说到。这里有一个解析命令的类功能:

这里可以看到混淆规则,也就是我们一般用到的proguard.cfg文件,后面会介绍这个文件内容。那么下面我们就不要在深入代码了,直接找到混淆代码的地方即可,可以通过包名中有obfuscate快速找到这个类:SimpleNameFactory

进入这个类查看内容,有一个生成混淆名的方法:

这里CHARACTER_COUNT=26,也就是字母的个数,再看看charAt方法:

这个方法也很简单,就是取52个字符中的顺序一个。所以newName方法的实现逻辑就是:从52个字符中依次取出字符,如果发现这个字符被使用过了,就取下一个,如果单个字符被用完了,就双字符,依次类推多字符等。所以这里还有一个全局的名称字符缓存池:

用来记录这个字符名称有没有被用过,所以通读了一遍代码,没什么难度,而且这个类还有一个测试方法:

直接运行看看效果:

看到了,会生成不同字符名。

三、修改混淆工具

所以知道了上面的代码逻辑之后,下面我们就可以动手来修改这个类,让他生成中文词语,首先去网上搜一下中文字符的范围,然后在定义一个生成五个字的词语方法即可:

这里可以看到韩文,日文的范围,所以我们不仅可以修改成中文,也可以修改成其他国家的语言,然后定义一个随机五字词语的方法:

生成不规则词句之后,修改newName方法实现:

然后我们在运行一下测试方法:

看结果,我们已经实现成功了。到这里其实我们已经将proguard.jar改造成功了,下面为了演示修改的结果,需要用一个apk做测试,我们随便弄一个apk,因为这里不想给一个工程编写脚本,然后将系统的proguard.jar工具替换成我们修改之后的proguard.jar。所以就直接拿到apk中的classes.dex文件,然后将其转化成classes.jar文件。然后直接放到这个proguard工程中运行即可。

四、运行混淆工具

下面简单看一下运行proguard工程需要准备哪些东西:

因为我们操作的是Android应用需要引用到系统api所以需要导入android.jar,然后就是混淆规则文件proguard.pro:

这里要说明就是引用第三方的jar,和输入输出jar文件路径设置,其他的设置都是正常的混淆规则,不多解释了,下面就直接用上面得到app中的dex文件转化之后的jar文件作为案例,运行proguard工程:

看到混淆之后的jar文件,和混淆的map文件了。接下来咋们在将混淆之后的jar文件打包回去,首先用dx命令将jar文件变成classes.dex文件,然后直接替换apk中原始的dex文件,在重新签名即可。最后咋们在用Jadx工具打开这个apk查看内容:

看到了,我们成功了将原来的apk混淆成中文语言的代码了,而对于这种混淆也是可以增加阅读难度的。当然这个apk安装运行也是不会报错的,这里就不演示了。

五、技术总结

到这里我们就成功的实现了,如何将一个apk混淆成功中文语言代码的功能了。下面还需要总结几点:

1、本文主要是利用proguard是开源项目,修改他的混淆代码达到我们的目的。

2、本文是将其代码改成中文语言的,而从我们分析的过程中可以知道,可以变成其他国家的语言都是可以的。

3、本文为了方便就随机生成一个五字词语,而如果你想生成一些有规则有个性的词语,可以自定义一个词语库,然后随机取即可。

4、本文为了演示方便,就没有正式的编写一个编译脚本,而是通过简单粗暴的方式混淆jar方式进行操作。

5、这种高度混淆对于反编译之后代码阅读难度有一定的增强,因为看惯了英文,一下子看中文反而不习惯了。

项目下载地址:因为proguard工具是开源的,所以我没必要上传了,大家可以自己搜索项目即可。

六、总结

本文就简单的介绍了Android中的一种高度混淆技巧,让我们的代码变得更难读懂,增加安全性。主要修改了混淆工具来实现这一功能。如果你看懂了文章,就可以自己定义属于你们项目的个性化混淆策略。

android黑科技系列——Apk混淆成中文语言代码的更多相关文章

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

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

  2. android黑科技系列——Apk的加固(加壳)原理解析和实现

    一.前言 今天又到周末了,憋了好久又要出博客了,今天来介绍一下Android中的如何对Apk进行加固的原理.现阶段.我们知道Android中的反编译工作越来越让人操作熟练,我们辛苦的开发出一个apk, ...

  3. android黑科技系列——手机端破解神器MT的内购VIP功能破解教程

    一.前言 在破解app的时候,我们现在几乎都是在PC端进行操作,但是之前bin神的MT管理器,可以在手机端直接破解,不过也有很大的局限性,但是对于一些简单的app破解没问题的.这个工具其实原理也很简单 ...

  4. android黑科技系列——实现静态的默认安装和卸载应用

    一.访问隐藏的API方式进行静态的默认安装和卸载 1.系统安装程序 android自带了一个安装程序—/system/app/PackageInstaller.apk.大多数情况下,我们手机上安装应用 ...

  5. android黑科技系列——静态分析技术来破解Apk

    一.前言 从这篇文章开始我们开始我们的破解之路,之前的几篇文章中我们是如何讲解怎么加固我们的Apk,防止被别人破解,那么现在我们要开始破解我们的Apk,针对于之前的加密方式采用相对应的破解技术,And ...

  6. android黑科技系列——自动注入代码工具icodetools

    一.前言 在前面已经介绍完了 自动给apk中注入日志代码工具icodetools原理了,在那里我们曾经说过其实离真正的可使用价值有点距离,本篇就对这个工具进行一些优化,让其真正意义上开始能工作量产.当 ...

  7. android黑科技系列——Xposed框架实现拦截系统方法详解

    一.前言 关于Xposed框架相信大家应该不陌生了,他是Android中Hook技术的一个著名的框架,还有一个框架是CydiaSubstrate,但是这个框架是收费的,而且个人觉得不怎么好用,而Xpo ...

  8. android黑科技系列——应用市场省流量更新(增量升级)原理解析

    一.前言 最近在看热修复相关的框架,之前我们已经看过了阿里的Dexposed和AndFix这两个框架了,不了解的同学可以点击这里进行查看:Dexposed框架原理解析 和 AndFix热修复框架原理解 ...

  9. android黑科技系列——爆破一款应用的签名验证问题

    一.前言 在之前的文章中说过Android中的安全和破解是相辅相成的,为了防止被破解,很多应用做了一些防护策略,但是防护策略也是分等级,一般简单的策略就是混淆代码和签名校验,而对于签名校验很多应用都是 ...

随机推荐

  1. vue-router的基本使用和配置

    1.在main.js文件中引入相关模块以及组件及实例化vue对象配置选项路由及渲染App组件 默认设置如下: import Vue from 'vue' import App from './App' ...

  2. Miller Rabbin素数测试

    步骤 ①先写快速幂取模函数 ②MR算法开始 (1)传入两个参数一个是底数一个是n也就是幂数,如果n是一个合数那么可以判定,这个数一定不是素数 (2)然后开始寻找一个奇数的n去计算,如果最后满足a^d% ...

  3. sencha touch 2中判断游览器是否包含webkit的方法

    <script type="text/javascript"> if (!Ext.browser.is.WebKit) { alert("The curren ...

  4. Servlet请求参数编码处理(POST & GET)

    小巧,但在中文语境下,还是要注意的. 以下是关键语句,注意转码的先后顺序,这源于GET是HTTP服务器处理,而POST是WEB容器处理: String name = request.getParame ...

  5. EF--model is being created异常

    使用EF的时候出现了下面的异常,我使用了TASK和saveChangeAsync()异步 The context cannot be used while the model is being cre ...

  6. 相克军_Oracle体系_随堂笔记 PPT

    http://www.cnblogs.com/jyzhao/category/581259.html http://download.csdn.net/detail/yzj149286454/8960 ...

  7. AngularJS:实现页面滚动到底自动加载数据的功能

    要实现这个功能,可以通过https://github.com/sroze/ngInfiniteScroll这个第三方控件来实现.步骤如下: 1. 下载ng-infinite-scroll.js程序ht ...

  8. Nginx配置httpsserver

    配置HTTPS主机.必须在server配置块中打开SSL协议,还须要指定服务器端证书和密钥文件的位置: server { listen 443;  #要加密的域名 server_name www.te ...

  9. 飘逸的python - 实现一个极简的优先队列

    一个队列至少满足2个方法,put和get. 借助最小堆来实现. 这里按"值越大优先级越高"的顺序. #coding=utf-8 from heapq import heappush ...

  10. shell EOF注意点

    当sqlplus与shell交互的时候我们这么用 su - oracle -c "sqlplus / as sysdba<<EOF select * from gv($insta ...