代码混淆

ProGuard Introduction

半城伤御伤魂 提交于 2019-11-30 00:46:50
介绍 ProGuard 是一个Java类文件压缩器、优化器、混淆器和预校验器。在压缩步骤会发现并移除无用的类、字段、方法和属性。 在优化步骤会分析和优化Method(方法)的字节码。在混淆步骤会使用短且没有意义的名字来重命名剩余的类、字段和方法。 这些前面的步骤会使代码更小、更高效、更难反向工程。最后的预校验步骤会给这些类添加Java Micro版本需要的预校验信息或为Java 6减少启动时间的预校验信息。 这些步骤每一个都是可选的。例如,ProGuard也可以在一个程序中仅仅用来列出无效代码; 或用于在Java 6中预校验类文件提高效率。 ProGuard 通常读取 input jars (或 wars, ears, zips,或 目录)。然后压缩、优化、混淆和预校验它们。 压缩步骤之后,可以执行多个优化过程。ProGuard把这些处理过的结果生成一个或多个 output jars (或 wars, ears, zips, 或 目录)。 输入可能包含资源文件,他们的名字和内容可以可选地被更新成反射混淆之后的类的名字。 ProGuard 要求input jars中的 library jars (or wars, ears, zips, or directories) 被指明。这些在本质上是你编译代码要用到的库。ProGuard用它们来重构类的依赖,并在必要的时候做适当的处理。

脚本代码混淆-Python篇-pyminifier(1)

