Trang 1 / 4 1234 LastLast
Hiển thị kết quả từ 1 đến 10 / 38
  1. #1
    Tham gia
    01-04-2009
    Location
    Việt Nam
    Bài viết
    251
    Like
    0
    Thanked 10 Times in 10 Posts

    Cần chú ý ! Công nghệ dịch ngược và kỹ thuật bảo vệ code - Cuộc chiến tranh hiện đại

    Bạn nghĩ gì về Hacker ?
    Bạn nghĩ gì về một CT đã biên dịch - mã hóa thành ứng dụng / thư viện ?
    Bạn nghĩ gì ... ?

    Dịch ngược là xấu, là gián điệp ! ...

    Dịch ngược là tốt, là tình báo ! Phạm Xuân Ẩn, 17 khoảnh khắc mùa xuân, Điệp viên 007 ...

    Nó góp phần phổ biến tri thức, kiến thức. Và do đó làm giảm giá, chống độc quyền; có lợi cho người sử dụng.

    Xe honda từ Nhật, tới xe honda Trung Quốc vài năm trước.
    Tên lửa, tàu ngầm, máy bay, ... Đức có trước Mỹ - Nga.

    Ở đây có thể trình bày, thảo luận về CÔNG NGHỆ DỊCH NGƯỢC ?
    Quote Quote

  2. #2
    Tham gia
    25-06-2006
    Bài viết
    1,790
    Like
    22
    Thanked 108 Times in 102 Posts
    hi, bạn có thể khởi đầu topic này bằng 1 bài viết về dịch ngược hoặc bảo vệ code không ?

  3. #3
    Tham gia
    17-01-2008
    Bài viết
    322
    Like
    4
    Thanked 21 Times in 20 Posts
    Bạn có thể nói cụ thể ngôn ngữ nào ko vd C, C++, C#. Chứ nói chung chung quá

  4. #4
    Tham gia
    01-04-2009
    Location
    Việt Nam
    Bài viết
    251
    Like
    0
    Thanked 10 Times in 10 Posts

    Ở đây chủ yếu nói về .NET (C# / MsIL)

    Ở đây chủ yếu nói về .NET (C# / MsIL)

    Người ta thường nói, nhà nước kém năng lực luôn đưa ra nhiều luật lệ vô ích để trói buộc công dân. Nhiều thầy bà nói không với goto, với malloc / realloc(cấp phát động API), với c để cổ xúy cho vb! Và hệ quả : rất nhiều LTV chỉ có thể làm việc trong VS, Suite - phụ thuộc hoàn toàn vào môi trường(enviroment) thu hẹp đó. Nó chẳng qua là công cụ autoCorrect / intelliSense, là toolBox kéo thả để dễ hình dung(visual) - một thể hiện tương ứng của code. Tôi thường xuyên làm việc trên VS và không phải là tất cả mọi c/v về LT.
    Cho tiện trình bày, về công cụ, tôi dùng Reflector / ILSpy, ildasm, ilasm(MSIL Disassembler) và Notepad++; dùng ngôn ngữ C#(bậc cao) , IL(bậc thấp) và thoảng hoặc dùng ngôn ngữ trung bình c để thể hiện những đoạn code.

    Trong C#(vs), tên(ident / name) với rất nhiều trói buộc mà IL không có. Nào là các ký tự alpha-numeric character, nào là keyword, nào là signature, ... Đi với ma mặc áo giấy vậy. SV tốn nhiều tháng trời để học luật, để phân biệt overloading / overriding để rồi compiling vứt bỏ tất ! MsIL / byteCode không sử dụng nó, không cần những luật lệ hoang phí mà NNBC đặt ra. Trong hàng rào an ninh nội địa, fireWall thần dân bị cách ly với thế giới thật. Hack trở thành ma. Trong 3D, 4 chiều là phụ thuộc tuyến tính, độc lập tuyến tính chỉ là 3!
    Trong không gian suy biến, tập con thu hẹp, thảng hoặc xuất hiện các hiện tượng kì dị khó diễn giải. Obfuscation, encryptation trở nên bí hiểm. Giải mã - dịch ngược là công việc bình thường của đời sống con người. Làm chìa - sửa khóa bên đường, hay trung tâm phục hồi - kiểm định xa tít đều làm như Hacker làm. Các phương tiện do thám (hàm ý xấu) đều có chung mục đích là để dòm. Ai đó sở hữu vũ trụ có lên án các vệ tinh, các viễn vọng đang quan sát, thu thập thông tin trong bầu trời ? Ai cấm bạn mua xe honda Nhật về tháo ra nghiên cứu (để hiểu, để làm nhái, hay để sửa lại tốt hơn) ? Bạn nghĩ gì về UFO, có cấm được nó ?
    Có nhiều cty s/x MT, ĐTDĐ, xe hơi, ... và n - 1 công ty nào trong đó vi phạm bản quyền với 1 cty còn lại ( nếu cty đó còn tồn tại và sở hữu tất cả các phát minh đến s/p !). Ai cấm tôi tìm hiểu code viết trong Java/NET !?

    Kỹ thuật bảo vệ hướng tới làm sao cho code sinh ra khó đọc, chống dịch ngược, chống debug. Nguyên tắc cơ bản, để chương trình( sau khi biên dịch / mã hóa) chạy được thì máy tính phải hiểu được các chỉ thị của nó( để thực hiện).

    A. Khó đọc
    Trong NNBC có nhiều định chế về định danh, về cấu trúc; các LTV thường đặt tên thân thiện, cấu trúc tường minh - dạng dư thừa thông tin. Ngược lại trong NNBT không cần phải vậy. Các định danh thân thiện( các ký tự printable, không trùng với KW, không ... và không ...) gắn ngữ nghĩa có thể chuyển thành các định danh trung tính( các ký tự unPrint, dài ngoằng, ...) đủ làm cho CT khó đọc. Mượn k/n trong SQL, định danh trong NNBC gắn liền với khóa ( primary key ) - dấu hiệu nhận dạng hàm (signature) : tên hàm và danh sách tham biến, không bao gồm kiểu trả về của nó. Trong NNBT( MsIL ) khóa bao gồm :
    data-type own-contain :: ident-name (1) - trong lệnh / chỉ thị, hoặc
    data-type ident-name (2) - trong khai báo ở lớp chứa
    Định danh là phần tử thuộc khóa trong NNBT.

    Ví dụ trong giả-IL có thể viết :
    .class x
    {
    // biến
    .field int32 x
    .field uint32 x
    // hàm
    .method int32 x()
    {
    ...
    }
    .method uint32 x()
    {
    ...
    }
    ...
    }
    nhưng không thể viết trong C#
    class x
    {
    int x; //biến trùng với lớp chứa
    uint x; //trùng với biến trên
    ...
    }
    Khó đọc còn nằm trong cấu trúc lệnh( control flow obfuscation ) - khó viết lại trong NNBC bằng cấu trúc tường minh. Các lệnh nhảy - điểm tới( label ) phóng khoáng làm một số công cụ view code bó tay. Việc khử bỏ các lệnh trung gian gây rối không quá phức tạp. Obfuscator.NET 2009 thường chèn các lệnh add, sub, mul, div, rem, shr, shl, and, or, xor (và không bao giờ thực hiện- làm CT to hơn, chạy chậm hơn) sau lệnh br, ret là ví dụ điển hình : Reflector báo lỗi nhưng ILSpy đọc được vô tư ! ILSpy chưa phải là thần dược .

    C#:
    namespace nA
    {
    internal sealed class InB
    {
    private uint du;
    private int d3;
    //
    public void g01(int A_1)
    {
    this.du >>= A_1;
    this.d3 -= A_1;
    }
    ...
    }
    }

    Assembly - MsIL tương đương :
    .class private auto ansi sealed beforefieldinit nA.AE
    extends [mscorlib]System.Object
    {
    .class auto ansi sealed nested assembly beforefieldinit InB
    extends [mscorlib]System.Object
    {
    ...
    .field private uint32 du
    .field private int32 d3

    //#define OBF
    // tắt chế độ mã hóa : control flow obf

    .method public hidebysig instance void
    g01(int32 A_1) cil managed
    {
    #ifdef OBF
    // Code size 59 (0x3b)
    .maxstack 10
    IL_0000: br.s IL_0024

    IL_0002: dup
    IL_0003: ldfld uint32 nA.AE/InB::du
    IL_0008: br.s IL_0027

    IL_000a: ldc.i4.s 31
    IL_000c: and
    IL_000d: shr.un
    IL_000e: stfld uint32 nA.AE/InB::du
    IL_0013: br.s IL_002a

    IL_0015: dup
    IL_0016: ldfld int32 nA.AE/InB::d3
    IL_001b: ldarg.1
    IL_001c: sub
    IL_001d: stfld int32 nA.AE/InB::d3
    IL_0022: leave.s IL_003a

    IL_0024: ldarg.0
    IL_0025: br.s IL_0002

    IL_0027: ldarg.1
    IL_0028: br.s IL_000a

    IL_002a: ldarg.0
    IL_002b: br.s IL_0015
    IL_003a: ret
    #else
    // Code size 32 (0x20)
    .maxstack 10
    IL_0000: ldarg.0
    IL_0001: dup
    IL_0002: ldfld uint32 nA.AE/InB::du
    IL_0007: ldarg.1
    IL_0008: ldc.i4.s 31
    IL_000a: and
    IL_000b: shr.un
    IL_000c: stfld uint32 nA.AE/InB::du
    IL_0011: ldarg.0
    IL_0012: dup
    IL_0013: ldfld int32 nA.AE/InB::d3
    IL_0018: ldarg.1
    IL_0019: sub
    IL_001a: stfld int32 nA.AE/InB::d3
    IL_001f: ret
    #endif
    } // end of method InB::h01
    ...
    } // end of class InB
    ...
    } // end of class nA.AE
    Ở đoạn code trên, chỉ cần bật sang chế độ mã hóa ( #define OBF ) thì các version ILSpy ( đến thời điểm này) đều báo lỗi.
    Một số kỹ thuật khác như references dynamic proxy (không làm được trong NNBC) làm CT càng khó đọc hơn nữa. Kỹ thuật khó đọc làm nản lòng nhiều Hacker.

    B. Chống dịch ngược :
    Một số công cụ như CodeVeil, SmartAssembly, có thể sinh code chống dịch ngược : không view được bằng Reflector / ILSpy, không dịch được bằng MSIL Disassembler

    C. Chống debug.
    Code sinh ra có khả năng chống debug là cần thiết.

    Dù kỹ thuật bảo vệ có tốt thế nào cũng không thể chống nổi công nghệ dịch ngược; MT hiểu được thì dịch ngược được vì Hacker hiểu và điều khiển MT !

  5. #5
    Tham gia
    24-11-2008
    Location
    Hồ nước ngọt Siêu Mặn - Nước Đắng Cay - Hành tinh Chua Lét
    Bài viết
    500
    Like
    78
    Thanked 76 Times in 56 Posts
    Cách mà tôi mã hoá password:
    sha-2(md5(hash_nhẹ(pass + salt)>));
    Giả sử pass của tôi là 123456 thì tôi nghĩ nếu không sử dụng dictonary thì hacker có thể dịch ngược được... trong vài chục năm.

    Chỉ là một ví dụ vui, nhưng thật sự các hệ thống hiện tại thường chỉ dừng lại ở md5 nên việc sử dụng những thư viện dịch ngược md5 đã quá phổ biến thì việc dịch ngược md5 hay các thuật toán phổ biến khác là một điều dễ dàng!

  6. #6
    Tham gia
    01-04-2009
    Location
    Việt Nam
    Bài viết
    251
    Like
    0
    Thanked 10 Times in 10 Posts

    Công nghệ dịch ngược và kỹ thuật bảo vệ code

    - CT có hoặc không sử dụng password !

    CT có sử dụng password, thì sẽ có điểm so trùng: (a)

    if(sha_md5_hash(password) != sha_md5_hash(pass + salt)){
    //...(1)
    Application.Exit();
    }

    Tôi không cần đến vài chục năm để tính :

    string pwd1 = sha_md5_hash(password);
    string pwd2 = sha_md5_hash(pass + salt);
    // (2) : đặt Breakpoint tại đây, chặn lấy kết quả.
    pwd1 = pwd2; // (2)
    if(pwd1 != pwd2){//true
    //...(1)
    Application.Exit();
    }

    hoặc đơn giản hơn comment khối so sai mật khẩu :
    if(sha_md5_hash(password) != sha_md5_hash(pass + salt)){
    //...(1)
    //Application.Exit();
    }

    Không cần giải mã password hay thuật toán mã hóa chi mất công.

    Bạn nói đúng khi nó áp dụng cho UD đặt trên Server và hacker không chạm đến các DLL được.
    Được sửa bởi Van8Hien62 lúc 13:31 ngày 07-12-2013
    DT 0906837125

  7. #7
    Tham gia
    01-04-2009
    Location
    Việt Nam
    Bài viết
    251
    Like
    0
    Thanked 10 Times in 10 Posts

    Một ví dụ mẫu -

    //Vietnamese, utf-8, font : Tahoma

    Giới thiệu vnReAct một công cụ mã hóa những ứng dụng (EXE/LIB) viết trên nền dotNET, một dị bản từ .NET Reactor.
    A. So với những obf-tool khác, nó có vài ưu điểm :
    - hỗ trợ ứng dụng viết bằng VC++
    - che kín code JIT ==> Native EXE
    B. So với những dị bản khác, bản *****, nó được viết mới bằng C# (Tất nhiên, sau khi biên dịch, nó được mã hóa bảo vệ. ) :
    - các chức năng của nguyên bản vẫn hoạt động bình thường
    - kết quả mã hóa của nó chạy được.
    C. So với nguyên bản, kích thước nó nhỏ hơn(, chạy nhanh hơn).
    - tách riêng, un-merge, các thư viện đi kèm : SkinSoft và Ionic.
    - sửa, tối ưu code; loại bỏ rác - salt code
    - bổ xung vài tính năng mới

    Link download:
    -http://www.4shared.com/file/O14xSAsIba/vnReAct_setup.html
    -http://www.fshare.vn/file/TF32MD6FYT#download

    Sau khi cài đặt - setup, vnReAct chạy :
    - trực tiếp, command line : cmdTest.bat
    - giao tiếp GUI : guiTest.bat / vnReAct.exe
    - chưa hướng tới ứng dụng web, Silverlight, phần mã hóa xap file : tôi không test; nó không hỗ trợ.
    - thay vì xuất MsgBox ở kết quả, tôi còn giữ lại ở command line mode; nó thay đổi version và icon của kết quả mã hóa.

    Thư mục Exam chứa ứng dụng mẫu : r66v.nrproj / r66w.nrproj để kiểm thử. Đối với những chương trình viết theo cấu trúc Reflector / SmartAssembly, ngay .NET Reactor ver 4.8 có sinh kết quả - nhưng kết quả không chạy được. Nên với tùy chọn khác ( √ Compress & Encrypt Resources) lên R66v.exe làm kết quả không chạy được là bình thường! Đó là một ứng dụng có phần đặc biệt : resources (chứa string encryption - preCompile code / semi source code) đã nén và mã hóa theo thuật toán SmartAssembly .
    Đối với các ứng dụng( exe/dlls ) viết trực tiếp ( bằng Visual Studio/SharpDevelop - full source code ) tôi chưa gặp lỗi nào.
    Để sử dụng Help, bạn copy Help folder của .NET Reactor vào vnReAct; hoặc ngược lại, copy vnReAct và Ionic.Zip.dll / Skin2.dll đến .NET Reactor.

    Liên hệ, ĐT : 0906.83.71.25, email : vn8hien62@yahoo.com
    DT 0906837125

  8. #8
    Tham gia
    13-10-2008
    Location
    www.vnfox.com
    Bài viết
    462
    Like
    0
    Thanked 10 Times in 10 Posts
    Đọc cái này cũng thấy HAY HAY ... nhưng đó giờ mình chỉ thấy có cái này de4dot là project hóa mã được nhiều obfuscation thôi ... còn mấy cái khác không work gì hết:

    https://github.com/0xd4d/de4dot

    Cho link để tham khảo nè

  9. #9
    Tham gia
    10-12-2004
    Location
    Hải phòng
    Bài viết
    52
    Like
    0
    Thanked 1 Time in 1 Post
    Tốt nhất là stop hack vớ vẩn, tập trung mà làm app đi thôi !!!
    Mấy đ/c học hack gần chục năm rồi, chưa thấy ai làm được trò gì cả

  10. #10
    Tham gia
    15-01-2014
    Bài viết
    145
    Like
    7
    Thanked 19 Times in 17 Posts
    Quote Được gửi bởi PhamTienSInh View Post
    Tốt nhất là stop hack vớ vẩn, tập trung mà làm app đi thôi !!!
    Mấy đ/c học hack gần chục năm rồi, chưa thấy ai làm được trò gì cả
    Ngồi hóng các thánh thôi, mình làm app cũng nhiều năm chưa nghĩ đến việc hack hit bao giờ.
    Phần mềm Livechat: chattructuyen24h[.]com

Trang 1 / 4 1234 LastLast

Bookmarks

Quy định

  • Bạn không thể tạo chủ đề mới
  • Bạn không thể trả lời bài viết
  • Bạn không thể gửi file đính kèm
  • Bạn không thể sửa bài viết của mình
  •