开源日记 - garlic decompiler

2 天前
 neocanable
  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


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

886 次点击
所在节点    程序员
5 条回复
levelworm
2 天前
不错啊,我只能写 lc-3 的 disassembly 。。。
DiamondY
2 天前
挺好的,star 一下
OBJECTION
2 天前
The world's fastest apk (android)/java open source decompiler
用 C 语言实现的 Android/Java 反编译器

就 fastest 我也要去 star 一下(虽然我看不懂也用不到)
neocanable
2 天前
@OBJECTION 不吹点儿牛逼,没人关注
neocanable
2 天前
@DiamondY 感谢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/1157182

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX