题目:菜鸟破解《豪杰超级解霸3000英雄版》--注册算法
软件名称:豪杰超级解霸3000英雄版
软件来源:电脑爱好者合订本2003光盘
软件平台: Win9x/Me/NT4/2000
软件简介:
《豪杰超级解霸3000英雄版》化腐朽为神奇,使模糊变清晰!解霸网络版播放器支持在线播放,全面兼容各种格式,新增支持WMV,WMA,ASF,MOV等多种文件,支持DVD导航,支持RM9文件的播放。
《豪杰超级解霸3000英雄版》是豪杰公司在2003年精心制作解霸系列的最新版本,在音视频技术功能上全新提升的更新版本。全新的界面方案,保留豪杰系列软件的方便易用性,并且提高了色彩和美观度。
破解目的:寻找注册码和注册算法
破解难度:相对简单
工具:softice,ollydbg,PEID
引子:
今天借了一个VCD,想休息一下,放松一下,结果用豪杰超级解霸3000英雄版播放的时候,每隔几分钟就善意提醒你注册。不堪其扰,我干脆趁今天晚上干掉它算了。也算是献给看雪论坛坛友的一份新年礼物!:)今天跟朋友出去玩了,晚上回来比较累,但是还是破解了这个软件。这个软件还是不错的,大家可能都知道了:)。该软件的帮助文件里面描述了强大的功能。我这里就不说了:)。软件我破解完了后,才发现最后一个关键地方给出了注册码。不过我是为了追踪算法,不是单纯为了找到注册码的,所以我还是完整地跟踪了下来,希望对菜鸟有启发。下面开始工作吧!希望你耐心看完俺的拙文!!可能比较长,因为算法就是比较长的。
拿出PEID检查一下是否带壳??一看不错,是VC编写的软件,不带壳,比较友善啊:)。下面运行HERO3000,弹出一个提示框,让你输入用户名和注册码,当然注册码的格式是固定的,由四段码组成的。HERO3000是调用的一个专门的注册程序,名字是AuthReg.exe。我输入wanggang, 注册码是1111-2222-3333-4444,当然不包括那个短杠的。Ctrl+D唤出SoftICE, 有大侠建议我用OD,我现在还不上手呢。先用SICE吧。:)希望大侠能够写出用OD破解的文章。下断点bpx hmemcpy,F5返回HERO对话框点击确定按钮,被拦住。大概按8次F12,然后按F10N次,来到下面代码处:
1. 从4023D0到0040243D代码段为读入你输入的假注册码,读用户名则在另外一个地方,40177A的CALL内。总共读取四段注册码。
004023D0 /$ 83EC 40 SUB ESP,40
004023D3 |. 8B0D 28AC4000 MOV ECX,DWORD PTR DS:[40AC28]
004023D9 |. 56 PUSH ESI
004023DA |. 8B35 8C714000 MOV ESI,DWORD PTR DS:[<&USER32.GetWindowTextA>]
004023E0 |. 8D4424 04 LEA EAX,DWORD PTR SS:[ESP+4]
004023E4 |. 6A 08 PUSH 8
004023E6 |. 50 PUSH EAX
004023E7 |. 51 PUSH ECX
004023E8 |. FFD6 CALL ESI //读注册码第一段
004023EA |. A1 24AC4000 MOV EAX,DWORD PTR DS:[40AC24] //我们停在这里。
004023EF |. 8D5424 09 LEA EDX,DWORD PTR SS:[ESP+9]
004023F3 |. 6A 08 PUSH 8
004023F5 |. 52 PUSH EDX
004023F6 |. 50 PUSH EAX
004023F7 |. FFD6 CALL ESI //读注册码第二段
004023F9 |. 8B15 30AC4000 MOV EDX,DWORD PTR DS:[40AC30]
004023FF |. 8D4C24 0E LEA ECX,DWORD PTR SS:[ESP+E]
00402403 |. 6A 08 PUSH 8
00402405 |. 51 PUSH ECX
00402406 |. 52 PUSH EDX
00402407 |. FFD6 CALL ESI //读注册码第三段
00402409 |. 8B0D 2CAC4000 MOV ECX,DWORD PTR DS:[40AC2C]
0040240F |. 8D4424 13 LEA EAX,DWORD PTR SS:[ESP+13]
00402413 |. 6A 08 PUSH 8
00402415 |. 50 PUSH EAX
00402416 |. 51 PUSH ECX
00402417 |. FFD6 CALL ESI //读注册码第四段
00402419 |. 8B15 20AC4000 MOV EDX,DWORD PTR DS:[40AC20]
0040241F |. 68 00010000 PUSH 100
00402424 |. B0 2D MOV AL,2D
00402426 |. 68 60AD4000 PUSH AUTHREG.0040AD60
0040242B |. 52 PUSH EDX
0040242C |. 884424 1E MOV BYTE PTR SS:[ESP+1E],AL
00402430 |. 884424 19 MOV BYTE PTR SS:[ESP+19],AL
00402434 |. 884424 14 MOV BYTE PTR SS:[ESP+14],AL
00402438 |. C64424 23 00 MOV BYTE PTR SS:[ESP+23],0
0040243D |. FFD6 CALL ESI // 把短杠"-"放在注册码的第5,10,15个位置。
0040243F |. 8D4424 04 LEA EAX,DWORD PTR SS:[ESP+4]
00402443 |. 50 PUSH EAX //注册码地址进栈
00402444 |. 68 60AD4000 PUSH AUTHREG.0040AD60 //用户名地址进栈
00402449 |. E8 F20F0000 CALL AUTHREG.00403440 //这个CALL就是根据用户名计算注册码的地方。F8跟入
0040244E |. F7D8 NEG EAX
00402450 |. 1BC0 SBB EAX,EAX
00402452 |. 8D4C24 04 LEA ECX,DWORD PTR SS:[ESP+4]
00402456 |. F7D8 NEG EAX
00402458 |. 51 PUSH ECX
00402459 |. 68 60AD4000 PUSH AUTHREG.0040AD60
0040245E |. A3 20D84000 MOV DWORD PTR DS:[40D820],EAX
00402463 |. E8 38000000 CALL AUTHREG.004024A0 //这个CALL是把注册信息写入注册表内 。里面好象很长!!
00402468 |. 8B4424 50 MOV EAX,DWORD PTR SS:[ESP+50]
0040246C |. 8B0D 44AD4000 MOV ECX,DWORD PTR DS:[40AD44]
00402472 |. 83C4 08 ADD ESP,8
00402475 |. 8D5424 04 LEA EDX,DWORD PTR SS:[ESP+4]
00402479 |. 52 PUSH EDX
0040247A |. 68 30234000 PUSH AUTHREG.00402330
0040247F |. 50 PUSH EAX
00402480 |. 6A 69 PUSH 69
00402482 |. 51 PUSH ECX
00402483 |. FF15 B8714000 CALL DWORD PTR DS:[<&USER32.DialogBoxParamA>] //一开始这个 CALL显示错误信息,如果注册成功,则用这个CALL显示正确信息。实在是妙啊!!!
00402489 |. A1 20D84000 MOV EAX,DWORD PTR DS:[40D820]
0040248E |. 5E POP ESI
0040248F |. 83C4 40 ADD ESP,40
00402492 \. C3 RETN
=============================================
3.我们在00402449 跟入这个函数,代码如下:
00403440 /$ 83EC 20 SUB ESP,20
00403443 |. 33C0 XOR EAX,EAX
00403445 |. B9 08000000 MOV ECX,8
0040344A |. 53 PUSH EBX
0040344B |. 56 PUSH ESI
0040344C |. 57 PUSH EDI
0040344D |. 8D7C24 0C LEA EDI,DWORD PTR SS:[ESP+C]
00403451 |. F3:AB REP STOS DWORD PTR ES:[EDI]
00403453 |. 8B4424 30 MOV EAX,DWORD PTR SS:[ESP+30]
00403457 |. 33FF XOR EDI,EDI
00403459 |. 50 PUSH EAX
0040345A |. E8 D1010000 CALL AUTHREG.00403630 //此CALL对输入的用户名计算,获得计算注册码的初始值。见后面分析。这个就是第一个注册码段的真实值。
0040345F |. 894424 10 MOV DWORD PTR SS:[ESP+10],EAX
00403463 |. 83C4 04 ADD ESP,4
00403466 |> 8D743C 0C /LEA ESI,DWORD PTR SS:[ESP+EDI+C] //此处到00403489是检查输入的假注册码是否是大写字符或空格?
0040346A |. 0FBE06 |MOVSX EAX,BYTE PTR DS:[ESI]
0040346D |. 83F8 41 |CMP EAX,41
00403470 |. 7C 08 |JL SHORT AUTHREG.0040347A
00403472 |. 83F8 5A |CMP EAX,5A
00403475 |. 7F 03 |JG SHORT AUTHREG.0040347A
00403477 |. 83C0 20 |ADD EAX,20 //如果EAX是大写字母,给EAX加20,修正为小写字符。
0040347A |> 50 |PUSH EAX
0040347B |. 47 |INC EDI
0040347C |. E8 7F020000 |CALL AUTHREG.00403700 //此CALL比较每个字符是否是41h,5Ah,6Fh,30h,61h,7Ah,31h,39h,3Fh等,可以看出这些值是比较特殊的字符。
00403481 |. 83C4 04 |ADD ESP,4
00403484 |. 8806 |MOV BYTE PTR DS:[ESI],AL //把变换后的假注册码依次保存起来
00403486 |. 83FF 04 |CMP EDI,4
00403489 |.^7C DB \JL SHORT AUTHREG.00403466 //未完,继续循环。
0040348B |. 33C9 XOR ECX,ECX //ECX为计数器,初始化为0。
0040348D |. 8B7424 34 MOV ESI,DWORD PTR SS:[ESP+34] //此处到004034B3比较真假注册码。
00403491 |> 0FBE040E /MOVSX EAX,BYTE PTR DS:[ESI+ECX] //依次取变换后的用户名字符(真注册码)。
00403495 |. 83F8 41 |CMP EAX,41 //比较是否为41h
00403498 |. 7C 08 |JL SHORT AUTHREG.004034A2
0040349A |. 83F8 5A |CMP EAX,5A //比较是否为5Ah
0040349D |. 7F 03 |JG SHORT AUTHREG.004034A2
0040349F |. 83C0 20 |ADD EAX,20 //如果EAX是大写字母,给EAX加20,修正为小写字符。
004034A2 |> 0FBE540C 0C |MOVSX EDX,BYTE PTR SS:[ESP+ECX+C] //把假注册码字符符号扩展后,依次送入EDX。
004034A7 |. 3BD0 |CMP EDX,EAX //真假注册码进行比较!
004034A9 |. 0F85 2C010000 |JNZ AUTHREG.004035DB //不相等则通向地狱。此处一定用E命令,把你的假注册码修正为计算出来的真注册码。
004034AF |. 41 |INC ECX //ECX为计数器增1。
004034B0 |. 83F9 04 |CMP ECX,4 //比较是否到达4??
004034B3 |.^7C DC \JL SHORT AUTHREG.00403491 //ECX没有到4,继续循环。
004034B5 |. 8B4424 0C MOV EAX,DWORD PTR SS:[ESP+C]
004034B9 |. 33DB XOR EBX,EBX //以下开始计算第二个注册码段。
004034BB |. 8D1480 LEA EDX,DWORD PTR DS:[EAX+EAX*4] //EDX=5*EAX
004034BE |. 8D0450 LEA EAX,DWORD PTR DS:[EAX+EDX*2] //EAX=EDX*2+EAX
004034C1 |. 03C0 ADD EAX,EAX //EAX=EAX*2
004034C3 |. 894424 10 MOV DWORD PTR SS:[ESP+10],EAX //保存这个结果。
004034C7 |> 8D7C1C 10 /LEA EDI,DWORD PTR SS:[ESP+EBX+10] //取前面计算的真注册码的地址
004034CB |. 8A07 |MOV AL,BYTE PTR DS:[EDI] //把第二段依次送入AL。
004034CD |. 50 |PUSH EAX
004034CE |. 53 |PUSH EBX
004034CF |. 43 |INC EBX
004034D0 |. E8 3B010000 |CALL AUTHREG.00403610 //此CALL依次对注册码计算变换,得到第二段注册码。
004034D5 |. 83C4 08 |ADD ESP,8
004034D8 |. 33C9 |XOR ECX,ECX
004034DA |. 8AC8 |MOV CL,AL
004034DC |. 51 |PUSH ECX
004034DD |. E8 1E020000 |CALL AUTHREG.00403700 //此CALL比较每个字符是否是41h,5Ah,6Fh,30h,61h,7Ah,31h,39h,3Fh等,可以看出这些值是比较特殊的字符。
004034E2 |. 83C4 04 |ADD ESP,4
004034E5 |. 8807 |MOV BYTE PTR DS:[EDI],AL //把变换好的值送回原来的位置。
004034E7 |. 83FB 04 |CMP EBX,4
004034EA |.^7C DB \JL SHORT AUTHREG.004034C7 //未完,继续循环。
004034EC |. 33C9 XOR ECX,ECX //计数器清零。
004034EE |> 0FBE440E 05 /MOVSX EAX,BYTE PTR DS:[ESI+ECX+5] //此处到00403511第二段注册码进行比较。
004034F3 |. 83F8 41 |CMP EAX,41
004034F6 |. 7C 08 |JL SHORT AUTHREG.00403500
004034F8 |. 83F8 5A |CMP EAX,5A
004034FB |. 7F 03 |JG SHORT AUTHREG.00403500
004034FD |. 83C0 20 |ADD EAX,20
00403500 |> 0FBE540C 10 |MOVSX EDX,BYTE PTR SS:[ESP+ECX+10]
00403505 |. 3BD0 |CMP EDX,EAX
00403507 |. 0F85 D9000000 |JNZ AUTHREG.004035E6
0040350D |. 41 |INC ECX
0040350E |. 83F9 04 |CMP ECX,4
00403511 |.^7C DB \JL SHORT AUTHREG.004034EE
00403513 |. 8B4424 10 MOV EAX,DWORD PTR SS:[ESP+10] //第二段注册码送EAX
00403517 |. 8B4C24 10 MOV ECX,DWORD PTR SS:[ESP+10] //同时第二段注册码送ECX
0040351B |. 334424 0C XOR EAX,DWORD PTR SS:[ESP+C] //第二段和第一段异或运算。
0040351F |. 33DB XOR EBX,EBX
00403521 |. 83C0 08 ADD EAX,8 //EAX=EAX+8。
00403524 |. 8D1449 LEA EDX,DWORD PTR DS:[ECX+ECX*2] //EDX=3*ECX
00403527 |. 0FAF4424 0C IMUL EAX,DWORD PTR SS:[ESP+C] // EAX=EAX*(第一段注册码)
0040352C |. 03C2 ADD EAX,EDX //EAX=EAX+EDX
0040352E |. 894424 14 MOV DWORD PTR SS:[ESP+14],EAX //EAX保存
00403532 |> 8D7C1C 14 /LEA EDI,DWORD PTR SS:[ESP+EBX+14]
00403536 |. 43 |INC EBX
00403537 |. 0FBE07 |MOVSX EAX,BYTE PTR DS:[EDI]
0040353A |. 50 |PUSH EAX
0040353B |. E8 C0010000 |CALL AUTHREG.00403700 //功能见上面注释。
00403540 |. 83C4 04 |ADD ESP,4
00403543 |. 8807 |MOV BYTE PTR DS:[EDI],AL
00403545 |. 83FB 04 |CMP EBX,4
00403548 |.^7C E8 \JL SHORT AUTHREG.00403532
0040354A |. 33C9 XOR ECX,ECX
0040354C |> 0FBE440E 0A /MOVSX EAX,BYTE PTR DS:[ESI+ECX+A] //下面到00403548 比较第三段注册码!
00403551 |. 83F8 41 |CMP EAX,41
00403554 |. 7C 08 |JL SHORT AUTHREG.0040355E
00403556 |. 83F8 5A |CMP EAX,5A
00403559 |. 7F 03 |JG SHORT AUTHREG.0040355E
0040355B |. 83C0 20 |ADD EAX,20
0040355E |> 0FBE540C 14 |MOVSX EDX,BYTE PTR SS:[ESP+ECX+14]
00403563 |. 3BD0 |CMP EDX,EAX
00403565 |. 0F85 86000000 |JNZ AUTHREG.004035F1
0040356B |. 41 |INC ECX
0040356C |. 83F9 04 |CMP ECX,4
0040356F |.^7C DB \JL SHORT AUTHREG.0040354C
下面开始计算第四段注册码:
00403571 |. 8B4424 10 MOV EAX,DWORD PTR SS:[ESP+10] //第二段送EAX
00403575 |. 8B4C24 14 MOV ECX,DWORD PTR SS:[ESP+14] //第三段送ECX
00403579 |. 0FAF4424 14 IMUL EAX,DWORD PTR SS:[ESP+14] //EAX=EAX*(第三段注册码)
0040357E |. 83C0 05 ADD EAX,5 //EAX=EAX+5
00403581 |. 8D1449 LEA EDX,DWORD PTR DS:[ECX+ECX*2] //EDX=3*ECX
00403584 |. 0FAF4424 0C IMUL EAX,DWORD PTR SS:[ESP+C] // EAX=EAX*(第一段注册码)
00403589 |. 33FF XOR EDI,EDI
0040358B |. 8D0450 LEA EAX,DWORD PTR DS:[EAX+EDX*2] //EAX=EAX+2*EDX
0040358E |. 894424 18 MOV DWORD PTR SS:[ESP+18],EAX //保存EAX。
00403592 |> 8D5C3C 18 /LEA EBX,DWORD PTR SS:[ESP+EDI+18] //下面这个循环处理你输入第四段假注册码。
00403596 |. 47 |INC EDI
00403597 |. 0FBE03 |MOVSX EAX,BYTE PTR DS:[EBX]
0040359A |. 50 |PUSH EAX
0040359B |. E8 60010000 |CALL AUTHREG.00403700
004035A0 |. 83C4 04 |ADD ESP,4
004035A3 |. 8803 |MOV BYTE PTR DS:[EBX],AL
004035A5 |. 83FF 04 |CMP EDI,4
004035A8 |.^7C E8 \JL SHORT AUTHREG.00403592
004035AA |. 33C9 XOR ECX,ECX //下面这个循环进行第四段注册码的比较。
004035AC |> 0FBE440E 0F /MOVSX EAX,BYTE PTR DS:[ESI+ECX+F]
004035B1 |. 83F8 41 |CMP EAX,41
004035B4 |. 7C 08 |JL SHORT AUTHREG.004035BE
004035B6 |. 83F8 5A |CMP EAX,5A
004035B9 |. 7F 03 |JG SHORT AUTHREG.004035BE
004035BB |. 83C0 20 |ADD EAX,20
004035BE |> 0FBE540C 18 |MOVSX EDX,BYTE PTR SS:[ESP+ECX+18]
004035C3 |. 3BD0 |CMP EDX,EAX
004035C5 |. 75 35 |JNZ SHORT AUTHREG.004035FC
004035C7 |. 41 |INC ECX
004035C8 |. 83F9 04 |CMP ECX,4
004035CB |.^7C DF \JL SHORT AUTHREG.004035AC
004035CD |. B8 01000000 MOV EAX,1 //成功注册标志
004035D2 |. 5F POP EDI
*
*略掉10多行
*
004035FC |> 33C0 XOR EAX,EAX //如果失败则EAX清零。:(
004035FE |. 5F POP EDI
004035FF |. 5E POP ESI
00403600 |. 5B POP EBX
00403601 |. 83C4 20 ADD ESP,20
00403604 \. C2 0800 RETN 8
=============================================
4.F8跟踪0040345A处的CALL,代码如下:
00403630 /$ 81EC 00020000 SUB ESP,200
00403636 |. 33C0 XOR EAX,EAX
00403638 |. B9 80000000 MOV ECX,80
0040363D |. 53 PUSH EBX
0040363E |. 56 PUSH ESI
0040363F |. 33DB XOR EBX,EBX
00403641 |. 57 PUSH EDI
00403642 |. 55 PUSH EBP
00403643 |. 8D7C24 10 LEA EDI,DWORD PTR SS:[ESP+10]
00403647 |. F3:AB REP STOS DWORD PTR ES:[EDI]
00403649 |. 8BB424 14020000 MOV ESI,DWORD PTR SS:[ESP+214]
00403650 |. 56 PUSH ESI
00403651 |. FF15 F4704000 CALL DWORD PTR DS:[<&KERNEL32.lstrlenA>] //取用户名串长
00403657 |. 3D 00020000 CMP EAX,200 //与200H比较,相信你用户名不会大于512个字符。
0040365C |. 8BE8 MOV EBP,EAX
0040365E |. 76 12 JBE SHORT AUTHREG.00403672
00403660 |. BD 00020000 MOV EBP,200
00403665 |. 8D7C24 10 LEA EDI,DWORD PTR SS:[ESP+10]
00403669 |. B9 80000000 MOV ECX,80
0040366E |. F3:A5 REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]
00403670 |. EB 0C JMP SHORT AUTHREG.0040367E
00403672 |> 8D4424 10 LEA EAX,DWORD PTR SS:[ESP+10]
00403676 |. 56 PUSH ESI
00403677 |. 50 PUSH EAX
00403678 |. FF15 E4704000 CALL DWORD PTR DS:[<&KERNEL32.lstrcpyA>] //用户名复制到其他地址。
0040367E |> 8BC5 MOV EAX,EBP
00403680 |. 99 CDQ //EDX清零。
00403681 |. 83E2 03 AND EDX,3 //EDX与3相与。
00403684 |. 03C2 ADD EAX,EDX
00403686 |. C1F8 02 SAR EAX,2 //EAX算术右移2位。
00403689 |. F7C5 03000000 TEST EBP,3 //EBP与3相与,改变标志位Z
0040368F |. 8BF0 MOV ESI,EAX
00403691 |. 74 01 JE SHORT AUTHREG.00403694 //如果Z=1跳转。
00403693 |. 46 INC ESI
00403694 |> 33FF XOR EDI,EDI
00403696 |. 85ED TEST EBP,EBP
00403698 |. 7E 17 JLE SHORT AUTHREG.004036B1
0040369A |> 8B443C 10 /MOV EAX,DWORD PTR SS:[ESP+EDI+10]//用户名地址送EAX
0040369E |. 50 |PUSH EAX //用户名地址进栈
0040369F |. 57 |PUSH EDI
004036A0 |. 47 |INC EDI
004036A1 |. E8 6AFFFFFF |CALL AUTHREG.00403610
004036A6 |. 88443C 17 |MOV BYTE PTR SS:[ESP+EDI+17],AL
004036AA |. 83C4 08 |ADD ESP,8
004036AD |. 3BFD |CMP EDI,EBP
004036AF |.^7C E9 \JL SHORT AUTHREG.0040369A //循环处理用户名。
004036B1 |> 33FF XOR EDI,EDI
004036B3 |. 85F6 TEST ESI,ESI
004036B5 |. 7E 1A JLE SHORT AUTHREG.004036D1
004036B7 |> 035CBC 10 /ADD EBX,DWORD PTR SS:[ESP+EDI*4+10]//由用户名转换得到的16进制数累加到EBX内。
004036BB |. 8BC7 |MOV EAX,EDI
004036BD |. 83E0 1F |AND EAX,1F
004036C0 |. 47 |INC EDI
004036C1 |. 50 |PUSH EAX
004036C2 |. 53 |PUSH EBX
004036C3 |. E8 18000000 |CALL AUTHREG.004036E0 //用户名4位一组进行变换。
004036C8 |. 83C4 08 |ADD ESP,8
004036CB |. 8BD8 |MOV EBX,EAX
004036CD |. 3BFE |CMP EDI,ESI
004036CF |.^7C E6 \JL SHORT AUTHREG.004036B7 //循环取下一组用户名
004036D1 |> 8BC3 MOV EAX,EBX
004036D3 |. 5D POP EBP
004036D4 |. 5F POP EDI
004036D5 |. 5E POP ESI
004036D6 |. 5B POP EBX
004036D7 |. 81C4 00020000 ADD ESP,200
004036DD \. C3 RETN
=============================================
后记:
终于用了1个小时跟踪,毕竟是自己独立完成的,我可是没参考任何大侠的文章。我接着趁热打铁用了1个小时写完这个破解教程。感觉这次破解很顺利,如愿以尝了!心里非常高兴!所以写了这篇文章,跟大家分享我的愉快!但我没有骄傲哦!令我感到意外的是,超级解霸的保护也太弱了,与这个大名鼎鼎的软件公司好象不太匹配!不过这是好事啊!没有了保护,就没有了破解!:)希望菜鸟能够从中吸取点什么,我就足矣了!非常感谢您能够耐心看完,毕竟看其他人的文章可能有些不适应的。;)
注册码的分析过程已经很明显了,写注册机那是水到渠成的事情了。我以后会自己练习写的。:)祝菜鸟学习进步!破解愉快!
另外,OD的确不错,显示的注解比较清晰。
总结:
Username : wanggang
Registercode: 7zq3-sqq3-3ydq-tb3r
这个软件在注册表内的HLM\Software\Classes\写入如下键:超级解霸3000等。
完成日期:2006年1月1日凌晨1:30
Qduwg
qduwg@163.com
[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法