banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Messages posted by: HoangTuanSu  XML
Profile for HoangTuanSu Messages posted by HoangTuanSu [ number of posts not being displayed on this page: 0 ]
 
Tui đang tìm hiểu cấu trúc file PE và có thử viết một cái demo để phân tích nó và xác định địa chỉ vài chỗ để coi như là thực hành cho cái lý thuyết. Đối tượng làm thí nghiệm của tui là file Garena.exe và bỏ vào ổ C. Đây là đoạn code của
tui:

Code:
#include <iostream>
#include <fstream>
#include <string>
#include <windows.h>
using namespace std;
#define Print_Directory_Entry(name) \
cout<<#name<<endl; \
cout><< iNh->OptionalHeader.DataDirectory[name].size << endl; \
cout<<iNh->OptionalHeader.DataDirectory[name].VirtualAddress<<endl;
#define NewCharArray(n) \
cPtr = new char[sizeof(n)]; \
file.read(cPtr, sizeof(n));
int main(void)
{
IMAGE_DOS_HEADER* iDh = 0;
IMAGE_NT_HEADERS* iNh = 0;
ifstream file("C:\\Garena.exe", ios::in | ios::binary);
char* cPtr = NULL;
NewCharArray(IMAGE_DOS_HEADER);
iDh = (IMAGE_DOS_HEADER*)cPtr;
file.seekg(iDh->e_lfanew, ios::beg);
/***************************************/
/**************NT HEADER****************/
/***************************************/
NewCharArray(IMAGE_NT_HEADERS);
iNh = (IMAGE_NT_HEADERS*)cPtr;
cout<<"Number of section: " << iNh->FileHeader.NumberOfSections<<endl;
cout><<"Entry Point " << iNh->OptionalHeader.AddressOfEntryPoint<<endl;
cout><< iNh->OptionalHeader.NumberOfRvaAndsizes<<endl;
Print_Directory_Entry(IMAGE_DIRECTORY_ENTRY_EXPORT);
Print_Directory_Entry(IMAGE_DIRECTORY_ENTRY_IMPORT);
Print_Directory_Entry(IMAGE_DIRECTORY_ENTRY_RESOURCE);
Print_Directory_Entry(IMAGE_DIRECTORY_ENTRY_EXCEPTION);
Print_Directory_Entry(IMAGE_DIRECTORY_ENTRY_SECURITY);
Print_Directory_Entry(IMAGE_DIRECTORY_ENTRY_BASERELOC);
Print_Directory_Entry(IMAGE_DIRECTORY_ENTRY_DEBUG);
Print_Directory_Entry(IMAGE_DIRECTORY_ENTRY_ARCHITECTURE);
Print_Directory_Entry(IMAGE_DIRECTORY_ENTRY_GLOBALPTR);
Print_Directory_Entry(IMAGE_DIRECTORY_ENTRY_TLS);
Print_Directory_Entry(IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG);
Print_Directory_Entry(IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT);
Print_Directory_Entry(IMAGE_DIRECTORY_ENTRY_IAT);
Print_Directory_Entry(IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT);
Print_Directory_Entry(IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR);
IMAGE_SECTION_HEADER* iSh;
cPtr = new char[sizeof(IMAGE_SECTION_HEADER)*iNh->FileHeader.NumberOfSections];
file.read(cPtr, sizeof(IMAGE_SECTION_HEADER)*iNh->FileHeader.NumberOfSections);
iSh = (IMAGE_SECTION_HEADER*)cPtr;
for(int i = 0; i < iNh->FileHeader.NumberOfSections; i++)
{
cout<<iSh[i].Name><<endl;
cout<<hex><<iSh[i].VirtualAddress<<endl;
}
cout><<"Virtual Offset: " << hex<<iSh[1].VirtualAddress><<endl;
cout<<"Raw Offset: " <<hex><<iSh[1].PointerToRawData<<endl;
unsigned long delta = iSh[1].VirtualAddress - iSh[1].PointerToRawData;
unsigned long x = iNh->OptionalHeader.DataDirectory[0].VirtualAddress;
unsigned long y = iNh->OptionalHeader.DataDirectory[0].size;
file.seekg(x - delta, ios::beg);
cPtr = new char[y];
file.read(cPtr, y);
IMAGE_EXPORT_DIRECTORY* iEd = (IMAGE_EXPORT_DIRECTORY*)cPtr;
cout<<"Address of Name: "<<hex><<iEd->Name<<endl;
cout><<iEd->AddressOfNames - delta<<endl;
file.close();
return 0;
}


