基于反混淆工具混淆后的日志定位

场景描述

​工程源码的混淆可以降低工程被破解攻击的风险,但会导致无法直接通过Release应用的堆栈信息定位到源码的具体文件和行位置,不易于开发者快速定位解决问题。本工具使用指南将以开发者视角,向开发者讲解,如何分别使用IDE自带反混淆工具AnalyzeStaceTrace和hstack命令行对Release应用中C++堆栈、ArkTS堆栈以及ArkTS堆栈中混淆的方法名进行还原,方便开发者进行错误信息定位(注:仅支持API12及以上的工程)。

文件准备工作

1.已混淆的工程和报错日志,这里以混淆工程为例,混淆规则配置如下:

# 开启属性名称混淆
  -enable-property-obfuscation
# 开启字面量名称混淆
  -enable-string-property-obfuscation
# 开启文件/文件夹名称混淆
  -enable-filename-obfuscation
# 开启顶层作用域名称混淆(作用于类名、方法名)
 -enable-toplevel-obfuscation
# 开启export导出对象混淆
  -enable-export-obfuscation

​两次运行工程分别点击工程内的Native按钮和ArkTS按钮获取混淆后的报错日志。

2.获取原工程混淆后build产物目录下的sourceMaps.map文件,nameCache.json文件,以及生成的so文件(根据运行的设备的CPU架构选取对应的so文件)产物路径参考下图:

方案描述

1.使用IDE自带工具Analyze Stace Trace工具进行日志反混淆。

a.当前工程为堆栈所在应用对应的工程,且存在Release构建产物:

i.单击菜单栏Code->Analyze Stack Trace,或在FaultLog页面异常堆栈信息处右键选择Analyze Stack Trace。

ii.在弹出的Analyze Stack Trace对话框中,粘贴Release应用的异常堆栈信息。取消勾选Unscramble stack,点击Start Analyze进行解析,对话框右侧及为解析结果:

b.当前工程不为堆栈所在应用对应的工程。

i.ArkTS堆栈报错信息反混淆操作演示。

打开Analyze Stack Trace工具栏,勾选Unscramble stack,分别添加应用对应的sourceMaps.map文件、nameCache.json文件点击Start Analyze即可进行解析,对话框右侧即为解析结果:

ii.Native堆栈报错信息反混淆操作演示。

打开Analyze Stack Trace工具栏,勾选Unscramble stack,分别添加应用对应的sourceMaps.map文件、nameCache.json文件和对应的so文件,点击Start Analyze即可进行解析:

iii.IDE界面参数介绍:

        • 左侧输入框:输入需要解析的堆栈信息,右侧为输出结果区域。
        • Unscramble stack:不勾选表示以当前IDE工程的realease产物来解析堆栈。
        • Source map:文件中存有混淆前后代码位置的映射关系。
        • so:动态链接库,包含了已编译的可重用代码,可以被程序在运行时动态加载和链接。
        • Name cache:混淆名称映射表,文件中包含混淆前和混淆后的名称。
        • Start Analyze:开始解析。

2.使用hstack命令的方式进行日志反混淆。

准备工作:

建议准备五个空的文件夹(文件名可自定义),这里在E:\hstackTest目录下分别新建nameCachenativesosourcemapoutputinput五个空的文件夹为例。将nameCache.json文件放入nameCache文件内,将sourceMaps.map文件放入sourceMaps文件夹中,将生成的so文件放入nativeso文件中,input文件存放ArkTSNative堆栈报错信息文件,output文件作为输出目录。

工具下载和环境配置:

  1. a.Node.js配置到环境变量中,以Windows系统为例:(建议使用18.14.1版本)。
  2. b.如果需要对C++文件产生的异常进行解析,则需要将SDK中的native\llvm\bin目录配置到环境变量中,变量名设置为“ADDR2LINE_PATH”(路径的文件名不能包含空格)。

  3. c.根据电脑的操作系统,从DP平台上的套件货架上下载对应版本的hstack工具。

 

 

ArkTS堆栈报错信息反混淆操作演示。

将ArkTS堆栈文件放入input文件夹内,在工具所在目录打开终端,输入指令:

hstack -i E:\hstackTest\input -o E:\hstackTest\output -s E:\hstackTest\sourcemap -n E:\hstackTest\nameCache

在output文件夹中即可看到解析后的ArkTS堆栈文件(解析后的文件会在原文件名下增加一个“_”命名),解析效果展示:

Native堆栈报错信息反混淆操作演示。

将Native堆栈文件放入input文件夹内,在工具所在目录打开终端,输入指令:

