V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
neocanable
V2EX  ›  程序员

开源日记 - garlic decompiler

  •  
  •   neocanable ·
    neocanable · 1 天前 · 639 次点击
    1. 用 c 手撸一个 Java 的 decompiler
    2. 开源一个 c 语言实现的 Java 反编译器
    3. 开源反编译器支持 dex/apk

    garlic decompiler这个项目还有两个月,就写了整整两年了。对于一个曾经是半吊子的 c 选手,稍微有那么一小点(其实挺大的)自豪。

    最近两个月写了些东西:

    elf 的解析

    与其说是 elf 的解析,应该说的是基于 armv8 的 elf 的解析。除了 Loads And Stores 部分的 instruction 没有处理,其余的指令都支持了。AI + 手敲,快了很多。效果如下:

    [ELF] 0x00000000000118fc <_ZN3mmr5Clock3nowEv> # .text
    [0        0xd10103ff] SUB x31, x31, #64
    [1        0xf90013f3]
    [2        0xa9037bfd]
    [3        0x9100c3fd] ADD x29, x31, #48
    [4        0xd53bd053] MRS x19, S2_3_13_0_2
    [5        0xf9401668]
    [6        0xf9000fe8]
    [7        0x910023e1] ADD x1, x31, #8
    [8        0x52800020] MOVZ w0, #1, LSL #0
    [9        0x97fffaf4] BL #66800
    [10       0x34000060] CBZ w0, 71984
    [11       0x97fffe7e] BL #70432
    [12       0x14000005] B #72000
    [13       0xa940a3e9]
    [14       0x5299400a] MOVZ w10, #51712, LSL #0
    [15       0x72a7734a] MOVK w10, #15258, LSL #16
    [16       0x9b0a2120] MADD x0, x9, x10, 8
    [17       0xf9401668]
    [18       0xf9400fe9]
    [19       0xeb09011f] SUBS x31, x8, x9
    [20       0x540000a1] B.NE, 0x11960
    [21       0xa9437bfd]
    [22       0xf94013f3]
    [23       0x910103ff] ADD x31, x31, #64
    [24       0xd65f03c0] RET x30
    [25       0x97ffff20] BL #71136
    [26       0x94000001] BL #72040
    [27       0xf81f0ffe]
    [28       0x97fffdd5] BL #69824
    [29       0x97ffff60] BL #71408
    

    跟几个朋友交流,他们说我有毛病,自己动手解析指令,capstone 都写的好好的。但是我觉得我要彻底搞明白,就得一个指令一个指令的过一遍,就像我解析 jvm 和 dalvik 的 bytecode 的过程是一样的,在这个过程中,了解指令集更快,烙印更深。

    小插曲:读了armv8 的手册, 脑袋一热,买了美股Arm Holdings的股票,目前亏小 10 个点。

    ARM 的文档做的不错,我这种小白花点儿时间也能看懂。对比大 A 的某武纪,某武纪的公开文档真的差。

    garlic decompiler 的新功能

    1. apk/dex to smali
    2. class/apk/dex 字符串搜索
    3. 支持了 windows ,mingw
    4. 支持了破损的 dex 的解析 - class_ids/type_ids 等不全的情况。

    还是欢迎大家试用,欢迎大家提意见,欢迎 PR ,欢迎提 bug


    写在最后:为爱发电,不知道还能走多远。

    5 条回复    2025-09-05 10:54:54 +08:00
    levelworm
        1
    levelworm  
       22 小时 39 分钟前   ❤️ 1
    不错啊,我只能写 lc-3 的 disassembly 。。。
    DiamondY
        2
    DiamondY  
       16 小时 44 分钟前   ❤️ 1
    挺好的,star 一下
    OBJECTION
        3
    OBJECTION  
       16 小时 15 分钟前   ❤️ 1
    The world's fastest apk (android)/java open source decompiler
    用 C 语言实现的 Android/Java 反编译器

    就 fastest 我也要去 star 一下(虽然我看不懂也用不到)
    neocanable
        4
    neocanable  
    OP
       14 小时 58 分钟前
    @OBJECTION 不吹点儿牛逼,没人关注
    neocanable
        5
    neocanable  
    OP
       14 小时 57 分钟前
    @DiamondY 感谢
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1154 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 17:52 · PVG 01:52 · LAX 10:52 · JFK 13:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.