<![CDATA[Latest posts for the topic "Splish_HardCoded_KeygenMe"]]> /hvaonline/posts/list/36.html JForum - http://www.jforum.net Splish_HardCoded_KeygenMe Disable Splash Screen: Load Splish vào Olly, theo ta thấy ban đầu thì có thể chương trình dùng hàm ShowWindow để hiện Splash Screen. Đặt BreakPoint tại hàm ShowWindow, run thử -> Olly break rồi :D . Tiếp tục F9, Splash Screen hiện ra vài giây rồi biến mất => vậy có thể bỏ Splash Screen bằng cách bỏ lời gọi hàm ShowWindow. Tìm về nơi gọi hàm Code:
00401546  |. E8 21020000    CALL <JMP.&USER32.ShowWindow>            ; \ShowWindow
fill NOP, sau đó run thử. Hì, Slpash Screen đã không còn ;) . Save để lần sau khỏi phải làm lại. ___ Trễ rồi, lần sau mình sẽ post tiếp phần tìm HardCoded. Mong mọi người có ý kiến.]]>
/hvaonline/posts/list/28996.html#178703 /hvaonline/posts/list/28996.html#178703 GMT
Re: Splish_HardCoded_KeygenMe Code:
0040153E  |.  6A 01           PUSH    1                                ; /ShowState = SW_SHOWNORMAL
00401540  |.  FF35 11324000   PUSH    DWORD PTR [403211]               ; |hWnd = NULL
00401546  |.  E8 21020000     CALL    <JMP.&USER32.ShowWindow>         ; \ShowWindow
Hàm ShowWindow nhận 2 tham số nên phía trên hàm có 2 lệnh Push, khi thực hiện, hàm sẽ lấy 2 tham số đó ra sử dụng, nếu ta chỉ fill NOP ở lệnh ShowWindow thì Stack không được bảo toàn ( 2 tham số không sử dụng vẫn ở trên Stack ) -> rác Stack. Vì vậy nên fill NOP ở 2 lệnh Push phía trên luôn. Tạm xong phần Disable Splash Screen ( còn quay lại sau ). Tiếp theo là phần tìm Hard Coded. *Tìm Hard Coded: Đặt BreakPoint tại hàm GetWindowTextA, run Splish, điền vào HardCoded bất kì, Check Hardcoded, Olly break tại vị trí sau Code:
0040136A  |.  E8 BB030000   CALL    <JMP.&USER32.GetWindowTextA>     ; \GetWindowTextA
Tiếp tục trace xuống dưới gặp đoạn code Code:
0040136F  |.  8D05 53134000 LEA     EAX, DWORD PTR [401353]   ; <== Đưa Hard coded vào EAX
00401375  |.  8D1D 15324000 LEA     EBX, DWORD PTR [403215]   ; <== Đưa chuỗi ta nhập vào EBX
0040137B  |> /8038 00       /CMP     BYTE PTR [EAX], 0
0040137E  |. |74 0C         |JE      SHORT 0040138C
00401380  |. |8A08          |MOV     CL, BYTE PTR [EAX]    ; <== Lấy từng kí tự HardCoded vào
00401382  |. |8A13          |MOV     DL, BYTE PTR [EBX]    ; <== Lấy từng kí tự trong chuỗi của ta
00401384  |. |38D1          |CMP     CL, DL    ; <== So sánh 2 kí tự
00401386  |. |75 4A         |JNZ     SHORT 004013D2
00401388  |. |40            |INC     EAX
00401389  |. |43            |INC     EBX
0040138A  |.^\EB EF         \JMP     SHORT 0040137B
Đoạn code trên có nhiệm vụ so sánh chuỗi ta nhập vào với HardCoded. Ta thấy nó chỉ so sánh trực tiếp mà không qua tính toán nào cả, mà chuỗi Hard coded của nó là "HardCoded", vậy là tìm được Hard coded rồi ;) . Thử lại xem, "Congratulations, you got the hard coded serial". :D Vậy là xong phần Hard Coded.]]>
/hvaonline/posts/list/28996.html#178819 /hvaonline/posts/list/28996.html#178819 GMT