hstack -i E:\hstackTest\input -o E:\hstackTest\output -s E:\hstackTest\sourcemap --so E:\hstackTest\nativeso -n E:\hstackTest\nameCache

解析效果展示:

hstack命令行配置说明:

指令

说明

-s

可选,指定工程sourcemap.map文件归档目录。参数为文件夹

--so

可选,指定工程so文件归档目录。参数为文件夹

-n

可选 ,指定工程nameCache.json文件归档目录。参数为文件夹

-i

堆栈文件目录,参数为文件夹

-o

反混淆文件输出目录,参数为文件夹

--version/-v

查看hstack版本。

--help/-h

查询hstack命令行帮助。

注意事项:

  • sourcemap与so文件归档目录至少提供一项。
  • 如果需要对方法名进行解析还原,则需要同时提供sourcemap与nameCache文件。
  • 路径参数,包括ADDR2LINE_PATH这个环境变量的参数值,不支持以下特殊字符:`!@#¥……&*()——|{}【】‘;:。,、?。
  • 11
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: JS混淆压缩工具是一种用于还原经过混淆压缩处理的JavaScript代码的工具。JavaScript代码经过混淆压缩处理后,变量名、函数名和代码结构都被改变,使得代码变得难以阅读和理解。 混淆是指通过逆向工程的方法,还原被混淆处理的代码。这样可以使开发人员更容易理解代码逻辑和修改代码,也有助于安全研究人员分析代码漏洞。 压缩是指将经过压缩处理的代码还原为可读性更好的形式。在代码压缩过程中,会删除空格、缩进、注释等,同时对代码进行重写以减少文件大小。压缩工具可以还原代码结构,使之恢复为可读性更好的形式。 JS混淆压缩工具一般通过解析和重构混淆压缩后的代码来实现。它们可以自动还原变量名、函数名,修复语法错误,还原代码结构,保留注释等。常见的混淆压缩工具有UglifyJS、Terser、Babel等。 但是需要注意的是,即使使用了混淆压缩工具,完全还原出原始代码可能是不太可能的。因为混淆压缩过程中可能还进行了其他特殊处理,如删除无用代码、代码优化等。此外,混淆压缩工具只适用于用于学习和分析代码,不应用于非法用途,以保护代码作者的合法权益。 ### 回答2: JS混淆压缩工具是一种用于还原经过混淆和压缩处理的JavaScript代码的工具。由于混淆和压缩会使代码变得难以阅读和理解,而且容易隐藏恶意代码,因此混淆压缩工具对于安全性和代码维护性非常重要。 JS混淆工具的主要功能是将经过混淆处理的代码还原为易读的形式。它可以根据一些特定的识别规则,识别和还原变量名、函数名等混淆后的标识符。通过混淆,我们可以更容易地理解代码的逻辑和结构,提高代码的可维护性和可读性。 JS压缩工具的主要功能是将经过压缩处理的代码还原为格式化的形式。它可以自动添加换行、缩进和空格等,使得代码更易于阅读和编辑。压缩可以帮助开发人员更方便地调试和修改代码,提高开发效率。 目前,有许多JS混淆压缩工具可供使用。一些流行的工具包括:UglifyJS、Terser、JSNice等。这些工具具有各自的特点和功能,可以根据具体需求选择合适的工具使用。 总之,JS混淆压缩工具对于提高代码安全性、可读性和可维护性具有重要作用。通过使用这些工具,开发人员可以更方便地理解、调试和修改代码,从而提高开发效率和代码质量。 ### 回答3: JS混淆压缩是用于还原经过混淆和压缩的Javascript代码的工具混淆和压缩是为了减小代码体积和加强代码防护而进行的操作,但也给代码的阅读和理解带来了困难。 JS混淆工具主要通过对混淆后的变量、函数名、属性名进行逆向推算,还原出其原有的可读性较高的标识符。这种工具一般基于静态分析和语义分析的技术,通过模式匹配、代码流分析和控制流分析等方法,逆推原始代码的标识符,从而提高代码的可读性。 JS压缩工具主要是针对通过压缩工具对代码进行了无损压缩的情况,还原出原始的格式和布局。这种工具通过识别特定的压缩技术(如代码变量替换、代码优化、多行合并等),并对其进行向操作,还原出原始的代码结构和格式。 总之,JS混淆压缩工具的目的是为了提高代码的可读性和可维护性,方便开发人员阅读和理解代码,同时也有助于代码审计和漏洞发现。但需要注意的是,使用这些工具应遵守相关法律法规,不用于非法用途,以保护代码的合法性和安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值