破解作者
yzez[DFCG][BCG][FCG]
破解对象
豪杰屏幕录像机 V2.0.1
软件介绍
豪杰屏幕录像机 V2.0.1
软件大小: 2123 KB
软件语言: 简体中文
软件类别: 国产软件 / 共享版 / 图像捕捉
应用平台: Win9x/NT/2000/XP
界面预览: 无
加入时间: 2003-12-14 15:54:16
下载次数: 10930
推荐等级:
“课件制作”的全新突破,跟踪录制屏幕上所有区域的动作和键盘、鼠标的声音,可保存为EXE,AVI
,GIF和HSR格式,编码速度快,高保真,也常被应用进行计算机监控管理。
录制/保存/播放功能 可以录制全屏幕,活动窗口,固定区域,指定区域的屏幕动作,包括鼠标的声音和
键盘的声音,然后保存为EXE,AVI,GIF,HSR四种格式,保存完后可以进行播放。
后期编辑功能 可以对HSR格式的文件进行后期的编辑,编辑内容包括对文件每一帧添加图板说明,删除帧
,添加声音,合并两个以上的HSR文件。
设置功能 可以在录制过程中设置是否要添加时间显示,添加标题,添加图板说明,鼠标是否显示以及显
示形式,对视音频编码的设置,快捷键设置等。
浮动窗口的切换 可以在原始窗口和浮动窗口之间进行切换,方便操作。
下载地址:
http://www.skycn.com/soft/12856.html
破解目的
不为破解而破解,只为技术而破解!
破解工具
OLLYDBG1.09
破解过程
无壳,反汇编找不到有用信息,我倒!打开豪杰屏幕录像机,我输入用户名:yzez,试验码:1234-56
78-9009-8765,当然是注册失败了,不用管它,直接退出程序。第二步用OD载入程序,下断:BPX Messag
eboxA,按N次F9和F2后,直到我们看到输入的用户名为止。看下面:
00413C01 CALL DWORD PTR DS:[<&KERNEL32.lstrlen>****在这里开始出现用户名,所以我们停止F9,改按F8!
00413C07 MOV EBX, EAX*****************************EAX存放用户名的位数,这里是4位,移入EBX中
00413C09 CMP EBX, 200*****************************比较EBX与200
00413C0F JBE SHORT Coursewa.00413C23**************低于就跳!
00413C11 MOV ECX, 80
00413C16 LEA EDI, DWORD PTR SS:[ESP+10]
00413C1A MOV EBX, 200
00413C1F REP MOVS DWORD PTR ES:[EDI], DWORD P>
00413C21 JMP SHORT Coursewa.00413C2F
00413C23 LEA EAX, DWORD PTR SS:[ESP+10]***********跳到这里!
00413C27 PUSH ESI String2 = "yzez"***************用户名入栈
00413C28 PUSH EAX ; |String1 = NULL
00413C29 CALL DWORD PTR DS:[<&KERNEL32.lstrcpy>; lstrcpyA
00413C2F MOV EAX, EBX ****************************再把用户名的位数移入EAX
00413C31 CDQ******************************************EDX清0
00413C32 AND EDX, 3*******************************与运算!
00413C35 ADD EAX, EDX*****************************EAX=4+0=4
00413C37 MOV EDI, EAX*****************************值移入EDI
00413C39 SAR EDI, 2*******************************右移两位,EDI的值是1
00413C3C TEST BL, 3********************************位数与3比较
00413C3F JE SHORT Coursewa.00413C42**************相等则跳!
00413C41 INC EDI**********************************EDI加1
00413C42 XOR ECX, ECX*****************************ECX清0
00413C44 TEST EBX, EBX*****************************测试EBX的值!
00413C46 JLE SHORT Coursewa.00413C5F**************小于等于就跳
00413C48 MOV DL, BYTE PTR SS:[ESP+ECX+10]*********用户名的第一位y的ASCII码值79移入DL
00413C4C PUSH EDX
00413C4D PUSH ECX
00413C4E CALL Coursewa.00413BC0 *******************算法CALL(1),按F7跟进!代码直接贴在下面!
======================================================================================
算法CALL(1)的代码:
00413BC0 PUSH EBP
00413BC1 MOV EBP, ESP
00413BC3 PUSH EBX
00413BC4 MOV AL, BYTE PTR SS:[EBP+8]***赋AL的初始值是0
00413BC7 MOV BL, BYTE PTR SS:[EBP+C]***y的ASCII码值79移入BL
00413BCA TEST BL, 0C3*******************与0C3比较!
00413BCD JPE SHORT Coursewa.00413BD0***为偶转移!
00413BCF STC
00413BD0 RCR BL, 1*********************带进位右循环移位指令,右移1位,结果是:3C
00413BD2 DEC AL************************AL减1
00413BD4 JNZ SHORT Coursewa.00413BCA***循环!
00413BD6 MOV BYTE PTR SS:[EBP+C], BL***最后 的结果:3C保存!
00413BD9 MOV AL, BYTE PTR SS:[EBP+C]****再把结果移入AL
00413BDC POP EBX ; Coursewa.00413C53
00413BDD POP EBP ; Coursewa.00413C53
00413BDE RETN*******************************返回!
===========================================================================================
00413C53 ADD ESP, 8
00413C56 MOV BYTE PTR SS:[ESP+ECX+10], AL**把上述运算的结果3C保存
00413C5A INC ECX***************************ECX加1
00413C5B CMP ECX, EBX**********************ECX与EBX比较!
00413C5D JL SHORT Coursewa.00413C48*******小于就跳回,循环,循环结束后得到一组值:3C、3D、99、4F
00413C5F XOR ESI, ESI**********************ESI清0
00413C61 TEST EDI, EDI**********************测试EDI的值,EDI的值是1
00413C63 JLE SHORT Coursewa.00413C81*******小于等于就跳!
00413C65 MOV EBX, DWORD PTR SS:[ESP+ESI*4+10>**把上面运算得到的值倒过来,连接起来就是:4F993D3C移入EBX
00413C69 MOV EAX, ESI*************************赋EAX的初始值为0
00413C6B AND EAX, 1F
00413C6E ADD EBP, EBX*************************EBP的初始值是0,EBP=0+4F993D3C
00413C70 PUSH EAX
00413C71 PUSH EBP
00413C72 CALL Coursewa.00413C90
00413C77 ADD ESP, 8
00413C7A INC ESI
00413C7B CMP ESI, EDI
00413C7D MOV EBP, EAX
00413C7F JL SHORT Coursewa.00413C65
00413C81 POP EDI
00413C82 MOV EAX, EBP
00413C84 POP ESI
00413C85 POP EBP
00413C86 POP EBX
00413C87 ADD ESP, 200
00413C8D RETN************************************返回指令,返回到:00413A1C
00413A1C ADD ESP, 4**************************返回到这里!F8往下!
00413A1F MOV DWORD PTR SS:[ESP+8], EAX*******保存上面用户名计算的值:4F993D3C
00413A23 XOR ESI, ESI************************ESI清0
00413A25 MOVSX EAX, BYTE PTR SS:[ESP+ESI+8]****第一次把最后一组值:3C扩展到EAX
00413A2A CMP EAX, 41*************************与41比较
00413A2D JL SHORT Coursewa.00413A37*********小于就跳!
00413A2F CMP EAX, 5A
00413A32 JG SHORT Coursewa.00413A37
00413A34 ADD EAX, 20
00413A37 PUSH EAX******************************跳到这里!3C入栈!
00413A38 CALL Coursewa.00413CB0****************算法CALL(2),按F7跟进!代码直接在下面给出!
====================================================================================
算法CALL(2)的代码:
00413CB0 MOV EAX, DWORD PTR SS:[ESP+4]********3C移入EAX
00413CB4 AND EAX, 7F**************************与运算!与7F相与,结果是3C
00413CB7 CMP EAX, 41**************************与41比较
00413CBA JL SHORT Coursewa.00413CC3**********小于就跳走!
00413CBC CMP EAX, 5A**************************与5A比较
00413CBF JG SHORT Coursewa.00413CC3**********大于就跳走!
00413CC1 OR AL, 20***************************与20相或!
00413CC3 CMP EAX, 6F**************************与6F比较
00413CC6 JNZ SHORT Coursewa.00413CD4**********不相等就跳走!
00413CC8 MOV EAX, 90**************************90移入EAX
00413CCD XOR EAX, 0E**************************EAX=EAX XOR 0E
00413CD0 OR AL, 31***************************AL与31相或!
00413CD2 JMP SHORT Coursewa.00413CB4
00413CD4 CMP EAX, 30**************************与30比较
00413CD7 JNZ SHORT Coursewa.00413CE5**********不相等则跳
00413CD9 MOV EAX, 0CF************************* 0CF移入EAX
00413CDE XOR EAX, 0E***************************EAX=EAX XOR 0E
00413CE1 OR AL, 31****************************AL与31相或!
00413CE3 JMP SHORT Coursewa.00413CB4
00413CE5 CMP EAX, 61***************************与61比较!
00413CE8 JL SHORT Coursewa.00413CEF***********小于就跳!
00413CEA CMP EAX, 7A***************************与7A比较!
00413CED JLE SHORT Coursewa.00413D00***********小于等于就跳!
00413CEF CMP EAX, 31 **************************与31比较!
00413CF2 JL SHORT Coursewa.00413CF9***********小于就跳!
00413CF4 CMP EAX, 39***************************与39比较!
00413CF7 JLE SHORT Coursewa.00413D00***********小于等于就跳!
00413CF9 XOR EAX, 0E***************************EAX=EAX XOR 0E=3C XOR 0E=32
00413CFC OR AL, 31****************************AL与31相或!32 OR 31=33(3的ASCII码值)
00413CFE JMP SHORT Coursewa.00413CB4
00413D00 RETN *************************************返回!
==========================================================================================
00413A3D ADD ESP, 4
00413A40 MOV BYTE PTR SS:[ESP+ESI+8], AL*******保存第一位运算得到的值:3
00413A44 INC ESI*******************************ESI加1
00413A45 CMP ESI, 4****************************与4比较!
00413A48 JL SHORT Coursewa.00413A25***********小于就跳!这一循环得到第一组注册码:3371
00413A4A MOV EDI, DWORD PTR SS:[ESP+30]********试验码:"1234-5678-9009-8765"移入EDI
00413A4E LEA ECX, DWORD PTR SS:[ESP+8]
00413A52 MOV ESI, EDI
00413A54 XOR EDX, EDX
00413A56 SUB ESI, ECX
00413A58 LEA ECX, DWORD PTR SS:[ESP+EDX+8]
00413A5C MOVSX EAX, BYTE PTR DS:[ESI+ECX]********试验码第一组的第一位1(31)扩展到EAX
00413A60 CMP EAX, 41***************************与41比较!
00413A63 JL SHORT Coursewa.00413A6D***********小于就跳
00413A65 CMP EAX, 5A***************************与5A比较!
00413A68 JG SHORT Coursewa.00413A6D***********大于就跳!
00413A6A ADD EAX, 20***************************EAX的值加上20
00413A6D MOVSX ECX, BYTE PTR DS:[ECX]************第一组注册码的第一位3(33)扩展到ECX
00413A70 CMP EAX, ECX**************************比较第一位注册码
00413A72 JNZ Coursewa.00413BAA*****************不相等就跳,跳就失败!所以要继续,把JNZ改成JE
00413A78 INC EDX
00413A79 CMP EDX, 4
00413A7C JL SHORT Coursewa.00413A58************跳回循环,直到第一组的4位注册码比较完!
00413A7E MOV EAX, DWORD PTR SS:[ESP+8]**********第一组注册码倒序排列:31373333移入EAX
00413A82 LEA EDX, DWORD PTR DS:[EAX+EAX*2]******EDX=31373333+31373333*2=93A59999
00413A85 LEA ECX, DWORD PTR DS:[EDX*4+9]********ECX=93A59999*4+9=4E96666D
00413A8C IMUL ECX, EAX***************************ECX=4E96666D*31373333=7CC91EB7
00413A8F MOV DWORD PTR SS:[ESP+C], ECX**********保存这个值
00413A93 XOR ESI, ESI***************************ESI清0
00413A95 MOV DL, BYTE PTR SS:[ESP+ESI+C]********最后一组值B7移入DL
00413A99 PUSH EDX
00413A9A PUSH ESI
00413A9B CALL Coursewa.00413BC0******************调用算法CALL(1),看上面!
00413AA0 AND EAX, 0FF***************************313733DB AND 0FF=DB
00413AA5 PUSH EAX
00413AA6 CALL Coursewa.00413CB0******************调用算法CALL(1),看上面!得到第二组的第一位注册码:75(u的ASCII码值)
00413AAB ADD ESP, 0C
00413AAE MOV BYTE PTR SS:[ESP+ESI+C], AL********保存这个值
00413AB2 INC ESI
00413AB3 CMP ESI, 4
00413AB6 JL SHORT Coursewa.00413A95*****跳回循环,直至算出第二组注册码,最后结果是:u1r1
00413AB8 XOR ECX, ECX
00413ABA MOVSX EAX, BYTE PTR DS:[EDI+ECX+5]**第二组试验码的第一位5(35)扩展到EAX
00413ABF CMP EAX, 41
00413AC2 JL SHORT Coursewa.00413ACC
00413AC4 CMP EAX, 5A
00413AC7 JG SHORT Coursewa.00413ACC
00413AC9 ADD EAX, 20
00413ACC MOVSX EDX, BYTE PTR SS:[ESP+ECX+C]**第二组注册码的第一位:75(u)扩展到ECX
00413AD1 CMP EAX, EDX**********************比较试验码与注册码是否相等
00413AD3 JNZ Coursewa.00413BAA*************不相等就跳!要继续这里也改成JE
00413AD9 INC ECX
00413ADA CMP ECX, 4
00413ADD JL SHORT Coursewa.00413ABA*******跳回循环,直至比较完4位注册码!
00413ADF MOV EAX, DWORD PTR SS:[ESP+C]**********第二组注册码倒序排列:31723175移入EAX
00413AE3 MOV ECX, DWORD PTR SS:[ESP+8]**********第一组注册码倒序排列:31373333移入ECX
00413AE7 MOV EDX, EAX***************************EAX的值移入EDX!
00413AE9 XOR EDX, ECX***************************EDX=31723175 XOR 31373333=00450246
00413AEB INC EDX********************************EDX加1=00450247
00413AEC IMUL EDX, ECX***************************EDX=00450247*31373333=E1749925
00413AEF LEA ECX, DWORD PTR DS:[EAX+EAX*4]******ECX=31723175+31723175*4=F73AF749
00413AF2 LEA EAX, DWORD PTR DS:[EAX+ECX*8]******EAX=31723175+F73AF749*8=EB49EBBD
00413AF5 LEA EAX, DWORD PTR DS:[EAX+EAX*2]******EAX=EB49EBBD+EB49EBBD*2=C1DDC337
00413AF8 ADD EDX, EAX***************************EDX=E1749925+C1DDC337=A3525C5C
00413AFA XOR ESI, ESI
00413AFC MOV DWORD PTR SS:[ESP+10], EDX*********保存EDX的值A3525C5C
00413B00 MOVSX ECX, BYTE PTR SS:[ESP+ESI+10]******把最后两位数值上:5C扩展到ECX中
00413B05 PUSH ECX
00413B06 CALL Coursewa.00413CB0******************调用算法CALL(1),看上面!
00413B0B ADD ESP, 4
00413B0E MOV BYTE PTR SS:[ESP+ESI+10], AL*******得到第三组注册码的第一位:s,保存s
00413B12 INC ESI
00413B13 CMP ESI, 4
00413B16 JL SHORT Coursewa.00413B00************跳回循环,计算出第三组4位注册码:ssr3
00413B18 XOR ECX, ECX
00413B1A MOVSX EAX, BYTE PTR DS:[EDI+ECX+A]*******第三组试验码的第一位:9(39)扩展到EAX
00413B1F CMP EAX, 41
00413B22 JL SHORT Coursewa.00413B2C
00413B24 CMP EAX, 5A
00413B27 JG SHORT Coursewa.00413B2C
00413B29 ADD EAX, 20
00413B2C MOVSX EDX, BYTE PTR SS:[ESP+ECX+10]******第三组注册码的第一位:s(73)扩展到EDX
00413B31 CMP EAX, EDX***************************比较第一个试验码与注册码!
00413B33 JNZ SHORT Coursewa.00413BAA************不相等就跳,一跳就失败!
00413B35 INC ECX
00413B36 CMP ECX, 4
00413B39 JL SHORT Coursewa.00413B1A************跳回循环,直至比较完4位注册码!
00413B3B MOV EAX, DWORD PTR SS:[ESP+C]**********第二组注册码倒序排列:31723175移入EAX
00413B3F MOV ECX, DWORD PTR SS:[ESP+8]**********第一组注册码倒序排列:31373333移入ECX
00413B43 IMUL EAX, ECX***************************EAX=31723175*31373333=9EBD294F
00413B46 LEA EDX, DWORD PTR DS:[EAX*8]**********EDX=9EBD294F*8=F5E94A78
00413B4D SUB EDX, EAX***************************EDX=F5E94A78-9EBD294F=572C2129
00413B4F LEA EAX, DWORD PTR DS:[ECX+ECX*4]******EAX=31373333+31373333*4=F613FFFF
00413B52 ADD EDX, 5*****************************EDX=572C2129+5=572C212E
00413B55 IMUL EDX, DWORD PTR SS:[ESP+10]*********SS:[ESP+10]保存的值是第三组注册码的倒序排列:33727373
*****************************************************EDX=33727373*572C212E=EC3691AA
00413B5A ADD EDX, EAX***************************EDX=EC3691AA+F613FFFF=E24A91A9
00413B5C XOR ESI, ESI
00413B5E MOV DWORD PTR SS:[ESP+14], EDX*********保存E24A91A9
00413B62 MOVSX ECX, BYTE PTR SS:[ESP+ESI+14]******把上述值的最后两位:A9扩展到ECX
00413B67 PUSH ECX
00413B68 CALL Coursewa.00413CB0******************调用算法CALL(1),看上面!
00413B6D ADD ESP, 4
00413B70 MOV BYTE PTR SS:[ESP+ESI+14], AL*******把计算得到的最后一组注册码的第一位:7保存!
00413B74 INC ESI
00413B75 CMP ESI, 4
00413B78 JL SHORT Coursewa.00413B62************跳回循环,计算最后一组注册码,得到:71jb
00413B7A XOR ECX, ECX
00413B7C MOVSX EAX, BYTE PTR DS:[EDI+ECX+F]*******第四组试验码的第一位:8(38)扩展到EAX
00413B81 CMP EAX, 41
00413B84 JL SHORT Coursewa.00413B8E
00413B86 CMP EAX, 5A
00413B89 JG SHORT Coursewa.00413B8E
00413B8B ADD EAX, 20
00413B8E MOVSX EDX, BYTE PTR SS:[ESP+ECX+14]******第四组注册码的第一位:7(37)扩展到EDX
00413B93 CMP EAX, EDX***************************比较试验码与注册码!
00413B95 JNZ SHORT Coursewa.00413BAA************不相等就跳,一跳就失败!
00413B97 INC ECX
00413B98 CMP ECX, 4
00413B9B JL SHORT Coursewa.00413B7C************跳回循环,直至比较完4位注册码!
00413B9D POP EDI ; 0012FA30
00413B9E MOV EAX, 1
00413BA3 POP ESI ; 0012FA30
00413BA4 ADD ESP, 20
00413BA7 RETN 8
算法小结:
软件的算法一环扣一环,先根据用户名计算出第一组注册码,根据第一组注册码计算出第二组注册码,
根据第一组、第二组注册码计算出第三组注册码,根据第一组、第二组、第三组注册码计算出最后一组
注册码。
给一个可用的注册码:用户名:yzez
注册码:3371-u1r1-ssr3-71jb