Tạo standard DLL từ VB6

tuhocvba

Administrator
Thành viên BQT
@tuhocvba exe hay dll cũng như nhau cả nha.
Hãy minh chứng điều này.
1. Sử dụng công cụ gì? tên công cụ? link download
2. Sử dụng file dll và exe demo, tự tạo ra. Dẫn link để mọi người download về thực hành theo.
3. Thực hành bẻ dll và exe bằng công cụ nói trên, chứng minh nó như nhau.

Dàn ý như trên , đừng nói là không viết được. Hay là không muốn viết mà thôi. 1 tuần chắc là Smod viết được, nhỉ.
 

tuhocvba

Administrator
Thành viên BQT
Exe và dll thì dịch ngược cũng như nhau mà. Chú ý khi build cần chọn Compile to native code để khó dịch ngược hơn pcode.
Thao tác để build ra N code là gì? Như nào?
CHo bạn 1 tuần để thực hiện topic này. Chắc là dù chuyên về thực hành nhưng cũng có thể viết được một bài hướng dẫn đơn giản này nhỉ.
 

NhanSu

SMod
Thành viên BQT
Mình đang ở chỗ làm nên hạn chế dùng máy tính. Compile to native là lựa chọn khi build, mình kiếm hình trên mạng, cần bỏ chọn ô khoanh đỏ đi.
Bạn cần đăng nhập để thấy đính kèm
 

Euler

Administrator
Thành viên BQT
Kịch bản sẽ là: tôi rất bận. tôi không có thời gian.
Giấu như mèo giấu c...t
haiz.
 
O

OnceMore

Guest
Công cụ vbdecomplied, các bạn có thể kiểm chứng cùng code trong exe và dll nhé.
 

NhanSu

SMod
Thành viên BQT
Còn ý mình đang nói về mức độ khó khi dịch ngược file dll và exe vb6 khi đã compile ra native code rồi thì dịch ngược đều ra hợp ngữ cả nên khó như nhau.
 
O

OnceMore

Guest
Link gốc
 
B

bvtvba

Guest
Công cụ vbdecomplied, các bạn có thể kiểm chứng cùng code trong exe và dll nhé.
Bác coi từ đó đến giờ các admin phục vụ các bác hơn VUA.
Hình ảnh minh họa rõ ràng, từng bước. Link down đưa cẩn thận.
Còn bác nói như đường lối, thánh chỉ.
Nhìn vào người ta lại tưởng diễn đàn dột từ nóc. 1 tuần nên bác cứ thong thả, tạo lập topic mới rồi trình bày cho đẹp mắt. Chả nhẽ lại không làm được.
 

Euler

Administrator
Thành viên BQT
Theo tôi thì @OnceMore emore nên nói rõ hơn.
Khi nói tới một phần mềm, điều người ta quan tâm là có mất phí không. Bài viết của bạn phải nêu ra được câu trả lời cho thắc mắc này.
Khi cài đặt có chú ý gì không.
Sau cùng là cách sử dụng, từng thao tác ra sao.

Tại sao bạn lại không làm được như vậy nhỉ? Câu hỏi Tại sao này mong được Smod trả lời.
 
O

OnceMore

Guest
Thành thật xin lỗi tới quý anh chị em tôi nhắn tin hầu hết trên iphone nên vấn đề trình bày tỉ mĩ là rất khó khăn.
 

Euler

Administrator
Thành viên BQT
Nếu như bạn không thử trình bày một topic cho tỉ mỉ thì bạn sẽ không hiểu được công sức người khác viết ra sao, và thái độ bạn nên biểu thị ra như thế nào cho phù hợp.
Tôi hi vọng 1 tuần thì không phải lúc nào bạn cũng cầm Iphone trên tay. Bạn hãy tạo topic mới giúp. Topic này tôi không muốn nó loãng thêm.
 
T

thanhphong

Guest
@tuhocvba sao không để code trong exe thôi sẽ đơn giản nhiều ?
Đơn giản cho ai hả bác? Cho người đi phá code như bác?
Với người code, họ có thể autocode nếu code có tính quy luật như trên.
Còn với người đi phá, theo em biết, code càng kết nối như mạng nhện, càng gây khó khăn cho người đi phá.
Không biết em nói vậy có đúng không bác?
 
B

bvtvba

