代码混淆

android 代码混淆及问题大集锦

醉酒当歌 提交于 2020-04-07 01:45:33
  最近在需要对所开发的项目进行了代码混淆,在android studio中开启代码混淆其实还是挺方便的,不过因为代码混淆产生的问题非常多,特别是对于一些涉及到反射的第三方库经常因为名称的变化导致无法使用。   下面介绍android studio中对android项目进行代码混淆的详细步骤:   (1)代码混淆开启   想要开启代码混淆功能,只需要在相应的项目中将 build.gradle 的相应设置开启即可。 android{ buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } }    minifyEnable 即为开启的开关,而proguard-rules.pro是设置代码混淆时的相关设置,可以过滤不代码混淆的对象。   (2)代码混淆规则设置    程序中每个module下面都有对应的 proguard-rules.pro 文件,设置其规则可以过滤掉一些类、方法、注解和属性名的混淆,下面是ProGuard的手册页面,详细的规则可以在其中了解。https://stuff.mit.edu/afs/sipb/project/android/sdk/android-sdk

Android混淆打包

夙愿已清 提交于 2020-04-03 05:48:27
在这之前,看了下proguard官网介绍,并搜了下相关资料。 ProGuard简介 ProGuard是一个SourceForge上非常知名的开源项目。官网网址是:http://proguard.sourceforge.net/。 Java的字节码一般是非常容易反编译的。为了很好的保护Java源代码,我们往往会对编译好的class文件进行混淆处理。ProGuard的主要作用就是混淆。当然它还能对字节码进行缩减体积、优化等,但那些对于我们来说都算是次要的功能。 引用ProGuard官方的一段话来介绍就是: ProGuard is a free Java class file shrinker, optimizer, obfuscator, and preverifier. It detects and removes unused classes, fields, methods, and attributes. It optimizes bytecode and removes unused instructions. It renames the remaining classes, fields, and methods using short meaningless names. Finally, it preverifies the processed code for

从一个新手容易混淆的例子简单分析C语言中函数调用过程

怎甘沉沦 提交于 2020-03-08 03:12:34
某天,王尼玛写了段C程序: 1 #include <stdio.h> 2 3 void input() 4 { 5 int i; 6 int array[20]; 7 for(i = 0; i < 20; i++) 8 { 9 array[i] = i; 10 } 11 } 12 13 void output() 14 { 15 int i; 16 int array[20]; 17 for(i = 0; i < 20; i++) 18 { 19 printf("%d\n", array[i]); 20 } 21 } 22 23 int main() 24 { 25 input(); 26 output(); 27 while(1){} 28 return 0; 29 }   这段代码的目的很简单,在input函数中定义了array[20]并赋值,在output函数中输出,运行结果如下:   Nice Work!   But…… 在input()后来一发printf()呢????? 1 int main() 2 { 3 input(); 4 printf("any string"); 5 output(); 6 while(1){} 7 return 0; 8 }   其实,只要学过一段时间的C语言的童鞋就会发现,刚刚开始那俩函数里定义的array[20]就出问题了

PHP代码混淆和加速

自闭症网瘾萝莉.ら 提交于 2020-02-28 10:51:37
背景 因为项目的php代码需要保密处理,stackoverflow上找到两个选择 Zend Guard付费 Thicket Obfuscator for PHP PHPprotect 免费但是对代码混淆力度小,只是修改了变量的名称,基本满足需求 推荐使用 opcache 方式 1. 安装Opcache扩展 php7默认是安装 opcache 的,我的配置为什么没有启用是因为没有加 zend_extension=opcache.so 创建opcode缓存目录: mkdir -m 777 /php_opcache/opcache_file_cache php.ini 配置文件和其他地方有点不同 zend_extension=opcache.so opcache.memory_consumption=128 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=4000 ;opcache不保存注释,减少opcode大小 opcache.save_comments=0 ;关闭PHP文件时间戳验证 opcache.validate_timestamps=Off ;每60秒验证php文件时间戳是否更新 ;opcache.revalidate_freq=60 opcache.fast_shutdown=1 ;注意

android 混淆配置

