代码混淆

Android混淆打包

送分小仙女□ 提交于 2020-02-22 13:37:44
一、为什么要混淆 为了避免apk在发布后被用户通过反编译拿到源代码和资源文件,然后修改资源和代码之后就变成一个新的apk。而经过混淆后的APK,即使被反编译,也难以阅读,注意混淆不是让apk不能阅读,而是加大阅读的难度,为了避免劳动成果被窃取,也避免出现安全漏洞和隐患,所以在apk发布之前一定要进行混淆。 二、混淆的原理 Java是一种跨平台、解释型语言,Java源代码编译成的class文件中有大量包含语义的变量名、方法名的信息,很容易被反编译为Java源代码。为了防止这种现象,我们可以对Java字节码进行混淆。混淆不仅能将代码中的类名、字段、方法名变为无意义的名称,保护代码,也由于移除无用的类、方法,并使用简短名称对类、字段、方法进行重命名缩小了程序的大小。 ProGuard由shrink、optimize、obfuscate和preverify四个步骤组成,每个步骤都是可选的,需要哪些步骤都可以在脚本中配置。参见ProGuard官方介绍。   压缩(Shrink):默认开启,侦测并移除代码中无用的类、字段、方法和特性,减少应用体积,并且会在优化动作执行之后再次执行(因为优化后可能会再次暴露一些未使用的类和成员)。     -dontshrink 关闭混淆   优化(Optimize):默认开启,分析和优化字节码,让应用运行的更快。     -dontoptimize 关闭优化

ProGuard代码混淆技术详解

本小妞迷上赌 提交于 2020-02-22 13:32:23
前言 受《APP研发录》启发,里面讲到一名Android程序员,在工作一段时间后,会感觉到迷茫,想进阶的话接下去是看Android系统源码呢,还是每天继续做应用,毕竟每天都是画UI和利用MobileAPI处理Json还是蛮无聊的,做着重复的事情,没有技术的上提升空间的。所以,根据里面提到的Android应用开发人员所需要精通的20个技术点,写篇文章进行总结,一方面是梳理下基础知识和巩固知识,另一方面也是弥补自我不足之处。 那么,今天就来讲讲ProGuard代码混淆的相关技术知识点。 内容目录 ProGuard简介 ProGuard工作原理 如何编写一个ProGuard文件 其他注意事项 小结 ProGuard简介 因为Java代码是非常容易反编码的,况且Android开发的应用程序是用Java代码写的,为了很好的保护Java源代码,我们需要对编译好后的class文件进行混淆。 ProGuard是一个混淆代码的开源项目,它的主要作用是混淆代码,殊不知ProGuard还包括以下4个功能。 压缩(Shrink):检测并移除代码中无用的类、字段、方法和特性(Attribute)。 优化(Optimize):对字节码进行优化,移除无用的指令。 混淆(Obfuscate):使用a,b,c,d这样简短而无意义的名称,对类、字段和方法进行重命名。 预检(Preveirfy)

ProGuard详解

