banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận hệ điều hành Windows Viết chương trình nối 2 file exe!!!  XML
  [Programming]   Viết chương trình nối 2 file exe!!! 03/01/2008 12:28:15 (+0700) | #1 | 107930
chaien281985
Member

[Minus]    0    [Plus]
Joined: 17/06/2007 14:48:15
Messages: 248
Location: HVAN
Offline
[Profile] [PM] [WWW]
Em có một ý tưởng như sau: giả sử có 2 file A.exe và B.exe, bây giờ viết một chương trình nối 2 file A,B thành C.exe mà khi khởi động C.exe thì nó sẽ chạy cả 2 chương trình A,B.

Cách làm là: Mở file A đọc hết nội dung của nó, ghi vào file C, sau đó đọc hết nội dung B ghi vào C.

Nhưng sau khi làm xong, thì file C của em chỉ có thể chạy được chương trình của file A.

Vậy cho hỏi là em sai chỗ nào: sai từ suy nghĩ hay cách làm như vậy là chưa đúng.
Nếu muốn viết một chương trình như mô tả ở trên thì cần những kiến thức nào?

Rất mong được sự giúp đỡ của các anh em HVA!!
[Up] [Print Copy]
  [Question]   Re: Viết chương trình nối 2 file exe!!! 03/01/2008 14:14:43 (+0700) | #2 | 107958
[Avatar]
secmask
Elite Member

[Minus]    0    [Plus]
Joined: 29/10/2004 13:52:24
Messages: 553
Location: graveyard
Offline
[Profile] [PM] [WWW]
nghe giống virus nhỉ, hờ hờ.
Một cách chính thống, bạn có thể dùng các trình thiết kế cài đặt như NSIS chẳng hạn, nó cho bạn viết script thực hiện hành động theo ý muốn.
thân.
[Up] [Print Copy]
  [Question]   Viết chương trình nối 2 file exe!!! 03/01/2008 14:55:31 (+0700) | #3 | 107961
phrackVN
Member

[Minus]    0    [Plus]
Joined: 03/08/2007 15:35:53
Messages: 3
Offline
[Profile] [PM]

chaien281985 wrote:
Em có một ý tưởng như sau: giả sử có 2 file A.exe và B.exe, bây giờ viết một chương trình nối 2 file A,B thành C.exe mà khi khởi động C.exe thì nó sẽ chạy cả 2 chương trình A,B.

Cách làm là: Mở file A đọc hết nội dung của nó, ghi vào file C, sau đó đọc hết nội dung B ghi vào C.

Nhưng sau khi làm xong, thì file C của em chỉ có thể chạy được chương trình của file A.

Vậy cho hỏi là em sai chỗ nào: sai từ suy nghĩ hay cách làm như vậy là chưa đúng.
Nếu muốn viết một chương trình như mô tả ở trên thì cần những kiến thức nào?

Rất mong được sự giúp đỡ của các anh em HVA!! 



Bạn không thể làm theo cách như vậy được. File exe không đơn giản chỉ có mã lệnh thực thi, nó bao gồm các header và các section. Một file exe hợp lệ thì thường có mã chương trình nằm ở trong một hoặc nhiều section của nó.

Đầu tiên bạn phải tìm hiểu về định dạng của file exe, Tùy vào 2 file A, B của bạn viết cho Windows hay viết cho DOS mà nó có định dạng khác nhau, với win thì bạn có thể lên google search cụm từ PE file format.

Sau khi bạn tìm hiểu xong định dạng file thì nó sẽ nẩy sinh ra những vấn đề khác nữa. Có gì bài sau mình sẽ nói rõ thêm.
[Up] [Print Copy]
  [Question]   Re: Viết chương trình nối 2 file exe!!! 04/01/2008 01:27:27 (+0700) | #4 | 108032
chaien281985
Member

[Minus]    0    [Plus]
Joined: 17/06/2007 14:48:15
Messages: 248
Location: HVAN
Offline
[Profile] [PM] [WWW]
bài của bạn secmask trả lời thì ko được rõ ràng lắm có lẽ do mình lập trình C trên VS nên ko hiểu những gì bạn nói. Mong là bạn sẽ giải thích rõ hơn cho mình về cái cum từ " trình thiết kế cài đặt như NISIS"

