"同类软件的鼻祖” Seer 抄走了我的 GPL 代码去卖钱……

2017-07-30 22:02:37 +08:00
 xupefei

先放一张图:

真的如此吗?

背景

我在几个月前做了一个类似苹果系统 Quick Look 的工具(Github 链接;当时在 V2EX 发的帖子在此),开发初衷正是因为我觉得 Seer 不太好用,且不开源&收费的模式让我有些不爽。

之后经过不断地改进,在 0.2.0 版本中(链接),我加入了预览打开 /保存对话框中文件的功能。其他同类的软件,包括 Seer,都没有实现这个功能(可能是因为他们的对 Windows 底层的了解太弱了)。同时,为了保护我的成果不被随意使用,我把项目的开源协议从 LGPL 换成了更严格的 GPL,以保证没人能闭源使用用我的代码。然而,这对收费的闭源软件 Seer 来说并没有什么用。

Seer 抄了啥?

先给个简单的列表:

  1. 对话框 Hook 注入部分的代码
  2. 对话框 Hook 被注入的 DLL 的代码
  3. Directory Opus 兼容部分的相关代码
  4. (不确定)UWP 判断代码

有啥证据?

刚刚发布的 Seer 1.5.0 包含了上述抄袭的代码,而且抄走的代码逻辑几乎完全没有变化,能看着他的汇编完美还原出(我的)包含变量定义的源代码。 我在截图中附加了我代码中的一些注释便于各位理解;截图汇编来自 Seer 1.5.0 的 Seer.exe (1E44DB795A8D4D7CBE5D2024ECF168FF) 和 DlgHook.dll (161471A6F9785EA4A35887060B8743E1) 。右侧的代码来自这里

1. 对话框注入代码

Seer 的作者看上去并不是十分理解我代码的意思,因为他抄过去的代码没什么用……

为什么这么说呢?首先,我的程序是 64 位的,为了注入到 32 位进程里,我用了 IsWowProcess API 来判断 (i) 自身是否在 32 位上运行 (ii) 目标程序是否是 32 位。如果 (i) 不成立且 (ii) 成立,就调用一个独立的 32 位 Helper.exe 把 DLL 注入到目标进程里。然而,Seer 本身是 32 位进程且没有 64 位的 Helper。也就是说,他判断了好几次,最后啥都没干直接 return 了。

不过,令人欣慰的是 Seer 把 if(!isTragetWoW64)条件改了,没有盲目粘贴。

2. 对话框被注入的 DLL 代码

懒得解释了,一看就明白。 那个 WM_USER+7 不是我发现的,是网上流传的未公开消息。

3. Directory Opus 相关代码

Directory Opus 官方只给了一个独立的 exe 用以和第三方交互,而且这个 exe 只支持把结果写到文件里。于是乎,Seer 1.4.0 就每隔 0.x 秒运行那个 exe、写结果到文件、读文件,疯狂占用 CPU 和 IO。为了避免这个问题,我逆向了官方提供的那个 exe,发现了未公开的 WM_COPYDATA 消息(逆向结果在此)并用到了我的 QuickLook 里。

Seer 1.5.0 版本里就把它抄走了……哦不,没有完全照抄,作者把等待的 2000 毫秒改成了 800 毫秒。不过这也太明显了吧,连前四行 if 判断都没改就放进来了。

4. UWP 判断代码 (不确定)

我不确定 Seer 作者是不是自己发现判断 ERROR_INSUFFICIENT_BUFFER 就够了,而不用申请内存后再次调用(网上的代码大都是两次调用)。

发帖的诉求是啥?

看到这里,相信各位已经对是否抄袭这个事实有一个结论了。我的代码受 GPLv3 协议的保护:任何使用它的人都必须遵守协议,把所有相关代码以 GPLv3 协议开源。既然 “ decent ” 是 Seer 的作者 idealistcorey 非常看重的东西,那么请自觉遵守 GPLv3 协议,把 Seer 1.5.0 版本的代码以 GPLv3 协议开源,即使你接下来把相关代码完全重写

另外要告诫 Seer 作者:别人的代码不是复制粘贴就可以的

最后作为对比,人家 Sekai Project 就很有版权意识,就算是想要用用 LGPL 协议的 Locale Emulator 都先来发个邮件问问:

更别说大企业了:

谢谢各位读到这里。

PS:某人的水平也太差了吧,对话框 HOOK 的 Helper.exe 源代码都在那儿,你都抄不走?