◇◆丶佛笑我妖孽 提交于 2020-02-22 13:29:59
ProGuard工作原理简介   ProGuard能够对Java类中的代码进行压缩(Shrink),优化(Optimize),混淆(Obfuscate),预检(Preveirfy)。   1. 压缩(Shrink):在压缩处理这一步中,用于检测和删除没有使用的类,字段,方法和属性。   2. 优化(Optimize):在优化处理这一步中,对字节码进行优化,并且移除无用指令。   3. 混淆(Obfuscate):在混淆处理这一步中,使用a,b,c等无意义的名称,对类,字段和方法进行重命名。   4. 预检(Preveirfy):在预检这一步中,主要是在Java平台上对处理后的代码进行预检。   对于ProGuard执行流程图如下图所示。      对于ProGuard的原理更详细的介绍可以参考 Proguard手册 ,在这里就不在进行更详细的介绍。 ProGuard使用   ProGuard已集成到Android构建系统中,所以我们不用手动调用这个工具。我们可以选择在只发布模式下构建系统的时候再去运行ProGuard。   在AndroidStudio中我们需要将Proguard添加到gradle.build文件的构建类型当中。不过在我们创建一个Android工程的时候,系统已经自动为我们添加到了gradle.build中。 buildTypes { release {

JS反混淆——构造可知DeviceToken、nouce与token

两盒软妹~` 提交于 2020-02-10 01:46:49
清空所有cookies后打开任意一本书的详情页,打开控制台中的Network。如下图所示,浏览器发出的第一个XHR请求为 /bind ,其中DeviceToken,nonce,Token均为POST中提交的数据。 找到访问网页的请求,如下图所示,返回头中没有出现set-cookie字段,可以判断DeviceToken,nonce,Token均为js生成的。 找到发送 /bind/ 请求的Initiator,发现只与 vendor.*.js 与 app.*.js 有关,且出现了 webpackJsonp 、 computed 、 updateRoute 等字段,猜测该网站是使用vue-cli构建的。 下载并解码 vendor.*.js 与 app.*.js ,在 app.*.js 中搜索 /bind ,找到相关代码。 该段函数流程大致为发送 /bind 请求至后端,如果返回的结果中 Success 字段为true,则将数据中的 DeviceToken , DeviceKey 放到cookie中。而发送的 DeviceToken 由 newGuid() 函数生成。 找到该段函数的函数名为 registerApp ,搜索调用。 找到调用 registerApp 的代码,根据上文 watch 与 methods 可以判断出这是一个vue的组件,监控到路由变化则调用 registerApp

ASP.NET Core搭建多层网站架构【15-扩展之使用Obfuscar混淆加密保护代码】

帅比萌擦擦* 提交于 2020-02-08 20:53:26
2020/02/03, ASP.NET Core 3.1, VS2019, Obfuscar 2.2.25 摘要:基于ASP.NET Core 3.1 WebApi搭建后端多层网站架构【15-扩展之使用Obfuscar混淆加密保护代码】 使用Obfuscar混淆加密保护代码,防止他人使用ILSpy等工具反编译查看到源码 文章目录 此分支项目代码 本章节介绍了使用Obfuscar混淆加密保护代码,防止他人使用ILSpy等工具反编译查看到源码,可以一定程度上防护自己的代码 Obfuscar是开源免费的混淆加密工具,支持.NET Framework和.NET Core应用程序, 官方网站 、 github项目地址 、 官方文档 使用 添加包引用 向 MS.WebApi 应用程序添加包引用: <ItemGroup> <PackageReference Include="Obfuscar" Version="2.2.25"> </ItemGroup> 添加混淆配置文件 向 MS.WebApi 应用程序添加xml配置文件,取名为obfuscar.xml: 右击该xml文件属性,选择 始终复制 到输出目录: 编辑obfuscar.xml配置文件: <?xml version='1.0'?> <Obfuscator> <Var name="InPath" value="." /> <Var

文本混淆反爬 - CSS偏移反爬虫

限于喜欢 提交于 2020-01-29 00:37:24
在浏览器中看到的数字,经由CSS选择器换位HTML中代码之后呈现出来的数字。 先拿到第一级的 b 标签所有值,构建原始价格列表 循环剩余所有b标签,拿到 位置值 和 替换价格 组成字典,存入新构建的一个替换价格列表 根据替换价格列表中的 位置值的价格 和原始价格列表中的价格做替换, 输出原始价格列表,得到真实价格 import requests from scrapy import Selector import re url = 'http://www.porters.vip/confusion/flight.html' response = requests . get ( url ) html = Selector ( text = response . text ) ems = html . xpath ( '//em[@class="rel"]' ) . extract ( ) #每个em标签在循环 for em in ems : html_em_element = Selector ( text = em ) html_bs = html_em_element . xpath ( '//b' ) . extract ( ) b_first = html_bs . pop ( 0 ) html_b_first = Selector ( text = b_first )

iOS代码混淆

我只是一个虾纸丫 提交于 2020-01-27 14:02:38
目前公司产品线中存在大量功能类似的APP,按照模块化方式开发项目,核心模块业务代码是复用的,使用同一个开发者账号下iOS上架流程中有些APP在苹果机审过程中惨遭被拒的下场,通过更改部分页面UI效果也无济于事,于是采用代码混淆的方式也就是马甲包方案去绕过机审; 功能分析 二进制不同,图标,包名,工程名,代码,静态资源等的修改。 差异化UI风格,产品功能,页面布局等的修改 实现流程 核心模块类名修改 核心方法名修改 加入垃圾代码 替换png等静态资源MD5 info.plist文件添加垃圾字段 类名修改 遍历查找需要替换的核心模块目录 (主工程\Pods目录) 找到所有需要替换的类名(项目专用前缀),将其存放到数组中 遍历查找整个工程的所有目录,查找所有.h、.m、.xib、.string文件,逐行扫描文件,找到需要替换的类名关键字替换成别的名字前缀 如发现.h、.m、.xib、.string文件的文件名包含需要替换的类名,替换之(xcodeproj工程需要重新引入文件,通过脚本动态引入) 遇到有"+“号的分类文件,筛选出”+"号前面的类名然后替换之 #遍历查找所有.h、.m、.xib、.strings文件,逐行扫描文件,找到需要替换的类名关键字替换成别的名字前缀 def do_replace_file_name ( dir_path , need_name_list ) Dir .

ProGuard代码混淆

点点圈 提交于 2020-01-25 14:27:43
简介 ProGuard 是一个开源的Java代码混淆器,下载 ProGuardGui工具 。 Maven Spring Boot ProGuard demo演示 <build> <finalName>${artifactId}</finalName> <plugins> <plugin> <groupId>com.github.wvengen</groupId> <artifactId>proguard-maven-plugin</artifactId> <version>2.0.11</version> <executions> <execution> <!-- 混淆时刻,这里是打包的时候混淆--> <phase>package</phase> <goals> <!-- 指定使用插件的混淆功能 --> <goal>proguard</goal> </goals> </execution> </executions> <configuration> <proguardVersion>6.2.2</proguardVersion> <injar>${project.build.finalName}.jar</injar> <outjar>${project.build.finalName}.jar</outjar> <!-- 开启混淆 --> <obfuscate>true<

如何保护你的 Python 代码 (一)—— 现有加密方案

独自空忆成欢 提交于 2020-01-23 00:33:08
https://zhuanlan.zhihu.com/p/54296517 0 前言 去年11月在PyCon China 2018 杭州站分享了 Python 源码加密 ,讲述了如何通过修改 Python 解释器达到加解密 Python 代码的目的。然而因为笔者拖延症发作,一直没有及时整理成文字版,现在终于战胜了它,才有了本文。 本系列将首先介绍下现有源码加密方案的思路、方法、优点与不足,进而介绍如何通过定制 Python 解释器来达到更好地加解密源码的目的。 由于 Python 的动态特性和开源特点,导致 Python 代码很难做到很好的加密。社区中的一些声音认为这样的限制是事实,应该通过法律手段而不是加密源码达到商业保护的目的;而还有一些声音则是不论如何都希望能有一种手段来加密。于是乎,人们想出了各种或加密、或混淆的方案,借此来达到保护源码的目的。 常见的源码保护手段有如下几种: 发行 .pyc 文件 代码混淆 使用 py2exe 使用 Cython 下面来简单说说这些方案。 1 发行 .pyc 文件 1.1 思路 大家都知道,Python 解释器在执行代码的过程中会首先生成 .pyc 文件,然后解释执行 .pyc 文件中的内容。当然了,Python 解释器也能够直接执行 .pyc 文件。而 .pyc 文件是二进制文件,无法直接看出源码内容。如果发行代码到客户环境时都是

如何保护Python代码?

痞子三分冷 提交于 2020-01-12 04:10:37
我正在用 Python 开发一款软件,该软件将分发给我的雇主的客户。 我的雇主希望通过限时许可文件来限制软件的使用。 如果我们分发.py文件甚至.pyc文件,则很容易(反编译和)删除检查许可证文件的代码。 另一个方面是,我的雇主不希望我们的客户阅读该代码,因为担心该代码可能被盗或至少是“新颖的主意”。 有解决这个问题的好方法吗? 最好使用现成的解决方案。 该软件将在Linux系统上运行(因此,我认为py2exe不会成功)。 #1楼 我认为还有另一种方法可以保护您的Python代码; 混淆方法的一部分。 我相信有一个像Mount and Blade这样的游戏,或者某些东西改变了并重新编译了自己的python解释器(我认为它是开源的原始解释器),只是将OP代码表中的OP代码更改为与标准python OP不同代码。 因此python源代码未修改,但* .pyc文件的文件扩展名不同,并且操作码与公共python.exe解释器不匹配。 如果您检查了游戏数据文件,则所有数据均为Python源格式。 各种各样的恶作剧都可以通过这种方式与未成熟的黑客打成一片。 阻止一堆没有经验的黑客很容易。 这是您不可能击败的专业黑客。 但是我想象中的大多数公司都不会长时间聘请专业黑客(可能是因为事情被黑客入侵了)。 但是到处都是不成熟的黑客(以好奇的IT员工的身份阅读)。 例如,您可以在经过修改的解释器中