Android 马甲包 google市场混淆技术方案

这篇具有很好参考价值的文章主要介绍了Android 马甲包 google市场混淆技术方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  1. 指定 混淆字典

在app的gralde里配置混淆字典

-obfuscationdictionary dict.txt#外部字典

-classobfuscationdictionary dict.txt #类字典

-packageobfuscationdictionary dict.txt #包字典

dict.txt 文件内容类似这样的:

zguqnx

mvdmuyh

wmws

jwomtp

nhmhn

zvlogo

pomcwh

bhdnzul

osxbj

gojb

ctvkrg

srmar

sgkarnqi

byghdn

tvebtxw

uxdhno

qmjac

pgxasjnc

ezfb

tuoe

pzdo

写了一个task

/**
 * 生成字典Task
 */
task geneDictTask {
    doFirst{
        def dictPath = rootDir.getAbsolutePath()+'/app/dict.txt'
        def random = new Random()
        def lowercase = "abcdefghijklmnopqrstuvwxyz"
        def wordList = new HashSet()
        for (int i=0;i<10000;i++){
            def word = new StringBuilder()
            def wordLength = random.nextInt(5)+4
            for (int j=0;j<wordLength;j++){
                word.append(lowercase.charAt(random.nextInt(lowercase.length())))
            }
            wordList.add(word.toString())
        }
        def f = new File(dictPath)
        f.getParentFile().mkdirs()
        f.withWriter("UTF-8") {
            it.write(wordList.join(System.lineSeparator()))
        }
    }
}
//

  1. xmlClassGuard

xmlClassGuard {

/*

* 是否查找约束布局的constraint_referenced_ids属性的值,并添加到AabResGuard的白名单中,

* true的话,要求你在XmlClassGuard前依赖AabResGuard插件,默认false

*/

// findConstraintReferencedIds = true

//用于增量混淆的 mapping 文件

mappingFile = file("xml-class-mapping.txt")

//更改manifest文件的package属性,即包名

packageChange = ["com.DOTLESS.gala": "com.DOTLESS.gala"]

//移动目录

moveDir = ["com.DOTLESS.gala": "com.DOTLESS.gala"]

}

  1. 批量修改文件名

ext {
    //需要批量重命名的Been路径
    renameBeenPath = "src/main/java/com/DOTLESS/gala/bean"
    //Been对象名字以什么字符串结尾, 默认Been, 例如设为Beax, 则所有Been都会以Beax结尾, 如GoodsBeax.kt
    beenNameSuffix = "Bear"
    //Been名字的前缀, 例如KoGoodsBeen
    beenPrefix = "Ko"
    //Been对象 Been的前面加的字符串 KoGoodsFishBeen
    beenMidfix = "Fish"
    //特殊的Been比配
//    specialBeensMatcher = ["**/*Been.kt",  "**/*Been.java"]
}

task renameBeenProcesser {
    doLast {
        FileTree beenTree = fileTree(renameBeenPath) {
            include '**/*.java'
            include '**/*.kt'
//            include specialBeensMatcher
        }
        def start = System.currentTimeMillis()
        println(">>>>>> renameBeenProcesser start")
        beenTree.each { File beenFile ->
            //println(beenFile.path + " Processing...")
            def sname = beenFile.name
            def fileEx = sname.substring(sname.lastIndexOf("."))
            sname = sname.replace(fileEx, "")
            def tName = ""
//            if (sname.endsWith("Been")) {
//                tName = beenPrefix + sname.replace("Been", beenMidfix + beenNameSuffix)
//            } else if (sname.endsWith("Bean")) {
//                tName = beenPrefix + sname.replace("Bean", beenMidfix + beenNameSuffix)
//            } else {
                tName = beenPrefix + sname + beenMidfix + beenNameSuffix
//            }
            beenFile.renameTo(beenFile.parentFile.path + File.separator + tName + fileEx)
            //生成一个文件树,替换import后面的路径
            FileTree processTree = fileTree("src") {
                include '**/*.java'
                include '**/*.kt'
                include '**/layout/*.xml'
            }
            processTree.each { File f ->
                ImportBeenReplacer(f.path, sname, tName)
            }
        }
        def cost = (System.currentTimeMillis() - start) / 1000
        println(">>>>>> renameBeenProcesser end(cost:${cost}s)")
    }
}

//替换有导入目标been的文件内容
def ImportBeenReplacer(String filePath, sourceBeenName, targetBeenName) {
    def readerString = ""
    def hasReplace = false
    def xml = filePath.endsWith(".xml")
    file(filePath).withReader('UTF-8') { reader ->
        reader.eachLine {String it ->
            if (it.find(sourceBeenName)) {
                if (xml) {
                    //println("###$filePath: $sourceBeenName->$targetBeenName")
                    it = it.replaceAll("(?<![a-zA-Z0-9]+)(?<=[\\.]+)$sourceBeenName(?=[ \"\\./>]*)(?![a-zA-Z0-9]+)", targetBeenName)
                } else {
                    it = it.replaceAll("(?<![a-zA-Z0-9]+)(?<=[ \\.<:\\s\\,(]+)$sourceBeenName(?=[ \"\\.>\\?\\:\\(]*)(?![a-zA-Z0-9]+)", targetBeenName)
                }
                hasReplace = true
            }
            readerString <<= it
            readerString << '\n'
        }
    }
    if (hasReplace) {
        if(readerString.toString().endsWith("\n")) readerString = readerString.subSequence(0, readerString.length() - 1)
        //替换文件
        //println(filePath + " has replace been.")
        file(filePath).withWriter('UTF-8') {
            writer ->
                writer.append(readerString)
        }
    }
}


  1. androidJunkCode 添加垃圾代码文章来源地址https://www.toymoban.com/news/detail-493055.html