Guest
Thành thật xin lỗi tới quý anh chị em tôi nhắn tin hầu hết trên iphone nên vấn đề trình bày tỉ mĩ là rất khó khăn.
Nếu chỉ lên đọc bài thì theo em bác đọc được cái gì thì đọc. Chứ không chia sẻ được gì rồi vào đây phê, nghe ngứa tai lắm bác ạ. Mà tham gia diễn đàn chỉ sử dụng Iphone vậy làm Mod làm gì hả bác?
 
O

OnceMore

Guest
Những gì tôi làm là cống hiến cho diễn đàn còn nếu không muốn tôi tham gia nữa thì xin phép admin xóa nick này dùm tôi. Tôi không thích ai cà khịa hay nói móc này nọ ở đây.
 
D

Deleted member 199

Guest
Anh em ở đây góp ý có điều gì không phải mong bác bỏ quá cho. Chẳng lẽ có vài câu vậy mà bác lại tự ái rồi. Nếu tự ái thì bác bảo tôi đang tự ái, chắc không ai góp ý nữa đâu.
 

LeThanh

Yêu THVBA
Cái này trước kia trên clbvb cũng có bàn tới, nhưng cũng không thấy đưa ra vấn đề dùng cho Sub.
Với cách này, thường chỉ thấy mọi người dùng cho hàm (function).
Xin trích dẫn:
Nguồn:
Mã:
https://caulacbovb.com/forum/viewtopic.php?t=14308
========================
1. Một số khái niệm:
  • +DllMain: Là hàm khởi tạo (và cũng là hàm huỷ) trong DLL. Windows sẽ gọi hàm DllMain trong DLL mỗi khi DLL được sử dụng đến hoặc ngưng sử dụng. Vì vậy hàm DLLMain sẽ được sử dụng để khởi tạo và huỷ các biến cần thiết. DllMain có thể có hoặc không cũng được (tuỳ vào DLL mà bạn viết có cần khởi tạo và dọn dẹp hay không)
    +Module Definition File: Là tệp tin mô tả các module ở trong file DLL. File DLL kiểu Standard khi viết ra có thể có nhiều hàm ở trong. Tệp mô tả sẽ chỉ ra thứ tự các hàm, nó tham gia vào quá trình biên dịch mã nguồn thành tệp DLL. Tệp mô tả có phần mở rộng là DEF
[Phần này đáng tham khảo thêm]
2. Mod lại file Link.exe:
  • A. File Link.exe đóng vai trò gì?
    + Trong IDE của Vb6, khi ta chọn Make chương trình của ta thành file DLL (kể cả khi ta make chương trình thành file EXE) thì IDE sẽ trước tiên gọi file C2.exe để dịch code của chúng ta thành các file *.OBJ. Sau đó nó gọi tiếp file Link.exe để liên kết các file *.OBJ lại tạo ra file DLL hoặc file EXE. Vậy file Link.exe đóng vai trò liên kết các file OBJ để tạo ra tệp dạng binary (Exe hoặc DLL) cuối cùng. Cả file C2.Exe và file Link.exe đều nằm trong C:\Program Files\Microsoft Visual Studio\VB98
    B. Vì sao phải Mod lại file Link.exe?

    + Trong VB6, khi IDE gọi file Link.exe để liên kết các file *.OBJ lại, nó truyền cho file Link.exe một loạt các tham số như: đường dẫn của các file *.OBJ, kiểu file đích sẽ tạo ra (DLL hay EXE), đường dẫn của đích sẽ được tạo ra, và 1 số các tham số khác nữa. Tuy nhiên, trong rất nhiều tham số này, lại thiếu mất một tham số là "/DEF". Tham số /DEF chính là tham số chỉ ra đường dẫn của các tệp Module Definition (các tệp *.DEF) ở phần 1. Thiếu các tệp này, DLL tạo ra sẽ không thể sử dụng được các hàm Public bằng phương pháp Declare. Chính vì vậy, ta phải Mod lại file Link.exe để thêm tham số này vào lúc biên dịch
    C. Mod lại file Link.exe như thế nào?
    + Phương pháp ở đây là tạo ra 1 file Link.exe giả đặt trong thư mục VB98, còn file Link.exe thật thì đổi tên thành 1 file khác (ví dụ là LinkThat.exe). Khi IDE gọi file Link.exe giả (do ta mod lại) thì file giả của chúng ta sẽ làm nhiệm vụ đọc các tham số được IDE truyền sang, thêm tham số /DEF vào và gọi file LinkThat.exe với tham số mới (đã có /DEF). Tất nhiên là phải kiểm tra, nếu có tồn tại các file *.DEF và project cần tạo là project kiểu DLL thì mới thêm tham số
    + Tiến hành Mod lại file Link.exe
    - Mở Vb6, tạo 1 Project mới dạng EXE application
    - Xoá Form1 mà Vb đã tự tạo ra cho ta, thêm vào 1 Module mới, đặt tên bất kỳ
    - Add Reference vào tệp SCRRUN.DLL trong System32 để sử dụng được đối tượng FileSystemObject
    - Copy đoạn code sau, Paste vào Module vừa thêm:
