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
)
-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
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)