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

    Ý tưởng mới ! Kỹ thuật bảo vệ code trong ngôn ngữ lập trình

    Kỹ thuật bảo vệ code trong ngôn ngữ lập trình ( NNLT ). 1/ trên Ms Sql Server
    Trong xã hội, một công dân : có trách nhiệm với việc mình làm; mỗi người trưởng thành có giấy tờ và chữ ký riêng : tránh mạo nhận với người khác.
    Chương trình máy tính ( CT ) cũng nên như vậy, tránh bị thay đổi ngoài ý muốn ( trừ khi chương trình là mã nguồn mở ). Để bảo vệ ( hay tự vệ ), chúng ta cần biết những kỹ thuật dùng trong NNLT đang ( hoặc sẽ ) sử dụng. Kỹ thuật bảo vệ có khá nhiều, có thể thực hiện ở nhiều giai đoạn khác nhau trong quá trình thực hiện : viết code, biên dịch hoặc sau khi hoàn thành kiểm thử.

    Lấy ví dụ NNLT là MS Sql Server :
    1. Khi viết code / script chúng ta có thễ dùng các ràng buộc nội tại như Uddt / Domain; tùy chọn With ENCRYPTION

    | SCHEMABINDING.
    2. Sau khi Test xong, chúng ta có thễ dùng thay đổi alter với bổ xung With ENCRYPTION | SCHEMABINDING
    3. Viết xong, chúng ta có thể dùng những CT hỗ trợ, chẳng hạn xp_crypt, sqlshield

    Kỹ thuật bảo vệ code trong MS Sql Server không chỉ dừng ở các giai đoạn trên, người ta có thể dùng cách lẩn trốn, biến đổi trong quá trình hoạt động của CT bằng sự hỗ trợ của hệ thống. Lấy ví dụ:
    ...
    if @ValK= @ConsA then begin
    exec stmtL @parN
    --lẩn trốn
    xp_rename stmtL stmtP
    --những hoạt động khác
    end
    else if @ValK= @ConsB then begin ...

    Kỹ thuật bảo vệ code còn có thể áp dụng cho cả script / code trong việc lưu trữ, nói thế nào nhỉ, không phải bằng cách mã hóa nhờ CT khác bên ngoài, mà bằng chính các hàm UnDocument của MS Sql Server. Lấy ví dụ :

    --HIDE PROCEDURE PC_INSERT_UDF
    exec(decrypt(0x6C89D9ED5855DC612DE79ACF1375757E59F 829474465741AE290B37283AE8A3B4079CF902499C8C01013A D4BD06C4F3E6440A51EEE82F025D03977DEDE395E0CA9CAFC9 7BE2D33CCC9C6AABD2DFDE0D082A9E6528A2B780D6CB679EFF E95B51AD6676AB40462ACF88EE9ED5C8377EFD843C472FF771 C99ACFE106404E8DF2E5790C90E7D49E7D88B14A88B551862E EA08D39DF566FB97A4984988697EA4E60076DA2D1876318912 4C80DEAF8A6F0AAAF1CB8518D664E31C9D297E926E723F2981 72FE3578C0F192C9C859423F8AAC8A0CA1D7A538092334E214 AE3505CDAD10805D81EC84AE8E246AB1D69BB4606419F21186 A6D0CDF7CE278006E63F4274241C28D2F8D2960F2B32DDFEE3 23CC76F2A64375462CB56E3DE762B98C123AE08223C051A12C 2EEEAF5E064807D1667C359F023C90D1B931146D28197BBEC7 DE2F5F8F847CA84656ACDF03B9682A11C27D7C336D42A479AE 67C7C5A45C9B68C904B86CBBA5E9D1903824A3EC8CEA1136E5 E32328B376DC941BD0D514A70D31C3F84F3ABD3ECD8636EC4A AAB54307939DFB8C222755A3DBD397ED041EC8376F4C9EA093 37CEFB0B9AE5DB74D2605E2BD47754336F96F3F0BDE0A324BE E5EFFA4E440DCBF56891C9C6551FC014B2F6383F46F67348BF 7352906547ADF850BCF8E5BAD9743156F420C09A285E37D281 6B4BD76291AD927A1B4F2920AB429005F3F8C8818A558FD8D5 90C292F1A80A1B52AB3AFAF49F665801A6D09AF0D734F5445D 62C3DE8B75D153F951235A62EA3DFB36BEA11C2A67F60D6F79 FE8E8871B66D2AA8A34614BDF9EC3DC2D0E4D088F39A7841A1 65B60FC7BDC96045A672AC9BC253550DA525C0CF53DECBCCF2 1BA9A8F77E8F540935D65ADB2DEB5ECC2C128781675327BE72 18E0CD33AF5914FE0106DD4EB0E09B25DB4451692AFAC92E66 9CEE41E5A77F7BF8288D8DA331BD4FB9F0B803143165B77B42 F4366AABD6DF7166BC4E5A0F6D9F97F2FED5A2225203C71D99 393030D1E16C38FCECE144882E17DA9B85E93B54A0C3363123 E802E8183E96430112662CD8653A38B306DC4CC0F716762535 BAF8C08EE098A907D376A6F97945D670E9ED674F0F8956F964 A52E3B1D4DEBC43E2756B500A5AC8A0E584E9792315B224214 3653494DE418F7CB4E4472D4A53440DDCC71A39FB8036569EE 4A92279BB6D371D79D42788C3E33ECCBE9786C8EE483EC6BB9 826650094E9CA4282749F1D00F4687B8F6E498CFAAC1134C9F C4CAEA39B6A0823C6A4E1B8FDE1F1FFA8CAB2D94337481DD1B 999C378BF3A049EFA08DBD315B9D467771E0879807EC84F54E D68D9CA0754B77229AE29720514A0548D33A92A86AEA4B8D11 842087B8B4D593EDBF8EF5B73253C2625EEBC55F1D09446A27 4B1F83D1BD9D9F1763BD6C05576F7BCC8F755B5F023468F69D DB64FDAFE9DECFF2D30C893C80D2493697E9DC5AA8666EF257 C7A0F1F680B2289C3CC439A1C7D0B6820AA6D3557D85AB37EA 1010E1DA4E854CB9AADFB8BBB1E4F649B6F075BC5C43038BF
    ))
    go

    bạn có thể thực hiện ( script đã được bảo vệ, mã hóa này ) trong Sql Server 2000 / 2005 ( tôi chưa thử trong 2008 )

    Mong các bạn sửa chữa và bổ xung những sai sót của bài viết.
    Cám ơn sự quan tâm của các bạn.
    /*
    Script có thể bị biến dạng, nó là chuổi vaBinary, hoặc gửi tin nhắn / mail đến tôi Van8Hien62@yahoo.com
    */
    Quote Quote

  2. Thành viên Like bài viết này:


  3. #2
    Tham gia
    18-06-2009
    Bài viết
    11
    Like
    0
    Thanked 2 Times in 2 Posts
    Không biết các biện pháp khác hoạt động như thế nào chứ cái ENCRYPTION trong MS SQL Server bị người ta mở ra tuốt luốt. Cái này chỉ bảo vệ mã khỏi những tay mơ thôi.

    Những biện pháp như "lẩn trốn" hay mã hóa câu lệnh chỉ làm cho việc bảo trì hệ thống rối rắm thêm mà thôi.

  4. Thành viên Like bài viết này:


  5. #3
    Tham gia
    20-02-2009
    Location
    Ninh Bình
    Bài viết
    567
    Like
    0
    Thanked 34 Times in 31 Posts
    --HIDE PROCEDURE PC_INSERT_UDF
    exec(decrypt(0x6C89D9ED5855DC612DE79ACF1375757E59F 829474465741AE290B37283AE8A3B4079CF902499C8C01013A D4BD06C4F3E6440A51EEE82F025D03977DEDE395E0CA9CAFC9 7BE2D33CCC9C6AABD2DFDE0D082A9E6528A2B780D6CB679EFF E95B51AD6676AB40462ACF88EE9ED5C8377EFD843C472FF771 C99ACFE106404E8DF2E5790C90E7D49E7D88B14A88B551862E EA08D39DF566FB97A4984988697EA4E60076DA2D1876318912 4C80DEAF8A6F0AAAF1CB8518D664E31C9D297E926E723F2981 72FE3578C0F192C9C859423F8AAC8A0CA1D7A538092334E214 AE3505CDAD10805D81EC84AE8E246AB1D69BB4606419F21186 A6D0CDF7CE278006E63F4274241C28D2F8D2960F2B32DDFEE3 23CC76F2A64375462CB56E3DE762B98C123AE08223C051A12C 2EEEAF5E064807D1667C359F023C90D1B931146D28197BBEC7 DE2F5F8F847CA84656ACDF03B9682A11C27D7C336D42A479AE 67C7C5A45C9B68C904B86CBBA5E9D1903824A3EC8CEA1136E5 E32328B376DC941BD0D514A70D31C3F84F3ABD3ECD8636EC4A AAB54307939DFB8C222755A3DBD397ED041EC8376F4C9EA093 37CEFB0B9AE5DB74D2605E2BD47754336F96F3F0BDE0A324BE E5EFFA4E440DCBF56891C9C6551FC014B2F6383F46F67348BF 7352906547ADF850BCF8E5BAD9743156F420C09A285E37D281 6B4BD76291AD927A1B4F2920AB429005F3F8C8818A558FD8D5 90C292F1A80A1B52AB3AFAF49F665801A6D09AF0D734F5445D 62C3DE8B75D153F951235A62EA3DFB36BEA11C2A67F60D6F79 FE8E8871B66D2AA8A34614BDF9EC3DC2D0E4D088F39A7841A1 65B60FC7BDC96045A672AC9BC253550DA525C0CF53DECBCCF2 1BA9A8F77E8F540935D65ADB2DEB5ECC2C128781675327BE72 18E0CD33AF5914FE0106DD4EB0E09B25DB4451692AFAC92E66 9CEE41E5A77F7BF8288D8DA331BD4FB9F0B803143165B77B42 F4366AABD6DF7166BC4E5A0F6D9F97F2FED5A2225203C71D99 393030D1E16C38FCECE144882E17DA9B85E93B54A0C3363123 E802E8183E96430112662CD8653A38B306DC4CC0F716762535 BAF8C08EE098A907D376A6F97945D670E9ED674F0F8956F964 A52E3B1D4DEBC43E2756B500A5AC8A0E584E9792315B224214 3653494DE418F7CB4E4472D4A53440DDCC71A39FB8036569EE 4A92279BB6D371D79D42788C3E33ECCBE9786C8EE483EC6BB9 826650094E9CA4282749F1D00F4687B8F6E498CFAAC1134C9F C4CAEA39B6A0823C6A4E1B8FDE1F1FFA8CAB2D94337481DD1B 999C378BF3A049EFA08DBD315B9D467771E0879807EC84F54E D68D9CA0754B77229AE29720514A0548D33A92A86AEA4B8D11 842087B8B4D593EDBF8EF5B73253C2625EEBC55F1D09446A27 4B1F83D1BD9D9F1763BD6C05576F7BCC8F755B5F023468F69D DB64FDAFE9DECFF2D30C893C80D2493697E9DC5AA8666EF257 C7A0F1F680B2289C3CC439A1C7D0B6820AA6D3557D85AB37EA 1010E1DA4E854CB9AADFB8BBB1E4F649B6F075BC5C43038BF
    ))
    go
    Bạn Van8Hien62 có vẻ tự hào về đoạn code trên, cho nên hết bỏ url cho anh em xem (rất nhiều lần), lại tiếp tục... posted lên cho anh em xem...

    Thú thật, tôi viết code cho SQL đã nhiều năm, kể cả viết cho những CSDL lớn nhất thế giới, nhưng cũng chưa bao giờ thấy một đoạn code...đặc sắc như trên. Thế mới biết biển học là mông mênh vô bờ bến.

    Không hiểu đoạn code trên là của bạn Van8Hien62, hay là một đoạn code..."chôm" ở đâu về. Nhưng nếu không đề xuất xứ, thì chúng ta có thể coi đoạn code trên là tác phẩm "bất hủ" của Van8Hien63. Vậy bạn VH có thể giải thích thêm về đoạn code trên cho anh em học hỏi được không? Chẳng hạn như:

    1. Làm sao gõ được cái đoạn...encrypted string đó? Không lẽ mỗi lần xử lý một encrypted code như vậy thì phải hì hục gõ máy.
    2. Nếu cái đoạn encrypted đó là một stored procedure (như bạn VH nói để bảo vệ source code), có cách gì để đưa một hay vài thông biến từ cho cái ...encrypted code đó không? Nếu không đưa thông biến từ qua được, thì....(thôi, hhehehe, không nói đâu).
    3. Nếu đó là một encrypted stored procedure, thì chắc chắn không thể dùng CREATE PROCEDURE được rồi, vây chắc là phải tồn trữ chúng trong một bảng. Bạn VH co thể nói sơ qua về phương cách tồn trữ những đoạn code này không chỉ.
    4. Không như bạn vart nói đâu, vì đây không phải là một stored procedure đã được encrypted bởi SQL bằng cách dùng WITH ENCRYPTION. Vì nếu được encrypted bởi SQL, thì chỉ việc gọi stored procedure đó đơn giản như không encrypt thôi, đâu phải dùng tới hàm exec(decrypt(***x)). Hàm decrypt chắc chắn phải là một hàm vô cùng thông thái được sáng tác bởi VH. Bạn VH có thể giải thích thêm về cái hàm decrypt này được không? (Nói thật nha, tôi thấy nó giống từa tựa kiểu cách của thằng Primavera Contract Management (v12.1) - nhưng để bạn trả lời xong, rồi tôi mới thẳng thắn phê bình thằng Primavera này, hehehehe)

    Và sau cùng, trước khi bạn VH có thể cho chúng ta có cơ hội học hỏi về SQL encryption dùng exec(decrypt(***)), tôi thiết nghĩ chúng ta nên để thời giờ quý báu vào chuyện khác, như học LINQ chẳng hạn, hehehehehe.

  6. Thành viên Like bài viết này:


  7. #4
    Tham gia
    18-06-2009
    Bài viết
    11
    Like
    0
    Thanked 2 Times in 2 Posts
    Tôi hiển nhiên là biết đoạn script đó ko được mã hóa bằng WITH ENCRYPTION. VH đã viết rõ và tôi cũng biết đọc.

    Tôi không thích việc mã hóa tùm lum. Nhưng cách bác châm biếm người khác như thế cũng ko nên.

  8. Thành viên Like bài viết này:


  9. #5
    Tham gia
    20-02-2009
    Location
    Ninh Bình
    Bài viết
    567
    Like
    0
    Thanked 34 Times in 31 Posts
    Quote Được gửi bởi vart.vn View Post
    Tôi hiển nhiên là biết đoạn script đó ko được mã hóa bằng WITH ENCRYPTION. VH đã viết rõ và tôi cũng biết đọc.

    Tôi không thích việc mã hóa tùm lum. Nhưng cách bác châm biếm người khác như thế cũng ko nên.
    Không có châm biếm đâu. Văn phong của tôi hay có chút nô đuà. Thật sự mà nói, tôi thấy VH62 có vẻ rất tự hào về đoạn mã hóa trên, như đã nói, hết bỏ url vào, lại tiếp tục posted lên, cho nên tôi bỗng nhiên bị...lung lạc. Biêt đâu đoạn mã hóa trên có gì hay mà tôi chưa có dịp học hỏi.

    Cho nên, tôi hy vọng sẽ được học hỏi thêm đó mà.

  10. Thành viên Like bài viết này:


  11. #6
    Tham gia
    01-04-2009
    Location
    Việt Nam
    Bài viết
    251
    Like
    0
    Thanked 10 Times in 10 Posts
    Thật vinh dự khi có người "viết code cho SQL đã nhiều năm, kể cả viết cho những CSDL lớn nhất thế giới" ghé mắt nhìn đến. Người này có tính nô đùa nên lời nói bất nhất, "chúng ta nên để thời giờ quý báu vào chuyện khác", nay bỗng dưng "bị...lung lạc thôi" mà. Thật đáng tự hào.
    Đây là nội dung của stored trên :

    CREATE procedure pc_insert_udf
    @ptable_name varchar(30),
    @pfk integer,
    @pnew_fk integer,
    @pnew_proj_id integer
    WITH ENCRYPTION
    as
    insert into udfvalue (udf_type_id, fk_id, proj_id, udf_date,udf_text,udf_number,udf_code_id)
    select ut.udf_type_id, @pnew_fk, @pnew_proj_id, udf_date, udf_text, udf_number,udf_code_id
    from udfvalue uv, udftype ut
    where ut.table_name = upper(@ptable_name)
    and uv.udf_type_id = ut.udf_type_id
    and ut.super_flag = 'N'
    and uv.fk_id = @pfk
    and uv.delete_session_id is null and ut.delete_session_id is null ;

    Tôi đã nói decrypt trong exec( decrypt ( 0x.. )) là hàm UnDocument của MS Sql Srv không phải của tôi.
    Bạn dq_ninh vốn có ác cảm với nó, SqlPIE khi gặp lỗi trong việc đọc script là đổ thừa cho rằng "- The SQL code may be encrypted !!"“, dù nhiều script không có mã hóa, y hệt các thợ sửa PC đổ thừa cho virus vậy mà.
    Mà sao các bạn không thử, sợ backdoor chăng ? Tôi đã nói script trên bị biến dạng do đây không phải là IDE, WYSIWYG.
    Cám ơn sự quan tâm.

  12. Thành viên Like bài viết này:


  13. #7
    Tham gia
    20-02-2009
    Location
    Ninh Bình
    Bài viết
    567
    Like
    0
    Thanked 34 Times in 31 Posts
    Hình như SQL không hề có hàm decrypt(). Bạn VH nên coi lại. Có thể hàm decrypt() thuộc về một CSDL khác như mySQL chăng? Cũng có thể nhiều người muốn decrypt những stored proc. của SQL, cho nên đã viết ra hàm decrypt(). Nhưng riêng SQL,thì sau khi cài đặt xong, không thấy cái hàm decrypt() đâu hết.

    Cũng xin cám ơn bạn VH đã xác minh đoạn code encrypt() bất hủ đó không phải do bạn sáng tác. Có điều, lần sau, khi post lên một đoạn code (bất hủ hay không bất hủ), bạn cũng nên chú thích NGAY TẠI CUỐI đoạn code đó, xuất xứ của nó, cũng như tên của tác giả, chứ đừng có mập mờ đánh lận con đen. Chuyện này cũng đã được đề cập đến nhiều lần trên diễn đàn, tôi chỉ nhân cơ hội này lập lại thôi.

    Riêng về SQLPIE, cám ơn bạn VH đã (và chắc là người thứ 1001) tìm thấy cái bug của Microsoft mà từ hai năm qua, họ chưa chịu sửa giùm tôi. Và cái message đó, cũng là của SMO, chứ không phải của tôi. Nếu bạn nghĩ rằng có thể sửa được, thì tôi cám ơn vô cùng. Đó là hàm script() của SMO version 9.xx và 10.xx. Từ khi Microsoft update SMO lên ver. 9.***, thì cái hàm script() của SML cho stored proc/func không còn chạy. Tưởng cũng nên nói thêm, MS đã "amitted" đó là một cái bug của SMO, và họ sẽ ...sửa lỗi đó trong một tương lai gần. Trong thời gian chờ đợi thì cám ơn NXD của SQLPIE đã không cằn nhằn nhiều vì không scripting được. Nhưng nếu bạn VH có nhã hứng, thì tôi xin tặng bạn khúc SMO code đó, nếu bạn sửa được, thì tôi sẽ tặng bạn một món quà, và đưa tên bạn lên hàng...danh dự của MS-SQL forum.

    Còn riêng về phần tôi,đã từng design cho những CSDL lớn nhất của thế giới là chuyện đương nhiên. Bởi vì tôi may mắn có cơ hội thôi. Nhưng dầu lớn hay nhỏ, cái đoạn code "decrypt()" trên quả nhiên mới thấy lần đầu.

  14. #8
    Tham gia
    01-04-2009
    Location
    Việt Nam
    Bài viết
    251
    Like
    0
    Thanked 10 Times in 10 Posts
    Đã có nhiều người nói như bạn. Nếu trong Ms Sql Srv không có hàm decrypt(), thì tôi đã không nói : bạn có thể thực hiện ( script đã được bảo vệ, mã hóa này ) trong Sql Server 2000 / 2005, vì tôi không gửi nó, lấy gì để thưc hiện ?! Nó là hàm UnDocument, thi bạn thấy nó bằng cách nào ? Những gì bạn cần biết cứ hỏi Ms Sql Srv, Microsoft đó.
    Tôi đã nhắc lại lần nữa : sao các bạn không thử ? Tôi cũng từng viết CT đọc script trong DB Ms Sql Srv, cả SMO và trước nữa ( hình như là SDO ) nhưng tôi không đổ thừa và tôi viết xong nó từ lâu rồi, cũng là "chôm" từ MSDN đó.

  15. #9
    Tham gia
    20-02-2009
    Location
    Ninh Bình
    Bài viết
    567
    Like
    0
    Thanked 34 Times in 31 Posts
    Bạn VH ơi, biết chắc chắn thì hãy nói. Còn nếu không chắc chắn, đừng có nói ẩu nha.
    Bạn nói decrypt() là undocument function của SQL, vậy bạn có thể chứng minh được không? Bạn có thể đưa ra một cái list của undocument SQL functions/procedure không? Theo tôi biết, chỉ có hàm pwddecrypt() cho decrypt password thôi.

    Bạn có cần tôi đưa cho bạn một cái list của undocument functions/procedures của SQL không? Đại loại đây là một cái list nhỏ, chưa đủ hết những undocument functions
    http://<br /> http://books.google.c...esnum=10<br />

    Còn vấn đề SMO, nếu tôi có thể chứng minh được đây là lỗi của Microsoft, với những messages của chính những MS-engineers ở trên những forums của Microsotf, thì bạn tính sao đây?

    [=========> Bổ sung bài viết <=========]

    Ủa! Mà cái chủ đề của cái mục này là "Kỹ thuật bảo vệ code trong lập trình", sao bỗng dưng lại trở thành chủ đề DQ-Bảo-vệ-SQLPIE rồi vậy ta?
    Được sửa bởi dq_ninh lúc 12:55 ngày 25-06-2009 Reason: Bổ sung bài viết

  16. Thành viên Like bài viết này:


  17. #10
    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ú ý !

    Sao lại chắc chắn hay không ? Nếu script trên, ở trên máy bạn mà không chạy được thì tôi bỏ nghề làm LTV. Trên máy bạn có nó rồi, chẳng lẽ tôi đột nhập máy bạn để addins nó vào à ? Muốn kiểm chứng nó bạn vào [url]http://www.sqlservercentral.com/Forums/Topic704924-1526-1.aspx ( Forrum >> SQL Server 2008 » Security (SS2K8) » what the decrypt function in Ms Sql Server ? )nhưng khó khăn là phải đăng ký thành viên nên tôi không nói ra thôi.
    Và vì sao tôi cũng viết CT dùng SMO như bạn ( và DMO ) mà không có đổ lỗi cho "virus" SMO, đơn giản là tôi kiểm tra nó có ENCRYPTION không, khắc phục nó và test kỹ lưỡng hơn trước khi phát hành ra thôi.
    Đây là "Kỹ thuật bảo vệ code trong lập trình", 1 trong Ms Sql Srv, tiếp sẽ là
    2 trong NetFx mà bạn, trong loạt bài về "Kỹ thuật bảo vệ code trong lập trình" !
    Việc đổ thừa không chỉ có trong SqlPIE, bạn chưa test mà cũng đổ thừa cho tôi mà. Tôi nói nếu bạn cần thì đi mà hỏi Microsoft, tôi chỉ là người thấy, có người hướng dẫn, một vài trong những unDocument cùa Mic, của Ms Sql thôi.
    Được sửa bởi Van8Hien62 lúc 13:39 ngày 25-06-2009

Trang 1 / 3 123 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
  •