[Question] ScrewMe_#1_by_Dynasty keygenme |
24/04/2008 05:43:39 (+0700) | #1 | 127156 |
|
kienmanowar
HVA Friend
|
Joined: 13/07/2004 05:57:34
Messages: 483
Offline
|
|
Mới vọc thử em này thấy cũng hay hay post lên đây cho anh em thử tay nghề. Nếu anh em nào làm được thì đề nghị phân tích rõ từng bước tiếp cận trong quá trình RE keygenme này và post vào thread này nhé..
Yêu cầu:
_Trình bày càng chi tiết càng tốt.
_Viết một keygen hoàn chỉnh
Link download:
Code:
http://www.4shared.com/file/45088828/40b27b0e/ScrewMe_1_by_Dynasty.html?dirPwdVerified=c4951f3f
Ps : nhờ bác mod có thể attach target này lên được không!!
Best Regards
kienmanowar |
|
|
|
|
[Question] Re: ScrewMe_#1_by_Dynasty keygenme |
24/04/2008 11:43:46 (+0700) | #2 | 127228 |
|
hacnho
HVA Friend
|
Joined: 28/01/2003 12:07:45
Messages: 199
Location: OEP
Offline
|
|
Tui lười quá .
-Trước hết nó dùng API FindWindow để tìm OllyDBG và SND OllyMod-
Code:
int __cdecl sub_401290()
{
HWND v1; // eax@1
int v2; // [sp+14h] [bp-4h]@1
HWND v3; // [sp+10h] [bp-8h]@1
v2 = 0;
v1 = FindWindowA("OllyDBG", 0);
v3 = v1;
if ( v1 )
GetWindowThreadProcessId(v3, (DWORD *)&v2);
++dword_405014;
return v2;
}
-Chuỗi:
Code:
]sy$Wgvi{ih$qi$222$Xlerow$jsv$vikmwxivmrk$xlmw$gvegoqi$%$
Code:
có nghĩa:
Code:
You Screwed me ... Thanks for registering this crackme !
Code:
-Tên name <11
-Tên serial <16
Code:
0040179D |. E8 AE0A0000 CALL <JMP.&msvcrt.strlen> ; |\strlen
004017A2 |. 83F8 0B CMP EAX,0B ; |
004017A5 |. 0F87 ED020000 JA ScrewMe_.00401A98 ; |
004017AB |. 807D E8 00 CMP BYTE PTR SS:[EBP-18],0 ; |
004017AF |. 0F84 CD020000 JE ScrewMe_.00401A82 ; |
004017B5 |. 8D45 E8 LEA EAX,DWORD PTR SS:[EBP-18] ; |
004017B8 |. 890424 MOV DWORD PTR SS:[ESP],EAX ; |
004017BB |. E8 900A0000 CALL <JMP.&msvcrt.strlen> ; \strlen
004017C0 |. 83F8 10 CMP EAX,10
-Chuyển ký sang mã ascii, lặp cho đến hết, sau đó cộng với nhau:
Code:
004017C9 |. C785 38FFFFFF >MOV DWORD PTR SS:[EBP-C8],0
004017D3 |> 8D45 D8 /LEA EAX,DWORD PTR SS:[EBP-28] ; |
004017D6 |. 890424 |MOV DWORD PTR SS:[ESP],EAX ; |
004017D9 |. E8 720A0000 |CALL <JMP.&msvcrt.strlen> ; \strlen
004017DE |. 3985 38FFFFFF |CMP DWORD PTR SS:[EBP-C8],EAX
004017E4 |. 73 1E |JNB SHORT ScrewMe_.00401804
004017E6 |. 8D45 F8 |LEA EAX,DWORD PTR SS:[EBP-8]
004017E9 |. 0385 38FFFFFF |ADD EAX,DWORD PTR SS:[EBP-C8]
004017EF |. 83E8 20 |SUB EAX,20
004017F2 |. 0FBE10 |MOVSX EDX,BYTE PTR DS:[EAX]
004017F5 |. 8D45 D4 |LEA EAX,DWORD PTR SS:[EBP-2C]
004017F8 |. 0110 |ADD DWORD PTR DS:[EAX],EDX
004017FA |. 8D85 38FFFFFF |LEA EAX,DWORD PTR SS:[EBP-C8]
00401800 |. FF00 |INC DWORD PTR DS:[EAX]
00401802 |.^EB CF \JMP SHORT ScrewMe_.004017D3
Thí dụ hacnho=68+61+63+6E+68+6F= 271 hex = 625 dec.
-Nhân kết quả trên cho 10
Code:
00401804 |> 8B55 D4 MOV EDX,DWORD PTR SS:[EBP-2C] ; |||
00401807 |. 89D0 MOV EAX,EDX ; |||
00401809 |. C1E0 02 SHL EAX,2 ; |||
0040180C |. 01D0 ADD EAX,EDX ; |||
0040180E |. 01C0 ADD EAX,EAX ; |||
-Đổi HEX sang DEC:
Code:
0040182C |. E8 0F0A0000 CALL <JMP.&msvcrt.sprintf> ; ||\sprintf
-Chuỗi trên + với "-":
Code:
0040184D |. C645 EC 2D MOV BYTE PTR SS:[EBP-14],2D ; |
-Đưa 1984 vào EAX, chắc là năm sinh của nó .
Code:
00401868 |. 05 C0070000 ADD EAX,7C0 ; |
Nhân 1984 với kết quả đổi sang DEC:
Code:
v11 = v9 * (v24 + v22 + v23 + 1984);
Lấy serial của ổ cứng bằng hàm GetVolumeInformationA, đẩy sổ serial này vô buffer tại 405030
Code:
0022FED0 004041A1 |RootPathName = "C:\"
0022FED4 00405024 |VolumeNameBuffer = ScrewMe_.00405024
0022FED8 0000000C |MaxVolumeNameSize = C (12.)
0022FEDC 00405040 |pVolumeSerialNumber = ScrewMe_.00405040
0022FEE0 00000000 |pMaxFilenameLength = NULL
0022FEE4 00000000 |pFileSystemFlags = NULL
0022FEE8 00405030 |pFileSystemNameBuffer = ScrewMe_.00405030
0022FEEC 00000010 \pFileSystemNameSize = 00000010
-Nhân 1984 với chuỗi ban đầu và xor với số serial ổ c:
v12 = v9 * (v24 + v22 + v23 + 1984) ^ dword_405040;
-Kết hợp chuỗi này thành số serial. Tuy nhiên đến đây vẫn chưa xong, nó vẫn báo invalid serial. Restart lại Olly, nhập vào chuỗi vừa có (62501-1003445255). Trace tới đây, sẽ gặp API CreateFileA:
Code:
00401989 |. 890424 MOV DWORD PTR SS:[ESP],EAX ; |
0040198C |. E8 6F020000 CALL <JMP.&KERNEL32.CreateFileA> ; \CreateFileA
00401991 |. 83EC 1C SUB ESP,1C
Code:
0022F9D0 0022FA50 |FileName = "EarnUrRight.dat"
0022F9D4 80000000 |Access = GENERIC_READ
0022F9D8 00000001 |ShareMode = FILE_SHARE_READ
0022F9DC 00000000 |pSecurity = NULL
0022F9E0 00000003 |Mode = OPEN_EXISTING
0022F9E4 00000080 |Attributes = NORMAL
0022F9E8 00000000 \hTemplateFile = NULL
Trace tới đây sẽ gặp chuỗi:
Code:
00401A0B |. 8D45 F8 |LEA EAX,DWORD PTR SS:[EBP-8]
ECX 0022FA00 ASCII "Allow Me to Retort!"
Như vậy keyfile sẽ có nội dung như thế.
Xong |
|
Mọi câu hỏi vui lòng gửi lên diễn đàn! |
|
|
|
[Question] Re: ScrewMe_#1_by_Dynasty keygenme |
24/04/2008 23:07:40 (+0700) | #3 | 127328 |
|
kienmanowar
HVA Friend
|
Joined: 13/07/2004 05:57:34
Messages: 483
Offline
|
|
Ơ lão nhỏ này nhanh tay quá , lão đã solve rồi thì giải quyết nốt cái keygen đi. Trong keygen lão tạo keyfile luôn .. không chơi tạo keyfile bằng manual nha!! |
|
|
|
|
[Question] Re: ScrewMe_#1_by_Dynasty keygenme |
24/04/2008 23:39:32 (+0700) | #4 | 127335 |
|
hacnho
HVA Friend
|
Joined: 28/01/2003 12:07:45
Messages: 199
Location: OEP
Offline
|
|
Code:
// BOOL __stdcall GetVolumeInformationA(LPCSTR lpRootPathName, LPSTR lpVolumeNameBuffer, DWORD nVolumeNameSize, LPDWORD lpVolumeSerialNumber, LPDWORD lpMaximumComponentLength, LPDWORD lpFileSystemFlags, LPSTR lpFileSystemNameBuffer, DWORD nFileSystemNameSize);
extern DWORD VolumeSerialNumber;
extern char FileSystemNameBuffer[];
BOOL GetHDDSerial()
{
return GetVolumeInformationA("C:\\", 0, 0, &VolumeSerialNumber, 0, (LPDWORD)0x14, FileSystemNameBuffer, 0x14u);
}
Dịch từ code của XIANUA, btw thanx :
Code:
G.data
Volume dd 0
sMl dd 0
sFs dd 0
sResult dd MAX_PATH dup(?)
.data?
hWnd dd ?
.code
start:
INVOKE GetVolumeInformation, SADD("C:\"), NULL, NULL, ADDR Volume, ADDR sMl, ADDR sFs, NULL, NULL
INVOKE dw2hex, [Volume], ADDR sResult
INVOKE MessageBox, hWnd, ADDR sResult, SADD("Info"), MB_ICONINFORMATION OR MB_OK
INVOKE ExitProcess, NULL
End start
Và tạo key file:
Code:
extern DWORD NumberOfBytesWritten;
extern char FileName[];
extern HANDLE hFile;
extern char FileName[];
BOOL CreateKeyFile()
{
int tmp;
GetCurrentDirectoryA(0xC8u, FileName);
lstrcatA(FileName, "\\EarnUrRight.dat");
hFile = CreateFileA(FileName, 0x40000000u, 0, 0, 2u, 0x80u, 0);
tmp = lstrlenA("Allow Me to Retort!");
WriteFile(hFile, "Allow Me to Retort!", tmp, &NumberOfBytesWritten, 0);
return CloseHandle(hFile);
}
|
|
Mọi câu hỏi vui lòng gửi lên diễn đàn! |
|
|
|
[Question] Re: ScrewMe_#1_by_Dynasty keygenme |
25/04/2008 01:00:38 (+0700) | #5 | 127351 |
|
gamma95
Researcher
|
Joined: 20/05/2003 07:15:41
Messages: 1377
Location: aaa">
Offline
|
|
Em xin bổ sung chút :
Crackme này ngoài việc dùng API FindWindowA để detect ra Olly, nó còn dùng hàm IsDebuggerPresent để detect Debugger. Các bypass đơn giản (em hay làm)
Set bp tại 004012AC & 0040151A (FindWindowA) và 00401716,0040177F (IsDebuggerPresent).
F9 để run
Olly sẽ Bp tại
Code:
004012A5 C70424 0040400>MOV DWORD PTR SS:[ESP],ScrewMe_.00404000 ; ASCII "OllyDBG"
004012AC E8 9F080000 CALL <JMP.&USER32.FindWindowA>
004012B1 83EC 08 SUB ESP,8
004012B4 8945 F8 MOV DWORD PTR SS:[EBP-8],EAX
chuột phải vào Dòng ASCII "OllyDBG" -->follow in dump --> Immediet constant --> Nhìn vào bảng HexDump -->ctrl+E để sửa lại chuỗi "OllyDBG"&"SND" thành một chuỗi bất kỳ.
Tiếp tục F9 để run Olly sẽ Bp tại IsDebuggerPresent, ta sẽ Fill NOP tại CALL, F9 -->tiếp tục Fill NOP tại CALL.
Sau đó copy to excutetable --> copy to all modification --> Save File -->Ok.
Quá trình Cracking diễn ra bình thường.
PS: Anh Nho solved lẹ quá --> Khớp --> lần sau chắc phải cấm mấy lão Cracker, Reverse post solved! |
|
Cánh chym không mỏi
lol |
|
|
|
[Question] Re: ScrewMe_#1_by_Dynasty keygenme |
25/04/2008 01:40:30 (+0700) | #6 | 127357 |
|
hacnho
HVA Friend
|
Joined: 28/01/2003 12:07:45
Messages: 199
Location: OEP
Offline
|
|
Ờ, tui quên mất vụ này, tại vì cái Olly tui, tui config hết các vụ dectect này , khỏi làm tay cho nó mệt . Lão thik thì tui đưa cái plugin tự hide hết các anti-olly trick cho !
Keygen nè kiên |
|
Mọi câu hỏi vui lòng gửi lên diễn đàn! |
|
|
|
[Question] Re: ScrewMe_#1_by_Dynasty keygenme |
25/04/2008 03:29:53 (+0700) | #7 | 127364 |
|
kienmanowar
HVA Friend
|
Joined: 13/07/2004 05:57:34
Messages: 483
Offline
|
|
Cái lão nhỏ này code vội nhé, keygen lão có bug nè )
1. Nhập username : manwowar. Key có được là : 757011278350159 <== thiếu mất '-'
2. Nếu tôi bấm Gen mấy phát thì có mà nó ra thế này )
75701127835015912783501591278350159
Oánh lão chít giờ, có code cũng code cho nó good tí chứ!!
Regards |
|
|
|
|
[Question] Re: ScrewMe_#1_by_Dynasty keygenme |
25/04/2008 03:35:21 (+0700) | #8 | 127365 |
|
kienmanowar
HVA Friend
|
Joined: 13/07/2004 05:57:34
Messages: 483
Offline
|
|
Tôi không dám múa rìu qua mặt lão nhỏ, code của tôi đây....dòm vào hơi thô thiển tí
Code:
BOOL GenerateSerial(HWND hwnd)
{
char szName[9]={0};
char szSerial[16]={0};
int i=0,LenUser=0,iSumAcsiiResult=0,iTemp=0;
char *lpRootPathName="C:\\"; // address of root directory of the file system
char lpVolumeNameBuffer[100]; // address of name of the volume
DWORD lpVolumeSerialNumber; // address of volume serial number
DWORD lpMaximumComponentLength; // address of system's maximum filename length
DWORD lpFileSystemFlags; // address of file system flags
char lpFileSystemNameBuffer[500]; // address of name of file system
char *lpFileName="EarnUrRight.dat";
HANDLE hFile;
char *lpBuffer="Allow Me to Retort!";
DWORD lpBytesWritten;
GetVolumeInformation(lpRootPathName, lpVolumeNameBuffer, sizeof lpVolumeNameBuffer, &lpVolumeSerialNumber, &lpMaximumComponentLength,&lpFileSystemFlags,lpFileSystemNameBuffer,sizeof lpFileSystemNameBuffer);
LenUser=GetDlgItemText(hwnd,IDC_NAME,szName,70);
if (LenUser < 1 || LenUser > 9)
{
MessageBox(hwnd,"----------===== Your name atleast 1 chart ====---------- \n\n ----------===== But not over 9 charts ====---------- ","Hey !! Please input your name again !! ",MB_OK);
}
else
{
hFile = CreateFile(lpFileName,GENERIC_WRITE,FILE_SHARE_WRITE,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
WriteFile(hFile,lpBuffer,19, &lpBytesWritten,0);
CloseHandle(hFile);
i = 0;
while (i < LenUser)
{
iSumAcsiiResult = iSumAcsiiResult + szName[i];
i++;
}
iTemp = iSumAcsiiResult;
iTemp = iTemp * 4;
iTemp = iTemp + iSumAcsiiResult;
iTemp = iTemp * 2;
iSumAcsiiResult = iTemp;
iTemp = 0x7C0;
iTemp = iTemp * iSumAcsiiResult;
lpVolumeSerialNumber = lpVolumeSerialNumber ^ iTemp;
wsprintf(szSerial,"%d-%d",iSumAcsiiResult,lpVolumeSerialNumber);
SetDlgItemText(hwnd,IDC_SERIAL,szSerial);
}
return TRUE;
}
|
|
|
|
|
[Question] Re: ScrewMe_#1_by_Dynasty keygenme |
25/04/2008 04:21:42 (+0700) | #9 | 127375 |
|
hacnho
HVA Friend
|
Joined: 28/01/2003 12:07:45
Messages: 199
Location: OEP
Offline
|
|
Chắc tui quên để thoát vòng lặp . Mà test ok mà, tại lão nghịch dại bấm nhiều lần thôi . Keygen lão viết C++ dòm vãi nhỉ. Tui thì Wasm nàm tới. C++ dốt vãi ! |
|
Mọi câu hỏi vui lòng gửi lên diễn đàn! |
|
|
|
[Question] Re: ScrewMe_#1_by_Dynasty keygenme |
20/05/2008 09:06:07 (+0700) | #10 | 131507 |
2hacknho:
Với những chuỗi ký tự như: "]sy$Wgvi{ih$qi$222$Xlerow$jsv$vikmwxivmrk$xlmw$gvegoqi$%$" hoặc "Mrzepmh$Wivmep$$" làm sao ta xác định được ý nghĩa thật của nó là "You Screwed me ... Thanks for registering this crackme !" và "Invalid Serial". Mình xem thử thì đó không hoàn toàn là ánh xạ m = i...
Nó có phải là một phép dịch mã Caesar dịch mã ASCII n ký tự không? Nếu thế thì dễ code tool dò mấy ký tự này. |
|
|
|
|
[Question] Re: ScrewMe_#1_by_Dynasty keygenme |
20/05/2008 09:18:07 (+0700) | #11 | 131508 |
Oh, yes, I see. Xem kỹ lại thì đúng là dịch đi 4 ký tự thật. Chả cẩn thận chút nào.
Có thời gian sẽ mò con này để học tập các pro. Thanks. |
|
|
|
|
[Question] Re: ScrewMe_#1_by_Dynasty keygenme |
20/05/2008 11:02:03 (+0700) | #12 | 131532 |
|
kienmanowar
HVA Friend
|
Joined: 13/07/2004 05:57:34
Messages: 483
Offline
|
|
Rất chính xác, đó là Cesar Cipher |
|
|
|
|
[Question] Re: ScrewMe_#1_by_Dynasty keygenme |
17/02/2009 04:56:02 (+0700) | #13 | 169676 |
|
buidinhba5
Member
|
0 |
|
|
Joined: 06/12/2007 12:07:35
Messages: 5
Offline
|
|
Anh hacnho có Plugin hide anti-olly trick có thể post cho mọi người không và hix bác trình bày nhanh quá không hiểu làm sao bác đến được đoạn code kiểm tra chiều dài serial và name và đến được đoạn code mã hóa em đọc bác viết mà khó hiểu quy trình quá hì |
|
|
|
|
[Question] Re: ScrewMe_#1_by_Dynasty keygenme |
07/04/2009 08:09:27 (+0700) | #14 | 175993 |
tuanbca
Member
|
0 |
|
|
Joined: 31/03/2009 16:53:56
Messages: 5
Offline
|
|
To kienmanowar :
Bác send cho em cái active code để em đăng ký mem bên reaonline với |
|
|
|
|
[Question] Re: ScrewMe_#1_by_Dynasty keygenme |
20/04/2009 04:18:38 (+0700) | #15 | 177824 |
so61pi
Member
|
0 |
|
|
Joined: 05/03/2009 22:24:36
Messages: 26
Location: nowhere
Offline
|
|
Em xin bổ sung thêm, các chuỗi :
Code:
và
Code:
được dịch đi 2 kí tự, có nghĩa là :
Code:
Code:
Đối với KeygenMe này, có thể dùng plugin Olly Advanced để hide Olly cũng được.
|
|
|
|
|
[Question] Re: ScrewMe_#1_by_Dynasty keygenme |
05/05/2009 03:51:28 (+0700) | #16 | 179510 |
so61pi
Member
|
0 |
|
|
Joined: 05/03/2009 22:24:36
Messages: 26
Location: nowhere
Offline
|
|
Hình như bác hacnho thay "-" bằng số 1 phải không ?
Theo em thấy thì dấu "-" có thể thay bằng kí tự nào cũng được (không biết có đúng không ? )
Code của bác kienmanowar thì "LenUser < 1 || LenUser > 9", nếu như Name là "a" thì ta có:
Code:
Name : a
Serial : 970-206090841 (trên máy em)
-> "Invalid Serial"
nên theo em nghĩ thì sau khi tính tổng ASCII của chuỗi, nếu kết quả < 1000 thì kết quả = kết quả *10 |
|
|
Users currently in here |
1 Anonymous
|
|
Powered by JForum - Extended by HVAOnline
hvaonline.net | hvaforum.net | hvazone.net | hvanews.net | vnhacker.org
1999 - 2013 ©
v2012|0504|218|
|
|