开源日记 - garlic decompiler - 2026-01-05 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
neocanable

开源日记 - garlic decompiler - 2026-01-05

  •  
  •   neocanable
    neocanable 1 月 5 日 1750 次点击
    这是一个创建于 105 天前的主题,其中的信息可能已经有所发展或是发生改变。
    1. 用 c 手撸一个 Java 的 decompiler
    2. 开源一个 c 语言实现的 Java 反编译器
    3. 开源反编译器支持 dex/apk

    2025 年结束了,garlic decompiler 一堆 bug 还没有解决完;

    我就挖了一个新坑:做 android native 层的反汇编,也就是 arm 的汇编。

    这个路径绕啊绕的,很 SB ,可以借鉴,做事之前一定要调研好。

    1. 哎,第一次做反汇编的大概都是根据二进制的位与来与去,写出来的极其不通用 , pass掉这种玩具写法。

    2. 嗯,发现开源项目比如 capstone 实现的真好啊,去看看,发现反汇编有引擎这么一说。

    3. 哦,原来 capstone 也是跟随着 LLVM 更新的,我去看看 LLVM 。

    4. 哦,原来人家官方是有 fat 数据的,那还写鸡毛的反汇编引擎,直接解析官方 fat 数据就 ok 了。

    5. 哦,不对,官方数据只能提供汇编文本化的输出,很多东西要自己定义。

    经过了这么大一圈,我写了一个关于 arm - T32/A32/A64 的反汇编引擎。实现方案很简单

    1. 用 ruby 定义 arm 汇编语言的 DSL ,和编写测试
    2. 定义 c 语言的结构,脚本生成静态数据
    3. 实现一边解析规则
    4. 对比测试,IDA/Ghidra 等等对比
    5. alias 啊,宽指令,simd 什么的支持一下

    T32 和 A32 还在调试,A64 效果:

    [ELF] 0x000000000008b0f0 <avcodec_find_decoder> # .text 8b0f0: f00018e1 adrp x1, #0x8b40f 8b0f4: f947a421 ldr x1, [x1, #0xf48] 8b0f8: 17ffffe4 b #0x8b088 [ELF] 0x000000000008b0fc <avcodec_find_encoder_by_name> # .text 8b0fc: f00018e1 adrp x1, #0x8b41b 8b100: f945a421 ldr x1, [x1, #0xb48] 8b104: 14000001 b #0x8b108 8b108: d100c3ff sub sp, sp, #0x30 8b10c: a90153f5 stp x21, x20, [sp, #0x10] 8b110: a9027bf3 stp x19, x30, [sp, #0x20] 8b114: f90007ff str x31, [sp, #0x8] 8b118: b40001c0 cbz x0, #0x8b150 8b11c: aa0103f3 mov x19, x1 // alias orr 8b120: aa0003f4 mov x20, x0 // alias orr 8b124: 94000019 bl #0x8b188 8b128: aa0003f5 mov x21, x0 // alias orr 8b12c: b4000140 cbz x0, #0x8b154 8b130: aa1503e0 mov x0, x21 // alias orr 8b134: d63f0260 blr x19 8b138: 34ffff60 cbz w0, #0x8b124 8b13c: f94002a1 ldr x1, [x21, #0x0] 8b140: aa1403e0 mov x0, x20 // alias orr 8b144: 97ff30c7 bl #0x57460 8b148: 35fffee0 cbnz w0, #0x8b124 8b14c: 14000002 b #0x8b154 8b150: aa1f03f5 mov x21, x31 // alias orr 8b154: aa1503e0 mov x0, x21 // alias orr 8b158: a9427bf3 ldp x19, x30, [sp, #0x20] 8b15c: a94153f5 ldp x21, x20, [sp, #0x10] 8b160: 9100c3ff add sp, sp, #0x30 8b164: d65f03c0 ret x30 [ELF] 0x000000000008b168 <avcodec_find_decoder_by_name> # .text 8b168: f00018e1 adrp x1, #0x8b487 8b16c: f947a421 ldr x1, [x1, #0xf48] 8b170: 17ffffe6 b #0x8b108 8b174: b0001ac0 adrp x0, #0x8b4cd 8b178: 90000001 adrp x1, #0x8b178 8b17c: 91013000 add x0, x0, #0x4c 8b180: 91003021 add x1, x1, #0xc 8b184: 17ff31c7 b #0x578a0 8b188: 91023e0 add x0, sp, #0x8 8b18c: 17ff358d b #0x587c0 8b190: a9bf7bf3 stp x19, x30, [sp, #0x3f0]! 8b194: b941ec08 ldr w8, [x0, #0x1ec] 8b198: 7100091f cmp w8, #0x2 // alias subs 8b19c: 540000eb b #0x8b1b8 8b1a0: b00013e1 adrp x1, #0x8b41d 8b1a4: 9113c821 add x1, x1, #0x4f2 8b1a8: 97ff2f5a bl #0x56f10 8b1ac: 5297d600 mov w0, #0xbeb0 // alias movz 8b1b0: 72b75500 movk w0, #0xbaa8, lsl #0x10 8b1b4: 1400003a b #0x8b29c 8b1b8: f9402c13 ldr x19, [x0, #0x58] 8b1bc: b941e808 ldr w8, [x0, #0x1e8] 8b1c0: 52800029 mov w9, #0x1 // alias movz 8b1c4: b901ec09 str w9, [x0, #0x1ec] 

    顺便感叹一下,AI 真的好用

    1 条回复    2026-01-05 04:29:24 +08:00
    rainrdx
        1
    rainrdx  
       1 月 5 日
    这个项目从一开始就 star 了关注了这么久作者一直在坚持。不知道做着有没有兴趣接个小单,不涉及到黑产灰产不涉及传播,就是想把自己付费买了的资源保存下来。。。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3737 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 38ms UTC 10:42 PVG 18:42 LAX 03:42 JFK 06:42
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86