简单算法分析――1toX 2.56
软件大小:约800K
下载地址:http://www.logipole.com
【软件简介】:1toX is a 32 bit software for Windows 9x, ME, 2000 and NT 4.x used to split big files or a huge set of files into several smaller files. 文件分割与合并工具。
【软件限制】:30天试用
【作者声明】:小弟初学Crack,只是感兴趣,没有其它目的。失误之处敬请各大侠赐教!
【破解工具】:TRW2000娃娃修改版、FI2.5、W32Dasm8.93黄金版
―――――――――――――――――――――――――――――
【过
程】:
呵呵,从某张光盘里看见了这个家伙,想起xiA Qin大侠在《看雪论坛精华3》中曾追过1.63版的注册码,却没有分析算法。虽然2.56版本也挺旧了,但是不妨碍我练练手呀。OK,开工吧!
1toX.exe无壳,VC++6.0编写。反汇编。TRW伺候!
输入试炼信息
Name: fly
First Name: sky
Key: 13572468
CTR+D切入TRW,下万能断点BPX
HMEMCPY。F5返回WINDOWS,点“OK”,拦下!
BD,暂停断点。PMODULE直达程序领空。我们来到425792处。
―――――――――――――――――――――――――――――
:00415792
85C0 test
eax, eax
====>我们来到这儿!
:00415794 755B jne 004157F1
…… ……省略…… ……
F10走,呵呵,很快的,我们就来到了核心!
*
Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0041589E(C)
|
:004158FB
8D442418 lea eax, dword
ptr [esp+18]
====>D EAX=fly
:004158FF
8D4C246C lea ecx, dword
ptr [esp+6C]
====>D ECX=sky
:00415903 50 push eax
* Possible StringData
Ref from Data Obj ->"1toX"
====>注意此字符串!
:00415904 68F8834300
push 004383F8
====>D
4383F8=1toX
:00415909
51 push
ecx
:0041590A 8D942410070000 lea edx, dword
ptr [esp+00000710]
*
Possible StringData Ref from Data Obj ->"%s%s%s"
|
:00415911 688C884300
push 0043888C
:00415916 52
push edx
:00415917 FFD5
call ebp
====>此CALL把sky、1toX、fly连接起来!
:00415919
8DBC2418070000 lea edi, dword ptr [esp+00000718]
====>D EDI=sky1toXfly
:00415920
83C9FF or ecx, FFFFFFFF
:00415923
33C0 xor
eax, eax
:00415925 83C414
add esp, 00000014
:00415928 F2
repnz
:00415929 AE
scasb
:0041592A F7D1
not ecx
:0041592C
2BF9 sub
edi, ecx
:0041592E 8D9424EC020000 lea edx,
dword ptr [esp+000002EC]
:00415935 8BC1
mov eax, ecx
:00415937 8BF7
mov esi, edi
:00415939
8BFA mov
edi, edx
:0041593B C1E902
shr ecx, 02
:0041593E F3
repz
:0041593F A5
movsd
:00415940 8BC8
mov ecx, eax
:00415942
8D8424EC020000 lea eax, dword ptr [esp+000002EC]
:00415949
83E103 and ecx,
00000003
:0041594C F3
repz
:0041594D A4
movsb
:0041594E 8A8C24EC020000
mov cl, byte ptr [esp+000002EC]
:00415955 84C9
test cl, cl
:00415957
741F je 00415978
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
下面开始循环了!
*
Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00415976(C)
|
:00415959
80385F cmp byte
ptr [eax], 5F
:0041595C 7503
jne 00415961
:0041595E C60020
mov byte ptr [eax], 20
*
Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0041595C(C)
|
:00415961
0FBE08 movsx ecx,
byte ptr [eax]
====>依次取sky1toXfly的HEX值
====>1、ECX=73
====>2、ECX=6B
====>3、ECX=79
…… ……省略…… ……
:00415964
334C2410 xor ecx, dword
ptr [esp+10]
====>依次与[esp+10]异或!
请教一下[esp+10]的初始值是如何得出的?
====>1、ECX=73
XOR FFFFFFFF=FFFFFF8C
====>2、ECX=6B XOR ECA86542=ECA86529
====>3、ECX=79 XOR FFFFFFE7=FFFFFF9E
…… ……省略…… ……
:00415968
81F1CE9A5713 xor ecx, 13579ACE
====>上面得出的值依次与13579ACE异或!
====>1、ECX=FFFFFF8C XOR 13579ACE=ECA86542
====>2、ECX=ECA86529
XOR 13579ACE=FFFFFFE7
====>3、ECX=FFFFFF9E XOR 13579ACE=ECA86550
…… ……省略…… ……
:0041596E
40 inc
eax
:0041596F 894C2410 mov
dword ptr [esp+10], ecx
====>ECX依次入[esp+10]
====>循环最后ECX=FFFFFF9F
:00415973
803800 cmp byte
ptr [eax], 00
:00415976 75E1
jne 00415959
====>没取完?继续循环!
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
*
Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00415957(C)
|
:00415978
8B442410 mov eax, dword
ptr [esp+10]
====>FFFFFF9F入EAX
:0041597C
8D942414010000 lea edx, dword ptr [esp+00000114]
====>D EDX=13572468
:00415983
35F0BD6824 xor eax, 2468BDF0
====>EAX=FFFFFF9F
XOR 2468BDF0=DB97426F
DB97426F的十进制3684123247就是我们的真码了!
:00415988
52 push
edx
:00415989 A380EA4300 mov
dword ptr [0043EA80], eax
====>DB97426F入[0043EA80]
:0041598E
E8E4400100 call 00429A77
:00415993
8B0D80EA4300 mov ecx, dword ptr [0043EA80]
====>DB97426F入ECX
:00415999
83C404 add esp,
00000004
:0041599C 3BC1
cmp eax, ecx
====>真假码比较!
====>?EAX=13572468 试炼码!
====>?ECX=3684123247 真码!!
:0041599E
7455 je 004159F5
====>不跳则OVER!
*
Reference To: USER32.MessageBoxA, Ord:01C3h
:004159D4
FF1590524300 Call dword ptr [00435290]
====>BAD BOY!
―――――――――――――――――――――――――――――
【KeyMake之内存注册机】:
中断地址:41599C
中断次数:1
第一字节:3B
指令长度:2
寄存器方式:ECX
十进制
―――――――――――――――――――――――――――――
【注册信息保存】:
程序文件夹下的
1toX.lic 中。
[ENREGISTREMENT]
licence=3684123247
first
name=fly
last name=sky
―――――――――――――――――――――――――――――
【整
理】:
Name:
fly
First Name: sky
Key: 3684123247
―――――――――――――――――――――――――――――
Cracked By 巢水工作坊――fly【OCN】
2003-2-15 16:46