androidJunkCode {
    def config = {
        packageBase = "com.dotless.xthv"
        packageCount = 15
        activityCountPerPackage = 3
        excludeActivityJavaFile = false
        otherCountPerPackage = 15
        methodCountPerClass = 10
        resPrefix = "xthv_"
        drawableCount = 10
        stringCount = 10
    }
    variantConfig {
        devDebug config  //和productFlavors里的名字一样,注意不能是大写,不然会报错
        devRelease config
        publishDebug config
        publishRelease config
    }
}

到了这里,关于Android 马甲包 google市场混淆技术方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android Hook技术学习——常见的hook技术方案

    最近一段时间在研究Android加壳和脱壳技术,其中涉及到了一些hook技术,于是将自己学习的一些hook技术进行了一下梳理,以便后面回顾和大家学习。 本文第二节主要讲述编译原理,了解编译原理可以帮助进一步理解hook技术 本文第三节主要讲述NDK开发的一些基础知识 本文第四

    2024年02月12日
    浏览(33)
  • Android 混淆使用及其字典混淆(Proguard)

    1.使用背景 ProGuard能够通过压缩、优化、混淆、预检等操作,检测并删除未使用的类,字段,方法和属性,分析和优化字节码,使用简短无意义的名称来重命名类,字段和方法。从而使代码更小、更高效、更难进行逆向工程。 Android代码混淆,又称Android混淆,是一种Android APP保护

    2024年02月03日
    浏览(32)
  • LLVM 与代码混淆技术

    项目源码 LLVM 计划启动于2000年,开始由美国 UIUC 大学的 Chris Lattner 博士主持开展,后来 Apple 也加入其中。最初的目的是开发一套提供中间代码和编译基础设施的虚拟系统。 LLVM 命名最早源自于底层虚拟机(Low Level Virtual Machine)的缩写,随着 LLVM 项目的不断发展,原先的全称

    2024年02月09日
    浏览(41)
  • android 混淆

    # 指定代码的压缩级别 0 - 7(指定代码进行迭代优化的次数,在Android里面默认是5,这条指令也只有在可以优化时起作用。) -optimizationpasses 5 # 混淆时不会产生形形色色的类名(混淆时不使用大小写混合类名) -dontusemixedcaseclassnames # 指定不去忽略非公共的库类(不跳过library中的非

    2024年02月05日
    浏览(29)
  • Android Proguard混淆

    关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 ,擅长java后端、移动开发、人工智能等,希望大家多多支持。 我们继续总结学习 基础知识 ,温故知新。 本文讲述Android Proguard 相关知识。 Proguard 四部曲: shrink(删减):删

    2024年02月05日
    浏览(43)
  • android 混淆配置

    android 发布正式版本都会涉及到代码加密,防止反编译,这就涉及到混淆文件的配置 1、在app模块的build.gradle中配置 然后在其中引用的proguard-rules.pro文件中配置混淆即可 注:这里的app模块是指在build.gradle中配置的是 因为有的工程中有多个模块 2、proguard-rules.pro文件中配置混淆

    2024年02月01日
    浏览(28)
  • Unity3D代码混淆方案详解

    Unity引擎使用Mono运行时,而C#语言易受反编译影响,存在代码泄露风险。本文通过《QQ乐团》项目实践,提出一种适用于Unity引擎的代码混淆方案,以保护代码逻辑。 在Unity引擎下,为了防止代码被轻易反编译,需要采取相应的保护措施。本文将分享一种基于实践经验的可行方

    2024年01月18日
    浏览(32)
  • Android 根据mapping文件还原混淆代码

    app发布的时候都会做混淆处理,但是当发生错误的时候,只能看到一些混淆后的代码很难看清楚哪里错了,那么如何将混淆后的代码进行还原呢? Android sdk 目录下有专门的工具可以帮助我们进行还原。 在还原混淆之前,我们需要app的混淆mapping文件,该文件路径: 混淆文件的

    2024年02月09日
    浏览(34)
  • 蓝牙技术|智能照明市场蓬勃发展,蓝牙技术助力市场发展

    照明控制系统在商业和工业领域的应用广泛。例如,智能办公楼、商场、工厂等场所,可以通过照明控制系统实现节能和舒适性的提升。预计将从2023年的74亿美元增长到2032年的108亿美元,复合年增长率(CAGR)为4.3%。 随着LED照明技术在市场上的逐渐普及,传统照明设备逐渐被

    2024年02月15日
    浏览(29)
  • 如何使用代码混淆技术保护移动应用程序安全

    在移动应用开发过程中,代码保护一直是一个重要的议题。为了保护应用程序免受黑客攻击和逆向工程师的破解,开发人员使用各种方法来加强应用程序的安全性。其中,代码混淆是一种常用的技术,可以通过对代码进行混淆、压缩和重命名等操作,使得应用程序的代码难以

    2024年01月17日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包