Nhà sản xuất đã giấu source code java của ứng dụng Desktop như thế nào

Em đã tìm nhiều nguồn về vấn đề bảo vệ source code .jar nhưng điều thấy khả năng lấy code là cao. Vậy cho em hỏi các nhà sản xuất họ giấu source code đi đâu để không bị lộ công nghệ, khi em mở đường dẫn cài ứng dụng thấy chỉ có các file không phải source code (đánh giá cá nhân) ví dụ như Intellij IDE .Mong mọi người có thể giải đáp
Em cảm ơn.

Đơn giản là bên trong file jar đã được compile từ source code (file java) sang bytecode (file class), mà file class là bytecode không đọc được
Tuy nhiên người ta vẫn có cách dịch ngược file class sang file java qua phần mềm decompiler

VD với app Android viết bằng Java

Để tránh bị decompiler thấy hết code, mà lại dễ nhìn, người ta sử dụng các phần mềm làm rối code trước khi compile

5 Likes

Dùng một số cách để Encode Source Code như ProGuard chẳng hạn :slight_smile:

Có 1 sự thật là lập trình viên - programer không quan tâm lắm tới việc bảo vệ source code thì phải. Hồi mình có hỏi trên diễn đàn delphi, k mấy ai hứng thú, cũng đc 3-4 năm rồi.

Việc bảo vệ source code thì có nhiều cách, nhưng có 1 kỹ thuật có tên chung là Obfuscation - làm rối code. Làm rối thì có nhiều công đoạn làm rối, ví dụ thay vì Print('password') thì có thể viết

if(0){print('wrongpass') else print('password')}

Các câu lệnh rẽ nhánh dạng này khi dịch sang mã máy làm người đọc code khá mệt. Ví dụ này mình lấy của bên dotnet của hãng Confuser hay cái gì mình không nhớ lắm.

Cách nữa là can thiệp vào quá trình biên dịch. Kiểu từ đoạn code trên netbean làm sao ra được file .jar? Rồi từ .jar làm thế nào họ decompile ra được code ban đầu? Hiểu được quá trình ấy, sẽ đưa ra phương án phá vỡ cách mà các tool hiện thời sử dụng để decompile file .jar. Nghĩa là nếu chỉ dùng tool, thì tất cả các tool hiện hành sẽ chết. Vậy là tạm bảo vệ được code.

Nói tạm là vì nó đã có tool thì thằng bán tool phải update tool, nó sẽ tìm ra cách để hóa giải phương pháp trên.

Bạn có thể tìm theo từ khóa obfuscation thêm chữ java đằng sau để hiểu, và thêm cả de-obfuscation để tìm ra các cách người ta dùng để chống kỹ thuật obfuscation. Có thể thấy việc này không đơn giản nên thường sẽ giao phó cho tool. Vậy nên developer thường sử dùng dịch vụ của hãng thứ 3 để bảo vệ code.

Nó giống việc crack vậy, có software thì có crack cho software đó. Cái gì đã ở trong code thì nó sẽ bị bung ra :smiley:
Muốn bảo vệ đc thì chắc là học thêm cách phá đi :smiley: lấy ví dụ là lập trình viên thường được dậy là reuse code, viết 1 lần sử dụng nhiều chỗ. Thế giờ viết hàm isPremium xong sử dụng lúc mở app, lúc đăng ký app, lúc sử dụng tính năng x, y, z để check user. Giờ chỉ cần phá đúng 1 hàm isPremium đấy trong app là coi như app đấy đi tong, như vậy là reuse code có thực sự tốt :stuck_out_tongue:

j/k

đùa thôi, nó tốt vì không ai lại đi tự làm khó mình cả :smiley: maintain app chỉ sửa 1 chỗ là xong, ai lại đi sửa mấy chỗ :smiley:

4 Likes

Chương trình Delphi không giống như .NET, không cần quan tâm lắm đến việc bảo vệ sources.
.NET có thể dịch ngược được, Delphi chỉ có thể dịch sang mã assembly hoặc hiển thị được cấu trúc form là cùng.
Có một số tool dịch ngược được delphi phiên bản cũ, delphi for .NET, nhưng bây giờ đều không xài được.
Làm rối mã còn có một số cách khác như đổi tên biến, hàm, … thành những cụm từ khó đọc kiểu như XHD4HSJFSD, … gây khó khăn khi decompile.
(Cho mình xin link diễn đàn delphi ấy với)

2 Likes

Chương trình nào mà k cần bảo vệ bạn ơi ^^~ Delphi thì k thuộc dạng JIT compiler nên nó sẽ là có thứ gọi là Packing, bọc 1 lớp bên ngoài file exe, những thứ làm nhiệm vụ đi pack cái khác gọi là packer, cái mà để phá packer thì gọi là unpacker, nghệ thuật viết ra unpacker gọi là unpacking

Tất cả cái bạn nói chỉ là decompile thôi và bạn nói hơi sâu vào Delphi rồi (và mình k nhớ cái diễn đàn ấy đâu). Nó khác nhiều với bài mình, bài của mình tập trung vào cái tổng quát hơn.

Delphi nói riêng và exe nói chung (không phải wrapper - kiểu python là ngôn ngữ script, build thành exe thì file exe chỉ là wrapper để chạy script ấy chứ nó k phải exe thực) thì hoàn toàn có thể dùng trình Debug để dịch sang mã máy. Và để hiểu thì ta đọc mã máy thôi, giống hệt đọc code, có gì khác đâu (khoai hơn tí :D)

Cái này gọi là Reversing Engineering, hiểu nôm na là “dịch ngược”, có dịch ngược phần cứng, dịch ngược phần mềm, dịch ngược thuật toán (thuật toán search của google chẳng hạn, để tối ưu SEO)
Cái bạn thớt nói là dịch ngược phần mềm. Hay nhánh nhỏ của nó là Crack software. Các tool debug mà mình còn nhớ là OllyDebugger, immunity debugger, IDA Pro, Gdb, những cái đó cho window (exe) hay *nix (elf). Android thì nó là dex2jar.
Cơ hội việc làm chính là đi phân tích mã độc, mã độc cũng do lập trình viết, có thể là exe trên window, apk trên android, javascript trên web, nhiệm vụ vẫn cứ là bung con virus ra đọc hiểu code, chứ tác giả nó hok có gửi cho source code đâu :stuck_out_tongue:
Các bạn có hứng thú thì cứ google từ khóa trên, sẽ có cái cho các bạn học, tiếng việt luôn ^^~ Nhưng để nâng cao thì tiên quyết vẫn là tiếng anh.

4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?