一个气象软件的算法跟踪:
【软件限制】:无功能限制,但启动时跳出注册窗口
【作者声明】:初学Crack,只是感兴趣,没有其它目的。失误之处敬请各大侠赐教!
【破解工具】:Ollydbg1.09 中文版、W32Dasm8.93黄金版
—————————————————————————————
【过 程】:
呵呵,我们开工吧!唉!^-^^-^ 我的水平很低,许多地方表达的有问题,烦请各位老师指教!
为了保护国人软件,软件信息不贴了,要的发个消息.
这个软件的注册是先输入试验码,然后加密放在软件目录下的REG.KEY 中,那么关键点的查找就从REG.KEY关键
值开始,用W32Dasm8.93黄金版反汇编它,然后查找reg.key关键字.
==========================================================
00402596 |. 68 34B74000 PUSH tqyb.0040B734 ; ASCII "register.key"
0040259B |. C64424 3C 03 MOV BYTE PTR SS:[ESP+3C], 3
004025A0 |. E8 F1430000 CALL
004025A5 |. 85C0 TEST EAX, EAX
004025A7 |. 75 41 JNZ SHORT tqyb.004025EA
**********************************************************
然后用Ollydbg1.09 中文版加载它,下中断在:
00402596 |. 68 34B74000 PUSH tqyb.0040B734 ; ASCII "register.key"
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
运行程序,中断后不久就到了核心部分,来看看:
这里应该是计算部分1
00402900 /$ 8A41 37 MOV AL, BYTE PTR DS:[ECX+37] ; AL <== DS:[041E0BB]= 78
00402903 |. 8A51 3E MOV DL, BYTE PTR DS:[ECX+3E] ; DL <== DS:[0041E0C2]=94
00402906 |. 8881 33040000 MOV BYTE PTR DS:[ECX+433], AL
; 然后把得到的值==>DS:[0041E4B7]
0040290C |. 8A41 4C MOV AL, BYTE PTR DS:[ECX+4C]
; 这说明输入的试验码是二个一组分开存放在reg.key中,这段程序就是解码
0040290F |. 8891 32040000 MOV BYTE PTR DS:[ECX+432], DL
00402915 |. 8A51 61 MOV DL, BYTE PTR DS:[ECX+61]
00402918 |. 8881 2F040000 MOV BYTE PTR DS:[ECX+42F], AL
0040291E |. 8A41 76 MOV AL, BYTE PTR DS:[ECX+76]
00402921 |. 8891 30040000 MOV BYTE PTR DS:[ECX+430], DL
00402927 |. BA DCFBFFFF MOV EDX, -424
0040292C |. 8881 31040000 MOV BYTE PTR DS:[ECX+431], AL
; 连接后就是输入的数字5612309478
00402932 |. 53 PUSH EBX
; 原来就是这样读出输入的数字的
00402933 |. 8D81 24040000 LEA EAX, DWORD PTR DS:[ECX+424]
00402939 |. 2BD1 SUB EDX, ECX
0040293B |> 8A88 F4FBFFFF /MOV CL, BYTE PTR DS:[EAX-40C]
; CL <== DS:[0041E09C] =36 ,这个地址内是机器码存放的地方,按照顺序放的
00402941 |. 8A58 0B |MOV BL, BYTE PTR DS:[EAX+B]
; BL <== DS:[0041E4B3] = 56 ,这个地址是输入的数字的存放的地方,顺序是从34521
00402944 |. 32CB |XOR CL, BL
; CL= 36 XOR 56 =60
00402946 |. 8A18 |MOV BL, BYTE PTR DS:[EAX]
; BL <== DS:[0041E4A8]=11 这个地址中是常数存放的地方
00402948 |. 32CB |XOR CL, BL
; CL= 60 XOR 11 =71
0040294A |. 75 10 |JNZ SHORT tqyb.0040295C
; 注册码关键比较的地方,即条件是56 xor 36 =11
0040294C |. 40 |INC EAX
; 关键的比较,实际上就是比较是不是相同
0040294D |. 8D0C02 |LEA ECX, DWORD PTR DS:[EDX+EAX>
00402950 |. 83F9 05 |CMP ECX, 5
; 这里是前10位的计算和比较部分
00402953 |.^ 7C E6 \JL SHORT tqyb.0040293B
00402955 |. B8 01000000 MOV EAX, 1
0040295A |. 5B POP EBX
0040295B |. C3 RETN
0040295C |> 33C0 XOR EAX, EAX
0040295E |. 5B POP EBX
0040295F \. C3 RETN
-----------------------------------------------------
这里应该是计算部分2
00402960 /$ 8A81 8B000000 MOV AL, BYTE PTR DS:[ECX+8B]
; AL <== DS:[0041E10F]=12 (
00402966 |. 8A91 F4000000 MOV DL, BYTE PTR DS:[ECX+F4]
0040296C |. 8881 2F040000 MOV BYTE PTR DS:[ECX+42F], AL
00402972 |. 8A81 F9000000 MOV AL, BYTE PTR DS:[ECX+F9]
00402978 |. 8891 30040000 MOV BYTE PTR DS:[ECX+430], DL
0040297E |. 8A91 09010000 MOV DL, BYTE PTR DS:[ECX+109]
00402984 |. 8881 31040000 MOV BYTE PTR DS:[ECX+431], AL
0040298A |. 8A81 DB010000 MOV AL, BYTE PTR DS:[ECX+1DB]
00402990 |. 8891 32040000 MOV BYTE PTR DS:[ECX+432], DL
; 这说明输入的试验码是二个一组分开存放在reg.key中,这段程序就是解码
00402996 |. BA D7FBFFFF MOV EDX, -429
0040299B |. 8881 33040000 MOV BYTE PTR DS:[ECX+433], AL
; 第二次把输入的试验码的后10位安顺序放在DS:[0041E4B3]中
004029A1 |. 53 PUSH EBX
004029A2 |. 8D81 29040000 LEA EAX, DWORD PTR DS:[ECX+429]
004029A8 |. 2BD1 SUB EDX, ECX
004029AA |> 8A88 F4FBFFFF /MOV CL, BYTE PTR DS:[EAX-40C]
; CL <== DS:[0041E0A1] =21 ,这个地址内是机器码后10位存放的地方,按照顺序放的
004029B0 |. 8A58 06 |MOV BL, BYTE PTR DS:[EAX+6]
; BL <== DS:[0041E4B3] = 12 ,这个地址是输入的数字的后10位存放的地方,顺序
004029B3 |. 32CB |XOR CL, BL
004029B5 |. 8A18 |MOV BL, BYTE PTR DS:[EAX]
; BL <== DS:[0041E4AD] = AA (常数的地址)
004029B7 |. 32CB |XOR CL, BL
004029B9 |. 75 10 |JNZ SHORT tqyb.004029CB
; 关键的比较,实际上就是比较是不是相同
004029BB |. 40 |INC EAX
004029BC |. 8D0C02 |LEA ECX, DWORD PTR DS:[EDX+EAX>
004029BF |. 83F9 05 |CMP ECX, 5
; 这里是后10位的计算和比较部分
004029C2 |.^ 7C E6 \JL SHORT tqyb.004029AA
004029C4 |. B8 01000000 MOV EAX, 1
004029C9 |. 5B POP EBX
004029CA |. C3 RETN
===================================================
以下是内存中的关键数据:
0041E4A8 11 33 55 77 99 AA CC BB 3Uw櫔袒 <==参数
0041E4B0 EE FF
56 12 30 94 78 ?.V0攛 <== 输入的数字 (分两次调入,每次10位)
0041E098 36 B5 44 13 @4.6礑 <==机器码存放的地方
0041E0A0 12 21 3B 40 58 6D !;@Xm.
=========================================================================================
到此注册码计算的分析完成,下面来总结注册码的计算方法:
条件: 注册码的长度为20位 , 因为是两个一组,现在我们用一个字符来表示一组.
机器码我们也用同样的方法表示.
设:
1.机器码 = M0 M1 M2 M3 M4 M5 M6 M7 M8 M9
2.注册码 = N0 N1 N2 N3 N4 N5 N6 N7 N8 N9
注册码的计算方法: N0 = M4 XOR 11
N1 = M3 XOR 33
N2 = M0 XOR 55
N3 = M1 XOR 77
N4 = M2 XOR 99
N5 = M5 XOR AA
N6 = M6 XOR CC
N7 = M7 XOR BB
N8 = M8 XOR EE
N9 = M9 XOR FF
fxyang
2003.2.27
相关视频
相关阅读 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条评论>>