关于代码混淆,你不得不知道的几大基础知识

关于代码混淆,你不得不知道的几大基础知识移动应用代码安全非常重要,代码逆向会导致代码逻辑被获取,进一步导致控制流被hook,安全防线被破,给APP安全带来巨大风险,因此开发者一般都会进

移动应用代码安全非常重要,代码逆向会导致代码逻辑被获取,进一步导致控制流被hook,安全防线被破,给APP安全带来巨大风险,因此开发者一般都会进行代码混淆保护。本文主要介绍了代码混淆的原理、方法、以及常见代码混淆的方式和工具。

一、代码混淆的原理

代码混淆是将计算机程序的代码,转换成功能上等价,但是难于阅读和理解形式的行为。混淆就是对发布出去的程序进行重新组织和处理,使得处理后的代码与处理前代码完成相同的功能,而混淆后的代码很难被反编译,即使反编译成功也很难得出程序的真正语义,通过进行代码混淆可以有效提升应用被逆向激活成功教程的难度。

二、代码混淆的方法

字符串加密:对应用程序中使用到的字符串进行加密,防止通过IDA等工具获取关键词定位核心业务代码;

类名、方法名混淆:将代码中类名、方法名、属性名替换为无意义符号,增加代码逆向难度;

程序结构混淆加密:对应用程序逻辑结构进行打乱混排,保证源码可读性降到最低。

三、常见的代码混淆方式

常见的代码混淆方式包括Java代码混淆、C/C++代码混淆以及h5 脚本混淆等。

(1)Java代码混淆

Java代码是比较容易反编译,为了保护Java源代码,开发者通常会对编译好的class文件进行混淆处理。ProGuard就是一个混淆代码的开源项目,能够对字节码进行混淆、缩减体积、优化等处理。

Proguard处理流程包含压缩、优化、混淆、预检四个主要环节,如下图所示:

关于代码混淆,你不得不知道的几大基础知识

压缩检测并移除代码中无用的类、字段、方法和特性(Attribute);

优化对字节码进行优化,移除无用的指令。优化代码,非入口节点类会加上private/static/final,没有用到的参数会被删除,一些方法可能会变成内联代码;

混淆使用a、b、c、d这样简短而无意义的名称,对类、字段和方法进行重命名;

预检在Java平台上对处理后的代码进行预检,确保加载的class文件是可执行的。

Java代码混淆,针对一些逆向的IDE环境是有一定效果的,可以考虑做一些中文混淆,这个很容易实现且有效果。混淆前后效果如下图:

关于代码混淆,你不得不知道的几大基础知识

(2)C/C++代码混淆

下图为C++代码的混淆,保护之后控制流大幅度伪造,逆向难度非常高。当然控制流伪造也会影响运营效率,所以一般也只是对核心的一些功能做保护。

关于代码混淆,你不得不知道的几大基础知识

混淆的过程中添加的一些字串的保护如下图:

关于代码混淆,你不得不知道的几大基础知识

介绍一个c/c++代码混淆工具,逆向对抗利器—LLVM。LLVM不仅仅提供混淆实现,通过多重Optimize(优化器),实现多种效果,例如代码控制流扁平化、虚假控制流、字符串加密、符号混淆、指令替换等。

关于代码混淆,你不得不知道的几大基础知识

(3)H5 脚本混淆

H5混淆是指从JS的语法和逻辑上进行混淆。H5脚本混淆很多的IDE环境均可配置,这里我不做详细介绍。H5脚本混淆主要提供字符串加密、混淆、去log、变量名处理、压缩、函数名处理、平台识别、防篡改等功能。保护前后区别如下:

关于代码混淆,你不得不知道的几大基础知识

代码混淆可以提升逆向分析的难度,但是并不能从跟不上解决逆向激活成功教程的问题。开发者可以对应用进行代码混淆,同时配合移动应用加固,以提升应用的安全等级。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/4070.html

(0)
上一篇 2023-05-28 11:30
下一篇 2022-12-15 10:00

相关推荐

  • 【MySQL实战】索引

    【MySQL实战】索引主键索引的叶子节点存的是整行数据。在 InnoDB 里,主键索引也被称为聚簇索引(clustered index)。 非主键索引的叶子节点内容是主键的值。在 InnoDB 里,非主键索引也被称为二级…

    2023-03-18
    137
  • oracle实现自增的方法和碰到的问题[亲测有效]

    oracle实现自增的方法和碰到的问题[亲测有效]众所周知,Oracle是没有办法像Mysql里用AUTO_INCREMENT实现自增的。 但是Oracle可以通过序列实现自增。 –以下是oracle 12c的方法 create sequence

    2023-05-12
    147
  • 字符串输入的中心

    字符串输入的中心字符串(strings)是计算机科学中一种非常基本的数据类型,它是由字符序列组成的,常用于表示文本。字符串输入是指从用户获取键盘输入的文本数据。在编程中,读取字符串输入的能力是非常常用、基本的技能之一。

    2024-06-13
    43
  • Python Regex Sub – 替换字符串中的特定部分

    Python Regex Sub – 替换字符串中的特定部分正则表达式是一种用来描述、匹配一系列字符模式的方法,其主要应用于文本处理和搜索。Python内置了re模块,它提供了对正则表达式的支持。通过使用re模块,我们可以使用正则表达式来搜索、匹配和替换字符串中的特定部分。

    2024-03-23
    90
  • Python工程师必备开发环境——Spyder 5.3.3

    Python工程师必备开发环境——Spyder 5.3.3Python语言已经成为目前最受欢迎的编程语言之一,其在数据分析、机器学习、科学计算等领域的应用越来越广泛。而一个优秀的Python开发环境是Python工程师必不可少的工具之一。Spyder 5.3.3以其易用性和高效性备受开发者喜爱,本文将详细介绍Spyder 5.3.3的优点和使用方法。

    2024-07-28
    38
  • MySql数据库语句用法[亲测有效]

    MySql数据库语句用法[亲测有效] ##一、语句 SQL DML 和 DDL 可以把 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL)。 SQL (结构化查询语言)是用于执行查询的语法。但是 SQL…

    2023-03-30
    154
  • Veritas Backup Exec™ 21.3 Multilingual (Windows)

    Veritas Backup Exec™ 21.3 Multilingual (Windows)Backup Exec 21.3, Release date: 2021-09-06 请访问原文链接:https://sysin.org/blog/veritas-backup-exec-21-3/,

    2023-04-26
    162
  • nginx代理mysql,ssh[通俗易懂]

    nginx代理mysql,ssh[通俗易懂]
    nginx代理mysql,ssh 查看nginx信息 nginx -V,下载相同版本nginx解压并编译 configure编译时追加参数–with-st…

    2023-04-22
    178

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注