超级屏捕3.0
一个很方便的屏幕捕捉软件,功能比较强大。虽然12月10号才发布3.0版,可是网上关于它的注册机已经是满天飞了,呵呵,有点恐怖,那些共享软件的作者没的活了。别人都已经写出注册机了,我还破它干什么啊,没关系,我只是为了练习使用ollybdg这个特棒的调试软件而已。想像一下,一遍听着mp3,一遍破着软件,什么纸啊,笔啊都不需要,那种感觉有多奇妙啊,一个字,爽!!!
好了,废话少说,开始动手了,come on。
运行ollydbg,load超级屏捕3.0 ,装载完毕后,ollydbg自己就中断下来了,此时,屏幕共分四个窗口,左上角是汇编区,右上角是寄存器区,左下角是内存区,右下角是什么呢,我也不太清楚,不知道谁能告诉我。
哦,忘了说了,超级屏捕是用vc++写的,没有加壳,呵呵,作者好大方啊!!
好了,破解开始了,在左上角点鼠标右键,在弹出的菜单中选择查找->所有参考文本字符串。ollydbg打开一个新窗口,哇哈,满板的英文,眼睛都看花了。没关系,点鼠标右键,选择search
for text,弹出一个对话框,在对话框中输入Incomplete or incorrect Registration-Number. Please
input again! 当然,你可以不用输这么多,一部分就可以了。对话框中还有两个选项,一个是区分大小写,一个是全范围查找,自己看着办拉。然后点确定,找到后,程序会将光标停在那一行上,如果不是你想要的那句话,就安ctrl+l继续查找,知道找到为止。好了,找到那句话后,在那一行上面点鼠标右键,选择toggle
breakpoint或这按F2设置断点。现在关闭这个窗口,回到ollydbg的主界面,点击调试菜单,选择运行,或者直接按F9运行程序。
现在出现超级屏捕的注册画面,随便填入一些注册码,然后点击确定,程序被ollydbg中断,光标停留在我门设的那个断点上,如下:
004200D0 .>SUB ESP,8D4
004200D6 .>XOR EAX,EAX
004200D8 .>PUSH EBX
004200D9 .>MOV EBX,ECX
004200DB .>PUSH EDI
004200DC .>MOV ECX,8
004200E1 .>LEA EDI,DWORD PTR SS:[ESP+8]
004200E5 .>PUSH 20
004200E7 .>REP STOS DWORD PTR ES:[EDI]
004200E9 .>LEA EAX,DWORD PTR SS:[ESP+C]
004200ED .>MOV ECX,EBX
004200EF .>PUSH EAX
004200F0 .>PUSH 48D
004200F5 .>CALL SUPERCAP.004934BE
004200FA .>TEST EAX,EAX
004200FC .>JE SUPERCAP.00420188
00420102 .>PUSH SUPERCAP.004DFBCC //ASCII "SC30"
00420107 .>LEA ECX,DWORD PTR SS:[ESP+C]
0042010B .>PUSH 1
0042010D .>PUSH ECX
0042010E .>LEA EDX,DWORD PTR DS:[EBX+248]
00420114 .>PUSH 1
00420116 .>PUSH EDX
00420117 .>CALL SUPERCAP.0041EE30 //这个就是关键计算对比call了,决定你的命运如何,进去看看
0042011C .>ADD ESP,14
0042011F .>TEST EAX,EAX
//看注册成功与否
00420121 .>JE SHORT SUPERCAP.00420188 //发现是这个跳,让我们voer了,呵呵,不跳就注册成功,当然程序在后面还会有一个校验,不管它了,向上看
00420123 .>LEA EAX,DWORD PTR SS:[ESP+28]
00420127 .>PUSH ESI
00420128 .>PUSH EAX
00420129 .>CALL SUPERCAP.0041A880
0042012E .>LEA EDI,DWORD PTR SS:[ESP+10]
00420132 .>OR ECX,FFFFFFFF
00420135 .>XOR EAX,EAX
00420137 .>LEA EDX,DWORD PTR SS:[ESP+1CC]
0042013E .>REPNE SCAS BYTE PTR ES:[EDI]
00420140 .>NOT ECX
00420142 .>SUB EDI,ECX
00420144 .>MOV EAX,ECX
00420146 .>MOV ESI,EDI
00420148 .>MOV EDI,EDX
0042014A .>SHR ECX,2
0042014D .>REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]
0042014F .>MOV ECX,EAX
00420151 .>AND ECX,3
00420154 .>REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]
00420156 .>LEA ECX,DWORD PTR SS:[ESP+30]
0042015A .>PUSH ECX
0042015B .>CALL SUPERCAP.0041A8C0
00420160 .>MOV ECX,DWORD PTR DS:[EBX+268]
00420166 .>ADD ESP,8
00420169 .>PUSH 0
0042016B .>PUSH 40
0042016D .>PUSH SUPERCAP.004E28BC //ASCII "Registe Ok!"发现这里有句注册成功的话,向下看看
00420172 .>CALL SUPERCAP.0041C660
00420177 .>MOV ECX,EBX
00420179 .>CALL SUPERCAP.0048FFC4
0042017E .>POP ESI
0042017F .>POP EDI
00420180 .>POP EBX
00420181 .>ADD ESP,8D4
00420187 .>RETN
//这里程序就返回上一级了,所以再向上找,看是那个跳转跳过了此断代码
00420188 >>MOV ECX,DWORD PTR DS:[EBX+268]
0042018E .>PUSH 0
00420190 .>PUSH 10
00420192 .>PUSH SUPERCAP.004E2878 //ASCII "Incomplete
or incorrect Registration-Number. Please input again!" 第一次被ollydbg中断时,光标停留在这里,下面的call就是秀出注册失败的画面,所以向上看,寻找可跳过这些代码的跳转
00420197 .>CALL SUPERCAP.0041C660
0042019C .>POP EDI
0042019D .>POP EBX
0042019E .>ADD ESP,8D4
004201A4 .>RETN
好了,我们00420117 CALL SUPERCAP.0041EE30这个call上下断,重新运行一遍程序,程序被中断下来,此时看看右上角的窗口,看到了什么,呵呵,你的假码和你的注册码,好,按F7跟进去,来到如下地方:
0041EE30 /$>SUB ESP,80
0041EE36 |.>MOV ECX,8
0041EE3B |.>XOR EAX,EAX
0041EE3D |.>PUSH EBX
0041EE3E |.>PUSH ESI
0041EE3F |.>PUSH EDI
0041EE40 |.>LEA EDI,DWORD PTR SS:[ESP+6C]
0041EE44 |.>REP STOS DWORD PTR ES:[EDI]
0041EE46 |.>MOV ECX,8
0041EE4B |.>LEA EDI,DWORD PTR SS:[ESP+2C]
0041EE4F |.>REP STOS DWORD PTR ES:[EDI]
0041EE51 |.>MOV ECX,8
0041EE56 |.>LEA EDI,DWORD PTR SS:[ESP+4C]
0041EE5A |.>REP STOS DWORD PTR ES:[EDI]
0041EE5C |.>MOV ECX,8
0041EE61 |.>LEA EDI,DWORD PTR SS:[ESP+C]
0041EE65 |.>REP STOS DWORD PTR ES:[EDI]
0041EE67 |.>MOV EAX,DWORD PTR SS:[ESP+94]
0041EE6E |.>TEST EAX,EAX
0041EE70 |.>JE SHORT SUPERCAP.0041EE89
0041EE72 |.>MOV ECX,DWORD PTR SS:[ESP+90]
0041EE79 |.>LEA EAX,DWORD PTR SS:[ESP+C]
0041EE7D |.>PUSH EAX
0041EE7E |.>PUSH ECX
0041EE7F |.>CALL SUPERCAP.0041EC20 //此call是将机器ID中的“-”去掉
0041EE84 |.>ADD ESP,8
0041EE87 |.>JMP SHORT SUPERCAP.0041EEB1
上面这一段代码就是将你的机器码中的“-”去掉,没必要关心它是怎么做到的,继续往下走,程序跳到这里:
0041EEB1 |>>MOV EAX,DWORD PTR SS:[ESP+9C]
0041EEB8 |.>TEST EAX,EAX
0041EEBA |.>JE SHORT SUPERCAP.0041EED3
0041EEBC |.>MOV EDX,DWORD PTR SS:[ESP+98] //取输入的注册码放到edx
0041EEC3 |.>LEA ECX,DWORD PTR SS:[ESP+2C]
0041EEC7 |.>PUSH ECX
0041EEC8 |.>PUSH EDX
0041EEC9 |.>CALL SUPERCAP.0041EC20 //此call跟上面一样,去掉输入注册码中的“-” ,所以到这里我们就知道,注册码的形式为XXXX-XXXX-XXXX-XXXX
0041EECE |.>ADD ESP,8
0041EED1 |.>JMP SHORT SUPERCAP.0041EEFB
这段代码告诉我们注册码的形式为XXXX-XXXX-XXXX-XXXX ,没什么有价值的信息,继续往下走,跳到这里:
0041EEFB |>>MOV EDI,DWORD PTR SS:[ESP+A0] //SUPERCAP.004DFBCC
0041EF02 |.>OR ECX,FFFFFFFF
0041EF05 |.>XOR EAX,EAX
0041EF07 |.>LEA EDX,DWORD PTR SS:[ESP+4C]
0041EF0B |.>REPNE SCAS BYTE PTR ES:[EDI]
0041EF0D |.>NOT ECX
0041EF0F |.>SUB EDI,ECX
0041EF11 |.>MOV EAX,ECX
0041EF13 |.>MOV ESI,EDI
0041EF15 |.>MOV EDI,EDX
0041EF17 |.>LEA EDX,DWORD PTR SS:[ESP+6C]
0041EF1B |.>SHR ECX,2
0041EF1E |.>REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]
0041EF20 |.>MOV ECX,EAX
0041EF22 |.>LEA EAX,DWORD PTR SS:[ESP+C] //将去掉-的机器ID放到eax
0041EF26 |.>AND ECX,3
0041EF29 |.>REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]
0041EF2B |.>LEA ECX,DWORD PTR SS:[ESP+4C] //将“SC30”放到ecx
0041EF2F |.>PUSH ECX
0041EF30 |.>PUSH 0
0041EF32 |.>PUSH EDX
0041EF33 |.>PUSH 0
0041EF35 |.>PUSH EAX
0041EF36 |.>CALL SUPERCAP.0041ED50 //此call将机器ID作一些变换,然后据此计算注册码,要写注册机就跟进去!!!
0041EF3B |.>ADD ESP,14
0041EF3E |.>LEA ESI,DWORD PTR SS:[ESP+2C]//esi中放有错误的注册码,已经去掉“-”
0041EF42 |.>LEA EAX,DWORD PTR SS:[ESP+6C]//eax中放有正确的注册码,已经去掉“-”
0041EF46 |>>MOV DL,BYTE PTR DS:[EAX]//正确注册码第一位放到dl
0041EF48 |.>MOV BL,BYTE PTR DS:[ESI]//错误注册码第一位放到bl
0041EF4A |.>MOV CL,DL //正确注册码第一位放到cl
0041EF4C |.>CMP DL,BL //比较注册码的第一位
0041EF4E |.>JNZ SHORT SUPERCAP.0041EF7F //不对就去死
0041EF50 |.>TEST CL,CL //看cl是不是为空
0041EF52 |.>JE SHORT SUPERCAP.0041EF6A //cl为空,对比结束,否则继续
0041EF54 |.>MOV DL,BYTE PTR DS:[EAX+1] //正确注册码的eax+1位放到
0041EF57 |.>MOV BL,BYTE PTR DS:[ESI+1] //错误注册码的esi+1位放到
0041EF5A |.>MOV CL,DL //dl的值放到cl
0041EF5C |.>CMP DL,BL //对比注册码,BL
0041EF5E |.>JNZ SHORT SUPERCAP.0041EF7F //不相等就去死
0041EF60 |.>ADD EAX,2 //eax加2
0041EF63 |.>ADD ESI,2 //esi加2
0041EF66 |.>TEST CL,CL //看cl是不是空
0041EF68 |.>JNZ SHORT SUPERCAP.0041EF46 //cl不为空就跳,否则对比结束
0041EF6A |>>XOR EAX,EAX
0041EF6C |.>XOR ECX,ECX
0041EF6E |.>TEST EAX,EAX
0041EF70 |.>SETE CL
0041EF73 |.>POP EDI
0041EF74 |.>POP ESI
0041EF75 |.>MOV EAX,ECX
0041EF77 |.>POP EBX
0041EF78 |.>ADD ESP,80
0041EF7E |.>RETN
只要注册码的话,到这里就达到目的了,不过我还想看看它的算法,进入
0041EF36 |.>CALL SUPERCAP.0041ED50这个call,
来到这里:
0041ED50 /$>SUB ESP,28
0041ED53 |.>XOR EAX,EAX
0041ED55 |.>XOR ECX,ECX
0041ED57 |.>MOV DWORD PTR SS:[ESP+14],EAX
0041ED5B |.>MOV DWORD PTR SS:[ESP],ECX
0041ED5F |.>MOV DWORD PTR SS:[ESP+18],EAX
0041ED63 |.>MOV DWORD PTR SS:[ESP+4],ECX
0041ED67 |.>MOV DWORD PTR SS:[ESP+1C],EAX
0041ED6B |.>MOV DWORD PTR SS:[ESP+8],ECX
0041ED6F |.>MOV DWORD PTR SS:[ESP+20],EAX
0041ED73 |.>MOV DWORD PTR SS:[ESP+C],ECX
0041ED77 |.>MOV BYTE PTR SS:[ESP+24],AL
0041ED7B |.>MOV EAX,DWORD PTR SS:[ESP+30]
0041ED7F |.>PUSH ESI
0041ED80 |.>PUSH EDI
0041ED81 |.>TEST EAX,EAX
0041ED83 |.>MOV BYTE PTR SS:[ESP+18],CL
0041ED87 |.>LEA EDX,DWORD PTR SS:[ESP+8]
0041ED8B |.>JE SHORT SUPERCAP.0041ED9D
0041ED8D |.>MOV EAX,DWORD PTR SS:[ESP+34]
0041ED91 |.>PUSH EDX
0041ED92 |.>PUSH EAX
0041ED93 |.>CALL SUPERCAP.0041EC20
0041ED98 |.>ADD ESP,8
0041ED9B |.>JMP SHORT SUPERCAP.0041EDBE
0041ED9D |>>MOV EDI,DWORD PTR SS:[ESP+34]
0041EDA1 |.>OR ECX,FFFFFFFF
0041EDA4 |.>XOR EAX,EAX
0041EDA6 |.>REPNE SCAS BYTE PTR ES:[EDI]
0041EDA8 |.>NOT ECX
0041EDAA |.>SUB EDI,ECX
0041EDAC |.>MOV EAX,ECX
0041EDAE |.>MOV ESI,EDI
0041EDB0 |.>MOV EDI,EDX
0041EDB2 |.>SHR ECX,2
0041EDB5 |.>REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]
0041EDB7 |.>MOV ECX,EAX
0041EDB9 |.>AND ECX,3
0041EDBC |.>REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]
0041EDBE |>>MOV EAX,DWORD PTR SS:[ESP+44] //eax中存放这“SC30”
0041EDC2 |.>LEA ECX,DWORD PTR SS:[ESP+1C]
0041EDC6 |.>LEA EDX,DWORD PTR SS:[ESP+8] //edx中存放着去掉“-”的机器码0041EDCA
|.>PUSH ECX
0041EDCB |.>PUSH EDX
0041EDCC |.>PUSH EAX
0041EDCD |.>CALL SUPERCAP.0041EAE0 //此call就是计算注册码的算法call了
0041EDD2 |.>MOV EAX,DWORD PTR SS:[ESP+4C]
0041EDD6 |.>ADD ESP,C
0041EDD9 |.>TEST EAX,EAX
0041EDDB |.>JE SHORT SUPERCAP.0041EDFA
0041EDDD |.>MOV ECX,DWORD PTR SS:[ESP+3C]
0041EDE1 |.>LEA EDX,DWORD PTR SS:[ESP+1C]
0041EDE5 |.>PUSH ECX
0041EDE6 |.>PUSH EDX
0041EDE7 |.>CALL SUPERCAP.0041EBF0
0041EDEC |.>ADD ESP,8
0041EDEF |.>MOV EAX,1
0041EDF4 |.>POP EDI
0041EDF5 |.>POP ESI
0041EDF6 |.>ADD ESP,28
0041EDF9 |.>RETN
好,快要到核心了,继续,进入到0041EDCD |.>CALL SUPERCAP.0041EAE0这个call,如下:
0041EAE0 /$>SUB ESP,84
0041EAE6 |.>PUSH EBP
0041EAE7 |.>PUSH ESI
0041EAE8 |.>MOV ESI,DWORD PTR SS:[ESP+90]//SS:[ESP+90]存放着“SC30”
0041EAEF |.>TEST ESI,ESI
0041EAF1 |.>JE SUPERCAP.0041EBE5
0041EAF7 |.>MOV EBP,DWORD PTR SS:[ESP+94]//SS:[ESP+94]存放着机器码
0041EAFE |.>TEST EBP,EBP
0041EB00 |.>JE SUPERCAP.0041EBE5
0041EB06 |.>MOV EAX,DWORD PTR SS:[ESP+98]//SS:[ESP+98]存放着什么啊,不知道,全是00
0041EB0D |.>TEST EAX,EAX
0041EB0F |.>JE SUPERCAP.0041EBE5
0041EB15 |.>PUSH EBX
0041EB16 |.>PUSH EDI
0041EB17 |.>MOV EAX,2
0041EB1C |.>LEA EDX,DWORD PTR SS:[ESP+54]
0041EB20 |.>MOV ECX,F24
0041EB25 |>>LEA EDI,DWORD PTR DS:[EAX+2]
0041EB28 |.>ADD EDX,4
0041EB2B |.>IMUL EDI,EAX
0041EB2E |.>ADD EDI,ECX
0041EB30 |.>ADD ECX,E4
0041EB36 |.>INC EAX
0041EB37 |.>MOV DWORD PTR DS:[EDX-4],EDI
0041EB3A |.>LEA EDI,DWORD PTR DS:[EAX-2]
0041EB3D |.>CMP EDI,10
0041EB40 |.>JB SHORT SUPERCAP.0041EB25//从0041eb25处到这里的循环不知道是干什么的,谁跟我说说,谢谢!!
0041EB42 |.>XOR EBX,EBX
0041EB44 |.>XOR EDX,EDX
0041EB46 |.>MOV EDI,ESI
0041EB48 |.>SUB ESI,EBP
0041EB4A |.>LEA ECX,DWORD PTR SS:[ESP+14]
0041EB4E |.>LEA EAX,DWORD PTR SS:[EBP+1]
0041EB51 |.>MOV DWORD PTR SS:[ESP+10],ESI
0041EB55 |>>MOVSX ESI,BYTE PTR DS:[EAX-1] //此处向下开始将机器ID做变换,此时,DS:[EAX-1]中存放的是机器码的第一个字符,将它送到ESI
0041EB59 |.>MOVSX EBP,BYTE PTR DS:[EDI]//DS:[EDI]中存放着“SC30”的第一个字符,将它送到EBP
0041EB5C |.>ADD ESI,EBP //“S”加上机器码的第DS:[EAX-1]个字符,结果送到ESI
0041EB5E |.>ADD EDI,2 //EDI加2,EDI中存放着“SC30”
0041EB61 |.>MOVSX EBP,BYTE PTR DS:[EAX]//机器码的第DS:[eax]字符送到EBP,第一遍经过此行是,是机器码的第二个字符
0041EB64 |.>MOV DWORD PTR DS:[ECX],ESI//ESI的值送到DWORD PTR DS:[ECX]
0041EB66 |.>MOV ESI,DWORD PTR SS:[ESP+10]//将SS:[ESP+10]的值即8C送到ESI
0041EB6A |.>ADD ECX,4 //ECX加4
0041EB6D |.>MOVSX ESI,BYTE PTR DS:[ESI+EAX]//将EAX寄存器中的值加上ESI即加上8C,和送到ESI,执行完此命令后,ESI的值为43,即字符“C”
0041EB71 |.>ADD ESI,EBP //EBP的值即机器码第DS:[eax]字符的16进制数加上43,和存放到ESI
0041EB73 |.>ADD EAX,2 //EAX加2
0041EB76 |.>MOV DWORD PTR DS:[ECX+1C],ESI //ESI的值送到DS:[ECX+1C]
0041EB79 |.>MOV EBP,DWORD PTR DS:[ECX-4] //DS:[ECX+4]的值,即机器码第DS:[EAX-1]个字符加“SC30”的第DS:[EDI]个字符的和,送到EBP
0041EB7C |.>ADD ESI,EDX //EDX的值加上ESI,和送到ESI
0041EB7E |.>ADD ESI,EBP //EPD的值加上ESI,和送到ESI
0041EB80 |.>MOV EBP,ESI //ESI的值送到EBP
0041EB82 |.>IMUL EBP,ESI //EBP*ESI,积放在EBP
0041EB85 |.>ADD EBX,EBP //EBX+EBP,和放在EBX
0041EB87 |.>INC EDX //EDX加1
0041EB88 |.>CMP EDX,8 //EDX与8作比较
0041EB8B |.>JB SHORT SUPERCAP.0041EB55 //EDX小于8就跳,从0041eb55处到此是将机器ID做变换的代码。总结一下它的算法,设机器码为J,暂且将它从高到低的每一位设为J0,J1,J2,J3,J4,J5,J6,J7,J8,J9,Ja,Jb,Jc,Jd,Je,Jf,将他们作如下计算:
((J1+C)+(J0+S))^2+((J3+0+1)+(J2+3))^2+((J5+2)+J4)^2+((J7+3)+J6)^2+((J9+4)+J8)^2
+((Jb+5)+Ja)^2+((Jd+6)+Jc)^2+((Jf+7)+Je)^2
最后的结果存放到EBX,后面会用到!!
0041EB8D |.>MOV EDI,DWORD PTR SS:[ESP+A0]
0041EB94 |.>MOV ECX,1 //用1初始化ECX
0041EB99 |.>XOR ESI,ESI //ESI清零
0041EB9B |>>MOV EAX,ECX //ECX的值送到EAX,这里向下开始计算正确注册码
0041EB9D |.>MOV EBP,DWORD PTR SS:[ESP+ESI+14]//SS:[ESP+ESI+14]的值送到EBP,此处SS:[ESP+ESI+14]里放的是什么东东,谁能告诉我???
0041EBA1 |.>IMUL EAX,ECX //EAX*ECX,实际上就是求ECX的平方,积送到EAX
0041EBA4 |.>ADD EAX,EBP //EAX加EBP,和送到EAX
0041EBA6 |.>MOV EBP,DWORD PTR SS:[ESP+ESI+54]//SS:[ESP+ESI+54]的值送到EBP,此处SS:[ESP+ESI+54]里放的是什么东东,谁能告诉我???
0041EBAA |.>IMUL EAX,EBX //EAX*EBX,此处的EBX就是上面根据机器码计算出来的数
0041EBAD |.>AND EAX,FF //EAX加FF,实际上就是保留EAX的低8位,其它位清零
0041EBB2 |.>XOR EDX,EDX //EDX清零
0041EBB4 |.>ADD EAX,EBP //EAX加EBP,和送到EAX
0041EBB6 |.>MOV EBP,1A //将1A送到EBP
0041EBBB |.>DIV EBP //EAX整除EBP,余数送到EDX
0041EBBD |.>ADD ESI,4 //ESI加4
0041EBC0 |.>MOV AL,DL //将DL的值送到AL,实际上就是将余数送到EAX
0041EBC2 |.>MOV DWORD PTR SS:[ESP+ESI+10],EDX//EDX的值送到
SS:[ESP+ESI+10]
0041EBC6 |.>ADD AL,41 //AL加41,这就是我们的注册码
0041EBC8 |.>MOV BYTE PTR DS:[EDI+ECX-1],AL//AL的值送到DS:[EDI+ECX-1]
0041EBCC |.>INC ECX //ECX加1
0041EBCD |.>LEA EDX,DWORD PTR DS:[ECX-1]//DS:[ECX-1]的值送到EDX
0041EBD0 |.>CMP EDX,10 //EDX与10作比较
0041EBD3 |.>JB SHORT SUPERCAP.0041EB9B //EDX小于16就继续循环,从0041eb9b到此处是根据上面换后的机器ID计算正确注册码的代码。
上面这段代码循环16次后,就完全计算出了正确的注册码,注册码放在EDI中,由于有两个东东不知到是什么东西,所以呢,算法就不好总结了,相信大家一看就明白了,很简单的算法。不知哪位大哥能告诉我那两个东西是什么。
讲了这么多废话,终于将它的注册算法说完了,还请大家指出其中的错误,让小弟我更上一层楼,在此谢谢了!!
最后还要说一点废话:
如果你还想注册一遍的话,请用ultraedit打开软件目录下的scconfig30.cfg这个文件,在偏移量为00000190h附近,存放着你的注册码,将它全部改为0就又可以注册了,如果你嫌太麻烦,干脆就将这个文件删了,不过这样你的个性设置也没有了!
唉,破这个软件只费了10分钟还不到,写它的破解过程却花了我一下午的时间,累死我了,希望大家喜欢我写的文章。 :)
Cracker:Turkey/灭害灵
2001.12.20@20:37
欢迎转载,请保持其完整性!
- 标 题:用ollydbg破解就是爽,贴出超级屏捕的破解过程和算法分析,请大家多多指教!! (15千字)
- 作 者:turkey99
- 时 间:2001-12-20 20:43:27
- 链 接:http://bbs.pediy.com