I've found a company in China selling a software that is clearly a copy of my own work. For context, this is actually a physical product that comes with a Ubuntu computer and the software pre-installed on it.
I've acquired this product and inspected some of the things. I see all the libraries are identical on their system as on my own. The auxiliary files used by the app are named identically as for my program. The format of these files are identical. And many other things that, in the end, for me, leave no doubt about the infringement.
But when I compared the executable binaries, theirs is double the size in MB. Plus, I don't see any similarities when comparing byte for byte. I try reverse compiling my executable with Ida Pro, and I can do it. All the function and variable names are obfuscated but I can see the assembler code. When I open my executable with Ida, a pop-up appears where I select that it's a "ELF64 for x86-x64 (Executable)".
When I open their executable in IdaPro, I get the same popup, but it doesn't offer me the option of ELF64. Instead, it just offers the option "Binary file".
I press Yes, I finally get this.
I press OK, and then I see a hex view of the literal bytes in the executable. And I'm supposed to find the entry point?
I'm not even mad, this is great job. I wish I knew how to protect my code in this way.
- Is there a way that they could have used my executable and then somehow re-compiled it so that it's different but still be able to execute?
- How would you go about gathering proofs of infringement from a technical standpoint. That is, I'm not looking for an opinion from a Law expert. Just from a technical standpoint, I see binary similarity as the best form of evidence of infringement.
EDIT: I'm sharing the first segment of my own app vs the copied app.
My app:
7F 45 4C 46 02 01 01 03 00 00 00 00 00 00 00 00
02 00 3E 00 01 00 00 00 90 F7 42 00 00 00 00 00
40 00 00 00 00 00 00 00 D0 14 52 00 00 00 00 00
00 00 00 00 40 00 38 00 0A 00 40 00 21 00 20 00
06 00 00 00 05 00 00 00 40 00 00 00 00 00 00 00
40 00 40 00 00 00 00 00 40 00 40 00 00 00 00 00
30 02 00 00 00 00 00 00 30 02 00 00 00 00 00 00
08 00 00 00 00 00 00 00 03 00 00 00 04 00 00 00
70 02 00 00 00 00 00 00 70 02 40 00 00 00 00 00
70 02 40 00 00 00 00 00 1C 00 00 00 00 00 00 00
1C 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00
01 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00
00 00 40 00 00 00 00 00 00 00 40 00 00 00 00 00
A9 82 51 00 00 00 00 00 A9 82 51 00 00 00 00 00
00 00 20 00 00 00 00 00 01 00 00 00 06 00 00 00
B8 89 51 00 00 00 00 00 B8 89 B1 00 00 00 00 00
B8 89 B1 00 00 00 00 00 B4 89 00 00 00 00 00 00
78 6D 01 00 00 00 00 00 00 00 20 00 00 00 00 00
02 00 00 00 06 00 00 00 78 F9 51 00 00 00 00 00
78 F9 B1 00 00 00 00 00 78 F9 B1 00 00 00 00 00
20 05 00 00 00 00 00 00 20 05 00 00 00 00 00 00
08 00 00 00 00 00 00 00 04 00 00 00 04 00 00 00
8C 02 00 00 00 00 00 00 8C 02 40 00 00 00 00 00
8C 02 40 00 00 00 00 00 44 00 00 00 00 00 00 00
44 00 00 00 00 00 00 00 04 00 00 00 00 00 00 00
07 00 00 00 04 00 00 00 B8 89 51 00 00 00 00 00
B8 89 B1 00 00 00 00 00 B8 89 B1 00 00 00 00 00
00 00 00 00 00 00 00 00 10 00 00 00 00 00 00 00
08 00 00 00 00 00 00 00 50 E5 74 64 04 00 00 00
30 A9 4C 00 00 00 00 00 30 A9 8C 00 00 00 00 00
30 A9 8C 00 00 00 00 00 1C 77 00 00 00 00 00 00
1C 77 00 00 00 00 00 00 04 00 00 00 00 00 00 00
51 E5 74 64 06 00 00 00 00 00 00 00 00 00 00 00
Infringing app:
2a c5 e6 c6 57 fc ab fe 55 ff aa ff 55 ff aa ff
57 fd 94 fd 54 fe aa fe 95 c9 e8 3f 55 ff aa ff
15 bf aa bf 55 ff aa ff fd 83 fb 57 55 ff aa ff
55 ff aa ff 15 bf 92 bf 5f f5 ea f5 75 df b5 df
53 f9 aa f9 51 fb aa fb 15 bf aa bf 55 ff aa ff
15 bf ea bf 55 ff aa ff 15 bf ea bf 55 ff aa ff
65 cd aa cf 55 ff aa ff 65 cd aa cf 55 ff aa ff
5d f7 aa f7 55 ff aa ff 56 fc aa fc 51 fb aa fb
25 8d aa 8f 55 ff aa ff 25 8d ea 8f 55 ff aa ff
25 8d ea 8f 55 ff aa ff 49 e3 aa e3 55 ff aa ff
49 e3 aa e3 55 ff aa ff 54 fe aa fe 55 ff aa ff
54 fe aa fe 50 fa aa fa 55 ff aa ff 55 ff aa ff
55 ff ea ff 55 ff aa ff 55 ff ea ff 55 ff aa ff
7c e4 fb d6 55 ff aa ff 7c e4 fb d6 55 ff aa ff
55 ff 8a ff 55 ff aa ff 54 fe aa fe 53 f9 aa f9
8d 66 fb 27 55 ff aa ff 8d 66 1b 27 55 ff aa ff
8d 66 1b 27 55 ff aa ff 29 12 aa 83 55 ff aa ff
0d cd ab a7 55 ff aa ff 55 ff 8a ff 55 ff aa ff
57 fd aa fd 53 f9 aa f9 35 24 fb 9f 55 ff aa ff
35 24 1b 9f 55 ff aa ff 35 24 1b 9f 55 ff aa ff
a5 0d aa 0f 55 ff aa ff a5 0d aa 0f 55 ff aa ff
5d f7 aa f7 55 ff aa ff 51 fb aa fb 51 fb aa fb
d9 71 aa 73 55 ff aa ff d9 71 ea 73 55 ff aa ff
d9 71 ea 73 55 ff aa ff 11 bb aa bb 55 ff aa ff
11 bb aa bb 55 ff aa ff 51 fb aa fb 55 ff aa ff
52 f8 aa f8 51 fb aa fb 8d 66 fb 27 55 ff aa ff
8d 66 1b 27 55 ff aa ff 8d 66 1b 27 55 ff aa ff
55 ff aa ff 55 ff aa ff 45 ef aa ef 55 ff aa ff
5d f7 aa f7 55 ff aa ff 05 4a de cb 51 fb aa fb
f5 c1 e6 5f 55 ff aa ff f5 c1 26 5f 55 ff aa ff
f5 c1 26 5f 55 ff aa ff 69 b6 aa c3 55 ff aa ff
69 b6 aa c3 55 ff aa ff 51 fb aa fb 55 ff aa ff
04 4b de ca 53 f9 aa f9 55 ff aa ff 55 ff aa ff
It looks like it's xorred with some pattern but not quite. Also, they might have started with a slightly different version of my code. Depending on the exact build they used.