痴心易碎 提交于 2019-11-29 17:33:07
前言 最近研究了一下脚本语言的混淆方法,比如 python,javascript 等。脚本语言属于动态语言,代码大多无法直接编译成二进制机器码,发行脚本基本上相当于暴露源码,这对于一些商业应用是无法接受的。因此对脚本代码进行加固,成为很多应用的首选。代码加固的一项措施是代码混淆,增加逆向人员阅读代码逻辑的难度,拖延被破解的时间。 今天讲解一下Python代码的混淆方法,Python代码一般用作web,提供服务接口,但也有一些桌面的应用,这一部分就需要对代码进行混淆保护。以一个开源项目pyminifier (https://github.com/qiyeboy/pyminifier)来说明混淆的技巧方法,这个项目已经有4年没更新,有一些bug,但是依然值得我们学习和入门。 项目结构 框架详情: analyze.py - 用于分析Python代码 compression.py - 使用压缩算法压缩代码 minification.py - 用于简化Python代码 obfuscate.py - 用于混淆Python 代码 token_utils.py - 用于收集Python Token    从项目代码中,可以看到pyminifier的混淆方法是基于Token的,即基于词法分析,假如大家之前做过混淆的话,这应该属于混淆的初级方案,因为这样的混淆并不会修改代码原有的逻辑结构。

Android组件化架构学习笔记——组件化编程之静态变量/资源/混淆/多渠道打包

廉价感情. 提交于 2019-11-29 11:24:06
一.组件化的静态变量: R.java的生成: 各个module会生成aar文件,并且被引用到Application module中,最终合并为apk文件。当各个次级module在Application module中被解压后,在编译时资源R.java会被重新解压到build/generated/source/r/debug(release)/包名/R.java中。 当每个组件中的aar文件汇总到App module中时,也就是编译的初期解析资源阶段,其每个module的R.java释放的同时,会检测到全部的R.java文件,然后通过合并,最后合并成唯一的一份R.java资源。 R2.java及 ButterKnife : ButterKnife 是一个专注于Android View的注入框架,可以大量的减少findViewById和setOnClickListener操作的第三方库。 注解中只能使用常量,如不是常量会提示attribute value must be contant的错误。可以在使用替代方法,原理是将R.java文件复制一份,命名为R2.java。然后给R2.java变量加上final修饰符,在相关的地方直接引用R2资源。 如项目中已经使用 ButterKnife 维护迭代了一段时间,那么使用R2.java的方案适配成本是最低的。

代码混淆proguard技术介绍

早过忘川 提交于 2019-11-28 23:59:09
由于各种反编译工具的泛滥,作为Android程序员在2.3版本以前只能通过手动添加proguard来实现代码混淆 proguard这个工具是一个java代码混淆的工具 在2.3版本的sdk中 我们可以看到在android-sdk-windows/tools/下面多了一个proguard文件夹 google已经把proguard技术放在了android sdk里面 可以通过正常的编译方式也能实现代码混淆了 可以看见新建一个工程里面有default.properties和proguard.cfg 默认的default.properties代码如下 [c-sharp] view plain copy # This file is automatically generated by Android Tools. # Do not modify this file -- YOUR CHANGES WILL BE ERASED! # # This file must be checked in Version Control Systems. # # To customize properties used by the Ant build system use, # "build.properties", and override values to adapt the script to

iOS代码混淆

那年仲夏 提交于 2019-11-28 16:11:50
混淆原理 代码编译阶段将符号(方法名、属性名等)替换成随机生成的字符串 长话短说,直接上步骤。 混淆集成步骤 步骤一、创建shell文件(confuse.sh)并配置相应的运行环境。 在项目根目录下新建一个文件夹 这里取文件夹名称为CodeObfuscation,如下图所示 在上一步的文件下新建一个shell文件(.sh文件) 输入文件名:confuse.sh,点击Create按钮 给.sh文件添加运行环境 添加.sh文件的读取路径$PROJECT_DIR/CodeObfuscation/confuse.sh,如下图 给.sh文件添加运行内容(运行代码) 将下面的代码复制粘贴到confuse.sh文件中 TABLENAME=symbols SYMBOL_DB_FILE="$PROJECT_DIR/CodeObfuscation/symbols" STRING_SYMBOL_FILE="$PROJECT_DIR/CodeObfuscation/func.list" HEAD_FILE="$PROJECT_DIR/CodeObfuscation/codeObfuscation.h" export LC_CTYPE=C #维护数据库方便日后作排重 createTable(){ echo "create table $TABLENAME(src text, des text);" |

安卓应用加固之静态反反汇编技术总结

佐手、 提交于 2019-11-28 11:28:17
0x00 前言 对安卓应用的静态保护增加了逆向时对应用的分析难度,可以从以下多个方面进行: 1.应用代码保护 2.资源保护 3.完整性校验 0x01 应用代码保护 所谓应用代码保护主要是对应用的源码进行保护,主要采用的保护手段是: 软件混淆技术 软件混淆技术从混淆对象上来看,可以分为代码混淆和数据混淆。从混淆时间来分类,又可以分为:1.代码混淆 2.编译期混淆 3.二进制混淆 以下主要从混淆的不同时间来探讨混淆技术 一、代码混淆 二、模板混淆(编译期混淆) 三、AST混淆(编译期混淆) 四、IR混淆(编译期混淆) 五、DEX混淆(编译期混淆) 六、DEX二次混淆(二进制混淆) 0x02 资源保护 对APK的资源文件,包括字符串资源、图片资源、脚本等进行混淆。 待更... 0x03 完整性校验 对APK是否被篡改,是否被反编译过进行校验。 待更... 来源: https://www.cnblogs.com/victor-paladin/p/11406646.html

Android 编程下的代码混淆

谁都会走 提交于 2019-11-27 16:49:31
什么是代码混淆 Java 是一种跨平台的、解释型语言,Java 源代码编译成中间”字节码”存储于 class 文件中。由于跨平台的需要,Java 字节码中包括了很多源代码信息,如变量名、方法名,并且通过这些名称来访问变量和方法,这些符号带有许多语义信息,很容易被反编译成 Java 源代码。为了防止这种现象,我们可以使用 Java 混淆器对 Java 字节码进行混淆。 混淆就是对发布出去的程序进行重新组织和处理,使得处理后的代码与处理前代码完成相同的功能,而混淆后的代码很难被反编译,即使反编译成功也很难得出程序的真正语义。被混淆过的程序代码,仍然遵照原来的档案格式和指令集,执行结果也与混淆前一样,只是混淆器将代码中的所有变量、函数、类的名称变为简短的英文字母代号,在缺乏相应的函数名和程序注释的况下,即使被反编译,也将难以阅读。同时混淆是不可逆的,在混淆的过程中一些不影响正常运行的信息将永久丢失,这些信息的丢失使程序变得更加难以理解。 混淆器的作用不仅仅是保护代码,它也有精简编译后程序大小的作用。由于以上介绍的缩短变量和函数名以及丢失部分信息的原因, 编译后 jar 文件体积大约能减少25% ,这对当前费用较贵的无线网络传输是有一定意义的。 混淆文件 proguard.cfg 参数详解 -optimizationpasses 5 # 指定代码的压缩级别

ARTAG论文笔记

孤人 提交于 2019-11-27 02:57:49
ARTag   ARTag是一个具有2002个标记的平面标记系统,在检测与识别方面改进了ARToolkit的性能,拥有一个更大的库,并且不需要使用图案文件。ARTookit的最大弊病在于它会错误识别出不存在的标记,并且容易混淆任意的两个标记。ARTag中保留了使用带有内部图案的方形边框的范例,但内部图案的处理被数字方法所取代。   分析ARToolkit的特点,可以看出对其功能的贡献最大的是边界仅使用黑色和白色,在标记中仅使用两个极端的反射率可以避免许多图像捕获问题和灰度非线性问题。 这个二元决策在ARTag中扩展,从仅定义边界到定义内部模式。   ARToolkit方形边框对于AR非常有用,因为它有四个突出的角落。 四个点允许完全提取相关标记到相机姿势的6自由度(DOF)势(假设相机焦距已知)。 ARTag旨在包含ARToolkit和Datamatrix的成功元素,并充分利用两者,并为AR制作一个最小但功能强大的系统。 ARTag的主要特征是使用了两个极性的方形边框(白色为黑色或黑色为白色)和6 x 6方形网格划分内部。 整个标记为10 x 10单位,边界厚度为2个单位,内部留下36个单元格以携带信息。 每个单元只有黑色或白色,并带有一位数字数据。 因此,一旦确定了边界,就可以从标记的相机图像中提取36位字。 一、四边形检测   图像中存在许多四边形边框,有的可能属于标记的外边界

Python实现性能自动化测试竟然如此简单

女生的网名这么多〃 提交于 2019-11-26 03:55:11
前言 最近一直在看Python,也很喜欢Python的灵活性;今天主要想说的是iOS的代码混淆,为什么想做代码混淆?为了APP的安全,为了防止别人破壳轻易破解我们代码;还有就是做 马甲包 了,我们知道马甲包的市场需求很大,但是不能花费过多的精力在开发上,毕竟只是个马甲,没必要花费太多的成本! 混淆工具 网上搜了一下,开源免费的混淆都在转载 念茜大姐大 的 sh脚本 的混淆方法,或者在念茜的脚本基础上二次开发,大家去看过就知道念茜的这篇博客是在14年写的,那时我刚做iOS没多久 ,而且那时候中国区审核还没有那么严格,若果你现在还使用那种方法进行混淆,你肯定会收到苹果的 2.3.1 大礼包 ,所以我们还是探索别的混淆方法吧,不要再挖坟了! 我这里主要是通过Python写的混淆工具,具体功能有方法混淆、属性混淆、类名混淆、添加垃圾代码、删除注释、修改资源文件Hash值、 加密字符串 、翻新资源名、 模拟人工混淆 、混淆文件名、混淆文件目录、混淆词库、混淆日志、映射列表、图片压缩、爬虫服务,具体的如下: Python资源共享群:484031800 软件界面 1.下载地址: 链接: pan.baidu.com/s/1esdfDdjO… 密码:2lbr :clap::clap::clap:进群免费拿邀请码:clap::clap::clap:365152048:clap::clap::clap: