Thứ Tư, 1 tháng 2, 2017

Coursera - Software Security - Week 1
1. Three of the following are classic security properties:

  • Confidentiality
  • Integrity
  • Availability
2. Morris Worm is the first Buffer Overflow Attack.
3. The stack is memory for storing Local Variables
4. Why is it that the compiler does not know the absolute address of a local variable?
  • As a stack-allocated variable, it could have different addresses depending on who called the function
5. When does a buffer overflow occur?
  • When a pointer is used to access memory not allocated to it 
6. How does a buffer overflow on the stack facilitate running attacker-injected code?
  • By overwriting the return address to point to the location of that code
7. Nop Sled: It is a sequence of nops preceding injected shellcode, useful when the return address is unknown. The sequence nop instructs "sleds" the instruction pointer to the actual attacker code of interest
8. Exploitation of the Heartbleed bug permits a read outside bounds of a buffer.
9. Anti-virus scanners would not have found an exploitation of Heartbleed because
Anti-virus scanners tend to look for viruses and other malicious code, but Heartbleed exploits steal secrets without injecting any code
10. An integer overflow occurs when an integer is used to access a buffer outside of the buffer's bounds.

Chủ Nhật, 16 tháng 10, 2016

Lâu mới quay lại team...ừ thì làm một tut nhỏ về một cái keygen-me tìm thấy trên 4rum rtn-team.
Đánh giá độ khó là : 0/10
Là một app.net

Link tải : https://an0nym.xyz/?https://www.dropbox.com/s/p2wjcze4ozrm9gj/KeygenMe 2.exe?dl=0

Chạy thử xem GUI ra sao  :

Load vào dnspy ta sẽ có theo ảnh dưới :



 

- Diễn tả ngắn gọn về cách cái tool này tạo key (Serial):
 1. Lấy giá trị username (textBox1.text) nhập vào bởi user
 ví dụ : username = tuanlinh
 2. Chuyển đổi giá trị username này sang dạng base64
 ví dụ : tuanlinh -> dHVhbmxpbmg=
 3. Đảo ngược giá trị base64 này
 ví dụ : dHVhbmxpbmg= -> =gmbpxmbhVHd
 4. Thêm string "Alpha__" vào đầu giá trị base64 sau khi đảo ngược
 ví dụ : =gmbpxmbhVHd -> Alpha__=gmbpxmbhVHd
 5. Thêm string "R.T.N" vào cuối :
 ví dụ : Alpha__=gmbpxmbhVHd -> Alpha__=gmbpxmbhVHdR.T.N
Vậy Serial key là : Alpha__=gmbpxmbhVHdR.T.N -> nhập thử vào -> Bingo!!!
Giờ thì viết keygen thôi... (viết bằng C++)
Link : https://www.sendspace.com/file/k677pp

Thứ Tư, 21 tháng 9, 2016

:cool: Tự dưng dạo này rảnh rảnh (sau đợt thi ctf vừa rồi nên rảnh) ngồi nghĩ nghĩ nên viết cái tút này
Mục tiêu :
-Không nhắm tới mục đích dạy bạn RE hay Crack
-Giúp các bạn newbie về RE có thêm động lực (mình hiểu thời gian đầu học RE cực kì dễ nản,cho tới khi mình crack được ứng dụng đầu tiên mất khoảng 1 năm rưỡi gì đó,mà tại mình học kém chớ tụi bạn mình cày 3-4 tháng gì là crack được vài app .net rồi :P)   
-Mục tiêu là các ứng dụng .Net vì xử lý các ứng dụng .Net dễ hơn các native application và muốn cho các bạn cái nhìn cơ bản nhất về việc tạo keygen và viết keygen
-Nhắm tới những người không biết gì về RE/biết ít/ko yêu cầu kiến thức về assembly/yêu cầu biết lập trình basic
-Ở đây mình chủ yếu viết keygen-er bằng C++ nên basic là gì thì mình xin nói là
 https://www.youtube.com/watch?v=jrn6bXC6sTU&list=PLRlbFp7jBO4IwyRIILcX1zacu7T5J2v39 (ở đây có 77 bài C++ căn bản,khi bạn đã học xong 77 bài này (thời lượng khoảng 13 tiếng) thì hoàn toàn tự tin đi hết 11 tut của mình (tính viết 11 tut và 1 tut cuối cùng sẽ chỉ cách crack một soft đơn giản)
