首页 > 其他分享 >代码混淆的原理是什么?常见代码混淆方法介绍

代码混淆的原理是什么?常见代码混淆方法介绍

时间:2023-11-17 14:56:17浏览次数:30  
标签:混淆 ipa 加密 逆向 代码 原理 Java

代码混淆的原理是什么?常见代码混淆方法介绍

本文主要想你介绍代码混淆的原理,常见代码混淆方法,欢迎查阅~

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

一、代码混淆的原理

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

二、代码混淆的方法

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

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

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

三、常见的代码混淆方式

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

(1)Java代码混淆

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

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

 

 

代码混淆的原理是什么?常见代码混淆方法介绍

 

 

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

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

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

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

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

 

 

代码混淆的原理是什么?常见代码混淆方法介绍

 

 

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

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

 

 

 

 

 

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

 

 

代码混淆的原理是什么?常见代码混淆方法介绍

 

 

介绍一个c/c++代码混淆工具,Ipa Guard是一款功能强大的ipa混淆工具,不需要ios app源码,直接对ipa文件进行混淆加密。可对IOS ipa 文件的代码,代码库,资源文件等进行混淆保护。 可以根据设置对函数名、变量名、类名等关键代码进行重命名和混淆处理,降低代码的可读性,增加ipa破解反编译难度。可以对图片,资源,配置等进行修改名称,修改md5。只要是ipa都可以,不限制OC,Swift,Flutter,React Native,H5类app。。LLVM不仅仅提供混淆实现,通过多重Optimize(优化器),实现多种效果,例如代码控制流扁平化、虚假控制流、字符串加密、符号混淆、指令替换等。

 

 

 

(3)H5 脚本混淆

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

 

 

 

 

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

注:文章来源于网上采集整理,如有侵权,请联系我们核实修改。


欢迎体验更多加密解密相关软件或者加入我们技术交流群(839923904)

标签:混淆,ipa,加密,逆向,代码,原理,Java
From: https://www.cnblogs.com/gddg/p/17838726.html

相关文章

  • 苏格拉底问答、实践过程截图、遇到问题解决问题截图,代码链接
    #include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<semaphore.h>#include<pthread.h>#definemsleep(x)usleep(x*1000)#definePRODUCT_SPEED3//生产速度#defineCONSUM_SPEED1......
  • Java代码混淆
    classFinal代码混淆1.参数说明-file加密的jar/war完整路径-packages加密的包名(可为空,多个用","分割)-libjarsjar/war包lib下要加密jar文件名(可为空,多个用","分割)-cfgfiles需要加密的配置文件,一般是classes目......
  • 无法安装ensp ?各种报错解决方案(virtualbox无法运行,启动AR失败,错误代码40等)
    安装eNSP。发现软件中路由器无法启动。VirtualBox是华为eNSP使用的必须运行环境,它提供虚拟网卡设备作为服务器为软件提供运行环境。1.提示出现VirtualBoxOracle无法在此项目运行。我根据百度上的方法,重新还原系统。无果。之前计算机中安装VirtualBox版本为6.0,重新下载了5.3版本的......
  • Angular SSR 应用中 serverApp-state script 的工作原理介绍
    <scriptid="serverApp-state"type="application/json">元素是在服务器端渲染(Server-SideRendering,SSR)Angular应用中用于传递状态数据的重要组成部分。它被称为"SSRTransferState"机制的一部分,其作用是在服务器端生成的HTML页面中嵌入初始数据,以便客户端可以在应用初始......
  • 使用 ABAP 代码构造 Merkle树(Merkle Tree)
    源代码如下:*&---------------------------------------------------------------------**&ReportZBLOCKTREE*&---------------------------------------------------------------------**&*&--------------------------------------------------------......
  • 分享,GPS北斗卫星同步时钟服务器具体原理是什么?
    分享,GPS北斗卫星同步时钟服务器具体原理是什么?分享,GPS北斗卫星同步时钟服务器具体原理是什么?京准电子科技官微——ahjzsz时间同步的原理和技术1、有关时间的一些基本概念: 时间与频率之间互为倒数关系,两者密不可分,时间标准的基础是频率标准,由晶体振荡器决定时间的精度。 4......
  • c#防止sql注入的具体方法与代码
    原文链接:https://www.zhihu.com/question/565076777首先考虑使用参数化查询,参数化查询是数据库程序设计中最有效的防止SQL注入的方法,因为参数化查询将参数值作为独立的参数传递给数据库,而不是将参数值嵌入到SQL语句中。例如:stringsql="Select*FromUserWHEREUserName=@U......
  • AI时代的代码自动生成工具:每个开发人员必须掌握的基本能力
    随着人工智能技术的不断发展,越来越多的行业开始尝试将AI技术应用于实际业务中。其中,代码自动生成工具便是AI技术在软件开发领域中的重要应用之一,也倒逼着每一个开发人员学习使用。有专家曾公开表示,利用AI工具辅助软件开发将成为开发人员的基本技能,否则终将被淘汰。一、传统编码的......
  • 216-手机h5实现关闭手机前置摄像头,代码实现
    navigator.mediaDevices.getUserMedia({video:{facingMode:'user'}}).then(function(stream){constcameraPreview=document.getElementById('cameraPreview');cameraPreview.srcObject=stream;cameraStream=stream;}......
  • FreeRTOS 原理 --- 最少剩余可用栈 与 栈溢出检查
    函数 uxTaskGetStackHighWaterMark()可用于获取任务的最少剩余可用栈#if(INCLUDE_uxTaskGetStackHighWaterMark==1)UBaseType_tuxTaskGetStackHighWaterMark(TaskHandle_txTask){TCB_t*pxTCB;uint8_t*pucEndOfStack;UBaseType_tuxRetur......