这个软件有几个陷阱, 其实算法都是一致, 但在跟的时候, 可能会误入陷阱, 花费多一点时间.
写得不对之处, 欢迎大家指正.
一: 首先打开软件, 先填入注册码 (19191919), 注册名(simonyan). 点选OK后, 会出现要求重启动软件.
在这里你也可以跟一下, 看他怎样处理的注册码, 注册名.
我跟踪了以后, 发现他运算出四个值, 分别为REGCODE, (=假码每位加2). SEARCHID1(=假码每位加1再反转)
SEARCHID2=(假码每位加3再反转) , SEARCHID3=(假码每位加5再反转)
再将注册名, 及以上值存入注册表.
二: 关闭软件后, 加载SOFTICE, 下断点bpx regqueryvalueexa do “d *(esp+8)”
因我们已知道注册码存入注册表, 就先用注册表断点吧!!
启动程序后, 断下, 按F12到45B019停. 这时显示的值并不是与我们要的值有关, 继续按F5, 这时在数据窗口出现
regusername字样, 再按F12到程序领空.
这时停在40b03c, 按F10走到40b045时, D ECX可看见注册名 “simonyan”, ECX的值为11c7ac8.
这时我们可下断点bpm 11c7ac8.
三: 这时按F5走, 可看见SEARCHID1, 再按F5两次可看见下面一段算法. 再将算出的值, 与SEARCHID1比较.
相等则将一个全局变量给值1.
如一直按F5则可看现SEARCHID2, SEARCHID3, REGCODE与算法结果比较。但最后又将全局变量值改为0
表明这些都是陷阱。
四: 我们可一直跟到出现程序菜单后, 到以下位置:
出现最后一次比较:
* Possible StringData Ref from Data Obj ->"EZ Extract Resource 1.45"
|
:0040CD9E 68C4FC4700 push 0047FCC4
:0040CDA3 E860680300 call 00443608
:0040CDA8 51 push ecx
:0040CDA9 8D542418 lea edx, dword ptr [esp+18]
:0040CDAD 8BCC mov ecx, esp
:0040CDAF 8964242C mov dword ptr [esp+2C], esp
:0040CDB3 52 push edx
:0040CDB4 E8D66A0300 call 0044388F
:0040CDB9 51 push ecx
:0040CDBA C68424CC01000010 mov byte ptr [esp+000001CC], 10
:0040CDC2 8BCC mov ecx, esp
:0040CDC4 89642418 mov dword ptr [esp+18], esp
:0040CDC8 57 push edi
:0040CDC9 E8C16A0300 call 0044388F
:0040CDCE 8BCE mov ecx, esi
:0040CDD0 C68424CC0100000F mov byte ptr [esp+000001CC], 0F
:0040CDD8 E893070000 call 0040D570 (关键CALL)
* Possible StringData Ref from Data Obj ->"help.chm"
|
:0040CDDD 68B8FC4700 push 0047FCB8
:0040CDE2 8986D0000000 mov dword ptr [esi+000000D0], eax (赋全局变量值)
:0040CDE8 E82C080200 call 0042D619
:0040CDED 83C404 add esp, 00000004
:0040CDF0 8BCE mov ecx, esi
:0040CDF2 89868C000000 mov dword ptr [esi+0000008C], eax
:0040CDF8 E863030000 call 0040D160
:0040CDFD 8BB654020000 mov esi, dword ptr [esi+00000254]
五: 现在我们可以跟入CALL中分析算法: (如下)
算法部分:
* Referenced by a CALL at Addresses:
|:0040CAF7 , :0040CB6E , :0040CBE5 , :0040CC63 , :0040CDD8
|
:0040D570 6AFF push FFFFFFFF
:0040D572 6840394600 push 00463940
:0040D577 64A100000000 mov eax, dword ptr fs:[00000000]
:0040D57D 50 push eax
:0040D57E 64892500000000 mov dword ptr fs:[00000000], esp
:0040D585 81ECD0000000 sub esp, 000000D0
:0040D58B C78424D800000000000000 mov dword ptr [esp+000000D8], 00000000
:0040D596 8B8424E0000000 mov eax, dword ptr [esp+000000E0]
:0040D59D 68D4404800 push 004840D4
:0040D5A2 50 push eax
:0040D5A3 C781C400000001000000 mov dword ptr [ebx+000000C4], 00000001
:0040D5AD E8A7FC0100 call 0042D259
:0040D5B2 83C408 add esp, 00000008
:0040D5B5 85C0 test eax, eax
:0040D5B7 0F8432010000 je 0040D6EF
:0040D5BD 8B8C24E4000000 mov ecx, dword ptr [esp+000000E4]
:0040D5C4 68D4404800 push 004840D4 (此处用 D ECX可看见实际输入的假码19191919)
:0040D5C9 51 push ecx
:0040D5CA E88AFC0100 call 0042D259
:0040D5CF 83C408 add esp, 00000008
:0040D5D2 85C0 test eax, eax
:0040D5D4 0F8415010000 je 0040D6EF
:0040D5DA 8B9424E0000000 mov edx, dword ptr [esp+000000E0]
:0040D5E1 53 push ebx
:0040D5E2 56 push esi
:0040D5E3 33C9 xor ecx, ecx
:0040D5E5 8B72F8 mov esi, dword ptr [edx-08]
:0040D5E8 C644240868 mov [esp+08], 68
:0040D5ED 85F6 test esi, esi
:0040D5EF C644240975 mov [esp+09], 75
:0040D5F4 C644240A79 mov [esp+0A], 79
:0040D5F9 C644240B64 mov [esp+0B], 64
:0040D5FE C644240C6F mov [esp+0C], 6F
:0040D603 C644240D6E mov [esp+0D], 6E
:0040D608 C644240E67 mov [esp+0E], 67
:0040D60D C644240F00 mov [esp+0F], 00
:0040D612 7E3F jle 0040D653
:0040D614 55 push ebp
:0040D615 57 push edi
:0040D616 8D7C3417 lea edi, dword ptr [esp+esi+17]
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0040D64F(C)
|
:0040D61A 8B8424F0000000 mov eax, dword ptr [esp+000000F0] (EAX 中的值为注册名)
:0040D621 BD07000000 mov ebp, 00000007 (这几句作用是注册名超过7位后,又得第一个开始)
:0040D626 8A1C01 mov bl, byte ptr [ecx+eax]
:0040D629 8BC1 mov eax, ecx
:0040D62B 99 cdq
:0040D62C F7FD idiv ebp
:0040D62E 0FBEC3 movsx eax, bl (EAX值为注册名第N个字符值)=a
:0040D631 8BD9 mov ebx, ecx
:0040D633 0FBE541410 movsx edx, byte ptr [esp+edx+10] (ESP+10)的值为字符 “huydong”
:0040D638 03DA add ebx, edx (取第N个固定字符值+N-1)=b
:0040D63A 03C3 add eax, ebx (a+b)=c
:0040D63C BB09000000 mov ebx, 00000009
:0040D641 03C6 add eax, esi (esi为注册名长度)+c=d
:0040D643 99 cdq
:0040D644 F7FB idiv ebx
:0040D646 80C230 add dl, 30
:0040D649 41 inc ecx (ECX+1)
:0040D64A 8817 mov byte ptr [edi], dl (除9余数+30)=(注册名长度-N+1)位注册码
:0040D64C 4F dec edi
:0040D64D 3BCE cmp ecx, esi
:0040D64F 7CC9 jl 0040D61A (小于注册名长度跳回运算)
:0040D651 5F pop edi
:0040D652 5D pop ebp
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0040D612(C)
|
:0040D653 8D464D lea eax, dword ptr [esi+4D] (注册名长度+4D)
:0040D656 B909000000 mov ecx, 00000009
:0040D65B 99 cdq
:0040D65C F7F9 idiv ecx
:0040D65E 8B8424EC000000 mov eax, dword ptr [esp+000000EC]
:0040D665 80C230 add dl, 30 (最后一位注册码)
:0040D668 88543410 mov byte ptr [esp+esi+10], dl
后面有一个与假码比对过程, 就不写了.
六: 整理算法如下:
算法分析如下:
J=len(注册名)
I<=J
S(I)=注册名第I位字符
D(I)=”huydong”第I位字符, 如注册名大于7, 则又从第一位开始
经过J次循环
则SN(J-I+1)= CHR(((S(I)+D(I)+J+I-1) MOD 9)+30h)
最后一位注册码为 SN(J+1)=CHR(((J+4Dh) mod 9)+30h)
可能很凌乱, 请大家谅解!!!!
相关视频
相关阅读 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条评论>>