[Đoạn này giống với bài viết #1 nên tôi lược bỏ]
- Dịch chương trình trên thành file Link.exe
- Đổi tên file Link.exe vốn đã có của Vb6 (trong C:\Program Files\Microsoft Visual Studio\VB98) thành linklnk.exe LinkThat.exe
[Phần này giống với #1 đã nêu. Phụ thuộc vào code mà chúng ta viết ở trên.]
Dòng code 91 ở #1 :
Mã:
Shell "linklnk.exe " & strCmd
nên chúng ta thống nhất dùng linklnk.exe
- Copy file Link.exe mà ta vừa tạo được ở trên vào thư mục Vb98

3. Cùng tạo DLL nào
  • - Tạo 1 Project mới trong Vb6, kiểu Project là ActiveX DLL
    - Để nguyên Class1 mà Vb6 đã tạo sẵn cho bạn. Không cần Code gì vào đó cả, nhưng vẫn phải giữ nó lại vì Vb6 cần phải có 1 Class trong Project kiểu ActiveX DLL thì nó mới chạy
    - THêm 1 Module mới với tên tuỳ ý. Bạn có thể bắt đầu viết các hàm cho riêng mình vào Module này. Tôi đưa ra 1 ví dụ đơn giản với các hàm tính toán. Module của tôi có dạng như sau:
    Trừ hàm DllMain, các hàm khác các bạn có thể thêm bớt tuỳ ý
[Phần này cũng giống #1 đã nêu, tôi trích dẫn lại mang tính bổ sung thông tin]
4. Tạo tệp Module Definition File (.DEF)
- Dùng Notepad, soạn với nội dung sau:
Mã:
NAME TenTuyY
LIBRARY TenTuyY
DESCRIPTION "Mo ta cua tep DLL- gi cung duoc"
EXPORTS DllMain @1
        Add @2
        Subtract @3
        Square @4
  • - Phần nội dung sau NAME, LIBRARY, DESCRIPTION bạn có thể đặt tuỳ ý
    - Theo sau EXPORTS là tên các hàm. Nhớ là tên hàm phân biệt hoa-thường nha
    - Con số sau ký tự @ là thứ tự của hàm mà bạn đã viết trong Module ở trên
    - Lưu tệp soạn thảo này vào thư mục chứa file Project DLL mà ta đã tạo ở bước 3 với tên trùng với tên DLL mà ta muốn tạo, phần mở rộng là .DEF. Ví dụ: nếu ta muốn tạo ra 1 dll có tên là MyLibrary.DLL thì file DEF này sẽ phải lưu với tên là MyLibrary.DEF
[Phần này giống với #1 đã nêu, tôi trích dẫn để bổ sung thông tin]

5. Dịch thành file DLL và sử dụng
- Bây giờ bạn có thể Make cái Project bạn đã tạo ở bước 3 được rồi. từ menu File, chọn Make như với các Project bình thường khác
- Sau khi được file DLL rồi thì chắc là các bạn đã biết cách sử dụng nó như thế nào:
+ Copy file DLL vào cùng thư mục với Project muốn sử dụng nó
+ Khai báo như sau để Import hàm của DLL vào Project
Mã:
Private Declare Function Add Lib "MyLibrary.dll" (ByVal a As Integer, ByVal b As Integer) As Integer
[Phần này đáng tham khảo thêm]
Mình có thể dùng DLL tạo từ VB6 cho VB4 không?
 
Top