Có vẻ mọi thứ đều tốt nhưng cái lệnh cout cuối cùng thì tui nghĩ là gặp vấn đề. Vì nó xuất ra là 1EDC48, trong khi nếu coi dưới dạng Hex bằng một chương trình khác, như WinHex, TotalCommander, (ở đây tui xài FreeCommander) thì cái chỗ đúng phải là 1EDCFB. Tui có gởi hình, anh em có thể coi để hiểu ý tui.




File Garena.exe (anh em nhớ dán vào ổ C hoặc thay đổi đường dẫn cho phù hợp nhé)
http://www.mediafire.com/?5mtzyz2jfo4

Vậy là, có thể có hai điều lưu ý:

1 - Tui ko hiểu về trường AddressOfNames, về ý nghĩa cũng như giá trị của nó.
2 - Có thể tui mần sai ở đâu đó khi tính. Nhưng tui đã check với LordPE và thấy chẳng có gì sai cả smilie

Mong đc hồi âm sớm smilie Thanks nhiều smilie>
http://download.microsoft.com/download/1/1/d/11d5f95b-f75d-4921-8a32-46a14c4d1448/Static%20Analysis-PREfast.wmv

Mọi người cho em hỏi chút, trong cái video trên, thằng Mic nó demo thì có chức năng là .../PREfast, sao em tải bộ Team Suite 2005 về rồi mà vào chẳng thấy mọi người ơi???? smilie smilie Ai biết thì chỉ em với, thằng msdn chết tiệt của nó thì chỉ vẻn vẹn có mấy dòng làm em chẳng kiếm chác được gì ráo.

http://msdn.microsoft.com/en-us/library/ms933794.aspx

Tìm trong cái thư mục Team Tools thì nó chỉ có mỗi FxCop dành cho C# ( em nghĩ vậy), chứ không thấy PREfast đâu cả!

Ai xài rồi, chỉ dẫn em làm thế nào để có cái opt PREfast với smilie. Cám ơn mọi người trước
smilie Thanks mybb smilie

Tất nhiên khi học, những cái ví dụ đó là quá đơn giản, nên tâm lý những người mới học sẽ thấy đó chẳng qua là ví dụ minh họa, chứ đâu có nghĩ là các lập trình viên chuyên nghiệp cũng mắc lỗi như thế. Chẳng qua là, mình muốn coi coi họ mắc lỗi như thế nào, chứ không phải muốn biết họ mắc lỗi gì - vì mình biết là quanh đi quẩn lại thì cũng nằm trong mấy cái lỗi cơ bản. (đúng không ta? :-")

Ý mình không chịu là ở chỗ, mình ko hiểu 2 bạn kia đưa ra 2 ví dụ là có ý gì mà thôi! Tại mục đích của mình là ... kiếm chác vài cái tool, dụ dỗ vài bạn hé lộ chút bí quyết để detect các phần mềm, chôm chỉa vài mánh khóe để bỏ vào cái luận văn smilie (Giờ thì biết rồi, 2 người kia khỏi phải comment hay confirm gì đâu :-" )

Híc, DVL smilie Mấy cái đơn giản mình còn chưa mò được, huồng hồ là cái DVL (mình không rành về Linux lắm đâu smilie )

2 lamer: mình đã tìm được cái source có chứa defect của cái wuftpd, có điều nó chạy trên linux, nên mình chưa thử.

Mình thấy anh TQN nói đúng cái tình trạng hiện giờ của mình, vào MilkwoRm gì đó, đọc ko hiểu chút gì cả. Em sẽ thử làm theo cách của anh xem sao smilie

Thanks mọi người nhiều lắm :">
Mình đâu có nói là lỗi "gà gà" nào mình cũng thấy đâu nhỉ? smilie)

PS: thấy có người reply, tưởng là thêm một thông tin nữa, té ra chỉ có bắt bẻ smilie Rehtom bác thật smilie
Sặc, mình đâu có ý chê đơn giản đâu mrro smilie Mình chỉ muốn nói rõ cái mục đích của mình khi lập thread này thôi smilie Những lỗi đó, ai cũng đều mắc phải, nhưng khổ nỗi mấy ku Gà như mình chưa biết gì, nên tự hỏi: "Lỗi đó nó có cái quái gì đâu mà mấy tay chuyên gia lại mắc nhỉ??? Chắc thằng cha tác giả quyển sách đưa vào ví dụ cho có thôi mà". Do đó, mình muốn tìm xem có tài liệu, trang web nào nó có đề cập đến những exploit này để học hỏi đó mà smilie.

Cám ơn hai người đã giúp đỡ nhiệt tình, mình lại có thêm cái task mới nữa rồi smilie

- coi mã nguồn ku wuftpd (dù đến giờ cũng chẳng biết mặt mũi thằng wuftdp nó là con trai hay con gái nữa smilie) )