╄→尐↘猪︶ㄣ 提交于 2020-02-28 06:34:34
proguard 原理 Java代码编译成二进制class 文件,这个class 文件也可以反编译成源代码 ,除了注释外,原来的code 基本都可以看到。为了防止重要code 被泄露,我们往往需要混淆(Obfuscation code , 也就是把方法,字段,包和类这些java 元素的名称改成无意义的名称,这样代码结构没有变化,还可以运行,但是想弄懂代码的架构却很难。 proguard 就是这样的混淆工具,它可以分析一组class 的结构,根据用户的配置,然后把这些class 文件的可以混淆java 元素名混淆掉。在分析class 的同时,他还有其他两个功能,删除无效代码(Shrinking 收缩),和代码进行优化 (Optimization Options)。 缺省情况下,proguard 会混淆所有代码,但是下面几种情况是不能改变java 元素的名称,否则就会这样就会导致程序出错。 一, 我们用到反射的地方。 二, 我们代码依赖于系统的接口,比如被系统代码调用的回调方法,这种情况最复杂。 三, 是我们的java 元素名称是在配置文件中配置好的。 所以使用proguard时,我们需要有个配置文件告诉proguard 那些java 元素是不能混淆的。 proguard 配置 最常用的配置选项 -dontwarn 缺省proguard 会检查每一个引用是否正确

pb反编译之pbdviewer

你离开我真会死。 提交于 2020-02-26 14:45:10
一个新的工具,我记得之前还有个国外的pbspy也是做成半成品就收工了。 这个产品也是一个半成品,据测试目前能显示部分代码。但是半途停工了。基本上是另一个版本的depb。 我认为研究反编译是非常耗费时间的。但是更耗费时间的是对一种产品的持续改进,而不是让它停止在demo 0.01 改进者说,pbdviewer已经超越了depb和pbkiller这两款免费的反编译工具,接近pbdecompiler和shudepb这两款收费的反编译工具。但其实还不是,因为我的工具已经经过十年改进,并且因此还创建了另一个保护pbd的工具叫:pb混淆加密大师。并且经历过商用的用户数万次使用,一些细微bug的消除。还有些人工的修补方式方法等等。 而且还有一个powershield横在pbdviewer前面。powershield的反混淆也不是一朝一夕可以完美的。以至于十年了,我的反powershield算法也仅仅是写了60个函数步骤来逆向移动算式位置,并未能达到理想化的百分百。 可以从这里查看: http://www.powerbuilder.ltd http://www.pbdecompiler.com 来源: CSDN 作者: chengg0769 链接: https://blog.csdn.net/chengg0769/article/details/104515389

代码混淆

你说的曾经没有我的故事 提交于 2020-02-24 07:20:39
混淆原理 代码编译阶段将符号(方法名、属性名等)替换成随机生成的字符串 长话短说,直接上步骤。 混淆集成步骤 步骤一、创建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);" |

代码混淆

落爺英雄遲暮 提交于 2020-02-24 06:25:13
混淆的作用: 【优化】 他可以优化java的字节码,使程序运行更快 【压缩】 减少App大小,在混淆过程中会找出未被使用过的类和类成员并删除它们 【混淆】使我们的java代码中的类、函数、变量名随机变成无意义的代号形如:a, b ,c之类的 混淆配置文件:proguard-rules.pro 混淆规则: -keepattributes {name}  保护给定的属性不被混淆,   如: -keepattributes *Annotation* -dontwarn {name}  不要警告指定库中找不到的引用。混淆在默认情况下会检查每个库的引用是否正确,但是有些第三方库里面会有用不到的类,有些没有正确引用,所以需要对第三方库取消警告 否则会报错,而且有可能混淆时间会很长。   如: -dontwarn org.codehaus.jackson.** -keep {Modifier} {class_specification}  保留指定的类名、类成员不被混淆 -keepclassmembers {modifier} {class_specification}   保留指定的类成员不被混淆 -keepclasseswithmembers {class_specification}   保留指定的类名、类成员不被混淆 -keepnames {class_specification}  

代码混淆

时间秒杀一切 提交于 2020-02-24 06:21:18
# To enable ProGuard in your project, edit project.properties # to define the proguard.config property as described in that file. # # Add project specific ProGuard rules here. # By default, the flags in this file are appended to flags specified # in ${sdk.dir}/tools/proguard/proguard-android.txt # You can edit the include path and order by changing the ProGuard # include property in project.properties. # # For more details, see # http://developer.android.com/guide/developing/tools/proguard.html # Add any project specific keep options here: # If your project uses WebView with JS, uncomment the

android 混淆配置

只谈情不闲聊 提交于 2020-02-24 02:01:42
proguard 原理 Java代码编译成二进制class 文件,这个class 文件也可以反编译成源代码 ,除了注释外,原来的code 基本都可以看到。为了防止重要code 被泄露,我们往往需要混淆(Obfuscation code , 也就是把方法,字段,包和类这些java 元素的名称改成无意义的名称,这样代码结构没有变化,还可以运行,但是想弄懂代码的架构却很难。 proguard 就是这样的混淆工具,它可以分析一组class 的结构,根据用户的配置,然后把这些class 文件的可以混淆java 元素名混淆掉。在分析class 的同时,他还有其他两个功能,删除无效代码(Shrinking 收缩),和代码进行优化 (Optimization Options)。 缺省情况下,proguard 会混淆所有代码,但是下面几种情况是不能改变java 元素的名称,否则就会这样就会导致程序出错。 一, 我们用到反射的地方。 二, 我们代码依赖于系统的接口,比如被系统代码调用的回调方法,这种情况最复杂。 三, 是我们的java 元素名称是在配置文件中配置好的。 所以使用proguard时,我们需要有个配置文件告诉proguard 那些java 元素是不能混淆的。 proguard 配置 最常用的配置选项 -dontwarn 缺省proguard 会检查每一个引用是否正确