鸿蒙(HarmonyOS、OpenHarmony)逆向基础—反编译工具

admin 2024年11月3日00:29:32评论46 views字数 2690阅读8分58秒阅读模式

官方反编译工具Disassembler

官网地址:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/tool-disassembler-V5

Disassembler工具位置为:

Windows:[DevEco Studio安装目录]sdk[SDK版本]HarmonyOStoolchainsark_disasm.exe。

MAC:/Users/{USER_NAME}/HarmonyOS/M1SDK/HarmonyOS-NEXT-DP0/base/toolchains/ark_disasm

使用方法:

./ark_disasm [options] input_file output_file

./ark_disasm abc-samples-main/aes.abc  test.c

反汇编后的方舟字节码文件

# source binary: test.abc                                                    // 反汇编的方舟字节码文件

.language ECMAScript

# ====================
# LITERALS                                                                   // 字面量数据

00x203{0[
    MODULE_REQUEST_ARRAY:{
};
]}

# ====================
# RECORDS                                                                    // 模块定义数据

.record _ESConcurrentModuleRequestsAnnotation{// _开头这些都是固定的模块数据
}

.record test {// 一个js文件对应一个模块数据,包含了模块的相关信息(在方舟字节码文件中的位置,是否是commonjs ...)
    u8 isCommonjs =0x0
    u32 moduleRecordIdx =0x203
......
}

# ====================
# METHODS                                                                    // 方法定义数据

L_ESSlotNumberAnnotation:
    u32 slotNumberIdx {0x0}
.function any test.#*#show(any a0, any a1, any a2) <static> {                // 此方法源码中的show方法,同时这里也说明了,它属于test模块
    ldlexvar 0x0,0x0
......
}

L_ESSlotNumberAnnotation:
    u32 slotNumberIdx {0x3}
.function any test.func_main_0(any a0, any a1, any a2)<static>{// 此方法是自动生成的,可以理解成整个js文件就是一个方法,方法名为func_main_0
    newlexenv 0x1
......
}

# ====================
# STRING                                                                     // 符号表信息

[offset:0x88, name_value:i]

使用参数--verbose,可打印偏移量等更多详细信息。

部分示例

.record _ESSlotNumberAnnotation{# offset: 0x00cd, size: 0x0026 (38)                                  // 这里打印了模块在方舟字节码文件中具体的位置和大小
}

.record test {# offset: 0x00f3, size: 0x0098 (152)                                                    // 这里打印了模块在方舟字节码文件中具体的位置
    u32 moduleRecordIdx =0x203# offset: 0x0144                                                   // 这里打印了模块信息的位置
}
......
.function any test.#*#show(any a0, any a1, any a2) <static> { # offset: 0x0153, code offset: 0x0245    // 这里打印了方法信息具体的位置和方法中指令的具体位置
#   CODE:
    ldlexvar 0x0,0x0# offset: 0x0249, [IMM4_IMM4].........[0x3c 0x00]                            // 这里打印了每条指令的具体位置
......
}

基础反编译工具ABCDE

https://github.com/ohos-decompiler/abcde?tab=readme-ov-file jar包下载:https://github.com/Yricky/abcde/actions

鸿蒙(HarmonyOS、OpenHarmony)逆向基础—反编译工具

在线反编译工具(反编译成js)

鸿蒙abc文件翻译为js代码:https://panda.jmp0.top/

apikey:

A2Rcq5lbQxpouRmQ

mTlVqfZvud1YH5A4

FbGSE9iUgfrRcGdi

鸿蒙(HarmonyOS、OpenHarmony)逆向基础—反编译工具

基于jadx和ABCDE的反编译工具abc-decompiler

鸿蒙反编译工具:https://github.com/ohos-decompiler/abc-decompiler/releases/tag/helloworldx

鸿蒙(HarmonyOS、OpenHarmony)逆向基础—反编译工具

历史文章

ARM用户福音,Android与Linux融合桌面环境OpenFDE

iOS安装巨魔商店和越狱

知识征集令:「移动安全」专题

原文始发于微信公众号(移动安全星球):鸿蒙(HarmonyOS、OpenHarmony)逆向基础—反编译工具

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年11月3日00:29:32
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   鸿蒙(HarmonyOS、OpenHarmony)逆向基础—反编译工具https://cn-sec.com/archives/3347432.html

发表评论

匿名网友 填写信息