- ngâm cứu mấy cái trang của mrro


À, mà lỗi trong ví dụ của mình không phải là tràn bộ đệm .
 

Tại hạ xin được nghiêng mình nghe các hạ chỉ giáo! smilie


Còn muốn *hấp dẫn hơn* thì lấy source code của những phần mềm popular như Firefox, Linux kernel về mà tìm.
 

Firefox thì có khi mình còn nghĩ tới, chứ Linux thì ^smilie^, đang muốn mơ nè bạn ơi smilie

PS: tối qua tìm trong thằng Bkav Home đến độ đỏ mắt mà ko thấy cái lỗi gì ráo, té ra là trong Pro smilie.

Còn một điều nữa mình mong mọi người giúp với, đang gặp rắc rối. Chẳng là mấy cái tool anh TQN đưa, hoặc đa số mình search đều scan file thực thi (trừ thằng DevPartner thì mình thấy có sáng sủa chút chút, nhưng nếu chỉ có một mình nó thì thông tin thu được nghèo nàn quá smilie ), mình chưa thấy tool nào scan trực tiếp source code cả (ko nói đến PREFast nha), nên ko biết có ai có cái nào thì share mình với. Cảm ơn trước :-"
Híc, hai người có lẽ là vui tính, nên chắc ... đang đùa với em thì phải smilie Em có đọc vài cuốn cơ bản, nên cũng có biết sơ qua vài defect (kể cả cái lỗi gây ra tình trạng buffer overflow trong ví dụ của 2 người smilie ). Em cũng không đến nối mù (còn sáng tỏ như mức nào thì chưa test được smilie), cũng không có ý lên diễn đàn để khoe kiến thức đâu smilie Mục đích của em khi tạo thread này là:

- Quan trọng nhất: đáp ứng yêu cầu của ông thầy hướng dẫn luận văn smilie

- Thứ 2 nữa, là để xem xem mấy cái lỗ hổng phần mềm trong thực tế nó như thế nào so với trong lý thuyết (cái lỗi trong ví dụ 2 người, thằng gà như em chắc chắn sẽ nghĩ rằng: CHỈ LÀ VÍ DỤ vì dễ gì các chuyên gia mắc cái lỗi đó -> ko hình dung được trong thực tế, các lỗ hổng đó xuất hiện như thế nào)

- Thứ 3 nữa, là để test các phần mềm scan code, tìm hiểu cơ chế hoạt động của nó và cuối cùng là viết một cái plugin tương tự như cái tool PREFast trong VS 2005 Team Suite ạ (miễn phí ;smilie )

google -> filetype:cpp defect OR security OR abcxyz gì đó, nhưng tóm lại vẫn chưa có được một hình dung rõ rõ về các lỗi trong phần mềm lớn. Ví dụ: Firefox :-" (Linux thì em đang cố gắng ... nằm mơ được là người phát hiện ra defect ạ smilie )

Mình xem trong một diễn đàn, có một mục của anh w_hat nói về các lỗi tương tự. Mọi người xem qua cho vui :-"
http://www.thuvientinhoc.com/forums/index.php?showtopic=29691

Mong mọi người giúp đỡ. Thanks tiếp smilie)
Mọi người có thể giúp mình một vài trang web có chứa các file mã nguồn mẫu (C, C++ ...) có các lỗ hổng bảo mật được ko? Mấy cái tool của anh TQN giới thiệu (trừ PCLint - cấu hình vẫn chưa được), mình đã down về cài, có chạy vài file tự tạo để kiểm tra, nhưng không biết tìm ở đâu mấy cái mã nguồn mẫu có các defect để test thử. Mong mọi người giúp đỡ, mình xin cám ơn!
smilie

Ông anh làm em nhớ tới anh w_hat quá! Thì ra là PREFast nó thuộc cái team suite smilie <-- em cài cái VS thường nên chắc là ko có. Vậy mà cả buổi chiều lục đục mò trong trang của thằng Mic smilie. Thanks anh.

