0x0
navicat 给公司发律师函了, 所以不能白嫖了..
后来一直在找替代品, 但均感觉略有不足.
dbeaver : java 开发的, 依赖 jdk , 而且BUG较多,也不流畅
mysqlworkbench : 官方出品, 功能强大. 但是用着不带劲
Sequel Ace : 开源免费, 但是只支持mysql,功能简单
最后试了下 Tableplus , 感觉还不错. 颜值高, 支持的协议多,跨平台.
免费版有很多限制, 所以今天试了简单逆向了下..
0x1
环境:
Tableplus Version 5.3.8 (500) (https://tableplus.com/)
ida64
hopper
0x2
免费版有如下限制, 我们可以从这些关键字入手
- 只能打开俩个查询Tab页
- 只能打开俩个窗口
- 只能添加俩个where条件
hopper 搜索 str "Free Trial limited 2" , 定位到这些str的内存地址
__cstring:00000001006BF130 00000020 C Free Trial limited 2 workspaces
__cstring:00000001006C74D0 0000001A C Free Trial limited 2 tabs
__cstring:00000001006CC220 0000001D C Free Trial limited 2 filters
0x3
分析0x2的第一个变量地址, 查看引用.这里有三个引用, 先看第一个.
进入到函数首 , 看到这块有个关键跳转.
在这里下断,然后依次 Command + T 增加tab 页 ,分析得出以下结论
call sub_1002a56b0 ; sub_1002a56b0 这个函数应该是取当前tab页数量,复值给 rax
cmp rax, 0x2 ; 将 rax 与 2 做比较, 这里的 2 就是限制条件
mov qword [rbp+var_38], r13
jl loc_1000c17c1 ; rax<2 是跳转成立, 否则会执行弹框
这里要爆破就很简单了,
jl loc_1000c17c1 > jmp loc_1000c17c1.
至于另外俩个关键字也是一样的方式..
## -----------
__cstring:00000001006BF130 00000020 C Free Trial limited 2 workspaces
__text:00000001000C16EB cmp rax, 2
__text:00000001000C16EF mov [rbp+var_38], r13
__text:00000001000C16F3 jl loc_1000C17C1 , jl > jmp
## -----------
__cstring:00000001006C74D0 0000001A C Free Trial limited 2 tabs
__text:00000001001F90C2 cmp rbx, 2
__text:00000001001F90C6 mov r13, r15
__text:00000001001F90C9 jl loc_1001F9184 , jl > jmp
## -----------
__cstring:00000001006CC220 0000001D C Free Trial limited 2 filters
__text:00000001002EA3E0 cmp r14, 2
__text:00000001002EA3E4 mov [rbp+var_58], r13
__text:00000001002EA3E8 jl loc_1002EA4AE , jl > jmp
0x4
用 ida 修改 jl > jmp .
然后保存 (不用 hopper 修改是因为穷)
保存完之后记者重新加签
target_app=/Applications/TablePlus.app
sudo xattr ${target_app}
# 删除签名
sudo xattr -r -d com.apple.quarantine ${target_app}
sudo xattr -cr ${target_app}
# 重新签名。
sudo codesign -f -s - --deep ${target_app}
由于 free ida 不支持修改 arm , 只支持 x86 架构的修改
所以 m1/m2 系列 , 请用 Rosetta (兼容模式)打开 软件