代码混淆

AndroidStudio 混淆打包

旧街凉风 提交于 2019-12-17 19:52:23
AndroidStudio中的项目可以用compile的形式引入github上的开源项目,可以引用module,而不一定都要用libs文件夹中添加jar包的形式。在最终realease打包时,混淆的设置是比较重要的,否则会导致生成的包有很多功能不能正常使用。下面列举一个基本的app的build.gradle和混淆文件。并注意,混淆打包后的apk文件大小会比不使用混淆要小。 在app根目录下设置build.gradle和混淆文件,然后把混淆选项写入混淆文件就可以。虽然app项目中可能引用了一些module,但这些module工程可以不定义自己的混淆,我的工程目录结构如下: 其中app是应用主模块,引用剩余的module,被引用module的build.gradle中都使用默认的设置不启用混淆: buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } 在主目录的build.gradle: apply plugin: 'com.android.application' def releaseTime() { return new Date().format("yyyy-MM-dd",

Android Studio gradle配置详解

心不动则不痛 提交于 2019-12-14 19:26:01
= android gradle配置详解 AppExtension类及其属性 可能大部分人看到AppExtension类会感觉到非常的陌生,其实我们在app中的build.gradle中填写配置信息的时候,经常看到它,它是什么呢? 如果你按ctrl+鼠标左键对着android{},点击进去就知道了,其实android{…}表示的就是AppExtension这个类。 如图: 我们再来看看AppExtension继承关系: 除了AppExtension之外还有2个类与之相似,LibraryExtension和TestExtension 如果是module项目作为lib使用,那么lib下的build.gradle中的android对应的是LibraryExtension AppExtension的属性 aaptOptions :aapt是一个可以将资源文件编译成二进制文件的工具。aaptOptions表示aapt工具设置的可选项参数。 adbExecutable:adb从编译sdk时执行 adbOptions :adb的可选项参数 applicationVariants:应用变体列表 ==buildToolsVersion== :构建工具版本(必要的) buildTypes :构建类型(一般是release和debug,还可以自定义) compileOptions :编译可选项参数 =

iOS代码混淆之XHObfuscator工具

假如想象 提交于 2019-12-13 15:36:21
iOS代码混淆之XHObfuscator工具 QQ群:750020052 V1.0版本发布(2019/12/13)     笔者从2015年开始从事iOS开发,经历了市场对iOS开发需求的高点和低点,也经历了苹果本身对审核的宽松和严苛,曾经历了一夜之间十几款App被4.3,也曾收获无数的2.1大礼包.由于笔者所在公司面向B端服务,这种被拒的现象仍在发生…     为了减少这类问题,笔者想到了代码混淆,如果能够将模板代码混淆,让苹果认为是两种代码就可以减少4.3的概率.于是,笔者利用全部的业余时间开发了专门针对iOS项目代码混淆的工具 XHObfuscator .      XHObfuscator 提供了简洁的操作界面: 主页功能介绍: *** 请仔细阅读以下内容 *** 软件内置海量词汇(15W+),用户亦可设置 用户词库 ,在混淆时会先随机选取 用户词库 内容,再随机选取内置词库进行补充; 目前功能 只支持OC版本 ; Swift 相关功能正在开发中 关于忽略路径: 请手动添加想要忽略的文件,文件夹(以英文逗号分隔) 关于三方库: 软件默认会过滤以下三方库及以Pod方式集成的三方库;如果三方库不是以pod集成又不在默认列表中,请手动添加到忽略路径中 AFNetworking,Bugly,JPush,Masonry,MJExtension,MJRefresh

dex 分包变形记

空扰寡人 提交于 2019-12-09 18:52:46
腾讯Bugly特约作者:李金涛 一、背景 就在项目灰度测试前不久,爆出了在 Android 3.0以下手机上安装时出现 INSTALL _ FAILED_DEXOPT,导致安装失败。这一问题意味着项目将不能在 Android 3.0以下的手机上安装使用,对项目的发布有比较大的影响,所以必须尽快解决。 INSTALL _ FAILED_DEXOPT导致无法安装的问题,从根本上来说,可能是两个原因造成的: (1) 单个 dex 文件方法总数65K 的限制。 (2) Dexopt 的 LinearAlloc 限制。 当 Android 系统安装一个应用的时候,有一步是对 Dex 进行优化,这个过程有一个专门的工具来处理,叫 DexOpt。DexOpt 是在第一次加载 Dex 文件的时候执行的。这个过程会生成一个 ODEX 文件,即 Optimised Dex。执行 ODEX 的效率会比直接执行 Dex 文件的效率要高很多。 但是在早期的 Android 系统中,DexOpt 有两个问题。(一):DexOpt 会把每一个类的方法 id 检索起来,存在一个链表结构里面,但是这个链表的长度是用一个 short 类型来保存的,导致了方法 id 的数目不能够超过65536个。当一个项目足够大的时候,显然这个方法数的上限是不够的。(二):Dexopt 使用 LinearAlloc

(十四)Android NDK混淆

一笑奈何 提交于 2019-12-07 15:09:40
1、ollvm下载编译 我的是macbook环境。 参考obfuscator官网: https://github.com/obfuscator-llvm/obfuscator/wiki 执行下面的命令下载并编译: $ git clone -b llvm-4.0 https://github.com/obfuscator-llvm/obfuscator.git $ mkdir build $ cd build $ cmake -DCMAKE_BUILD_TYPE=Release ../obfuscator/ $ make -j7 cmake找不到的话,上cmake.org官网下载,并设置环境变量。 编译成功后,生成的文件主要在build/bin 和 build/lib 这2个文件夹。 2、整合到NDK 网上别人有介绍在NDK目录手动创建llvm之类的新文件夹,拷贝build/bin 和 build/lib2个文件夹,有编译问题,懒得去折腾。 我的做法是: 找到Android SDK目录中的 ../ndk-bundle/toolchains/llvm 文件夹,先备份下llvm文件夹,然后将obfuscator编译好的build/bin 和 build/lib2个文件夹直接拷贝到../llvm/prebuilt/darwin-x86_64/文件夹下,直接覆盖替换。

爬取js加密和混淆的例子

亡梦爱人 提交于 2019-12-06 22:49:35
作业讲解:js逆向 概述 url:https://nyloner.cn/proxy 需求:将这个网页中的代理ip和端口号进行爬取 难点: 动态变化的请求参数 js加密 需要js逆向 分析 爬取的数据是动态加载 并且我们进行了抓包工具的全局搜索,没有查找到结果 意味着:爬取的数据从服务端请求到的是加密的密文数据 页面每10s刷新一次,刷新后发现数据更新,但是浏览器地址栏的url没有变,说明加载出的数据是由ajax请求到的。 动态加载出来的数据是由ajax请求到的,并且请求到的数据为加密数据 定位到ajax数据包,从中可以看到url和动态变化的请求参数和加密的响应数据 将ajax请求到的密文数据捕获 动态地获取动态变化的请求参数 基于抓包工具进行了动态变化请求参数token的全局搜索,定位到了token的源头,就是如下js代码: var token = md5(String(page) + String(num) + String(timestamp)); 对密文数据进行解密 通过解析找到了解密的js函数:decode_str(encode_str) 查找encode_str的实现: js逆向:将js代码转换成python代码。开发环境只能执行python代码 答案 动态参数解析 # 我们抓包看到 token是加密生成 则把它进行加密 var token = md5(String

[转]Android Studio实现代码混淆

こ雲淡風輕ζ 提交于 2019-12-06 16:35:54
1,在build.grandle添加,其中规则写在proguard-rules.pro中,也可以自定义一个文件,将其代替,比如eclipse常用的 proguard-project.txt: buildTypes { release { signingConfig signingConfigs.release minifyEnabled true # 设置是否进行 shrink 等操作(即无用代码压缩),一般设置为 true,使混淆更有效 proguardFiles getDefaultProguardFile(‘proguard-android.txt‘), ‘proguard-rules.pro‘ } } 2,在proguard-rules.pro中加入以下代码,基本可以涵盖所有 : -optimizationpasses 5 # 指定代码的压缩级别 -dontusemixedcaseclassnames # 是否使用大小写混合 -dontpreverify # 混淆时是否做预校验 -verbose # 混淆时是否记录日志 -optimizations !code/simplification/arithmetic,!field/*,!class/merging/* # 混淆时所采用的算法 -keep public class * extends android.app

java如何防止反编译

跟風遠走 提交于 2019-12-06 03:03:06
出处: java如何防止反编译     一些防止java代码被反编译的方法 综述(写在前面的废话)   Java从诞生以来,其基因就是开放精神,也正因此,其可以得到广泛爱好者的支持和奉献,最终很快发展壮大,以至于有今天之风光!但随着java的应用领域越来越广,特别是一些功能要发布到终端用户手中(如Android开发的app),有时候,公司为了商业技术的保密考虑,不希望这里面的一些核心代码能够被人破解(破解之后,甚至可以被简单改改就发布出去,说严重点,就可能会扰乱公司的正常软件的市场行为),这时候就要求这些java代码不能够被反编译。   这里要先说一下反编译的现象。因为java一直秉持着开放共享的理念,所以大家也都知道,我们一般共享一个自己写的jar包时,同时会共享一个对应的source包。但这些依然与反编译没有什么关系,但java的共享理念,不只是建议我们这样做,而且它自己也在底层上“强迫”我们这么做!在java写的.java文件后,使用javac编译成class文件,在编译的过程,不像C/C++或C#那样编译时进行加密或混淆,它是直接对其进行符号化、标记化的编译处理,于是,也产生了一个逆向工程的问题:可以根据class文件反向解析成原来的java文件!这就是反编译的由来。   但很多时候,有些公司出于如上述的原因考虑时,真的不希望自己写的代码被别人反编译

程序性能优化之APK大小优化(六)下篇

馋奶兔 提交于 2019-12-06 02:49:06
阿里P7移动互联网架构师进阶视频(每日更新中)免费学习请点击: https://space.bilibili.com/474380680 本篇文章将继续从微信资源混淆AndResGuard原理来介绍APK大小优化: 微信的AndResGuard工具是用于Android资源的混淆,作用有两点:一是通过混淆资源ID长度同时利用7z深度压缩,减小了apk包大小;二是混淆后在安全性方面有一点提升,提高了逆向破解难度。本文从源码角度,来探寻AndResGuard实现原理。 阅读本文需要前提知识:掌握Android应用程序打包编译过程,尤其是对资源的编译和打包过程;熟悉resource.arsc文件格式。 推荐罗升阳文章: http://blog.csdn.net/luoshengyang/article/details/8744683 微信资源混淆工具源码地址: https://github.com/shwenzhang/AndResGuard 附上来自网络神图: ​ 0、程序入口CliMain.main() 该函数处理命令行参数、并解析自定义配置文件,混淆工具可以根据配置项进行特定处理,具体参考config.xml内容,针对其中特定内容,我们会在后面提到。然后进入真正混淆的入口函数resourceProgurad() 特别说明一下解析Configuration中关键点

iOS 初探代码混淆(OC)

夙愿已清 提交于 2019-12-05 06:19:40
点击上方“ iOS开发 ”,选择“置顶公众号” 关键时刻,第一时间送达! 前言 自己做iOS开发也有几年的时间了,平时做完项目基本就直接打包上传到Appstore上,然后做上架操作了。但是最近,客户方面提出了代码安全的要求。说是要做代码混淆,这方面的工作之前从来没有接触过。然后就上网查了一下,原来有很多应用程序都做了代码混淆。看来是我固步自封了...... 起因 使用classdump对原程序进行dump,可以dump出所有源程序的函数所有信息:源程序所有函数类型,变量全部泄露。这样的话,让攻击者,也就是黑客们了解了程序结构方便逆向。因为在工程中,我们这些变量或函数命名都是有一定可读性的,例如跟用户名相关的,那一般里面会有 userName,跟密码相关的一般会有passWord,这样定义也是为了我们自己代码可读性更强,我们修改的时候才更加的方便。但是我们相信,这么个定义法,我们只是希望方便我们自己,我们可不希望方便黑客们去破解我们的APP。总结出来就是一句话:“会把你项目中的所有方法和变量都罗列出来”。 开始混淆: 1. 在进行代码混淆之前,我们需要在我们的项目中增加两个文件: confuse.sh & func.list 我们打开我们的终端命令行 先cd到你项目的路径下,然后回车 然后在终端中分别输入 touch confuse.sh 和 func.list 然后回车