PC Lockup V 9.3 破解笔记
PC Lockup 是一个太好太好的软件了,好的不知道怎么形容~,
它的最新版本是 v 9.3
官方主页: http://www.softheap.com/wlock.html
用PEiD查无壳, 为 Delphi编写,呵呵,喜欢啊,用DeDe加载,处理过后在 过程里找到
单元名 NagScr ,事件为RegisterBtnClick或者是OkBtnClic,因为程序在启动的时候弹出一个注册框,其中有一个Register按钮,这个按钮关联的就是RegisterBtnClick事件,还有一个Ok按钮,这个也可以起到注册的作用,它关联的是OkBtnClick事件,我没学过Delphi,不知道这样说对不对??
双击这两个事件中的任何一个事件你都可以找到这个代码:
* Reference to : TAboutBox.Proc_0049C44C()
0049CF5D E8EAF4FFFF call 0049C44C 所有的秘密都在这个call里
0049CF62 84C0 test al, al
0049CF64 740C jz 0049CF72 跳走就注册失败
其实你用w32dasm反汇编也行。你想到了暴破?你可以试试,不过我试了,好像不行,
740C => 750C ,可能程序加了自校验,改了后无法运行。
我用OD加载这个主程序, Ctrl+G ,然后输入 0049CF5D,到了这个代码处,按下F2.
这个就是上面我们点了Register 这个按钮而设的,如果你点OK,请设另外一个。
F9运行,输入注册码 123456789abcdefg (共16位,我乱输的,后来才知道必须为14位)
点Register,被OD拦下,到我们刚设断的地方,然后我们跟进 0049C44C
0049C44C /$ 55 push ebp
0049C44D |. 8BEC mov ebp,esp
0049C44F |. B9 06000000 mov ecx,6
0049C454 |> 6A 00 /push 0
0049C456 |. 6A 00 |push 0
0049C458 |. 49 |dec ecx
0049C459 |.^ 75 F9 \jnz short newadmin.0049C454
0049C45B |. 51 push ecx
0049C45C |. 53 push ebx
0049C45D |. 56 push esi
0049C45E |. 8BF0 mov esi,eax ; 把eax的值给esi
0049C460 |. 33C0 xor eax,eax ; eax清零
0049C462 |. 55 push ebp
0049C463 |. 68 CBC54900 push newadmin.0049C5CB
0049C468 |. 64:FF30 push dword ptr fs:[eax]
0049C46B |. 64:8920 mov dword ptr fs:[eax],esp
0049C46E |. 8D55 F4 lea edx,dword ptr ss:[ebp-C]
0049C471 |. 8B86 40030000 mov eax,dword ptr ds:[esi+340]
0049C477 |. E8 A4C5FAFF call newadmin.00448A20 ; 取注册码长度送入eax
0049C47C |. 8B45 F4 mov eax,dword ptr ss:[ebp-C] ; 这是我们输入的注册码
0049C47F |. 8D55 F8 lea edx,dword ptr ss:[ebp-8]
0049C482 |. E8 E1F2FCFF call newadmin.0046B768 ; 查有注册码有没有$字符????没仔细看,我说错了?
0049C487 |. 8B55 F8 mov edx,dword ptr ss:[ebp-8] ; 假码入edx
0049C48A |. B8 E4ED4B00 mov eax,newadmin.004BEDE4
0049C48F |. E8 4C83F6FF call newadmin.004047E0 ;
0049C494 |. E8 FBFDFFFF call newadmin.0049C294 ; 检查注册码是否正确,呵呵,Let’s Trace Into…
0049C499 |. 8BD8 mov ebx,eax
0049C49B |. 84DB test bl,bl
0049C49D |. 0F84 D9000000 je newadmin.0049C57C ; 一跳就完了!
0049C4A3 |. C686 68030000 01 mov byte ptr ds:[esi+368],1 ;下面是对我们输入的注册码进行加密,然后保存在注册表
0049C4AA |. 8D45 FC lea eax,dword ptr ss:[ebp-4]
0049C4AD |. 50 push eax
0049C4AE |. 8D55 F0 lea edx,dword ptr ss:[ebp-10]
0049C4B1 |. B8 E4C54900 mov eax,newadmin.0049C5E4 ; ASCII "BF8A83B980"
0049C4B6 |. E8 2102FDFF call newadmin.0046C6DC ; Trace Into
0049C4BB |. 8B45 F0 mov eax,dword ptr ss:[ebp-10] ; ss:[ebp-10]就是我们刚刚算得的结果52.67.6E.54.6D RgnTm
0049C4BE |. 50 push eax
0049C4BF |. 8D55 EC lea edx,dword ptr ss:[ebp-14]
0049C4C2 |. B8 F8C54900 mov eax,newadmin.0049C5F8 ; ASCII "BE828B999A8C9F88B1A0848E9F829E828B99B1A9BFA0BFBEB5"
0049C4C7 |. E8 1002FDFF call newadmin.0046C6DC ; 和上面那个字符串调用同一个模块
0049C4CC |. 8B55 EC mov edx,dword ptr ss:[ebp-14] ; faint,结果是这个?Software\Microsoft\DRMRSX
0049C4CF |. A1 ECED4B00 mov eax,dword ptr ds:[4BEDEC]
0049C4D4 |. 59 pop ecx ; 把那个运算结果给ecx RgnTm
0049C4D5 |. E8 FA34FDFF call newadmin.0046F9D4
0049C4DA |. 8D55 E8 lea edx,dword ptr ss:[ebp-18]
0049C4DD |. A1 E4ED4B00 mov eax,dword ptr ds:[4BEDE4] ; 这个是我们输入的假码
0049C4E2 |. E8 5901FDFF call newadmin.0046C640 这个Call就是加密我们注册码的算法,你千万别跟^_^要死人的
0049C4E7 |. 8B45 E8 mov eax,dword ptr ss:[ebp-18];ss:[ebp-18]是加密注册码后的字符串,再说一遍,那个算法可别跟啊~_*
0049C4EA |. 50 push eax
0049C4EB |. 8D55 E4 lea edx,dword ptr ss:[ebp-1C]
0049C4EE |. B8 34C64900 mov eax,newadmin.0049C634 ; ASCII "BF9D9FAE999E"
0049C4F3 |. E8 E401FDFF call newadmin.0046C6DC
0049C4F8 |. 8B45 E4 mov eax,dword ptr ss:[ebp-1C]
0049C4FB |. 50 push eax
0049C4FC |. 8D45 E0 lea eax,dword ptr ss:[ebp-20]
0049C4FF |. 50 push eax
0049C500 |. B8 F8C54900 mov eax,newadmin.0049C5F8 ; ASCII "BE828B999A8C9F88B1A0848E9F829E828B99B1A9BFA0BFBEB5"
0049C505 |. 5A pop edx
0049C506 |. E8 D101FDFF call newadmin.0046C6DC
0049C50B |. 8B55 E0 mov edx,dword ptr ss:[ebp-20]
0049C50E |. A1 ECED4B00 mov eax,dword ptr ds:[4BEDEC]
0049C513 |. 59 pop ecx
0049C514 |. E8 FB35FDFF call newadmin.0046FB14
0049C519 |. 837D FC 00 cmp dword ptr ss:[ebp-4],0
0049C51D |. 75 46 jnz short newadmin.0049C565
0049C51F |. E8 8CE6F6FF call newadmin.0040ABB0
0049C524 |. 83C4 F8 add esp,-8
0049C527 |. DD1C24 fstp qword ptr ss:[esp]
0049C52A |. 9B wait
0049C52B |. 8D45 DC lea eax,dword ptr ss:[ebp-24]
0049C52E |. E8 E903FDFF call newadmin.0046C91C
0049C533 |. 8B45 DC mov eax,dword ptr ss:[ebp-24]
0049C536 |. 50 push eax
0049C537 |. 8D55 D8 lea edx,dword ptr ss:[ebp-28]
0049C53A |. B8 E4C54900 mov eax,newadmin.0049C5E4 ; ASCII "BF8A83B980"
0049C53F |. E8 9801FDFF call newadmin.0046C6DC
0049C544 |. 8B45 D8 mov eax,dword ptr ss:[ebp-28]
0049C547 |. 50 push eax ; 这个是键的名称:“RgnTm",它是注册码和“BF8483B980"经过一个加密算法得到的
0049C548 |. 8D45 D4 lea eax,dword ptr ss:[ebp-2C]
0049C54B |. 50 push eax
0049C54C |. B8 F8C54900 mov eax,newadmin.0049C5F8 ; ASCII "BE828B999A8C9F88B1A0848E9F829E828B99B1A9BFA0BFBEB5"
0049C551 |. 5A pop edx
0049C552 |. E8 8501FDFF call newadmin.0046C6DC
0049C557 |. 8B55 D4 mov edx,dword ptr ss:[ebp-2C]
0049C55A |. A1 ECED4B00 mov eax,dword ptr ds:[4BEDEC]
0049C55F |. 59 pop ecx
0049C560 |. E8 AF35FDFF call newadmin.0046FB14
0049C565 |> 8D55 D0 lea edx,dword ptr ss:[ebp-30]
0049C568 |. B8 4CC64900 mov eax,newadmin.0049C64C ; ASCII "M_THANKS"
0049C56D |. E8 1A5CFFFF call newadmin.0049218C
0049C572 |. 8B45 D0 mov eax,dword ptr ss:[ebp-30]
0049C575 |. E8 DA5FFFFF call newadmin.00492554
0049C57A |. EB 1F jmp short newadmin.0049C59B
0049C57C |> B8 E4ED4B00 mov eax,newadmin.004BEDE4
0049C581 |. E8 0682F6FF call newadmin.0040478C
0049C586 |. 8D55 CC lea edx,dword ptr ss:[ebp-34]
0049C589 |. B8 60C64900 mov eax,newadmin.0049C660 ; ASCII "M_BADCODE"
0049C58E |. E8 F95BFFFF call newadmin.0049218C
0049C593 |. 8B45 CC mov eax,dword ptr ss:[ebp-34]
0049C596 |. E8 B95FFFFF call newadmin.00492554
0049C59B |> 33C0 xor eax,eax
0049C59D |. 5A pop edx
0049C59E |. 59 pop ecx
0049C59F |. 59 pop ecx
0049C5A0 |. 64:8910 mov dword ptr fs:[eax],edx
0049C5A3 |. 68 D2C54900 push newadmin.0049C5D2
0049C5A8 |> 8D45 CC lea eax,dword ptr ss:[ebp-34]
0049C5AB |. BA 0A000000 mov edx,0A
0049C5B0 |. E8 FB81F6FF call newadmin.004047B0
0049C5B5 |. 8D45 F4 lea eax,dword ptr ss:[ebp-C]
0049C5B8 |. E8 CF81F6FF call newadmin.0040478C
0049C5BD |. 8D45 F8 lea eax,dword ptr ss:[ebp-8]
0049C5C0 |. BA 02000000 mov edx,2
0049C5C5 |. E8 E681F6FF call newadmin.004047B0
0049C5CA \. C3 retn
我们来到0049C494 处的call newadmin.0049C294
0049C294 /$ 53 push ebx
0049C295 |. 56 push esi
0049C296 |. 57 push edi
0049C297 |. BF E4ED4B00 mov edi,newadmin.004BEDE4
0049C29C |. 33F6 xor esi,esi
0049C29E |. 33DB xor ebx,ebx
0049C2A0 |. 8B07 mov eax,dword ptr ds:[edi]
0049C2A2 |. E8 9D87F6FF call newadmin.00404A44
0049C2A7 |. 83F8 0E cmp eax,0E ; 是不是14位?
0049C2AA |. 75 67 jnz short newadmin.0049C313 ; 不相等就跳走了,而且下面会将eax,ebx清零,那可惨喽
0049C2AC |. 8B07 mov eax,dword ptr ds:[edi] ; 在这里我把假码改成3456789abcdefg了
0049C2AE |. 8038 35 cmp byte ptr ds:[eax],35 ; 第一位是不是5?呵呵,在这里把第一位改成5了。
0049C2B1 |. 0F94C0 sete al ; 相等,就置al为真即01
0049C2B4 |. 83E0 7F and eax,7F ; 和7F相与
0049C2B7 |. 03F0 add esi,eax ; 与的结果和esi相加=》esi
0049C2B9 |. 8B07 mov eax,dword ptr ds:[edi] ; 假码入eax
0049C2BB |. 8078 02 32 cmp byte ptr ds:[eax+2],32 ; 第三位数是2吗?在这里我们把第三位改为2
0049C2BF |. 0F94C0 sete al ; 如果是的话就置在al里,即al-01
0049C2C2 |. 83E0 7F and eax,7F ; 置后的和7F相与,结果为1
0049C2C5 |. 03F0 add esi,eax ; 与的结果和esi相加=》esi
0049C2C7 |. 8B07 mov eax,dword ptr ds:[edi] ; 假码入eax
0049C2C9 |. 8078 03 31 cmp byte ptr ds:[eax+3],31 ; 第四位数是1吗?我们改成1
0049C2CD |. 0F94C0 sete al ; 如果是就置al=01
0049C2D0 |. 83E0 7F and eax,7F ; 置后的和7F相与,结果为1
0049C2D3 |. 03F0 add esi,eax ; 与的结果和esi相加=》esi
0049C2D5 |. 8B07 mov eax,dword ptr ds:[edi] ; 假码入eax
0049C2D7 |. 8078 04 39 cmp byte ptr ds:[eax+4],39 ; 第五位数是9吗?我们改成9
0049C2DB |. 0F94C0 sete al
0049C2DE |. 83E0 7F and eax,7F
0049C2E1 |. 03F0 add esi,eax
0049C2E3 |. 8B07 mov eax,dword ptr ds:[edi]
0049C2E5 |. 8078 07 30 cmp byte ptr ds:[eax+7],30 ; 第八位数是0吗?我们改成0
0049C2E9 |. 0F94C0 sete al
0049C2EC |. 83E0 7F and eax,7F
0049C2EF |. 03F0 add esi,eax
0049C2F1 |. 8B07 mov eax,dword ptr ds:[edi]
0049C2F3 |. 8078 08 35 cmp byte ptr ds:[eax+8],35 ; 第九位数是5吗?我们改成5
0049C2F7 |. 0F94C0 sete al
0049C2FA |. 83E0 7F and eax,7F
0049C2FD |. 03F0 add esi,eax
0049C2FF |. 8B07 mov eax,dword ptr ds:[edi]
0049C301 |. 8078 0A 33 cmp byte ptr ds:[eax+A],33 ; 第十一位数是3吗?我们改成3
0049C305 |. 0F94C0 sete al
0049C308 |. 83E0 7F and eax,7F
0049C30B |. 03F0 add esi,eax
0049C30D |. 83FE 07 cmp esi,7 ; 其中的七个数是不是都确定完了。是的置bl01=>eax
0049C310 |. 0F94C3 sete bl
0049C313 |> 8BC3 mov eax,ebx
0049C315 |. 5F pop edi
0049C316 |. 5E pop esi
0049C317 |. 5B pop ebx
0049C318 \. C3 retn
好,到此注册码就出来了,只要满足上面几个条件就行啦~
注册信息保存在
HKLM\SOFTWARE\Micorsoft\DRMRSX
"AbrQwhtx"="38218~9081143634"
"RgnTm"="38218~9374005671"
"RprCts"="D8DFDFDCD4DBDADDD88CDE8E89888B8A"
这都是经过一定的算法加密的,第三个是把你的注册码加密后的值
加密的算法好变态~ :D
注册成功后,键值的计算算法:
0046C70E |> /8D45 F8 /lea eax,dword ptr ss:[ebp-8]
0046C711 |. |50 |push eax
0046C712 |. |8D57 01 |lea edx,dword ptr ds:[edi+1]
0046C715 |. |B9 02000000 |mov ecx,2
0046C71A |. |8B45 FC |mov eax,dword ptr ss:[ebp-4]
0046C71D |. |E8 7A85F9FF |call newadmin.00404C9C
0046C722 |. |8B45 F8 |mov eax,dword ptr ss:[ebp-8] ; 第一次取BF,第二次取8A
0046C725 |. |E8 36F2FFFF |call newadmin.0046B960
0046C72A |. |E8 09FFFFFF |call newadmin.0046C638 ; 简单的运算
0046C72F |. |8BD8 |mov ebx,eax ; 最终结果放到eax,然后转到ebx保存
0046C731 |. |8D45 F4 |lea eax,dword ptr ss:[ebp-C]
0046C734 |. |8BD3 |mov edx,ebx
0046C736 |. |E8 3182F9FF |call newadmin.0040496C ; 走了一遍,没发现啥子
0046C73B |. |8B55 F4 |mov edx,dword ptr ss:[ebp-C]
0046C73E |. |8BC6 |mov eax,esi
0046C740 |. |E8 0783F9FF |call newadmin.00404A4C
0046C745 |. |83C7 02 |add edi,2 ; edi+=2
0046C748 |> |8B45 FC mov eax,dword ptr ss:[ebp-4] ; 第二次的字符串到eax
0046C74B |. |E8 F482F9FF |call newadmin.00404A44 ; 取字符串的长度并送入eax
0046C750 |. |3BF8 |cmp edi,eax
0046C752 |.^\7C BA \jl short newadmin.0046C70E
------------------------------------------------------- 0046C72A处的Call---------------------------
0046C638 /$ F6D0 not al ; 取反
0046C63A |. 34 ED xor al,0ED ; 和ED异或
0046C63C |. F6D0 not al ; 再取反
0046C63E \. C3 retn
-------------------------------------------------------------------------------------------------------------------
:D :D :D
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)