作者:lordor[BCG]
Mail:lordor@sina.com
目的:属技术交流,无其它目的,请不要任意散布或用用商业用途。初学破解,如有不对的地方欢迎批评指出。
工具:softice,w32Dasm,ollydbg
试炼码:
识别号:HHID558109930
注册号:654321
写教程真的写上瘾,再来篇。
004ABCAC |. 64:8920 MOV DWORD PTR
FS:[EAX],ESP
004ABCAF |. 8D55 F8 LEA
EDX,DWORD PTR SS:[EBP-8]
004ABCB2 |. 8B83 00030000 MOV EAX,DWORD
PTR DS:[EBX+300]
004ABCB8 |. E8 636BF9FF CALL
unpacked.00442820
; 取注册号unpa
004ABCBD |. 8B45 F8 MOV
EAX,DWORD PTR SS:[EBP-8] ;
注册号入eaxDWOR
004ABCC0 |. 8D55 FC LEA
EDX,DWORD PTR SS:[EBP-4]
004ABCC3 |. E8 3CD4F5FF CALL
unpacked.00409104
; 复制注册号到edx的地址.00409104
004ABCC8 |. 8B45 FC
MOV EAX,DWORD PTR SS:[EBP-4] ;
注册号入eaxDWOR
004ABCCB |. 50
PUSH EAX
004ABCCC |. 8D55 F0
LEA EDX,DWORD PTR SS:[EBP-10]
004ABCCF |. 8B83 F8020000 MOV
EAX,DWORD PTR DS:[EBX+2F8]
004ABCD5 |. E8 466BF9FF CALL
unpacked.00442820
; 取识别号unpa
004ABCDA |. 8B45 F0 MOV
EAX,DWORD PTR SS:[EBP-10] ;
识别号入eaxDWOR
004ABCDD |. 8D55 F4 LEA
EDX,DWORD PTR SS:[EBP-C]
004ABCE0 |. E8 9BF9FFFF CALL
unpacked.004AB680
; 产生注册真码,进入
004ABCE5 |. 8B55 F4 MOV
EDX,DWORD PTR SS:[EBP-C] ;
真码入edx,DW
004ABCE8 |. 58
POP EAX
;
出输入注册号到eax
004ABCE9 |. E8 8690F5FF CALL
unpacked.00404D74
; 关键比较unpa
004ABCEE |. 0F85 F4000000 JNZ unpacked.004ABDE8
;
不等则跳到出错cked.00
004ABCF4 |. 6A 40
PUSH 40
; /style =
MB_OK|MB_ICONASTERISK|MB_APPLMODAL
004ABCF6 |. 68 50BE4A00
PUSH unpacked.004ABE50
; |Title = "黄河英语通"4ABE5
004ABCFB |. 68 5CBE4A00
PUSH unpacked.004ABE5C
; |Text = "注册成功!"04ABE
004ABD00 |. A1 70F44E00 MOV
EAX,DWORD PTR DS:[4EF470] ;
|
004ABD05 |. 8B00 MOV
EAX,DWORD PTR DS:[EAX] ;
|
004ABD07 |. 8B40 30 MOV EAX,DWORD PTR
DS:[EAX+30] ; |
004ABD0A |.
50 PUSH EAX
; |hOwner
004ABD0B |. E8 80BDF5FF CALL
<JMP.&user32.MessageBoxA> ;
\MessageBoxA
004ABD10 |. 8D55 E8 LEA
EDX,DWORD PTR SS:[EBP-18]
004ABD13 |. 8B83 00030000 MOV EAX,DWORD
PTR DS:[EBX+300]
--------------------------------
产生真码call
004AB6A3 |. 64:FF30 PUSH DWORD PTR
FS:[EAX]
004AB6A6 |. 64:8920 MOV DWORD PTR
FS:[EAX],ESP
004AB6A9 |. 8BC7
MOV EAX,EDI
004AB6AB |. E8 B892F5FF CALL
unpacked.00404968
004AB6B0 |. 8D45 FC LEA
EAX,DWORD PTR SS:[EBP-4]
004AB6B3 |. BA 9CB74A00 MOV
EDX,unpacked.004AB79C
004AB6B8 |. E8 7B95F5FF CALL
unpacked.00404C38
; 把识别号保存到地址中
004AB6BD |. 8B45 FC MOV
EAX,DWORD PTR SS:[EBP-4] ;
识别号所在地址
004AB6C0 |. 0FB630 MOVZX
ESI,BYTE PTR DS:[EAX] ;
识别号第一位十六进制值入esi
004AB6C3 |. 66:6BC6 64 IMUL
AX,SI,64
; ax=si*64
004AB6C7 |. 66:8945
F8 MOV WORD PTR SS:[EBP-8],AX
; 保存ax到[ebp-8]
004AB6CB |. 8BC6
MOV EAX,ESI
;
eax=esi
004AB6CD |. C1E0 09 SHL EAX,9
; 左移9位
004AB6D0 |.
66:8945 F6 MOV WORD PTR SS:[EBP-A],AX
; ax保存[ebp-a]
004AB6D4 |. B3 01
MOV BL,1
;
计数器初始化为1
004AB6D6 |> 8B45 FC /MOV
EAX,DWORD PTR SS:[EBP-4] ;
识别号所在地址,入eax
004AB6D9 |. E8 5295F5FF |CALL
unpacked.00404C30
; 取长度
004AB6DE |. 50
|PUSH EAX
004AB6DF |. 33C0
|XOR EAX,EAX
004AB6E1 |. 8AC3
|MOV AL,BL
; 计数器入al
004AB6E3
|. 5A |POP EDX
004AB6E4
|. 8BCA |MOV ECX,EDX
; 识别号长度入ecx
004AB6E6 |. 99
|CDQ
004AB6E7 |. F7F9
|IDIV ECX
;
此即为计数器取识别号长度的模数
004AB6E9 |. 8B45 FC
|MOV EAX,DWORD PTR SS:[EBP-4] ;
识别号所在地址,入eax
004AB6EC |. 8A0410
|MOV AL,BYTE PTR DS:[EAX+EDX] ;
取第bl(经过上面模数运算)位识别号。
004AB6EF |. 0FB7D6
|MOVZX EDX,SI
; edx=si
004AB6F2 |.
C1EA 08 |SHR EDX,8
;
edx 右移8位
004AB6F5 |. 32C2
|XOR AL,DL
; al与dl 异或
004AB6F7 |.
33D2 |XOR EDX,EDX
004AB6F9 |.
8AD3 |MOV DL,BL
; 计数器入dl
004AB6FB |. B9 A8B74A00 |MOV
ECX,unpacked.004AB7A8 ;
ASCII "Qwert yuiop asdfg hjkl zxcvbnm"
004AB700 |. 324411
FF |XOR AL,BYTE PTR DS:[ECX+EDX-1]
; 取第bl位字符串
004AB704 |. 50
|PUSH EAX
004AB705 |. 8B45 FC
|MOV EAX,DWORD PTR SS:[EBP-4]
004AB708 |. E8 2395F5FF
|CALL unpacked.00404C30
; 取识别号长度
004AB70D |. 5A
|POP EDX
;
异或值入edx
004AB70E |. 02D0
|ADD DL,AL
; 与位数相加
004AB710 |.
8855 FB |MOV BYTE PTR SS:[EBP-5],DL
; 保存到[ebp-5]
004AB713 |.
33C0 |XOR EAX,EAX
004AB715 |.
8A45 FB |MOV AL,BYTE PTR SS:[EBP-5]
004AB718
|. B9 23000000 |MOV ECX,23
;
23入ecx
004AB71D |. 99
|CDQ
004AB71E |. F7F9
|IDIV ECX
004AB720 |. 42
|INC EDX
; 余数加1
004AB721
|. 8855 FB |MOV BYTE PTR SS:[EBP-5],DL
; 保存到[ebp-5]
004AB724 |.
8D45 F0 |LEA EAX,DWORD PTR SS:[EBP-10]
004AB727
|. 33D2 |XOR EDX,EDX
004AB729
|. 8A55 FB |MOV DL,BYTE PTR
SS:[EBP-5]
004AB72C |. B9 D0B74A00 |MOV
ECX,unpacked.004AB7D0 ;
ASCII "ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789"
004AB731 |.
8A5411 FF |MOV DL,BYTE PTR DS:[ECX+EDX-1]
; 查密码表,取第dl位
004AB735 |. E8 0E94F5FF
|CALL unpacked.00404B48
; 清空密码表
004AB73A |. 8B55 F0
|MOV EDX,DWORD PTR SS:[EBP-10] ;
取得的一位十六进制值入edx
004AB73D |. 8BC7
|MOV EAX,EDI
004AB73F |. E8 F494F5FF |CALL
unpacked.00404C38
; 保存
004AB744 |. 33C0
|XOR EAX,EAX
004AB746 |. 8AC3
|MOV AL,BL
004AB748 |. 8B17
|MOV EDX,DWORD PTR DS:[EDI]
004AB74A |. 0FB64402 FF
|MOVZX EAX,BYTE PTR DS:[EDX+EAX-1] ;
取得的一位十六进制入eax
004AB74F |. 66:03F0 |ADD
SI,AX
; 与识别号第bl位相加
004AB752 |.
66:0FAF75 F8 |IMUL SI,WORD PTR SS:[EBP-8]
; 再乘以[ebp-8]处的值
004AB757 |. 66:0375
F6 |ADD SI,WORD PTR SS:[EBP-A]
; 再加上[ebp-a]处值
004AB75B |. 43
|INC EBX
;
ebx加1
004AB75C |. 80FB 1F |CMP BL,1F
; 与31是否相等
004AB75F |.^ 0F85 71FFFFFF
\JNZ unpacked.004AB6D6
004AB765 |. 33C0
XOR EAX,EAX
004AB767 |. 5A
POP EDX
004AB768 |. 59
POP ECX
004AB769 |. 59
POP ECX
004AB76A |. 64:8910
MOV DWORD PTR FS:[EAX],EDX
004AB76D |. 68 8AB74A00
PUSH unpacked.004AB78A
004AB772 |> 8D45 F0
LEA EAX,DWORD PTR SS:[EBP-10]
004AB775 |. E8 EE91F5FF
CALL unpacked.00404968
------------------------------------
总结:
字符串s1=Qwert yuiop asdfg hjkl
zxcvbnm
字符串s2=ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789
取第1位识别号十六进制48(H),乘64(H)得数A=1c20(H),左移9位得数B=9000(H)。然后开始进行31次循环,得到30位注册号:
int Y=第1位识别号十六进制48(H);
for(int
i=1;i<31;i++)
{
取识别号的长度len;
求i%len的模数X;
取第X位的识别号十六进制值;
Y右移8位得数C;
第X位的识别号十六进制值与C异或得数D;
取字符串s1第i位十六进制值与第X位的识别号十六进制值异或,得E值;
E值与识别号的长度len相加,得数F;
求F%35模数,模数加1,得数G;
取字符串s2第G位十六进制值,此即为第i位注册号;
Y=Y+字符串s2第G位十六进制值;
Y=Y*数A;
Y=Y+B;
}
识别号:HHID558109930
注册号:E5W799BWESP8CFFF7GKDH4B6JW3L8L
cracked by lordor[BCG]
03.06.05