24849 次点击
所在节点    程序员
158 条回复
quinoa42
2017-07-31 16:48:02 +08:00
感谢楼主写了 LE
breaklayer
2017-07-31 16:50:47 +08:00
支持 lz,抄代码卖钱垃圾 Seer 大写的恶心
xupefei
2017-07-31 17:28:46 +08:00
Seer 作者和我邮件沟通了。他表示因为代码中使用了一些属于公司的代码,所以无法开源。我表示无能为力。
邮件里说的“以前”指的是几年以前我曾经帮助他修复了文本框的识别问题。当时 Seer 好像还是免费软件来着。具体请搜索 “ Windows 有没有类似 MAC 中的 quicklook 功能的软件啊? zhihu ”

auhah
2017-07-31 17:30:06 +08:00
膜拜大佬。
bookit
2017-07-31 17:34:42 +08:00
自我标榜的一般不是好东西
verrickt
2017-07-31 17:39:32 +08:00
持续关注
mcone
2017-07-31 18:13:12 +08:00
这种协议污染 可不是简单下架撤回这么简单啊 不然的话违法成本这么低 协议还有什么用 都给成 WTF 协议好了

另外 这个作者难道没有 v2 账号吗 个人是不太相信的这种无力的解释的……
bolide2005
2017-07-31 18:16:51 +08:00
收藏了,持续关注,支持楼主
harry890829
2017-07-31 18:18:13 +08:00
啊,不知道能否和大佬讨论下 Windows 下钩子的问题,我最近正好在捕捉扫码枪的东西,但是效果并没有想象中的好
Lawlieti
2017-07-31 18:26:42 +08:00
3000 就解决完事了?
fyxtc
2017-07-31 18:27:55 +08:00
尼玛,我就说一句。。。如果楼主没有反汇编这种技术,是不是这个事永远不会被发现?一方面反映了国内确实版权意识太低,另一方面是不是也体现出如果没有对应的技术能力,连自己的版权都维护不好。退一步说,就算现在发现了,还不知道这个事有没有个信服的结果。。好忧伤的感觉
xupefei
2017-07-31 18:53:19 +08:00
各位对软件有疑问/建议的,还请去 Github 发 issue,这里要跟进太麻烦了。

@dangge 4K 显示器+DPI 200%+Chrome 原生 DirectWrite。
@Lawlieti 我没要钱。
@fyxtc @mcone 他在个人项目里“用公司代码”和“用我的代码”是两回事儿。他要怎么解决这个冲突我不知道,和帖子里的这件事儿也无关,等后续吧。不过就算接下来没有后续我也不会觉得奇怪。
mritd
2017-07-31 19:08:07 +08:00
以用公司代码为理由就糊弄过了? 人做事要承担后果,杀了人 来一句 我得照顾父母就完了,GPL 闹着玩呢
ysc3839
2017-07-31 19:45:41 +08:00
@harry890829 扫码枪?是不是扫码后会直接模拟键盘输入?你想通过软件读取?
mikeven
2017-07-31 20:09:49 +08:00
居然是 LE 的大佬!!
lzsadam
2017-07-31 20:10:12 +08:00
楼主这样的人应该再多一些,支持维权,关注后续结果。
tairan2006
2017-07-31 20:32:45 +08:00
支持楼主~

不过看来对方的态度也很好,就私下解决吧~
ErnestChan
2017-07-31 20:48:43 +08:00
@1ychee #16 avast 你们有优惠渠道吗?学生想入正版,又有些不舍得剁手。
tomczhen
2017-07-31 21:01:25 +08:00
@tairan2006
有私下解决这种操作?

GPL 开源项目作者可以私下允许开源代码被他人闭源商用?

这样理解的话,开源协议中对引用开源代码者的相关要求是源码所有者的权利而非开源协议的权利?

退一步讲,就算作者本身不追责,也改变不了侵权者违反开源协议使用开源代码的事实吧?

那么“私下解决”该是如何操作呢?
tomczhen
2017-07-31 21:07:23 +08:00
@harry890829
刚好对条码枪这块有点了解,不过对 Windows 钩子这块没什么了解。

条码枪有两种工作模式,一种是键盘模式,一种是串口模式。

键盘模式下就是模拟键盘输入,如果想单独监听条码枪,个人感觉除非可以识别到输入来自具体的设备信息才有可能实现单独监听条码枪。

至于串口模式,一般低端型号是没有这种工作模式的,支持串口工作模式的条码枪通常需要设置之后才能启用(扫描特殊条码的方式设置,各个厂家有差异,甚至同厂家不同型号也有差异)。

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

https://www.v2ex.com/t/379088

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

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

© 2021 V2EX