Bạn phrackVn thì trả lời rõ ràng và đúng theo cách hiểu của mình hơn. Hi vọng bạn sẽ nói tiếp về cài phần " Sau khi bạn tìm hiểu xong định dạng file thì nó sẽ nẩy sinh ra những vấn đề khác nữa. Có gì bài sau mình sẽ nói rõ thêm."

Rất cảm ơn hai bạn đã có những ý kiến đóng góp cho mình
[Up] [Print Copy]
  [Question]   Re: Viết chương trình nối 2 file exe!!! 04/01/2008 03:21:30 (+0700) | #5 | 108073
phrackVN
Member

[Minus]    0    [Plus]
Joined: 03/08/2007 15:35:53
Messages: 3
Offline
[Profile] [PM]
Có vài điểm bạn cần biết là. Đoạn mã của chương trình không phải lúc nào cũng chạy ở điểm đầu tiên và không phải lúc nào nó cũng kết thúc ở điểm cuối cùng. Chương trình của ta không chạy tuyến tính từ trên xuống dưới, nó có thể đang ở đoạn này lại nhẩy sang đoạn khác, câu lệnh cuối cùng của chương trình có thể lại nằm ở đầu hoặc thân của chương trình.
Thường khi một chương trình kết thúc nó sẽ trả điều khiển về cho hệ thống, và do đó khi kết thúc chương trình A nó sẽ không thể chạy tiếp chương trình B được nữa.
Muốn viết được chương trình như bạn nói thì trước tiên bạn phải:
- Tìm được điểm vào đầu tiên của chương trình - cái này thuộc về định dạng file
- Bạn không để cho chương trình đầu tiên trả điều khiển về cho hệ thống. Đơn giản nhất là bạn tự viết chương trình A và biên dịch nó. Nhưng bạn phải viết nó bằng Assembly thì mới can thiệp được vào cách kết thúc chương trình.
- Và còn nhiều điều nữa mình chưa muốn nói cho bạn biết bây giờ. Bạn cứ từ từ nhiên cứu những gì mình đã gợi ý, nó cũng là khá nhiều rồi.
[Up] [Print Copy]
  [Question]   Re: Viết chương trình nối 2 file exe!!! 04/01/2008 04:47:41 (+0700) | #6 | 108095
chaien281985
Member

[Minus]    0    [Plus]
Joined: 17/06/2007 14:48:15
Messages: 248
Location: HVAN
Offline
[Profile] [PM] [WWW]
Hi. Nói như bạn phrackVN thì nếu mình viết bằng C++ sử dụng các hàm API của windows thì ko thể hoặc là rất khó để làm việc này đúng ko?
Hiện mình đang dùng VS C++ để lập trình.

Rất mong được sự giúp đỡ của các bạn.
[Up] [Print Copy]
  [Question]   Re: Viết chương trình nối 2 file exe!!! 04/01/2008 12:07:03 (+0700) | #7 | 108208
TQN
Elite Member

