Nếu như chúng ta tìm được đoạn code mà nhảy tới vị trí này thì rất có thể chúng ta sẽ tìm thấy nơi mà chương trình thực hiện việc Check Serial.. Olly sẽ đưa chúng ta đến vị trí của câu l
Trang 1Tiếp theo nhấn Show Invalid để tìm xem có hàm nào không hợp lệ không Khà khà không có hàm nào cả, chúng ta nhấn Fix Dump và chọn file SlpitterDump.exe
(ImportREC sẽ lưu thành một file mới với dạng như sau FileName_.exe) Nhấn
Open và đợi đến khi ImportREC thông báo cho chúng ta rằng SplitterDump_.exe
đã được Fix thành công Bây giờ chúng ta cho thực thi file SplitterDump_.exe lên
và kiểm tra xem It works!!:D Vậy là chúng đã Unpack thành công rồi đó, Test lại
file này trong PEiD chúng ta sẽ thấy Olly thông báo như sau : Microsoft Visual C++ 7.0 Vậy là chúng ta đã biết được nó được code bằng gì rồi Bây giờ chỉ còn
mỗi một việc là làm thế nào để sử dụng chương trình hợp pháp đây ? : )
II Patching the Registration Function:
Sau khi chúng ta đã Unpack thành công và có được file đã unpacked là
SplitterDump_.exe Bước tiếp theo chúng ta sẽ tiến hành công việc để Register
Trang 2chương trình này Như đã nói ở trên, bạn có còn nhớ về chuỗi thông báo mà chúng
ta nhận được khi test thử chương trình này không? Đó chính là chuỗi “Error
Registration Information, Please try again!!”
Giờ chúng ta hãy mở Olly lên và tìm kiếm chuỗi trên thông qua chức năng tìm
kiếm của Olly (Nhấn chuột phải trên màn hình CPU, sau đó chọn Search for > All referenced text strings ) Các bạn sẽ tìm thấy hai vị trí có chứa chuỗi thông báo
này :
Nhưng vị trí mà chúng ta cần lại là vị trí thứ hai Oki , double click vào vị trí thứ hai , Olly sẽ đưa chúng ta quay trở về màn hình chính Tại màn hình chính của Olly, dịch lên trên một chút, chúng ta sẽ thấy tại câu lệnh PUSH phía trên chuỗi mà
chúng ta vừa tìm , có một kí hiệu như sau : “>” Kí hiệu này biểu diễn một entry
point (điểm đột nhập or điểm bắt đầu) của hàm
Nếu như chúng ta tìm được đoạn code mà nhảy tới vị trí này thì rất có thể chúng ta
sẽ tìm thấy nơi mà chương trình thực hiện việc Check Serial Oki bây giờ chúng ta chọn câu lệnh PUSH trên để tìm đến vị trí của câu lệnh sẽ nhảy đến vị trí này, điều này thực hiện hết sức dễ dàng nhờ vào Olly, vì trên cửa sổ Olly sẽ xuất hiện một mũi tên màu đỏ , xác định cho ta biết vị trí của câu lệnh sẽ nhảy tới lệnh PUSH
Thêm vào đó ở cửa sổ Tip window cũng hiện thị thông tin cho chúng ta biết vị trí
của lệnh nhảy ở đâu :
Trang 3Tại câu lệnh PUSH này , các bạn nhấn chuột phải và chọn Goto > JE from
0041402F Olly sẽ đưa chúng ta đến vị trí của câu lệnh nhảy.Dịch lên một chút các bạn sẽ thấy có một lệnh TEST AL,AL , nó sẽ kiểm tra xem AL có bằng 1 hay
không Nếu như AL không bằng 1 thì tức là câu lệnh nhảy trên sẽ đưa chúng ta tới chỗ của hàm MessageBox và điều này có nghĩa là những thông tin mà chúng ta đã nhập vào là sai
Ta có thể tiến hành Patch tại câu lệnh nhảy ở trên nhưng việc Patch tại vị trí này sẽ không giúp gì cho chúng ta nếu như chương trình lại thực hiện quá trình kiểm tra khi khởi động chương trình.Điều mà chúng ta muốn làm là chúng ta phải Patch tại thủ tục mà tiến hành quá trình Checks Serial.Điều gì đã xảy ra khi chúng ta nhập Name và Serial rồi bấm nút Ok Chương trình sẽ lấy những thông tin mà chúng ta
đã nhập vào sau đó truyền thông tin này cho một hàm.Chúng ta tạm gọi hàm này là
hàm CheckSerial ().Hàm này sẽ tiến hành kiểm tra Serial mà chúng nhập vào và sau đó thiết lập giá trị cho thanh ghi AL là 1 hay là 0 phụ thuộc vào Serial của
chúng ta nhập vào là đúng hay là sai Do đó có thể hàm này sẽ được sử dụng lại rất nhiều lần tại những vị trí khác nhau trong chương trình của chúng ta Nếu như chúng ta có thể Patch được hàm này buộc nó luôn luôn thiết lập giá trị cho thanh ghi AL là 1 thì chúng ta sẽ không phải mất công đi tìm và thay đổi các câu lệnh
nhảy JE thành JNE nữa
Oki như đã nói nãy giờ, các bạn hãy nhìn vào hình minh họa phía trên Các bạn sẽ
thấy trước câu lệnh nhảy là một lời gọi hàm Ta có thể coi đây là hàm CheckSerial () Chọn hàm này và đặt một BP bằng cách nhấn F2 Sau đó nhấn F9 để Run
Trang 4chương trình , ta nhập lại các thông tin cần thiết để đăng kí sau đó nhấn OK
Chúng ta sẽ quay trở lại Olly và dừng tại vị trí của lệnh 00414028 E8 53BAFFFF CALL Splitter.0040FA80 ; \Splitter.0040FA80 mà chúng ta đã đặt BP Nhấn F7
để Trace Into và chúng ta đã ở trong quá trình kiểm tra Serial của chương trình
Splitter.exe
Oki tại đây chúng ta nhấn F8 để Trace và chúng ta bắt gặp một đoạn kiểm tra sau :
Như các bạn đã thấy, nếu như chúng ta nhập chuỗi Fake User mà độ dài của chuỗi này không > = 5 thì chúng ta sẽ không tiếp tục được quá trình kiểm tra Do đó để chắc rằng nếu như có User nào đó nhập FU có length < 5 thì chương trình vẫn chấp
nhận thì vị trí đầu tiên mà chúng ta cần Patch là tại câu lệnh JGE Chúng ta sẽ change nó thành JMP , có nghĩa là nhập bất cứ User có chiều dài như thế nào cũng
vẫn sẽ tiếp tục quá trình kiểm tra Do đó tại câu lệnh JGE chúng ta nhấn Space Bar
để mở cửa sổ Assemble và chúng ta thay như sau :
Oki tiếp tục dùng F8 để Trace cho tới khi các bạn bắt gặp đoạn code như sau :
Trang 5Vậy là ở đây chúng ta lại bắt gặp một cấu trúc bao gồm 3 câu lệnh là : CALL > TEST > JUMP Và cụ thể ở đây sau hàm CALL giá trị của AL sẽ được set là 1
hoặc 0 tùy vào Serial chúng ta nhập vào Nếu đúng thì sẽ là 1 và đó là điều mà chúng ta mong đợi Oki , vậy chúng ta sẽ tiến hành Trace Into vào hàm CALL để
tìm hiểu xem giá trị của AL sẽ được thay đổi như thế nào Sau khi nhấn F7 để Trace Into chúng ta nhấn F8 và Trace đi một đoạn ta bắt gặp đoạn check sau :
Như các bạn thấy, nếu như Length của Serial mà chúng ta nhập vào nhỏ hơn 0xA
thì chúng ta sẽ bị thoát khỏi đoạn kiểm tra, mà điều này là chúng ta không muốn
Do đó vị trí tiếp theo mà chúng ta phải Patch là tại câu lệnh nhảy JB ở trên Thực
hiện tương tự như với vị trí Patch thứ nhất, ta sửa như sau :
Trang 6Tiếp tục dùng F8 để Trace , cho tới khi các bạn bắt gặp đoạn check như sau :
Như các bạn thấy câu lệnh JB ở trên sẽ đưa chúng ta tới câu lệnh XOR khiến cho
giá trị của thanh ghi AL trở thành 0, mà điều này chúng ta không muốn chút nào Vậy phải làm sao bây giờ ? Rất đơn giản , nó muốn cho thành 0 nhưng ta bắt nó
phải là 1, do đó chúng ta sẽ thay câu lệnh XOR thành câu lệnh MOV AL,1 Đây
chính là vị trí thứ 3 mà chúng ta cần thay đổi Giống như hình minh họa dưới đây :