Tạm thời chắc như anh nói quá, coi hai trang anh giới thiệu (còn trang wiki đó thì em sợ lắm rồi smilie ) và mần 2 cuốn đó xem sao smilie

Sẵn đây cũng post lên tên quyển ông thầy mình bảo đọc tham khảo luôn: Secure Program - HOWTO (quyển này nổi tiếng thì phải smilie, lên là tìm được liền à :"> )

PS: vậy là sau khi đọc bài của anh TQN, máy mình lại phải tốn thêm vài GB để cài VS Team Suite rồi smilie
Cám ơn anh TQN, em sẽ tìm và xài mấy cái đó.

Em có xem một đoạn clip của Mic demo về cách xài PREFast, và nghĩ là cái add-in này của VS cũng khá hiệu quả ít nhất là với gà như em. Khổ nỗi lại ko biết down ở đâu, mọi người nếu giúp được thì mình xin cảm ơn smilie

http://download.microsoft.com/download/1/1/d/11d5f95b-f75d-4921-8a32-46a14c4d1448/Static%20Analysis-PREfast.wmv

(Quên mất cái link nên đưa luôn link down trực tiếp luôn smilie)

Anh TQN nè smilie, anh có thể list cho em một vài cái tool khác được ko anh smilie Tại em đang làm luận văn về đề tài này, mà tìm tool liên quan vất vả quá (ý em nhiều tool quá, nên mình phân loại nó mất thời gian). Anh đi trước nên chắc hiểu được ý em, mong anh và mọi người giúp đỡ. smilie Em xin cảm ơn smilie
Thanks bạn haipt smilie, nhưng mình thấy như vậy smilie

1 - ReSharper có các chức năng như là


"...error highlighting on the fly, advanced code completion, superior unit testing tools, over 30 advanced code refactorings, multiple handy navigation and search utilities, single-click code formatting and cleanup, automatic code generation and templates ..."
 


chứ nó đâu có chức năng kiểu như scan source code để tìm các lỗ hỗng đâu ta smilie

2 - Rational Rose thì mình chỉ biết là nó có thể reverse từ mô hình uml sang code C hoặc Java gì đó. Chứ chưa biết đến khả năng scan code của nó.

3 - Code Analysis thì bạn nói chung quá, mình đã tìm nhưng ko thấy

Còn theo mình nghĩ thì việc phân tích mã nguồn và kỹ thuật RE có liên quan chứ ta smilieanalysis mã (ví dụ như asm) thì mới biết mà RE chứ nhỉ smilie Ai confirm giùm mình cái ý này với smilie

Nhưng mà trong bài này, ngoài chút tò mò về việc anh TQN phát hiện bằng cách RE thì ý của mình là mong được mọi người giúp đỡ cho vài tool scan source code (chứ không phải scan file thực thi) smilie


Thanks bạn smilie

Có lẽ là anh TQN dùng mấy cái tool đại loại như IDA, Olly ... Mình chỉ biết xài Olly (một ít thôi) nên khả năng reverse cũng ko giỏi lắm. Ko biết ngoài mấy cái tool đó ra, còn có tool nào đáp ứng được nhu cầu mình đề cập ko ta? smilie
Anh TQN có đề cập đến các lỗ hổng bảo mật của bkav trong bài vi phạm bản quyền nên em có thắc mắc: ko biết anh làm kiểu gì để detect được khi chỉ dựa vào cái execute chứ không phải là mã nguồn???

Em cũng có nghiên cứu về các phương phát phát hiện defect trong mã nguồn phần mềm (em biết khá rõ về C, C++, C# còn mấy cái khác thì không rành lắm) nhưng gặp khó khăn trong việc tìm kiếm các tool trên windows. Mong mọi người giúp đỡ! Em cảm ơn trước.

Em đã tìm, có tìm được vài tool như FlawFinder, FlockWork hay PREFast nhưng cái thì chạy trên Linux, cái thì trial, cái thì ... chẳng biết chỗ nào mà down smilie(. Mong mọi người giới thiệu cho em nhiều nhiều cái tool (chỉ cần giới thiệu thôi ạ smilie ).

PS: em có nghe một anh nói là bộ Visual Studio có công cụ để phát hiện lỗi nhưng mà em tìm hoài không được. Chẳng biết công cụ đó có tên là gì nữa smilie
 

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