• 标 题:Ixis Research LTD 系列软件破解之 二(PC Lockup V9.3)
  • 作 者:cnbragon
  • 时 间:004-08-19,21:59
  • 链 接:http://bbs.pediy.com

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    alal
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"

这都是经过一定的算法加密的,第三个是把你的注册码加密后的值
加密的算法好变态~ 


注册成功后,键值的计算算法:
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
-------------------------------------------------------------------------------------------------------------------