// S-DEMO2 CODE ANALYSIS BY JMZZ 2002.06.25
1: use w32dasm to find "Register failure!"
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00403682(C)
|
:0040374A 6A00 push 00000000
* Possible StringData Ref from Data Obj ->"Register Failure!"
|
:0040374C 689CD24100 push 0041D29C
:00403751 8BCD mov ecx, ebp
2: goto 00403682 ,look up
:00403672 51 push ecx
:00403673 52 push edx
:00403674 B9C0E74200 mov ecx, 0042E7C0
:00403679 E8D24C0000 call 00408350 ====> track into
:0040367E 85C0 test eax, eax
:00403680 6A00 push 00000000
:00403682 0F84C2000000 je 0040374A
:00403688 8D8C24A8000000 lea ecx, dword ptr [esp+000000A8]
3:
* Referenced by a CALL at Addresses:
|:00403679 , :004044DB , :00404F7B
|
:00408350 81EC34010000 sub esp, 00000134
:00408356 53 push ebx
:00408357 55 push ebp
:00408358 56 push esi
:00408359 8BF1 mov esi, ecx
:0040835B 57 push edi
:0040835C 89742410 mov dword ptr [esp+10], esi
* Reference To: MFC42.Ordinal:0490, Ord:0490h
|
:00408360 E8A9960000 Call 00411A0E
:00408365 8B8C2448010000 mov ecx, dword ptr [esp+00000148]
:0040836C 8B4004 mov eax, dword ptr [eax+04]
* Reference To: MSVCRT.sprintf, Ord:02B2h
|
:0040836F 8B2DC0934100 mov ebp, dword ptr [004193C0]
:00408375 81C6D4000000 add esi, 000000D4
:0040837B 56 push esi
:0040837C 51 push ecx
:0040837D 8D942484000000 lea edx, dword ptr [esp+00000084]
* Possible StringData Ref from Data Obj ->"%s%s"
|
:00408384 68C0D44100 push 0041D4C0
:00408389 52 push edx
:0040838A 89442424 mov dword ptr [esp+24], eax
:0040838E FFD5 call ebp
// strcat(Name,ID)
:00408390 8B9C245C010000 mov ebx, dword ptr [esp+0000015C]
:00408397 83C9FF or ecx, FFFFFFFF
:0040839A 8BFB mov edi, ebx
:0040839C 33C0 xor eax, eax
:0040839E F2 repnz
:0040839F AE scasb
:004083A0 F7D1 not ecx
:004083A2 2BF9 sub edi, ecx
:004083A4 8D542428 lea edx, dword ptr [esp+28]
:004083A8 8BC1 mov eax, ecx
:004083AA 8BF7 mov esi, edi
:004083AC 8BFA mov edi, edx
:004083AE C1E902 shr ecx, 02
:004083B1 F3 repz
:004083B2 A5 movsd
:004083B3 8BC8 mov ecx, eax
:004083B5 83E103 and ecx, 00000003
:004083B8 F3 repz
:004083B9 A4 movsb
:004083BA 8D8C248C000000 lea ecx, dword ptr [esp+0000008C]
:004083C1 51 push ecx
:004083C2 53 push ebx
:004083C3 E848FCFFFF call 00408010 ===> important ,track into
:004083C8 83C418 add esp, 00000018
* Possible StringData Ref from Data Obj ->"Clayman"
|
:004083CB BFD0D14100 mov edi, 0041D1D0
:004083D0 8BF3 mov esi, ebx
// strcmp(pCode,"Clayman")
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004083F4(C)
|
:004083D2 8A16 mov dl, byte ptr [esi]
:004083D4 8A0F mov cl, byte ptr [edi]
:004083D6 8AC2 mov al, dl
:004083D8 3AD1 cmp dl, cl
:004083DA 751E jne 004083FA
:004083DC 84C0 test al, al
:004083DE 7416 je 004083F6
:004083E0 8A4E01 mov cl, byte ptr [esi+01]
:004083E3 8A5701 mov dl, byte ptr [edi+01]
:004083E6 8AC1 mov al, cl
:004083E8 3ACA cmp cl, dl
:004083EA 750E jne 004083FA
:004083EC 83C602 add esi, 00000002
:004083EF 83C702 add edi, 00000002
:004083F2 84C0 test al, al
:004083F4 75DC jne 004083D2
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004083DE(C)
|
:004083F6 33C0 xor eax, eax
:004083F8 EB05 jmp 004083FF
4: main code
// str[] = "FZRHK01WGTPQSAVC";
// "Guest"
// Code[]
// pCode[] // must be "Clayman"
// sCode[18]
* Referenced by a CALL at Addresses:
|:00407F39 , :00407F95 , :004083C3 , :00408428 , :0040862A
|
:00408010 81ECCC000000 sub esp, 000000CC
:00408016 8B9424D0000000 mov edx, dword ptr [esp+000000D0]
:0040801D 53 push ebx
:0040801E 55 push ebp
:0040801F 56 push esi
:00408020 57 push edi
:00408021 8BFA mov edi, edx
:00408023 83C9FF or ecx, FFFFFFFF
:00408026 33C0 xor eax, eax
:00408028 F2 repnz
:00408029 AE scasb
:0040802A F7D1 not ecx
// set code's len to ECX
// ECX = CodeLen + 1
:0040802C 2BF9 sub edi, ecx
:0040802E 8D5C2414 lea ebx, dword ptr [esp+14]
:00408032 8BC1 mov eax, ecx
:00408034 8BF7 mov esi, edi
:00408036 8BFB mov edi, ebx
:00408038 C1E902 shr ecx, 02
:0040803B F3 repz
:0040803C A5 movsd
:0040803D 8BC8 mov ecx, eax
:0040803F 33C0 xor eax, eax
:00408041 83E103 and ecx, 00000003
:00408044 F3 repz
:00408045 A4 movsb
// copy code to EDI = 0x0068dc78
:00408046 8D7C2414 lea edi, dword ptr [esp+14]
:0040804A 83C9FF or ecx, FFFFFFFF
:0040804D F2 repnz
:0040804E AE scasb
:0040804F F7D1 not ecx
:00408051 49 dec ecx
:00408052 8BF1 mov esi, ecx
// set code's len to ESI
:00408054 8A4C2414 mov cl, byte ptr [esp+14]
// set code's first char to CL
:00408058 89742410 mov dword ptr [esp+10], esi
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00408068(C)
|
:0040805C 388828D54100 cmp byte ptr [eax+0041D528], cl
:00408062 7433 je 00408097 // must jmp (eax<0x10)
:00408064 40 inc eax
:00408065 83F810 cmp eax, 00000010
:00408068 7CF2 jl 0040805C
// set index of code first char in the str to EAX (EAX < 0x10)
// sCode[0] = a random char of str[]
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0040809A(C)
|
* Possible StringData Ref from Data Obj ->"!@#@#SDFG^*&"
|
:0040806A BF68D54100 mov edi, 0041D568
:0040806F 83C9FF or ecx, FFFFFFFF
:00408072 33C0 xor eax, eax
:00408074 F2 repnz
:00408075 AE scasb
:00408076 F7D1 not ecx
:00408078 2BF9 sub edi, ecx
:0040807A 8BC1 mov eax, ecx
:0040807C 8BF7 mov esi, edi
:0040807E 8BFA mov edi, edx
:00408080 C1E902 shr ecx, 02
:00408083 F3 repz
:00408084 A5 movsd
:00408085 8BC8 mov ecx, eax
:00408087 83E103 and ecx, 00000003
:0040808A F3 repz
:0040808B A4 movsb
:0040808C 5F pop edi
:0040808D 5E pop esi
:0040808E 5D pop ebp
:0040808F 5B pop ebx
:00408090 81C4CC000000 add esp, 000000CC
:00408096 C3 ret
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00408062(C)
|
:00408097 83F810 cmp eax, 00000010
:0040809A 7DCE jge 0040806A
:0040809C 8B9C24E4000000 mov ebx, dword ptr [esp+000000E4]
:004080A3 BD0F000000 mov ebp, 0000000F
:004080A8 2BE8 sub ebp, eax
// set EBP = 0X0F - IdxCodeFirstCharInStr(EAX)
:004080AA 8BFB mov edi, ebx
:004080AC 83C9FF or ecx, FFFFFFFF
:004080AF 33C0 xor eax, eax
:004080B1 F2 repnz
:004080B2 AE scasb
:004080B3 F7D1 not ecx
:004080B5 49 dec ecx
// set NameIdLen to ECX
:004080B6 33D2 xor edx, edx
:004080B8 8BC1 mov eax, ecx
:004080BA B907000000 mov ecx, 00000007
:004080BF F7F1 div ecx
:004080C1 8BCA mov ecx, edx
// set (NameIdLen % 7) to ECX
:004080C3 85C9 test ecx, ecx
:004080C5 752B jne 004080F2
// if((NameIdLen % 7) == 0)
// {
// sorry, I don't see these code during I tracked!
* Possible StringData Ref from Data Obj ->"Guest"
|
:004080C7 BF20D54100 mov edi, 0041D520
:004080CC 83C9FF or ecx, FFFFFFFF
:004080CF 33C0 xor eax, eax
:004080D1 F2 repnz
:004080D2 AE scasb
:004080D3 F7D1 not ecx
:004080D5 2BF9 sub edi, ecx
:004080D7 8BD1 mov edx, ecx
:004080D9 8BF7 mov esi, edi
:004080DB 8BFB mov edi, ebx
:004080DD C1E902 shr ecx, 02
:004080E0 F3 repz
:004080E1 A5 movsd
:004080E2 8BCA mov ecx, edx
:004080E4 83E103 and ecx, 00000003
:004080E7 F3 repz
:004080E8 A4 movsb
// copy "Guest" to EBX
:004080E9 8B742410 mov esi, dword ptr [esp+10]
:004080ED B905000000 mov ecx, 00000005
// }
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004080C5(C)
|
:004080F2 8BC5 mov eax, ebp
// set (0X0F - IdxCodeFirstCharInStr) to EAX
:004080F4 99 cdq
:004080F5 F7F9 idiv ecx
// EDX = EAX % ECX
// ECX = (NameIdLen % 7) ? (NameIdLen % 7) : 5 ;
// EBX = (NameIdLen % 7) ? NameId : "Guest"
// SET (0X0F - IdxCodeFirstCharInStr) % ECX to EDX
:004080F7 0FBE041A movsx eax, byte ptr [edx+ebx]
// SET EAX = (DWORD)[EBX+EDX]
:004080FB 250F000080 and eax, 8000000F
:00408100 7905 jns 00408107
:00408102 48 dec eax
:00408103 83C8F0 or eax, FFFFFFF0
:00408106 40 inc eax
// ???
// support portion of chinese or bug
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00408100(C)
|
:00408107 8A8828D54100 mov cl, byte ptr [eax+0041D528]
:0040810D 8A442415 mov al, byte ptr [esp+15]
:00408111 3AC8 cmp cl, al
:00408113 740A je 0040811F // must jmp
// sCode[1] = str[eax]
* Possible StringData Ref from Data Obj ->"99#SDFG^*&"
|
:00408115 BF5CD54100 mov edi, 0041D55C
:0040811A E9C5000000 jmp 004081E4
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00408113(C)
|
:0040811F 8D46FD lea eax, dword ptr [esi-03]
// eax = CodeLen - 3
:00408122 33FF xor edi, edi
:00408124 99 cdq
:00408125 2BC2 sub eax, edx
:00408127 D1F8 sar eax, 1
:00408129 85C0 test eax, eax
:0040812B 0F8E8F000000 jle 004081C0
:00408131 8D742416 lea esi, dword ptr [esp+16]
// ESI = &Code[2];
// for(;;) // 004081B6
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004081B6(C)
|
:00408135 8A5601 mov dl, byte ptr [esi+01]
// DL = Code[2+2*EAX+1]
:00408138 33C9 xor ecx, ecx
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00408146(C)
|
:0040813A 389128D54100 cmp byte ptr [ecx+0041D528], dl
:00408140 741C je 0040815E // must jmp (ecx <0x10)
:00408142 41 inc ecx
:00408143 83F910 cmp ecx, 00000010
:00408146 7CF2 jl 0040813A
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00408161(C)
|
:00408148 32D2 xor dl, dl
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00408173(C), :0040817A(U)
|
:0040814A 8A1E mov bl, byte ptr [esi]
// BL = Code[2+2*EAX+1]
:0040814C 33C9 xor ecx, ecx
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0040815A(C)
|
:0040814E 389928D54100 cmp byte ptr [ecx+0041D528], bl
:00408154 7426 je 0040817C // must jmp (ecx<0x10)
:00408156 41 inc ecx
:00408157 83F910 cmp ecx, 00000010
:0040815A 7CF2 jl 0040814E
:0040815C EB3A jmp 00408198
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00408140(C)
|
:0040815E 83F910 cmp ecx, 00000010
:00408161 7DE5 jge 00408148
:00408163 2BCD sub ecx, ebp
:00408165 81C1803E0000 add ecx, 00003E80
:0040816B 8BD1 mov edx, ecx
:0040816D 81E20F000080 and edx, 8000000F
// edx = (ecx - ebp + 0x3e80) & 0x0f
:00408173 79D5 jns 0040814A
:00408175 4A dec edx
:00408176 83CAF0 or edx, FFFFFFF0
:00408179 42 inc edx
:0040817A EBCE jmp 0040814A
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00408154(C)
|
:0040817C 83F910 cmp ecx, 00000010
:0040817F 7D17 jge 00408198
:00408181 2BCD sub ecx, ebp
:00408183 81C1803E0000 add ecx, 00003E80
:00408189 81E10F000080 and ecx, 8000000F
// ecx = (ecx - ebp + 0x3e80) & 0x0f
:0040818F 7909 jns 0040819A
:00408191 49 dec ecx
:00408192 83C9F0 or ecx, FFFFFFF0
:00408195 41 inc ecx
:00408196 EB02 jmp 0040819A
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:0040815C(U), :0040817F(C)
|
:00408198 32C9 xor cl, cl
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:0040818F(C), :00408196(U)
|
:0040819A 8AD9 mov bl, cl
:0040819C 83C602 add esi, 00000002
:0040819F C0E304 shl bl, 04
:004081A2 02DA add bl, dl
:004081A4 8B9424E0000000 mov edx, dword ptr [esp+000000E0]
:004081AB 0FBEC9 movsx ecx, cl
:004081AE 881C17 mov byte ptr [edi+edx], bl
// pCode[edx] = (CL << 4) + DL
// pCode must be "Clayman".
:004081B1 03E9 add ebp, ecx
// important
// ebp += ecx
:004081B3 47 inc edi
:004081B4 3BF8 cmp edi, eax
:004081B6 0F8C79FFFFFF jl 00408135
:004081BC 8B742410 mov esi, dword ptr [esp+10]
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0040812B(C)
|
:004081C0 8D542EFD lea edx, dword ptr [esi+ebp-03]
:004081C4 81E20F000080 and edx, 8000000F
// edx = (esi + ebp - 3) & 0x8000000f
:004081CA 7905 jns 004081D1
:004081CC 4A dec edx
:004081CD 83CAF0 or edx, FFFFFFF0
:004081D0 42 inc edx
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004081CA(C)
|
:004081D1 8A4C3413 mov cl, byte ptr [esp+esi+13]
:004081D5 8A9A28D54100 mov bl, byte ptr [edx+0041D528]
:004081DB 3ACB cmp cl, bl
:004081DD 7432 je 00408211 // must jmp
// sCode last char
// sCode[16] = str[edx]
* Possible StringData Ref from Data Obj ->"45#SDFG^*&"
|
:004081DF BF50D54100 mov edi, 0041D550
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0040811A(U)
|
:004081E4 83C9FF or ecx, FFFFFFFF
:004081E7 33C0 xor eax, eax
:004081E9 F2 repnz
:004081EA AE scasb
:004081EB F7D1 not ecx
:004081ED 2BF9 sub edi, ecx
:004081EF 8BD1 mov edx, ecx
:004081F1 8BF7 mov esi, edi
:004081F3 8BBC24E0000000 mov edi, dword ptr [esp+000000E0]
:004081FA C1E902 shr ecx, 02
:004081FD F3 repz
:004081FE A5 movsd
:004081FF 8BCA mov ecx, edx
:00408201 83E103 and ecx, 00000003
:00408204 F3 repz
:00408205 A4 movsb
:00408206 5F pop edi
:00408207 5E pop esi
:00408208 5D pop ebp
:00408209 5B pop ebx
:0040820A 81C4CC000000 add esp, 000000CC
:00408210 C3 ret
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004081DD(C)
|
:00408211 8B8C24E0000000 mov ecx, dword ptr [esp+000000E0]
:00408218 5F pop edi
:00408219 5E pop esi
:0040821A 5D pop ebp
:0040821B C6040800 mov byte ptr [eax+ecx], 00
// pCode[strlen(pCode)] = '\0'
:0040821F 5B pop ebx
:00408220 81C4CC000000 add esp, 000000CC
:00408226 C3 ret
标 题:S-DEMO2 KEY MAKE (MODIFY A BUG) (2千字)
发信人:jmzz003
时 间:2002-6-25 21:50:47
详细信息:
// Write by JMZZ 2002.06.24 (my Birthday)
// Modify a bug 2002.06.25
// I don't see those code from 004080C7 to 004080ED
// during I tracked with SoftIce, sorry!
// A Name can have 16 Codes.
// Note: I don't test
// The length of Name
// CODE : 1 + 1 + 2 * sizeof(str4) + 1
// The length of Code must be 17.
// The first char is a char in the str1.
// The second char is controled by NameID or str2.
// The middle chars make pCode, pCode must be equal to str4.
// The last char is controled by the total index(offset).
#include "stdio.h"
#include "string.h"
typedef unsigned char BYTE ;
typedef unsigned long DWORD;
int main(void)
{
BYTE str1[]="FZRHK01WGTPQSAVC";
BYTE str2[]="Guest";
BYTE str3[]="WARE\0\0\0\0Guest\0\0\0";
BYTE str4[]="Clayman";
BYTE Name[20] ="\0";
BYTE sCode[18]="\0";
BYTE Id[12] ="\0";
BYTE NameId[100];
BYTE c;
DWORD NameIdLen , Index , i, j, k, jEbx, jEdx;
printf("Input Name:");
scanf("%s",Name);
printf("Input ID:");
scanf("%s",Id);
strcpy(NameId,Name);
strcat(NameId,Id);
NameIdLen = strlen(Name) + 11; // IdLen = 11
for(k=0;k<16;k+=1)
{
sCode[0] = str1[k];
Index= 15 - k;
i = NameIdLen % 7;
// if( i != 0)
// sCode[1]=str1[NameId[Index % i]&0x0f];
// else
// sCode[1]=str1[str2[Index % 5]&0x0f];
if( i != 0)
{
c = NameId[Index % i];
if((c & 0x80)==0x80) // support chinese
{
c = (((c & 0x8f - 1) | 0xf0) +1 ) & 0x0f;
if((c+1)%3 == 0)
sCode[0] = '\0';
// portion of sCode will be error!
// I don't know this,if you know ,please tell me!
// Email: leopard003@163.com
sCode[1] = str3[c];
}
else
sCode[1]=str1[c&0x0f];
}
else
sCode[1]=str1[str2[Index % 5]&0x0f];
for(i=0;i< 7; i+=1) // 7 = (CodeLen-3)/2 // CodeLen = 17
{
jEbx = (str4[i] & 0xf0)>>4;
j =(- 0x80 + Index + jEbx) & 0x0f ;
sCode[2+2*i] = str1[j];
jEdx = str4[i] & 0x0f;
j =(- 0x80 + Index + jEdx) & 0x0f ;
sCode[2+2*i+1] = str1[j];
Index += jEbx;
}
sCode[2 + 2*i] = str1[(Index+17-3)&0x0f];
printf("Code= %s\n",sCode);
for(i=0;i<17;i+=1) sCode[i]='\0';
}
return 0;
}
相关视频
相关阅读 Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么
热门文章 去除winrar注册框方法
最新文章
比特币病毒怎么破解 比去除winrar注册框方法
华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)通过Access破解MSSQL获得数据
人气排行 华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)qq相册密码破解方法去除winrar注册框方法(适应任何版本)怎么用手机破解收费游戏华为无线猫HG522破解如何给软件脱壳基础教程
查看所有0条评论>>