www.reaonline.net
31/05/08
Patch HWID Execryptor 2.4.1 [Execryptor 2.4.1 Cracked Unpack.C Unpack.CN] N] Trickyboy
No.
2
2008
Trang |1
M
ục lục
I.
Giớ i thiệu .............................................................................................................................................. 2
II.
Chuẩn bị công cụ .................................................................................................................................. 3
III.
Phân tích............................................................................................................................................ 8
IV.
Tìm đoạn code phát sinh HWID .....................................................................................................
V.
Patch HWID ........................................................................................................................................ 19
VI.
10
Kết luận ........................................................................................................................................... 30
Trang |1
M
ục lục
I.
Giớ i thiệu .............................................................................................................................................. 2
II.
Chuẩn bị công cụ .................................................................................................................................. 3
III.
Phân tích............................................................................................................................................ 8
IV.
Tìm đoạn code phát sinh HWID .....................................................................................................
V.
Patch HWID ........................................................................................................................................ 19
VI.
10
Kết luận ........................................................................................................................................... 30
Trang |2
I.
Giớ i thiệu Chào anh em, v ậy là trick đã viết bài thứ 2 trong năm 2008 này. Đáng lẽ nhiệm vụ này của Còm đại gia nhưng không hiể u sao lại đá qua bên trick em nữa, hix hix. Chẳng là năm ngoái (hay là năm nay wên rùi :P ), Unpack.Cn có crack cái Execryptor 2.4.1. Crack ở ở đây đây nghĩa là các lão có thể cấp cho chúng ta serial và activation key theo Name và HWID b ất kì. Nhưng tất nhiên key chỉ valid vớ i b ản crack của các lão. Đợ t c ấp key cho mỗi user request bên unpack.cn mở ra khoảng vài tuần, sau đó close lại. Key chỉ valid trên 1 máy/1 win. Cài lại win coi ch ừng key toi. (trick b ị nà >__< ). Và nguyên nhân key toi là do HWID đã thay đổi. Cho nên ở ở đây đây phát sinh nhu cầu patch cho HWID luôn cố định để chúng ta có th ể đem bản Execryptor đi khắp nơi mà xài vớ i 1 valid user & serial & activation key.
Bài này không có gì đặc biệt cho lắm, chỉ viết để lưu trữ, sợ sau này quên thì lại đi bán cái như anh Còm mấ t ^ ^. Vào cuộc nào!!!
Trang |3
II.
Chuẩn bị công cụ Nói về bypass anti-debug của Execryptor 2.4.1 thì đúng là 1 câu chuyệ n dài. Và chính vì dài quá cho nên không c ần nói nhiều =)), các đại gia đã mần sẵn tool để bypass, anh em mình c ứ thế mà xài. Các tool c ần: -
OllyICE (ver 2006.11.16+) HideToolz 2.1 Plugin Phantom 1.26 Plugin Olly Advanced 1.26 Plugin ODBGScript (english version) Unpacker Execryptor 2.x.x ver 1.0 RC 1
Config OllyICE:
Trang |4
Config Plugin Phantom:
Lưu ý: Vớ i option remove EP break, ta s ẽ tránh đượ c detect của Execryptor khi load vào Olly. Config plugin Olly Advanced:
Trang |5
Lưu ý: chỉ check để break tại TLS Callback. Còn các plugin Hide khác cho Olly như HideOlly, HideOD… các option anti -debug trong Olly Advanced… tốt nhất là dẹp hết.
Config HideToolz:
Trang |6
Lưu ý: add Path OllyICE vào, và HideToolz s ẽ tự Hide khi Olly ch ạy vớ i điều kiện tên file chạy của Olly trùng tên folder ch ứa nó. VD:OllyICE\OllyICE.exe. Khi Olly ch ạy lên, nhìn bên c ửa sổ trái của HideToolz, có dấu * tức là đã đượ c hide.
Điều chuẩn bị cuối cùng là mở Unpacker Execryptor lên, nhét file Execryptor Cracked t ừ unpack.cn vào để nó unpack ra dùm.
Trang |7
Xong phần chuẩn bị.
Trang |8
III. Phân tích Chúng ta phải nhờ đến unpacker vì nó làm ra file dump ch ạy rất mượ t, không phải nhọc nhằng “múp” tay. Đồng thời file đã unpack load vào Olly chạy sẽ mịn hơn là file bị pack. Chạy file dump, ch ọn Help Enter registration code v ới info như sau: Name: trickyboy UnPacKcN Key: LRUK-ABGL-N86B-X3BJ
Đây là key mà đại gia bên Unpack.Cn c ấp cho trick. OK xong, Execryptor đòi chúng ta restart lại ứng dụng. Sau khi ch ạy lại, kiểm tra Name h ợ p lệ vớ i key thì hi ện NAG có HWID và đòi activation key tương ứng: (đồng thờ i browse tớ i site unpack.cn)
Trang |9
Valid activation code mà trick có là đi kèm với HWID như sau: HWID: F6AB-4A3C Activation: DSQB-AX6L-TF4V-WS2G
Như vậy để dùng lại đượ c activation này, ta ph ải patch để Execrytor luôn sinh ra HWID s ẵn có: F6AB-4A3C (tương tự như bài patch HWID củ a Armadillo của trick từng viết ) Nhưng lúc viết bài Armadillo, kinh nghi ệm còn thiếu nên trick ch ỉ fake nó 1 lần duy nh ất khi runtime, không ng ờ nó l ại valid mãi luôn. Ver sau này c ủa Armadillo thì khác, có check l ại sau mỗi lần run nên n ếu patch HWID ph ải patch ở mỗi lần soft ch ạy. Kì này v ớ i Execryptor, trick s ẽ làm được điều này ^ ^.
T r a n g | 10
IV.
Tìm đoạn code phát sinh HWID Ý tưở ng không có gì cao siêu, ch ỉ là xem Execryptor sinh ra HWID khi nào, patch đúng lúc ấ y là xong. Giờ load file dump vào OllyICE v ới đầy đủ config như mục II và HideToolz đã chạy nhé:
Nếu dùng unpacker dump Execrypt or chưa crack, ta thấy tại OEP là JMP vào Execryptor section kèm stolen byte ở dướ i. Ở đây ta thấy Unpack.Cn đã restore lại rất nhiều code g ốc(sau đó pack lạ i hoặc các lão ta đã modify compressed data) nên code nhìn sáng s ủa hơn. Hi vọng đoạn sinh HWID càng dễ tìm hơn. Shift-F9 cho Execryptor ch ạy hoàn toàn trong Olly, n ếu chạy cho tớ i khi show NAG đòi Activation thì coi như anh em đã may mắ n config bypass anti-debug. Nhập vàp valid key (hay key b ất kì nếu thích) v ới HWID cũ:
Quay qua Olly, F12 để break. Alt-K:
Follow theo hàm MessageBoxExA. Set BP t ại RETN. Shift-F9 cho ch ạy tiếp. Nhấn OK k ết thúc NAG và break:
T r a n g | 11
Xóa BP tại đây đi. Không trace gì tiếp, dòm qua stack:
HWID đượ c move vào nhi ều vùng nhớ , hiểu theo lập trình tức là được lưu vào nhiều chuỗi. Vậy ta xem nó đượ c move vào các vùng này khi nào, t ừ đó sẽ tìm ra nơi phát sinh HWID. Dòng HWID dướ i cùng có l ẽ là đượ c move vào đầu tiên nên ta follow dump vùng nh ớ này và set HWBP on Write lên nó:
Có 1 th ắc mắc là nếu lần chạy sau, nó không move vào ch ỗ này thì sao??? Hí hí, restart l ại thử đi anh em. Vẫn là những chỗ này chứa HWID sau NAG Invalid kia. OK, restart Olly. Shift-F9 cho ch ạy nèo. Break:
T r a n g | 12
Đây là đoạn copy dữ liệu qua lại giữa các vùng nhớ lưu trong 2 thanh ghi. Follow address mà ta set H WBP lúc này xem đã có value mà ta quan tâm chưa:
Chưa phải value của HWID. Vậy phải Shift-F9, break break break cho t ớ i khi nó xuất hiện:
Sau nhiều lần nhấn Shift-F9, ta đã thấy HWID move vào. Dòm trên code lúc này vẫn là đoạn hồi nãy:
Vì là đoạn copy dữ liệu cho nên d ữ liệu ta thấy là dữ liệu đích, vậy nguồn ở đâu? Xem trong value của ESI:
Follow Dump nó:
T r a n g | 13
Logic tuần tự, trước khi vào đây thì nó đượ c move t ừ đâu, ta lặp lại thao tác
set HWBP như trên. Nhưng nhớ xóa HWBP trước đó:
Set HWBP on Wri te. Nhưng kì này chỉ Set WORD. Lý do là ta th ấy khi break, HWID ch ỉ mớ i move vào 3 kí t ự đầu. Tức là nó không đi theo 1 DWORD mà có th ể đi từng kí tự hoặc 1 c ặp 2 s ố. Ta chọn cặp 2 s ố để tránh break phải dữ liệu trùng. VD: break khi vùng nh ớ này đượ c move vào 1 byte có ASCII là 9 nhưng không phải số 9 trong HWID mất thờ i gian.
Restart lại Olly. Còn nh ớ lúc nãy ta phải Shift-F9 nhi ều lần, mỗi lần break lại ph ải theo dõi value liên t ục. Công nghệ automation không cho phép điều này xảy ra, script đi anh em ^ ^.
T r a n g | 14
code: esto cmp [0EE8FC8],4139 jnz code msg "Found it!!!" ret Lưu ý: script chỉ work khi đã có set HWBP on write trướ c đó
Địa chỉ compare có thể xem lại trong HWBP:
Lệnh “esto” dùng thay cho “run” vì ta cần Shift-F9 để bypass exception phát sinh khi run trong Execryptor. Gi ờ cho script chạy, Olly tự break tự monitor value dùm chúng ta, và script finish khi vùng nh ớ đã có 2 kí tự trong HWID:
Dòng lệnh lúc này d ừng tại:
Vậy ngay phía trên cũng lại là
đoạn copy data. Tìm ngu ồn từ ESI:
T r a n g | 15
Thấy vùng nhớ nguồn chỉ còn có 1 kí t ự thứ 2:
Suy ra nơi này không chứa chuỗi HWID full sau khi tính toán. Ta không c ần break on write l ần nữa, có thể bắt đầu trace từ nơ i sau khi script finish.
Trace cho RETN ra ngoài. Sau đó lại RETN ra ngoài, ta dừng ở đây:
T r a n g | 16
Dừng ngay vòng l ặp, vòng lặp này rất rất rất…. nhiều khả năng là nơ i phát sinh HWID. Nh ớ vùng nhớ ta break khi nãy:
Dòm qua thanh ghi:
EDX đang trỏ tớ i vị trí k ế tiếp. Giờ chỉ việc trace xem Next c ủa vòng lặp có move tiếp kí tự k ế vào đây không là rõ ngay. Trace F8, đảo 1 vòng, d ừng tại ngay chỗ phía trên, value t ại vùng nhớ lúc này là:
Kí tự k ế đã move vào. Nh ưng liệu full HWID có đượ c move vào nơ i đây hay không? Hay nơ i đây chỉ là nơ i trung gian. Trace xu ống 1 dòng, d ừng tại đây:
T r a n g | 17
Xem value lúc này:
Vậy là ESI là con trỏ tớ i vùng nhớ chứa HWID lúc này. Ta trace qua next của vòng lặp 1 lần n ữa, c ũng d ừng t ại l ệnh SHR EBX,4. Nh ưng lúc này k ết quả đã khác:
Ta từng ngh ĩ nơ i đây sẽ lưu full HWID nh ưng giờ đã xác định nó chỉ là biến trung gian mà thôi. Sau khi phát sinh ra đủ 4 kí tự đầu thì nó lưu vào 1 nơ i khác. Trace xuống 1 dòng, xem value ESI l ần nữa:
ESI lúc này tr ỏ tớ i chỗ khác. Follow dump:
T r a n g | 18
Nhiều khả năng n ơ i này mớ i là n ơ i chứa full HWID. Set BP cu ối vòng lặp, F9, break:
Và value của ESI lúc này:
Suy ra: sau khi k ết thúc vòng lặp, ESI trỏ tớ i vùng nhớ lưu full HWID. V ấn đề tìm đoạn phát sinh HWID t ớ i đây là xong.
T r a n g | 19
V.
Patch HWID Ta nên kiểm tra lại xem đoạn code trên có ph ải là đoạn phát sinh HWID để move vào những vùng nhớ sau NAG Invalid hay không? Đôi khi còn rải rác nhiều đoạn HWID khác n ếu author chơ i mánh. Set đại 1 BP cuối vòng l ặp, ta sẽ thấy quá trình break di ễn ra vài lần, các vùng nh ớ thay đổi, hay nói cách khác là l ần lượ t từng biến đượ c đưa vào hàm này để chứa HWID:
Xem như tạm an tâm đây là đoạn phát sinh HWID duy nh ất. Giờ ý tưở ng đã có, cuối vòng lặp phát sinh HWID, ta men theo con tr ỏ ESI để move HWID cố định của chúng ta vào vùng nh ớ cần thiết, ta cũng không cần quan tâm quá trình tính toán HWID là nh ư thế nào, đặc biệt là ngườ i dốt code như trick. ^o^ Muốn patch thì phải tìm nơ i trống trải để patch, patch xong v ẫn phải bảo chươ ng trình không b ị lỗi hay thiếu hụt stack. Quay lại vòng lặp hồi nãy, nhìn lên trên:
đảm
T r a n g | 20
Đoạn đóng khung đỏ là nơ i lý tưở ng để phát sinh code. Vì sao? Ta nhìn k ĩ khoảng giữa chỉ là 1 số câu lệnh set =0, cộng rồi nhân chia gi ữa EAX, EBX. Nếu ta thử NOP cả 2 lệnh CALL kèm đoạn n ằm giữa chúng rồi debug, ta sẽ thấy HWID phát sinh ra khác lúc nãy. Nh ưng ESI vẫn đảm bảo là con tr ỏ tớ i biến lưu full HWID. Ch ươ ng trình vẫn run hoàn toàn, không l ỗi. Vậy thì hãy NOP ráo đi:
T r a n g | 21
Nhớ chừa lại MOV EDI, 8
để làm điều kiện k ết thúcvòng lặp nhé.
Mà sao patch trớ trêu khúc trên th ế nhỉ? Nhìn ở dướ i vòng lặp coi anh em:
T r a n g | 22
Vì không còn chỗ trống nên không th ể patch liền ngay dướ i đượ c. Để anh em cảm thấy đẹp mắt, trick s ẽ dờ i tịnh tiến vòng lặp phát sinh HWID t ừ dướ i lên trên. Copy All vòng l ặp (trừ khúc bắt đầu từ XOR EAX,EAX):
Paste Binary lại lên trên (tính t ừ NOP đầu tiên):
T r a n g | 23
Nhìn xấu xí lắm đúng ko, correct lại các CALL vì khi copy paste binary, offset các CALL hay long jump s ẽ bị sai khác. Sau đó lại NOP đoạn cũ, tính từ dướ i JNZ k ết thúc vòng l ặp cho tớ i XOR EAX,EAX:
T r a n g | 24
Giờ ta chỉ việc xử lý thêm 1 tí khi vòng l ặp k ết thúc:
Ta thấy cu ối vòng lặp là XOR EAX,EAX nên c ứ lấy EAX ra xài tạm, cuối cùng nó cũng set về 0 nên không s ợ ảnh hưở ng gì đến chươ ng trình. EAX+5 vì kí tự ở [EAX+4] là dấu gạch ngang “-“. Save file mớ i vớ i đoạn code đã chỉnh s ửa. Chạy l ại nào (nếu anh em nào lúc đầu nh ập activation b ậy b ạ thì giờ vẫn bị nag đòi activation). Xem k ĩ HWID nhá:
Hehe, HWID đã đúng bon như lúc trick request unpack.cn. Nh ập valid Activation key xem nèo:
T r a n g | 25
Và:
Hehe, registered nhé. Nhưng thử tạo project, add file vào nào:
=)) =)) =)).
để protect. Rồi nhấn nút Protect xem
T r a n g | 26
Cái này thiệt là hem hiểu luôn nhỉ? Hóa ra nãy giờ công cóc sao? nhìn lại trong folder c ủa Execryptor nào:
Ấy ấy,
Khà khà, ra console, ch ạy thử file này:
Vậy file console này m ớ i là file có các function protect cho cái project c ủa chúng ta. Còn file nãy gi ờ chúng ta mần thịt chỉ là shell =)) =)). Cho Unpacker Execryptor dump file console này ra. Load file dump vào Olly vớ i parameter nh ư sau:
Arguments là đườ ng dẫn chứa project khi nãy (có th ể save ra từ shell)
để protect của Execryptor mà ta t ạo ra
T r a n g | 27
Load vào làm gì? Trick suy đoán rằng file console c ũng có đoạn t ạo HWID tươ ng tự, khi protect file, nó t ạo HWID và check vớ i activation key, không valid thì xuất message như trên.
Để tìm nhanh đoạn này trong console, xem l ại bên file shell lúc ta đến vòng lặp:
Tận dụng chuỗi này, ta search text trong file console và ra k ết quả:
Follow, ra ngay vòng l ặp tạo HWID của console. Để kiểm tra đúng hay không, thử đặt BP cuối vòng l ặp, rồi Shift-F9 cho run, vì đã truyền parameter là project file nên Execryptor s ẽ tiến hành sinh HWID tr ướ c khi protect file, break:
Thay vì là ESI bên file shell, bên console thì [EBP-4] s ẽ là con trỏ tớ i biến lưu HWID. Follow theo nó:
T r a n g | 28
Giờ ta làm tươ ng tự như phần trên, NOP đoạn thừa, giữ lại giá trị để k ết thúc vòng lặp, copy đoạn dướ i lên, correct CALL, NOP ở dướ i và patch HWID:
Ở đây phải qua thêm 1 bướ c trung gian vớ i ECX do lấy giá trị từ [EBP-4] chứ không phải lấy thẳng từ ESI như bên phía file shell. Save file console đã chỉnh sửa lại vớ i tên như tên file gốc: Execrypt.exe (vậy shell mớ i gọi đượ c) Chạy lại shell, protect thử:
T r a n g | 29
DONE!!! ;) Lưu ý: ta có th ể patch thả cửa trong execryptor vì unpack.cn đã fix các check file và check memory h ết rồi, đồng thờ i qua unpacker, nó c ũng fix thêm 1 phần nữa. Trên thực tế, nếu manual unpack thì file execyptor không d ễ dàng để patch ào ào th ế đâu nhá anh em.