-Và cuối cùng thì google và msdn là bạn của bạn :P


Tools:
-Ở bài này mình chủ yếu dùng 2 tools là PEid (khuyên nếu .net thì sài Protection ID) để nhận diện file và DnSpy để phân tích
-Code thì bằng VS2012 bản licensed (C++)

File mục tiêu :
https://www.dropbox.com/s/p2wjcze4ozrm9gj/KeygenMe%202.exe?dl=0

:D  Ok let's have some fun:
-Đầu tiên chúng ta sẽ xác định sơ bộ về mục tiêu :

Ok vậy là một app .net,không được bảo vệ gì cả.Chúng ta mở thử xem như nào:[Đây là ảnh mà mỗi khi mình nói kéo lên xem ảnh thì bạn kéo lên đây]

Ok vậy sơ bộ chúng ta có thể mường tượng ra là nó lấy vào 2 giá trị là Name và Serial,khởi động dnspy để disassembly nó thôi :P :

Ok,một màn hình với đủ loại kí tự hiện lệnh khá rối (chỉ sau việc mở trong ollydbg) và bạn chưa biết bắt đầu từ đâu.Vậy hãy kéo lên cái ảnh bên trên ,bạn nào từng tạo GUI (giao diện người dùng) rồi thì sẽ hiểu nhanh hơn.
Ta có 2 cái text để nhập 2 dữ liệu là Name và Serial vào
Sao đó có 1 cái button là Register.Vậy sau khi bấm Register thì ứng dụng sẽ làm gì?
Ok vậy chúng ta bấm vào button1 (Register) để xem code:



OK,vậy chúng ta có thể thấy ở kia là một biến tên flag và kiểu là bool
Đọc tiếp sẽ là hàm CompareString.Vậy compareString là gì,sau một hồi google thì đại khái là nó sẽ so sánh 2 string với nhau,nếu khác nhau thì sẽ trả về là <> 0,còn nếu giống nhau thì sẽ trả về giá trị 0.

Đọc xuống dưới ta thấy dòng if (flag)

Ok vậy ta có thể hiểu đại khái nó so sánh 2 string,nếu giống nhau thì lệnh if(flag) sẽ chạy và thực thi dòng code bên dưới -> chúc mừng bạn đã làm được,hãy viết keygen (dịch từ tiếng Anh)

Vậy ta phải phân tích xem 2 cái string đó là cái gì:
String1 = this.TextBox2.Text  == Cái dòng Serial(bạn nhập vào) (TextBox1 là cái Username,cái TextBox2 là cái Serial ở cái ảnh trên ,bạn kéo lên,do bạn nhập vào)
String2 = this.enc(this.TextBox1.Text, "wtMd3x6ucb16w9P9BBPj5qoHKPCq0MIy") -> nó gọi một cái hàm tên là enc ,cái hàm này lấy 2 giá trị đầu vào là TextBox1 (cái username bạn nhập vào) và cái chuỗi bla bla thứ 2,xong nó làm một cái bla blô gì đó miễn là nó return một cái string2 để so sánh với string1

Ở đây tôi phỏng đoán enc = encryption (mã hóa) cho dễ hiểu

Vậy hình dung một cách sơ khai,nó lấy vào cái username của bạn,đưa qua hàm enc để mã hóa,rồi quay lại so sánh kết quả của enc với cái serial(textbox2) bạn nhập vào,nếu 2 cái giống nhau thì bạn thành công.

Vậy chúng ta phải xem cái hàm enc kia tạo ra một cái string2 như nào? Click vào chữ enc.

Vậy chúng ta có thể thấy nó lấy vào hàm là 2 string ,và trong hàm thì nó đặt tên 2 string đó là stringInput và key ,tức là :
stringInput = TextBox1 (username bạn nhập vào)
key = wtMd3x6ucb16w9P9BBPj5qoHKPCq0MIy (cái này do thằng coder nó đặt)