[Minus]    0    [Plus]
Joined: 29/06/2006 22:28:01
Messages: 888
Location: Biết làm chi ?
Offline
[Profile] [PM] [WWW] [Yahoo!]
Không cần phải dùng tới ASM đâu, dùng C/C++ vẫn được bình thường (như bao trình binder # đang có trên Internet). Nếu cậu chỉ cần tạo file C gồm 2 file A và B, khi run file C thì A và B sẽ chạy (lần lượt hay song hành).
Hướng dẫn cậu từ từ từng bước như sau:
1. Tạo một app console C.exe trên môi trường VC++ cậu đang dùng.
2. C.exe check command line truyền vào, nếu rỗng thì thoát, không rỗng thì read content của các file .exe truyền vào cho nó vào các memory buffer.
Vd: C.exe C:\Windows\notepad.exe C:\Windows\System32\calc.exe
3. C.exe tự xác định được size của chính nó. Cái này hơi bị khó một chút.
4. Copy chính nó thành file D.exe, seek tới EOF, ghi số file được append, tên file được append, size của file được append. Rồi ghi content của các file .exe sẽ append vào.
...
Còn nhiều nữa, làm như trên đã.
[Up] [Print Copy]
  [Question]   Re: Viết chương trình nối 2 file exe!!! 04/01/2008 13:01:54 (+0700) | #8 | 108226
chaien281985
Member

[Minus]    0    [Plus]
Joined: 17/06/2007 14:48:15
Messages: 248
Location: HVAN
Offline
[Profile] [PM] [WWW]
Những bước như anh nói cơ bản em nắm được rùi. Những tại sao C cần phải xác định được size của chính nó (để làm gì)? Có gì anh giảng tiếp các bước sau cho em.

Tại vì theo các bước như anh nói thì em làm như sau cũng là tương đương : tạo file D.exe, đọc nội dung a.exe ghi vào D, đọc nội dung b.exe ghi vào D. chỉ cần vậy là đủ 4 bước của anh rùi phải ko ạ.
[Up] [Print Copy]
  [Question]   Re: Viết chương trình nối 2 file exe!!! 04/01/2008 13:17:15 (+0700) | #9 | 108237
TQN
Elite Member

[Minus]    0    [Plus]
Joined: 29/06/2006 22:28:01
Messages: 888
Location: Biết làm chi ?
Offline
[Profile] [PM] [WWW] [Yahoo!]
C phải xác định được size thực của nó, tức là size của C.exe sau khi được compile ra, chưa bị modify và append A.exe và B.exe vào nó.
Thông thường C.exe phải read chính nó lên, parse PE Header, read Optional Header hay các section header để lấy được size này.
5. Sau khi lấy được size này, quay lại bước parse command line, nếu command line truyền vào là rỗng, C.exe (và cũng chính là D.exe) xác định size trên đĩa, so sánh với size lấy từ PE Header, nếu < hay = thì C.exe chưa được append, thoát, nếu > thì đã được append, goto 6.
6. C.exe read chính nó lên memory, seek to size theo PE Header, đọc thông tin các file đã được append. Thông tin này có thể tổ chức như sau: số file được attach: DWORD, 1 array of struct tương ứng với DWORD này, các struct gồm: name: stringz, size: DWORD.
7. Từ thông tin của array này, seek tới beginning của các file attach này, tạo file tạm trong thư mục %TEMP%, ghi size byte của file attach vào đó, đóng file, CreateProcess.
8. Wait until tất cả các process đấy close, delete các file tạm đó đi. Exit. Done.

Cũng có thể dùng cách # là dùng Resource section, C.exe modify D.exe = cách nhúng các file attach vào resource của D. Khi D.exe run, nó tự kiểm tra trong resource của nó có file attach hay không, nếu có thì extract vào temp, run, rồi delete.
[Up] [Print Copy]
  [Question]   Re: Viết chương trình nối 2 file exe!!! 04/01/2008 13:32:37 (+0700) | #10 | 108244
chaien281985
Member

[Minus]    0    [Plus]
Joined: 17/06/2007 14:48:15
Messages: 248
Location: HVAN
Offline
[Profile] [PM] [WWW]
hì em tưởng là lấy size của c.exe dễ lắm chứ. Như trong C linux có cấu trúc stat trong cấu trúc này có trường st_size để lấy kích thước của file. Hóa ra đó chỉ là kích thước của phần dữ liệu muốn lấy kích thước thật phải cộng thêm các header khác như PE,section...

Rất cảm ơn anh đã giúp em được mở mang tầm mắt
[Up] [Print Copy]
  [Question]   Re: Viết chương trình nối 2 file exe!!! 04/01/2008 13:45:55 (+0700) | #11 | 108248
[Avatar]
ThíchHắcKinh
Member

[Minus]    0    [Plus]
Joined: 05/11/2007 21:56:23
Messages: 85
Location: Thiếu Lâm Tự
Offline
[Profile] [PM]
Hồi xưa nhớ có viết cái này bằng VB6, để lục lại source coi còn không share cho anh em tham khảo, cách này hơi chuối smilie

Tôi làm như sau:
Viết một chương trình thực thi gọi là run.exe, chức năng của chương trình này là đọc số bytes của hai file đã join lại và tách chúng ra sau đó thực thi từng cái một.

Viết một Chương trình Join.exe có tác dụng join các chương trình cần join lại với nhau, chẳng hạn như notepad.exe, calc.exe và cả thằng run.exe. Cái Run.exe này sẽ nằm trên cùng sau đó append tới hai thằng còn lại. Thằng join này còn có tác dụng đọc số bytes của 2 tệp cần join và append chúng vào với thằng run.exe để thằng này biết mỗi tệp đã join có bao nhiêu bytes mà tách ra.

Qui tắc củ chuối của tôi là thế.. Nhưng vẫn chạy ngon lành. Để lục lại sẽ "pót" cho anh em tham khảo sau smilie
[Up] [Print Copy]
  [Question]   Re: Viết chương trình nối 2 file exe!!! 04/01/2008 22:55:27 (+0700) | #12 | 108306
chaien281985
Member

[Minus]    0    [Plus]
Joined: 17/06/2007 14:48:15
Messages: 248
Location: HVAN
Offline
[Profile] [PM] [WWW]
hì hì. có gì anh thichhackinh up bài lên cho mọi người cùng xem. E đang nghiên cứu sổ tay hacker có một phần nói về vấn đề này ( cả source code), phải đọc thêm PE thì mới hiểu hết được.
[Up] [Print Copy]
  [Question]   Re: Viết chương trình nối 2 file exe!!! 05/01/2008 16:51:24 (+0700) | #13 | 108475
[Avatar]
ThíchHắcKinh
Member

[Minus]    0    [Plus]
Joined: 05/11/2007 21:56:23
Messages: 85
Location: Thiếu Lâm Tự
Offline
[Profile] [PM]
Gởi chương trình cho anh em test thử trước... Còn source code để lục lại sau .. Vì viết quá lâu rồi (khoảng năm 2000) bây giờ không biết để nơi nào nữa smilie

http://www.box.net/shared/s6oigfvs4o

Nếu máy ai chưa có cài VB6 thì chắc phải cần một vài thư viện VB6. Vì cái này chỉ là chương trình được compile đơn chứ không phải là cái setup. Anh em thông cảm smilie
[Up] [Print Copy]
  [Question]   Viết chương trình nối 2 file exe!!! 16/01/2008 00:40:08 (+0700) | #14 | 110429
[Avatar]
haipt
Member

[Minus]    0    [Plus]
Joined: 20/08/2004 19:48:44
Messages: 165
Location: Hải phòng
Offline
[Profile] [PM] [WWW]

chaien281985 wrote:
Em có một ý tưởng như sau: giả sử có 2 file A.exe và B.exe, bây giờ viết một chương trình nối 2 file A,B thành C.exe mà khi khởi động C.exe thì nó sẽ chạy cả 2 chương trình A,B.

Cách làm là: Mở file A đọc hết nội dung của nó, ghi vào file C, sau đó đọc hết nội dung B ghi vào C.

Nhưng sau khi làm xong, thì file C của em chỉ có thể chạy được chương trình của file A.

Vậy cho hỏi là em sai chỗ nào: sai từ suy nghĩ hay cách làm như vậy là chưa đúng.
Nếu muốn viết một chương trình như mô tả ở trên thì cần những kiến thức nào?

Rất mong được sự giúp đỡ của các anh em HVA!! 

Mục đích cuối cùng của em là gì nhỉ ???
Nếu đơn thuần khi khởi động C.exe thì nó sẽ chạy cả 2 chương trình A,B (A,B nằm trong C) thì chỉ mất vài dòng code là cùng
smilie cao thủ lại nhìn theo hướng phức tạp hóa thì mệt.......smilie
[Up] [Print Copy]
  [Question]   Re: Viết chương trình nối 2 file exe!!! 16/01/2008 00:53:12 (+0700) | #15 | 110431
TQN
Elite Member

[Minus]    0    [Plus]
Joined: 29/06/2006 22:28:01
Messages: 888
Location: Biết làm chi ?
Offline
[Profile] [PM] [WWW] [Yahoo!]
Sao hay vậy, vài dòng code thôi à. Phamtiensinh post code lên cho mọi người học hỏi với.
[Up] [Print Copy]
  [Question]   Re: Viết chương trình nối 2 file exe!!! 16/01/2008 00:56:55 (+0700) | #16 | 110433
[Avatar]
haipt
Member

[Minus]    0    [Plus]
Joined: 20/08/2004 19:48:44
Messages: 165
Location: Hải phòng
Offline
[Profile] [PM] [WWW]
Vì các cao thủ hay phức tạp hóa vấn đề lên mới hay dùng dao mổ trâu giết gà
Hỏi lại nhé nếu tôi dùng resource để nhúng A và B,thậm chí D,E,F
Rồi khi chạy C tôi export A, B ra để run thì mất mấy dòng đây sẽ dễ dàng hơn rất nhiều phải không ạ,
kỹ năng code thì newbie cũng OK
[Up] [Print Copy]
  [Question]   Re: Viết chương trình nối 2 file exe!!! 16/01/2008 01:18:20 (+0700) | #17 | 110439
chaien281985
Member

[Minus]    0    [Plus]
Joined: 17/06/2007 14:48:15
Messages: 248
Location: HVAN
Offline
[Profile] [PM] [WWW]
@PhamTienSinh : Ý phamtiensinh có phải là tạo file nguồn A.c, B.c rùi sau đó dùng C.c include 2 file đó ko?

[Up] [Print Copy]
  [Question]   Re: Viết chương trình nối 2 file exe!!! 16/01/2008 01:37:56 (+0700) | #18 | 110446
[Avatar]
haipt
Member

[Minus]    0    [Plus]
Joined: 20/08/2004 19:48:44
Messages: 165
Location: Hải phòng
Offline
[Profile] [PM] [WWW]
Đây là vấn đề rất basic bạn à... tìm hiểu thêm về resource và cách thao tác với RESOURCE



[Up] [Print Copy]
  [Question]   Re: Viết chương trình nối 2 file exe!!! 16/01/2008 19:20:59 (+0700) | #19 | 110543
[Avatar]
malyfo
Locked

[Minus]    0    [Plus]
Joined: 16/01/2008 05:12:52
Messages: 37
Location: malyfo
Offline
[Profile] [PM] [Email] [WWW] [Yahoo!] [MSN] [ICQ]
Dùng resource thì ok rồi, icon của C tùy biến (thường sẽ chọn của A khi C muốn chạy B khi giả danh B).
Có cách khác đơn giản hơn, là dùng winrar và 1 file .bat, nén theo kiểu tự bung (nén ra file .exe), file .bat gọi tất cả các file muốn chạy (dùng đường dẫn tương đối), chú ý config khi nén để khi tự bung xong sẽ chạy file .bat

file .bat khi muốn các file chạy tuần tự thì dùng lệnh dos kiểu: (với vd A là calc và B là notepad, ...)

start /wait calc
start /wait notepad

chạy song song thì chỉ cần oánh thẳng tên A và B thôi, kiểu:

calc
notepad

Nếu biết tạo C nhưng chưa thạo dùng resource, chỉ biết lời gọi shell để nó gọi A và B... thì dùng C thay cho file .bat sẽ đẹp hơn, vì C do ta lập trình, tí công thôi.

Mong góp ý.
[Up] [Print Copy]
  [Question]   Re: Viết chương trình nối 2 file exe!!! 11/02/2008 03:06:55 (+0700) | #20 | 114155
blackstar_76
Member

[Minus]    0    [Plus]
Joined: 24/07/2007 21:53:09
Messages: 1
Offline
[Profile] [PM]
theo tôi trong trường hợp này,việc dùng .bat thì thường wa, nạp thủ công vào bộ nhớ thì rất khó vì phải goi các dll,phương án khả thi là .hai file đó sẽ là dữ liệu của file c.exe khi c chạy sẽ ghi hai file a,b ra ổ cúng.sau đó c dung lệnh shell hai tệp vừa cop ra.chắc là ổn .
[Up] [Print Copy]
  [Question]   Re: Viết chương trình nối 2 file exe!!! 20/02/2008 06:18:28 (+0700) | #21 | 115569
[Avatar]
doqkhanh
Member

[Minus]    0    [Plus]
Joined: 30/10/2007 14:51:27
Messages: 18
Location: EOF
Offline
[Profile] [PM]
Xin góp ý:
Lưu 2 file vào resource,
lúc Run file C, save 2 file exe từ resource xuống thư mục tạm,
thực thi 2 file này.
smilie

Đúng req của bạn nhé !
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|