算法分析——撰稿人宝典 V1.0
下载地址: http://www.skycn.com/soft/10803.html
软件大小: 696 KB
软件语言: 简体中文
软件类别: 国产软件 / 共享版 / 文字处理
应用平台: Win9x/NT/2000/XP
加入时间: 2003-02-13 12:08:02
下载次数: 136
推荐等级: ***
开 发 商: http://www.simplepad.51dream.com/
【软件简介】: 一款专为撰稿人设计的字处理软件,除了有常用功能外,还有许多特色功能:1.中文字数统计:您写了多少字,可随时在状态栏察看;2.自动保存:自设保存时间间隔,最小化减少意外损失;3.自动开启输入法:您可以自由选择让软件在启动时就切换出您最熟悉的输入法;4.输入时隐藏鼠标指针;5.自动翻页:读长篇文章时可自动翻页,允许自设翻页时间;6.背景音乐播放:支持“Wave,media,mp3,wma”格式,可循环播放,更加节省系统资源;7.无限次“撤销/恢复”功能;8.三击鼠标可选中一段文字,支持托拽文字操作;9.可插入自定义文本:可自定义“信头”,“联系方法”等常用词,下次即可方便插入,一次定义,一劳永逸!10.独创“随机色彩”功能:撰稿人长时间面对白屏黑字,视觉容易疲劳,受Delphi的启发,为大家精选五种醒目但却不刺眼的颜色,输入时随机变换色彩,可以有效的缓解视疲劳。
【软件限制】:NAG
【作者声明】:初学Crack,只是感兴趣,没有其它目的。失误之处敬请诸位大侠赐教!
【破解工具】:TRW2000娃娃修改版、FI2.5、UPXWin、W32Dasm8.93黄金版
—————————————————————————————
【过 程】:
呵呵,对 MiniPad 2000感到头疼,去 天空 看到一个小东西,当然是DOWN下试试了。
—————————————————————————————
一、脱壳
word.exe是UPX 1.2壳,用UPXWin脱之。423K->1.11M。Delphi编写。
用户名:fly
申请码:103B2C1E
试炼码:1357 2468
—————————————————————————————
二、反汇编、调试
呵呵,当然是祭出倚天剑、屠龙刀了!
--------------------------------------------------------
一>、首先看看申请码的生成
:004E57A8 E8CF36F2FF call 00408E7C
:004E57AD FF75E4 push [ebp-1C]
:004E57B0 B838DF4E00 mov eax, 004EDF38
:004E57B5 BA04000000 mov edx, 00000004
====>4 入 EDX
:004E57BA E84DF0F1FF call 0040480C
====>关键CALL!F8进入!
:004E57BF 8B1538DF4E00 mov edx, dword ptr [004EDF38]
:004E57C5 8B86FC020000 mov eax, dword ptr [esi+000002FC]
:004E57CB E8182CF6FF call 004483E8
:004E57D0 33D2 xor edx, edx
:004E57D2 8B8600030000 mov eax, dword ptr [esi+00000300]
:004E57D8 8B08 mov ecx, dword ptr [eax]
:004E57DA FF5164 call [ecx+64]
:004E57DD 33D2 xor edx, edx
:004E57DF 8B86F8020000 mov eax, dword ptr [esi+000002F8]
:004E57E5 8B08 mov ecx, dword ptr [eax]
:004E57E7 FF5164 call [ecx+64]
:004E57EA 8D55E0 lea edx, dword ptr [ebp-20]
:004E57ED 8B86FC020000 mov eax, dword ptr [esi+000002FC]
:004E57F3 E8C02BF6FF call 004483B8
:004E57F8 8B4DE0 mov ecx, dword ptr [ebp-20]
* Possible StringData Ref from Code Obj ->"IDcode"
|
:004E57FB BA88584E00 mov edx, 004E5888
:004E5800 8BC3 mov eax, ebx
:004E5802 E8B99EF8FF call 0046F6C0
:004E5807 8D55DC lea edx, dword ptr [ebp-24]
:004E580A 8B86F8020000 mov eax, dword ptr [esi+000002F8]
:004E5810 E8A32BF6FF call 004483B8
:004E5815 8B4DDC mov ecx, dword ptr [ebp-24]
* Possible StringData Ref from Code Obj ->"User"
|
:004E5818 BA98584E00 mov edx, 004E5898
:004E581D 8BC3 mov eax, ebx
:004E581F E89C9EF8FF call 0046F6C0
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
进入4E57BA call 0040480C
:0040480C 53 push ebx
:0040480D 56 push esi
:0040480E 57 push edi
:0040480F 52 push edx
:00404810 50 push eax
:00404811 89D3 mov ebx, edx
:00404813 31FF xor edi, edi
:00404815 8B4C9414 mov ecx, dword ptr [esp+4*edx+14]
====>把ESP+EDX*4+14处的内存中值移入ECX
呵呵,不知道怎么表达了。希望大家指点!
====>1、00DA26F0中为10
:00404819 85C9 test ecx, ecx
:0040481B 7406 je 00404823
:0040481D 3908 cmp dword ptr [eax], ecx
:0040481F 7502 jne 00404823
:00404821 89C7 mov edi, eax
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:0040481B(C), :0040481F(C)
|
:00404823 31C0 xor eax, eax
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00404837(C)
|
:00404825 8B4C9414 mov ecx, dword ptr [esp+4*edx+14]
====>把ESP+EDX*4+14处的内存中值移入ECX
呵呵,不知道怎么表达了。希望大家指点!
====>1、00DA26F0中为10
====>2、00DA2F6C中为3B
====>3、00DA2134中为2C
====>4、00DA5050中为1E
:00404829 85C9 test ecx, ecx
:0040482B 7409 je 00404836
:0040482D 0341FC add eax, dword ptr [ecx-04]
:00404830 39CF cmp edi, ecx
:00404832 7502 jne 00404836
:00404834 31FF xor edi, edi
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:0040482B(C), :00404832(C)
|
:00404836 4A dec edx
====>依次减1
:00404837 75EC jne 00404825
====>循环4次!
呵呵,把上面的值连起来就是程序给我们的申请码!不知道为何申请码的生成具有随机性,既每次的申请码皆不同。与用户名无关!希望大家给我指点迷津!
——————————————————————————————————
二>、追注册码的算法!
查找关键提示"注册码错误"在4E5C05 ,由004E596C和004E59B3跳至!因此我们很容易就找到关键的断点了。因为想看看算法,所以把断点下在4E593E处。分别输入上面的试炼码,点“注册”,OK!拦下!
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:004E596C(C), :004E59B3(C) < ==== 向上追!
|
:004E5C03 6A10 push 00000010
* Possible StringData Ref from Code Obj ->"注册码错误"
|
:004E5C05 68185E4E00 push 004E5E18
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
BPX 4E593E 拦下!呵呵,又开始我的菜鸟学算法之旅了!
:004E593E E8752AF6FF call 004483B8
====>拦下!
:004E5943 8B45E8 mov eax, dword ptr [ebp-18]
:004E5946 50 push eax
====>EAX=103B2C1E 申请码
:004E5947 8D55E4 lea edx, dword ptr [ebp-1C]
:004E594A 8B83F8020000 mov eax, dword ptr [ebx+000002F8]
:004E5950 E8632AF6FF call 004483B8
:004E5955 8B45E4 mov eax, dword ptr [ebp-1C]
====> fly 入 EAX
* Possible StringData Ref from Code Obj ->"EZWord"
====>注意:EZWord
:004E5958 B9085D4E00 mov ecx, 004E5D08
====> EZWord 入 ECX
:004E595D 5A pop edx
:004E595E E875F9FFFF call 004E52D8
====>运算第一部分!进入!
:004E5963 8B55EC mov edx, dword ptr [ebp-14]
====>结果:9e130943 入 EDX
:004E5966 58 pop eax
====>EAX=1357 试炼码的前部分
:004E5967 E824EFF1FF call 00404890
====>比较第一部分!进入!
:004E596C 0F8591020000 jne 004E5C03
====>跳则OVER!
:004E5972 8D55E0 lea edx, dword ptr [ebp-20]
:004E5975 8B8318030000 mov eax, dword ptr [ebx+00000318]
:004E597B E8382AF6FF call 004483B8
:004E5980 8B45E0 mov eax, dword ptr [ebp-20]
:004E5983 50 push eax
:004E5984 68FC5C4E00 push 004E5CFC
:004E5989 8D45DC lea eax, dword ptr [ebp-24]
:004E598C 50 push eax
:004E598D 8D55D8 lea edx, dword ptr [ebp-28]
:004E5990 8B83FC020000 mov eax, dword ptr [ebx+000002FC]
:004E5996 E81D2AF6FF call 004483B8
:004E599B 8B55D8 mov edx, dword ptr [ebp-28]
====>103B2C1E 入EDX 申请码
* Possible StringData Ref from Code Obj ->"EZWord"
|
:004E599E B9085D4E00 mov ecx, 004E5D08
====> EZWord 入 ECX
:004E59A3 33C0 xor eax, eax
:004E59A5 E82EF9FFFF call 004E52D8
====>运算第二部分!进入!
:004E59AA 8B55DC mov edx, dword ptr [ebp-24]
====>结果:e4e8a4fe 入 EDX
:004E59AD 58 pop eax
====>EAX=2468 试炼码的后部分
:004E59AE E8DDEEF1FF call 00404890
====>比较第二部分!进入!
:004E59B3 0F854A020000 jne 004E5C03
====>跳则OVER!
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
1、进入运算部分!4E595E call 004E52D8
2、进入运算部分!4E59A5 call 004E52D8
* Referenced by a CALL at Addresses:
|:004E595E , :004E59A5 , :004E59F6 , :004E5A14 , :004E5A46
|:004E5A64 , :004E5A96 , :004E5AB4 , :004E5AE6 , :004E5B04
|:004E8DD8 , :004E8E11 , :004E8E4A , :004E8E83
|
:004E52D8 55 push ebp
:004E52D9 8BEC mov ebp, esp
:004E52DB 83C4EC add esp, FFFFFFEC
:004E52DE 53 push ebx
:004E52DF 33DB xor ebx, ebx
:004E52E1 895DEC mov dword ptr [ebp-14], ebx
:004E52E4 895DF0 mov dword ptr [ebp-10], ebx
:004E52E7 894DF4 mov dword ptr [ebp-0C], ecx
:004E52EA 8955F8 mov dword ptr [ebp-08], edx
:004E52ED 8945FC mov dword ptr [ebp-04], eax
:004E52F0 8B45FC mov eax, dword ptr [ebp-04]
:004E52F3 E83CF6F1FF call 00404934
:004E52F8 8B45F8 mov eax, dword ptr [ebp-08]
:004E52FB E834F6F1FF call 00404934
:004E5300 8B45F4 mov eax, dword ptr [ebp-0C]
:004E5303 E82CF6F1FF call 00404934
:004E5308 8B450C mov eax, dword ptr [ebp+0C]
:004E530B E824F6F1FF call 00404934
:004E5310 33C0 xor eax, eax
:004E5312 55 push ebp
:004E5313 687E534E00 push 004E537E
:004E5318 64FF30 push dword ptr fs:[eax]
:004E531B 648920 mov dword ptr fs:[eax], esp
:004E531E FF75FC push [ebp-04]
:004E5321 FF75F8 push [ebp-08]
:004E5324 FF75F4 push [ebp-0C]
:004E5327 FF750C push [ebp+0C]
:004E532A 8B450C mov eax, dword ptr [ebp+0C]
:004E532D 50 push eax
:004E532E 8D45EC lea eax, dword ptr [ebp-14]
:004E5331 50 push eax
:004E5332 8B4DF4 mov ecx, dword ptr [ebp-0C]
:004E5335 8B55F8 mov edx, dword ptr [ebp-08]
:004E5338 8B45FC mov eax, dword ptr [ebp-04]
:004E533B E840FDFFFF call 004E5080
:004E5340 FF75EC push [ebp-14]
运算第一部分! ====>U@pg%,p` 程序自给
运算第二部分! ====>npnczwFj 程序自给
:004E5343 8D45F0 lea eax, dword ptr [ebp-10]
:004E5346 BA05000000 mov edx, 00000005
:004E534B E8BCF4F1FF call 0040480C
运算第一部分! ====>此CALL把用户名、申请码以及上面的U@pg%,p`连接起来
运算第二部分! ====>此CALL把申请码以及上面的npnczwFj连接起来
:004E5350 8B5508 mov edx, dword ptr [ebp+08]
:004E5353 8B45F0 mov eax, dword ptr [ebp-10]
运算第一部分! ====>fly103B2C1EEZWord1U@pg%,p` 入 EAX
运算第二部分! ====>103B2C1EEZWord1npnczwFj 入 EAX
:004E5356 E831000000 call 004E538C
====>运算了!进入!
:004E535B 33C0 xor eax, eax
:004E535D 5A pop edx
:004E535E 59 pop ecx
:004E535F 59 pop ecx
:004E5360 648910 mov dword ptr fs:[eax], edx
:004E5363 6885534E00 push 004E5385
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004E5383(U)
|
:004E5368 8D45EC lea eax, dword ptr [ebp-14]
:004E536B BA05000000 mov edx, 00000005
:004E5370 E833F1F1FF call 004044A8
:004E5375 8D450C lea eax, dword ptr [ebp+0C]
:004E5378 E807F1F1FF call 00404484
:004E537D C3 ret
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
进入运算CALL:4E5356 call 004E538C
* Referenced by a CALL at Address:
|:004E5356
|
:004E538C 55 push ebp
:004E538D 8BEC mov ebp, esp
:004E538F 83C4F4 add esp, FFFFFFF4
:004E5392 53 push ebx
:004E5393 56 push esi
:004E5394 33C9 xor ecx, ecx
:004E5396 894DF4 mov dword ptr [ebp-0C], ecx
:004E5399 8955F8 mov dword ptr [ebp-08], edx
:004E539C 8945FC mov dword ptr [ebp-04], eax
:004E539F 8B45FC mov eax, dword ptr [ebp-04]
:004E53A2 E88DF5F1FF call 00404934
:004E53A7 33C0 xor eax, eax
:004E53A9 55 push ebp
:004E53AA 682B544E00 push 004E542B
:004E53AF 64FF30 push dword ptr fs:[eax]
:004E53B2 648920 mov dword ptr fs:[eax], esp
:004E53B5 33DB xor ebx, ebx
:004E53B7 8B45FC mov eax, dword ptr [ebp-04]
运算第一部分! ====>fly103B2C1EEZWord1U@pg%,p` 入 EAX
运算第二部分! ====>103B2C1EEZWord1npnczwFj 入 EAX
:004E53BA E88DF3F1FF call 0040474C
====>求上面字符串的长度
:004E53BF 85C0 test eax, eax
运算第一部分! ====>EAX=1A (即:26位)
运算第二部分! ====>EAX=17 (即:23位)
:004E53C1 7E2C jle 004E53EF
:004E53C3 BE01000000 mov esi, 00000001
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004E53ED(C)
|
:004E53C8 8B55FC mov edx, dword ptr [ebp-04]
运算第一部分! ====>fly103B2C1EEZWord1U@pg%,p` 入 EDX
运算第二部分! ====>103B2C1EEZWord1npnczwFj 入 EDX
:004E53CB 8A5432FF mov dl, byte ptr [edx+esi-01]
运算第一部分! ====>逐位从fly103B2C1EEZWord1U@pg%,p`中取字符的HEX值!
====>1、DL=66
…… …… 省略(共26次) …… ……
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
运算第二部分! ====>逐位从103B2C1EEZWord1npnczwFj中取字符的HEX值!
====>1、DL=31
…… …… 省略(共23次) …… ……
:004E53CF 32D3 xor dl, bl
运算第一部分! ====>与 BL 进行异或! 第一次BL=0
====>1、DL=66 XOR 0=66
…… …… 省略(共26次) …… ……
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
运算第二部分! ====>与 BL 进行异或! 第一次BL=0
====>1、DL=31 XOR 0=31
…… …… 省略(共23次) …… ……
:004E53D1 81E2FF000000 and edx, 000000FF
:004E53D7 8B1495A4BC4E00 mov edx, dword ptr [4*edx+004EBCA4]
运算第一部分! ====>1、EDX=A4D1C46D
…… …… 省略(共26次) …… ……
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
运算第二部分! ====>1、EDX=51DE003A
…… …… 省略(共23次) …… ……
:004E53DE C1EB08 shr ebx, 08
====>EBX 右移8位!
====>1、EBX=0
:004E53E1 81E3FFFFFF00 and ebx, 00FFFFFF
:004E53E7 33D3 xor edx, ebx
运算第一部分! ====>1、EDX=A4D1C46D XOR EBX=A4D1C46D
…… …… 省略(共26次) …… ……
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
运算第二部分! ====>1、EDX=51DE003A XOR EBX=51DE003A
…… …… 省略(共23次) …… ……
:004E53E9 8BDA mov ebx, edx
运算第一部分! ====>EDX 移入 EBX
====>循环26次后,EDX=9E130943
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
运算第二部分! ====>EDX 移入 EBX
====>循环23次后,EDX=E4E8A4FE
:004E53EB 46 inc esi
====>ESI 增1
:004E53EC 48 dec eax
====>EAX 减1
:004E53ED 75D9 jne 004E53C8
运算第一部分! ====>继续循环!共26次!
运算第二部分! ====>继续循环!共23次!
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004E53C1(C)
|
:004E53EF 8BC3 mov eax, ebx
运算第一部分! ====>循环26次后,9E130943入EAX
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
运算第二部分! ====>循环23次后,E4E8A4FE入EAX
:004E53F1 33D2 xor edx, edx
:004E53F3 52 push edx
:004E53F4 50 push eax
:004E53F5 8D55F4 lea edx, dword ptr [ebp-0C]
:004E53F8 B808000000 mov eax, 00000008
:004E53FD E8B63AF2FF call 00408EB8
:004E5402 8B45F4 mov eax, dword ptr [ebp-0C]
:004E5405 8B55F8 mov edx, dword ptr [ebp-08]
:004E5408 E88735F2FF call 00408994
运算第一部分! ====>将9E130943中的大写字母转化为小写!
呵呵, 9e130943就是注册码前半部分!
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
运算第二部分! ====>将E4E8A4FE中的大写字母转化为小写!
呵呵, e4e8a4fe就是注册码后半部分!
:004E540D 33C0 xor eax, eax
:004E540F 5A pop edx
:004E5410 59 pop ecx
:004E5411 59 pop ecx
:004E5412 648910 mov dword ptr fs:[eax], edx
:004E5415 6832544E00 push 004E5432
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004E5430(U)
|
:004E541A 8D45F4 lea eax, dword ptr [ebp-0C]
:004E541D E862F0F1FF call 00404484
:004E5422 8D45FC lea eax, dword ptr [ebp-04]
:004E5425 E85AF0F1FF call 00404484
:004E542A C3 ret
——————————————————————————————————
看看真假码的比较!
1、进入比较部分!4E5967 call 00404890
2、进入比较部分!4E59AE call 00404890
* Referenced by a CALL at Addresses:
|:0041838F , :0041EBD2 , :004213CF , :00427129 , :00428100
…… …… 很多地方CALL此处! …… ……
:00404890 53 push ebx
:00404891 56 push esi
:00404892 57 push edi
:00404893 89C6 mov esi, eax
:00404895 89D7 mov edi, edx
:00404897 39D0 cmp eax, edx
比较第一部分! ====>D EAX=1357
====>D EDX=9e130943
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
比较第二部分! ====>D EAX=2468
====>D EDX=e4e8a4fe
:00404899 0F848F000000 je 0040492E
:0040489F 85F6 test esi, esi
:004048A1 7468 je 0040490B
:004048A3 85FF test edi, edi
:004048A5 746B je 00404912
:004048A7 8B46FC mov eax, dword ptr [esi-04]
:004048AA 8B57FC mov edx, dword ptr [edi-04]
:004048AD 29D0 sub eax, edx
:004048AF 7702 ja 004048B3
————————————————————————————
【KeyMake之内存注册机】:fly{43th}
中断地址:4E5967
中断次数:1
第一字节:E8
指令长度:5
保存下列信息为注册码:
内存方式EDX
结尾插入字符 - (- 前的为注册码的前半部分,- 后的则为后半部分)
中断地址:4E59AE
中断次数:1
第一字节:E8
指令长度:5
内存方式:EDX
修改内存:
修改地址:4E596C
修改长度:6
原始指令:0F8591020000
修改指令:909090909090
—————————————————————————————
【注册信息保存】:
REGEDIT4
[HKEY_LOCAL_MACHINE\Software\EZWord]
"IDcode"="103B2C1E"
"User"="fly"
"Code1"="9e130943"
"Code2"="e4e8a4fe"
呵呵,把这些信息存为.reg文件导入注册表中应该就是注册版了。^-^
—————————————————————————————
【整 理】:
用户名:fly
申请码:103B2C1E
注册码:9e130943 e4e8a4fe
相关视频
相关阅读 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条评论>>