首页
社区
课程
招聘
[原创] 一个 BumpyFlea's CrackMe 的破解分析(总共有5个关卡)(使用了P-Code的编译方式)
发表于: 2007-12-29 14:51 8201

[原创] 一个 BumpyFlea's CrackMe 的破解分析(总共有5个关卡)(使用了P-Code的编译方式)

2007-12-29 14:51
8201

【文章标题】: 一个 BumpyFlea's CrackMe 的破解分析+(总共有5个关卡)+(使用了P-Code的编译方式)
【文章作者】: CuteSnail
【作者QQ号】: 121567771
【作者声明】: 只是感兴趣的自娱自乐,没有其他目的。失误之处还要敬请诸位大侠赐教!
-------------------------------------------------------------------------------
【详细过程】
  
  程序用了VB6的 P-Code 方式编译,因此使用了 VBExplorer 1.1 来静态反编译;使用了 WKTVBDE 4.1 来动态跟踪(从第3关开始):
  
  
  
  
  ||===||
  ||第1关: Remove Me (NAG窗口的爆破),代码见下面的分析:
  ||===||
  
  
  [Form.Load]
  :00404C6C  27FCFE                          LitVar                     ;PushVar LOCAL_0104
  :00404C6F  271CFF                          LitVar                     ;PushVar LOCAL_00E4
  ******Possible String Ref To->"Remove Me"
                                 |
  :00404C72  3A4CFF1400                      LitVarStr                  ;PushVarString ptr_00402920
  :00404C77  4E3CFF                          FStVarCopyObj              ;[LOCAL_00C4]=vbaVarDup(Pop)
  :00404C7A  043CFF                          FLdRfVar                   ;Push LOCAL_00C4
  :00404C7D  F530000000                      LitI4                      ;Push 00000030
  ******Possible String Ref To->"This is a nag, U need to Remove Me"
                                 |
  :00404C82  3A6CFF1500                      LitVarStr                  ;PushVarString ptr_004028D4
  :00404C87  4E5CFF                          FStVarCopyObj              ;[LOCAL_00A4]=vbaVarDup(Pop)
  :00404C8A  045CFF                          FLdRfVar                   ;Push LOCAL_00A4
  **********Reference To->msvbvm60.rtcMsgBox
                                 |
  :00404C8D  0A0D001400                      ImpAdCallFPR4              ;//很明显,就是这里弹出了NAG的对话框!//
  :00404C92  3608005CFF3CFF1C                FFreeVar                   ;Free 0008/2 variants
  :00404C9D  F400                            LitI2_Byte                 ;Push 00
  :00404C9F  21                              FLdPrThis                  ;[SR]=[stack2]
  :00404CA0  0FFC02                          VCallAd                    ;Return the control index 01
  :00404CA3  19F8FE                          FStAdFunc                  ;
  :00404CA6  08F8FE                          FLdPr                      ;[SR]=[LOCAL_0108]
  :后面的代码省略。。。
  
  
  从上面可以知道,00404C8D 处的 ImpAdCallFPR4 命令就是弹出NAG对话框的命名,只要将它跳过,就OK了;而P-Code的jmp/je/jne命令则分别对应是如下:
  
  (正常格式)    (P-Code格式)
  jmp xxXX  <=> Branch xxXX   ;以机器码1E开头; 机器码长度为3,后2位机器码放跳转的长度;  xxXX为跳转地址,xx表示地位,XX表示高位.
  je xxXX   <=> BranchT xxXX  ;以机器码1D开头; 机器码长度为3,其余同上.
  jne xxXX  <=> BranchF xxXX  ;以机器码1C开头; 机器码长度为3,其余同上.
  
  故将上面的:
  :00404C8D  0A0D001400                      ImpAdCallFPR4              ;这里弹出NAG的对话框
  
  这行命令的机器码:“0A0D001400” 用16进制编辑软件(如:010 Editor)定位到地址00404C8D后,
  将其先修改为:    “1E00000000”,然后再用VBExplorer来反编译,便发现该处变为如下的命令了:
  
  :00404C8D  1E0000                          Branch                     ;ESI=00404C6C //注意这句中 ESI 的数值大小
  :00404C90  0000                            LargeBos                   ;被修改的地方,机器码仍然为3+2=5的总长度
  
  从上面可以看到 ESI=00404C6C 这句,而要强制跳转的地方便是紧跟上面语句之后的00404C92处的语句,故用 00404C92 - 00404C6C = 26(十进制38),知道了要跳的长度为16进制的26,因此将上面修改后的机器码“1E00000000”的1E后面的长度 0000 修改为 2600 (26放前面,是因为寄存器中是低位放前面,高位放后面),即变为:“1E26000000”便OK了!运行程序,NAG窗口被爆破了,呵呵。
  
  
  
  
  ||===||
  ||第2关: Level 1 Menu: Password (Password的寻找),代码见下面的分析:
  ||===||
  
  
  [Password.Change]
  :00404D64  0474FF                          FLdRfVar
  :00404D67  21                              FLdPrThis
  :00404D68  0F9003                          VCallAd
  :00404D6B  1978FF                          FStAdFunc
  :00404D6E  0878FF                          FLdPr
  ***********Reference To:[propget]TextBox.Text                   ;得到输入的PassWord
                                |
  :00404D71  0DA0000A00                      VCallHresult               ;Call ptr_00402734
  :00404D76  6C74FF                          ILdRf
  ******Possible String Ref To->"123454321"                       ;//假的注册码
                                 |
  :00404D79  1B1700                          LitStr
  :00404D7C  FB30                            EqStr
  :00404D7E  2F74FF                          FFree1Str
  :00404D81  1A78FF                          FFree1Ad
  :00404D84  1C5400                          BranchF                    ;If Pop=0 then ESI=00404DB8//这里需要跳走
  :00404D87  27F4FE                          LitVar
  :00404D8A  2714FF                          LitVar
  ******Possible String Ref To->"Almost"                          ;//假注册对话框的标题
                                 |
  :00404D8D  3A44FF1800                      LitVarStr
  :00404D92  4E34FF                          FStVarCopyObj
  :00404D95  0434FF                          FLdRfVar
  :00404D98  F500000000                      LitI4
  ******Possible String Ref To->"Nice try. I also Use this number. Unfortunatly it ain't the password."
                                 |                                ;//假注册对话框的内容
  :00404D9D  3A64FF1900                      LitVarStr
  :00404DA2  4E54FF                          FStVarCopyObj
  :00404DA5  0454FF                          FLdRfVar
  **********Reference To->msvbvm60.rtcMsgBox
                                 |
  :00404DA8  0A0D001400                      ImpAdCallFPR4              ;弹出假注册的对话框
  :00404DAD  36080054FF34FF14                FFreeVar
  :00404DB8  0474FF                          FLdRfVar                   ;Push LOCAL_008C
  :00404DBB  21                              FLdPrThis
  :00404DBC  0F9003                          VCallAd
  :00404DBF  1978FF                          FStAdFunc
  :00404DC2  0878FF                          FLdPr
  ***********Reference To:[propget]TextBox.Text                   ;得到输入的PassWord
                                |
  :00404DC5  0DA0000A00                      VCallHresult
  :00404DCA  6C74FF                          ILdRf
  ******Possible String Ref To->"bUmPy FlEa 1799"                 ;真正的PassWord,明码固定的比较
                                 |
  :00404DCD  1B1A00                          LitStr
  :00404DD0  FB30                            EqStr
  :00404DD2  2F74FF                          FFree1Str
  :00404DD5  1A78FF                          FFree1Ad
  :00404DD8  1CA800                          BranchF                    ;If Pop=0 then ESI=00404E0C//关键比较,不能跳走
  :00404DDB  27F4FE                          LitVar
  :00404DDE  2714FF                          LitVar
  ******Possible String Ref To->"Congratz"                        ;//成功的注册对话框的标题
                                 |
  :00404DE1  3A44FF1B00                      LitVarStr
  :00404DE6  4E34FF                          FStVarCopyObj
  :00404DE9  0434FF                          FLdRfVar  
  :00404DEC  F500000000                      LitI4  
  ******Possible String Ref To->"Congradulations. You found the correct Password"
                                 |                                ;//成功的注册对话框的内容
  :00404DF1  3A64FF1C00                      LitVarStr
  :00404DF6  4E54FF                          FStVarCopyObj
  :00404DF9  0454FF                          FLdRfVar
  **********Reference To->msvbvm60.rtcMsgBox
                                 |
  :00404DFC  0A0D001400                      ImpAdCallFPR4              ;弹出成功的注册对话框
  :00404E01  36080054FF34FF14                FFreeVar         
  :00404E0C  0474FF                          FLdRfVar                   ;Push LOCAL_008C
  :00404E0F  21                              FLdPrThis
  :00404E10  0F9003                          VCallAd
  :00404E13  1978FF                          FStAdFunc
  :00404E16  0878FF                          FLdPr
  ***********Reference To:[propget]TextBox.Text                 
                                |
  :00404E19  0DA0000A00                      VCallHresult               ;得到输入的PassWord
  :00404E1E  6C74FF                          ILdRf      
  :00404E21  4A                              FnLenStr
  :00404E22  F519000000                      LitI4
  :00404E27  E0                              GeI4
  :00404E28  2F74FF                          FFree1Str
  :00404E2B  1A78FF                          FFree1Ad
  :00404E2E  1CFE00                          BranchF                    ;If Pop=0 then ESI=00404E62 //PassWord不长,则不提示
  :00404E31  27F4FE                          LitVar
  :00404E34  2714FF                          LitVar  
  ******Possible String Ref To->"Password isn't this long"        
                                 |
  :00404E37  3A44FF1D00                      LitVarStr               ;PassWord太长的提示标题
  :00404E3C  4E34FF                          FStVarCopyObj
  :00404E3F  0434FF                          FLdRfVar   
  :00404E42  F500000000                      LitI4      
  ******Possible String Ref To->"Your Password is a little too long"
                                 |
  :00404E47  3A64FF1E00                      LitVarStr                  ;PassWord太长的提示内容
  :00404E4C  4E54FF                          FStVarCopyObj
  :00404E4F  0454FF                          FLdRfVar
  **********Reference To->msvbvm60.rtcMsgBox
                                 |
  :00404E52  0A0D001400                      ImpAdCallFPR4              ;PassWord太长的提示对话框
  :00404E57  36080054FF34FF14                FFreeVar
  :00404E62  13                              ExitProcHresult            ;
  
  
  从上面的分析,便可以很轻松的得到真正正确的PassWord为:bUmPy FlEa 1799
  然后,开始进入第3关。
  
  
  
  
  ||===||
  ||第3关: Level 1 Menu: Enable Me (启用屏蔽的菜单),见下面的修改:
  ||===||
  
  
  用16进制编辑软件(如:010 Editor)打开该CrackMe后,搜索字符串'Enable Me',找到后,将它后面紧跟的(1BC2处开始)机器码:
  00 05 修改为:
  00 06
  即可!(因为:05=表示禁用; 06=表示启用,呵呵 ;)
  
  
  
  
  ||===||
  ||第4关: Level 2 Menu: Serial Code (注册名/注册码的检测),代码见下面的分析(VBExplorer1.1配合WKTVBDE4.1的分析):
  ||===||
  
  
  [Check.Click]
  :00405220  0002                            LargeBos                   ;IDE beginning of line with 02 byte codes
  :00405222  0005                            LargeBos                   ;IDE beginning of line with 05 byte codes
  :00405224  4BFFFF                          OnErrorGoto
  :00405227  0027                            LargeBos                   ;IDE beginning of line with 27 byte codes
  :00405229  0474FF                          FLdRfVar
  :0040522C  21                              FLdPrThis
  :0040522D  0F2003                          VCallAd
  :00405230  1978FF                          FStAdFunc
  :00405233  0878FF                          FLdPr  
  ***********Reference To:[propget]TextBox.Text
                                |
  :00405236  0DA0000A00                      VCallHresult               ;得到注册名
  :0040523B  6C74FF                          ILdRf
  :0040523E  4A                              FnLenStr                   ;得到其长度
  :0040523F  F506000000                      LitI4                   ;装入数值6
  :00405244  D6                              LeI4
  :00405245  2F74FF                          FFree1Str
  :00405248  1A78FF                          FFree1Ad                   ;与6比较
  :0040524B  1C6400                          BranchF                    ;If Pop=0 then ESI=00405284    //大于跳走
  :0040524E  0033                            LargeBos                   ;IDE beginning of line with 33 byte codes
  :00405250  27F4FE                          LitVar            
  :00405253  2714FF                          LitVar
  ******Possible String Ref To->"Try again"
                                 |
  :00405256  3A44FF0B00                      LitVarStr                  ;注册名长度不符的提示标题
  :0040525B  4E34FF                          FStVarCopyObj
  :0040525E  0434FF                          FLdRfVar
  :00405261  F500000000                      LitI4
  ******Possible String Ref To->"Name must be greater than 6 characters"
                                 |
  :00405266  3A64FF0C00                      LitVarStr               ;注册名长度不符的提示内容
  :0040526B  4E54FF                          FStVarCopyObj
  :0040526E  0454FF                          FLdRfVar
  **********Reference To->msvbvm60.rtcMsgBox
                                 |
  :00405271  0A0D001400                      ImpAdCallFPR4              ;注册名长度不符的提示对话框
  :00405276  36080054FF34FF14                FFreeVar
  :00405281  1EC101                          Branch                  ;跳走,失败
  :00405284  0025                            LargeBos                   ;注册名长度大于6,来到这里:
  :00405286  0474FF                          FLdRfVar
  :00405289  21                              FLdPrThis
  :0040528A  0F1C03                          VCallAd
  :0040528D  1978FF                          FStAdFunc
  :00405290  0878FF                          FLdPr
  ***********Reference To:[propget]TextBox.Text
                                |
  :00405293  0DA0000A00                      VCallHresult               ;得到注册码
  :00405298  6C74FF                          ILdRf  
  ******Possible String Ref To->""
                                 |
  :0040529B  1B0E00                          LitStr
  :0040529E  FB30                            EqStr
  :004052A0  2F74FF                          FFree1Str
  :004052A3  1A78FF                          FFree1Ad                   ;是否为空
  :004052A6  1CBF00                          BranchF                    ;If Pop=0 then ESI=004052DF //不为空,跳走
  :004052A9  0033                            LargeBos
  :004052AB  27F4FE                          LitVar
  :004052AE  2714FF                          LitVar
  ******Possible String Ref To->"Might help"
                                 |
  :004052B1  3A44FF0F00                      LitVarStr                  ;注册码不符的提示标题
  :004052B6  4E34FF                          FStVarCopyObj
  :004052B9  0434FF                          FLdRfVar   
  :004052BC  F500000000                      LitI4
  ******Possible String Ref To->"Please enter a serial code"
                                 |
  :004052C1  3A64FF1000                      LitVarStr                  ;注册码不符的提示内容
  :004052C6  4E54FF                          FStVarCopyObj
  :004052C9  0454FF                          FLdRfVar
  **********Reference To->msvbvm60.rtcMsgBox
                                 |
  :004052CC  0A0D001400                      ImpAdCallFPR4              ;注册码不符的提示对话框
  :004052D1  36080054FF34FF14                FFreeVar
  :004052DC  1EC101                          Branch                     ;跳走,失败
  :004052DF  0041                            LargeBos                   ;注册码符合要求,来到这里//在WKTVBDE中这里下断,F8键跟进://
  :004052E1  0474FF                          FLdRfVar
  :004052E4  21                              FLdPrThis
  :004052E5  0F1C03                          VCallAd
  :004052E8  1978FF                          FStAdFunc
  :004052EB  0878FF                          FLdPr
  ***********Reference To:[propget]TextBox.Text
                                |
  :004052EE  0DA0000A00                      VCallHresult               ;得到注册名
  :004052F3  6C74FF                          ILdRf
  :004052F6  F35243                          LitI2
  :004052F9  FBFD                            CStrUI1                    ;转换为10进制字符码值
  :004052FB  23F0FE                          FStStrNoPop
  :004052FE  080800                          FLdPr
  :00405301  893400                          MemLdI2
  :00405304  FBFD                            CStrUI1                 ;再次转换?
  :00405306  23ECFE                          FStStrNoPop
  :00405309  2A                              ConcatStr                  ;连接字符//得到完全的注册码
  :0040530A  23E8FE                          FStStrNoPop
  :0040530D  FB3D                            NeStr
  :0040530F  320800F0FEECFE74                FFreeStr
  :0040531A  1A78FF                          FFree1Ad                ;关键比较
  :0040531D  1C4D01                          BranchF                    ;If Pop=0 then ESI=0040536D //跳走,成功
  :00405320  0033                            LargeBos
  :00405322  27F4FE                          LitVar
  :00405325  2714FF                          LitVar
  ******Possible String Ref To->"Try again"
                                 |
  :00405328  3A44FF0B00                      LitVarStr                  ;注册码错误提示标题
  :0040532D  4E34FF                          FStVarCopyObj
  :00405330  0434FF                          FLdRfVar
  :00405333  F500000000                      LitI4
  ******Possible String Ref To->"Soz, but that ain't the correct serial"
                                 |
  :00405338  3A64FF1100                      LitVarStr                  ;注册码错误提示内容
  :0040533D  4E54FF                          FStVarCopyObj
  :00405340  0454FF                          FLdRfVar
  **********Reference To->msvbvm60.rtcMsgBox
                                 |
  :00405343  0A0D001400                      ImpAdCallFPR4              ;注册码错误提示对话框
  :00405348  36080054FF34FF14                FFreeVar
  :00405353  0017                            LargeBos
  ******Possible String Ref To->""
                                 |
  :00405355  1B0E00                          LitStr
  :00405358  21                              FLdPrThis
  :00405359  0F1C03                          VCallAd
  :0040535C  1978FF                          FStAdFunc   
  :0040535F  0878FF                          FLdPr
  ***********Reference To:[propput]TextBox.Text
                                |
  :00405362  0DA4000A00                      VCallHresult            ;清空注册码
  :00405367  1A78FF                          FFree1Ad
  :0040536A  1EC101                          Branch                     ;失败,从这里跳走
  :0040536D  0041                            LargeBos                   ;前面成功,便来到这里
  :0040536F  0474FF                          FLdRfVar
  :00405372  21                              FLdPrThis
  :00405373  0F1C03                          VCallAd
  :00405376  1978FF                          FStAdFunc
  :00405379  0878FF                          FLdPr
  ***********Reference To:[propget]TextBox.Text
                                |
  :0040537C  0DA0000A00                      VCallHresult
  :00405381  6C74FF                          ILdRf
  :00405384  F35243                          LitI2
  :00405387  FBFD                            CStrUI1
  :00405389  23F0FE                          FStStrNoPop
  :0040538C  080800                          FLdPr
  :0040538F  893400                          MemLdI2
  :00405392  FBFD                            CStrUI1
  :00405394  23ECFE                          FStStrNoPop
  :00405397  2A                              ConcatStr
  :00405398  23E8FE                          FStStrNoPop
  :0040539B  FB30                            EqStr
  :0040539D  320800F0FEECFE74                FFreeStr
  :004053A8  1A78FF                          FFree1Ad
  :004053AB  1CC101                          BranchF                    ;If Pop=0 then ESI=004053E1 //跳走,失败
  :004053AE  0033                            LargeBos
  :004053B0  27F4FE                          LitVar
  :004053B3  2714FF                          LitVar
  ******Possible String Ref To->"Congradz"
                                 |
  :004053B6  3A44FF1200                      LitVarStr                  ;注册码正确提示标题
  :004053BB  4E34FF                          FStVarCopyObj
  :004053BE  0434FF                          FLdRfVar
  :004053C1  F500000000                      LitI4
  ******Possible String Ref To->"Well Done. Now generate a keygen"
                                 |
  :004053C6  3A64FF1300                      LitVarStr                  ;注册码正确提示内容
  :004053CB  4E54FF                          FStVarCopyObj
  :004053CE  0454FF                          FLdRfVar
  **********Reference To->msvbvm60.rtcMsgBox
                                 |
  :004053D1  0A0D001400                      ImpAdCallFPR4              ;注册码正确提示对话框
  :004053D6  36080054FF34FF14                FFreeVar
  :004053E1  0002                            LargeBos
  :004053E3  0000                            LargeBos
  :004053E5  13                              ExitProcHresult
  :004053E6  0000                            LargeBos
  
  
  经过上面的分析后,知道了注册码是由固定字符串‘17234’连接上注册名的运算结果后得到的,注册名的运算通过在WKTVBDE中分析后,大致算法用pascal语言表示,就是:
  
  //////////////////////////////////////
  program keygen;
  var
    name : string;
    i, tmp : integer;
  begin
    write('name:');
    readln(name);
    tmp := 0;
    for i := 1 to length(name) do
      tmp := tmp + ord(name[i]) * (i-1);
    writeln('Serial: 17234', tmp);
    readln;
  end.
  //////////////////////////////////////
  
  够简单吧,嘿嘿,放上一组注册信息:
         Name: CuteSnail
  Serial Code: 172343715
  
  
  
  
  ||===||
  ||第5关: Level 3 Menu: Solve The Patterns (框框条条的很奇怪的检测),代码见下面的分析:
  ||===||
  
  
  [Chec2.Click]
  :0040543C  0476FF                          FLdRfVar                   ;开始分析:
  :0040543F  21                              FLdPrThis
  :00405440  0F7003                          VCallAd                    ;第1个选择框的状态(在WKTVBDE中定位)
  :00405443  1978FF                          FStAdFunc
  :00405446  0878FF                          FLdPr
  ***********Reference To:[propget]CheckBox.Value
                                |
  :00405449  0DE0000200                      VCallHresult            
  :0040544E  6B76FF                          FLdI2
  :00405451  F401                            LitI2_Byte                 ;Push 01 //为1则表示选择框被选上了
  :00405453  C6                              EqI2                       ;检测是否被选上!
  :00405454  046EFF                          FLdRfVar
  :00405457  21                              FLdPrThis
  :00405458  0F5C03                          VCallAd                 ;第6个选择框的状态(排列顺序为:从上倒下,从左到右)
  :0040545B  1970FF                          FStAdFunc
  :0040545E  0870FF                          FLdPr
  ***********Reference To:[propget]CheckBox.Value
                                |
  :00405461  0DE0000200                      VCallHresult
  :00405466  6B6EFF                          FLdI2
  :00405469  F401                            LitI2_Byte                 ;Push 01 //为1则表示选择框被选上了
  :0040546B  C6                              EqI2                    ;检测是否被选上!
  :0040546C  C4                              AndI4
  :0040546D  0466FF                          FLdRfVar
  :00405470  21                              FLdPrThis  
  :00405471  0F4803                          VCallAd                 ;第11个选择框的状态
  :00405474  1968FF                          FStAdFunc
  :00405477  0868FF                          FLdPr
  ***********Reference To:[propget]CheckBox.Value
                                |
  :0040547A  0DE0000200                      VCallHresult              
  :0040547F  6B66FF                          FLdI2   
  :00405482  F401                            LitI2_Byte                 ;Push 01 //为1则表示选择框被选上了
  :00405484  C6                              EqI2                       ;检测是否被选上!
  :00405485  C4                              AndI4   
  :00405486  045EFF                          FLdRfVar   
  :00405489  21                              FLdPrThis
  :0040548A  0F3403                          VCallAd                 ;第16个选择框的状态
  :0040548D  1960FF                          FStAdFunc
  :00405490  0860FF                          FLdPr
  ***********Reference To:[propget]CheckBox.Value
                                |
  :00405493  0DE0000200                      VCallHresult              
  :00405498  6B5EFF                          FLdI2
  :0040549B  F401                            LitI2_Byte                 ;Push 01 //为1则表示选择框被选上了
  :0040549D  C6                              EqI2                       ;检测是否被选上!
  :0040549E  C4                              AndI4  
  :0040549F  0456FF                          FLdRfVar         
  :004054A2  21                              FLdPrThis      
  :004054A3  0F6C03                          VCallAd                 ;第2个选择框的状态
  :004054A6  1958FF                          FStAdFunc
  :004054A9  0858FF                          FLdPr     
  ***********Reference To:[propget]CheckBox.Value
                                |
  :004054AC  0DE0000200                      VCallHresult              
  :004054B1  6B56FF                          FLdI2      
  :004054B4  F401                            LitI2_Byte              ;Push 01 //为1则表示选择框被选上了
  :004054B6  C6                              EqI2                       ;检测是否被选上!
  :004054B7  C4                              AndI4      
  :004054B8  044EFF                          FLdRfVar
  :004054BB  21                              FLdPrThis
  :004054BC  0F5003                          VCallAd                 ;第9个选择框的状态
  :004054BF  1950FF                          FStAdFunc
  :004054C2  0850FF                          FLdPr
  ***********Reference To:[propget]CheckBox.Value
                                |
  :004054C5  0DE0000200                      VCallHresult              
  :004054CA  6B4EFF                          FLdI2
  :004054CD  F401                            LitI2_Byte                 ;Push 01 //为1则表示选择框被选上了
  :004054CF  C6                              EqI2                       ;检测是否被选上!
  :004054D0  C4                              AndI4     
  :004054D1  0446FF                          FLdRfVar     
  :004054D4  21                              FLdPrThis      
  :004054D5  0F3C03                          VCallAd                 ;第14个选择框的状态
  :004054D8  1948FF                          FStAdFunc   
  :004054DB  0848FF                          FLdPr   
  ***********Reference To:[propget]CheckBox.Value
                                |
  :004054DE  0DE0000200                      VCallHresult              
  :004054E3  6B46FF                          FLdI2      
  :004054E6  F401                            LitI2_Byte                 ;Push 01 //为1则表示选择框被选上了
  :004054E8  C6                              EqI2                       ;检测是否被选上!
  :004054E9  C4                              AndI4         
  :004054EA  043EFF                          FLdRfVar      
  :004054ED  21                              FLdPrThis      
  :004054EE  0F6403                          VCallAd                 ;第4个选择框的状态
  :004054F1  1940FF                          FStAdFunc
  :004054F4  0840FF                          FLdPr   
  ***********Reference To:[propget]CheckBox.Value
                                |
  :004054F7  0DE0000200                      VCallHresult              
  :004054FC  6B3EFF                          FLdI2      
  :004054FF  F401                            LitI2_Byte                 ;Push 01 //为1则表示选择框被选上了
  :00405501  C6                              EqI2                       ;检测是否被选上!
  :00405502  C4                              AndI4        
  :00405503  0436FF                          FLdRfVar      
  :00405506  21                              FLdPrThis      
  :00405507  0F5403                          VCallAd                 ;第8个选择框的状态
  :0040550A  1938FF                          FStAdFunc  
  :0040550D  0838FF                          FLdPr   
  ***********Reference To:[propget]CheckBox.Value
                                |
  :00405510  0DE0000200                      VCallHresult              
  :00405515  6B36FF                          FLdI2      
  :00405518  F400                            LitI2_Byte                 ;Push 00 //为0则表示选择框不被选上
  :0040551A  C6                              EqI2                       ;检测是否被选上!
  :0040551B  C4                              AndI4     
  :0040551C  042EFF                          FLdRfVar
  :0040551F  21                              FLdPrThis
  :00405520  0F6803                          VCallAd                 ;第3个选择框的状态
  :00405523  1930FF                          FStAdFunc  
  :00405526  0830FF                          FLdPr
  ***********Reference To:[propget]CheckBox.Value
                                |
  :00405529  0DE0000200                      VCallHresult              
  :0040552E  6B2EFF                          FLdI2
  :00405531  F400                            LitI2_Byte                 ;Push 00 //为0则表示选择框不被选上
  :00405533  C6                              EqI2                       ;检测是否被选上!
  :00405534  C4                              AndI4
  :00405535  0426FF                          FLdRfVar   
  :00405538  21                              FLdPrThis     
  :00405539  0F6003                          VCallAd                 ;第5个选择框的状态
  :0040553C  1928FF                          FStAdFunc  
  :0040553F  0828FF                          FLdPr     
  ***********Reference To:[propget]CheckBox.Value
                                |
  :00405542  0DE0000200                      VCallHresult              
  :00405547  6B26FF                          FLdI2      
  :0040554A  F400                            LitI2_Byte                 ;Push 00 //为0则表示选择框不被选上
  :0040554C  C6                              EqI2                       ;检测是否被选上!
  :0040554D  C4                              AndI4        
  :0040554E  041EFF                          FLdRfVar   
  :00405551  21                              FLdPrThis     
  :00405552  0F5803                          VCallAd                 ;第7个选择框的状态
  :00405555  1920FF                          FStAdFunc   
  :00405558  0820FF                          FLdPr   
  ***********Reference To:[propget]CheckBox.Value
                                |
  :0040555B  0DE0000200                      VCallHresult              
  :00405560  6B1EFF                          FLdI2        
  :00405563  F400                            LitI2_Byte                 ;Push 00 //为0则表示选择框不被选上
  :00405565  C6                              EqI2                       ;检测是否被选上!
  :00405566  C4                              AndI4
  :00405567  0416FF                          FLdRfVar  
  :0040556A  21                              FLdPrThis
  :0040556B  0F4C03                          VCallAd                 ;第10个选择框的状态
  :0040556E  1918FF                          FStAdFunc  
  :00405571  0818FF                          FLdPr   
  ***********Reference To:[propget]CheckBox.Value
                                |
  :00405574  0DE0000200                      VCallHresult              
  :00405579  6B16FF                          FLdI2   
  :0040557C  F400                            LitI2_Byte                 ;Push 00 //为0则表示选择框不被选上
  :0040557E  C6                              EqI2                       ;检测是否被选上!
  :0040557F  C4                              AndI4      
  :00405580  040EFF                          FLdRfVar
  :00405583  21                              FLdPrThis
  :00405584  0F4403                          VCallAd                 ;第12个选择框的状态
  :00405587  1910FF                          FStAdFunc
  :0040558A  0810FF                          FLdPr
  ***********Reference To:[propget]CheckBox.Value
                                |
  :0040558D  0DE0000200                      VCallHresult              
  :00405592  6B0EFF                          FLdI2
  :00405595  F400                            LitI2_Byte                 ;Push 00 //为0则表示选择框不被选上
  :00405597  C6                              EqI2                       ;检测是否被选上!
  :00405598  C4                              AndI4
  :00405599  0406FF                          FLdRfVar
  :0040559C  21                              FLdPrThis
  :0040559D  0F4003                          VCallAd                 ;第13个选择框的状态
  :004055A0  1908FF                          FStAdFunc
  :004055A3  0808FF                          FLdPr      
  ***********Reference To:[propget]CheckBox.Value
                                |
  :004055A6  0DE0000200                      VCallHresult              
  :004055AB  6B06FF                          FLdI2  
  :004055AE  F400                            LitI2_Byte                 ;Push 00 //为0则表示选择框不被选上
  :004055B0  C6                              EqI2                       ;检测是否被选上!
  :004055B1  C4                              AndI4      
  :004055B2  04FEFE                          FLdRfVar     
  :004055B5  21                              FLdPrThis      
  :004055B6  0F3803                          VCallAd                 ;第15个选择框的状态
  :004055B9  1900FF                          FStAdFunc
  :004055BC  0800FF                          FLdPr   
  ***********Reference To:[propget]CheckBox.Value
                                |
  :004055BF  0DE0000200                      VCallHresult               ;第16个选择框的状态
  :004055C4  6BFEFE                          FLdI2   
  :004055C7  F400                            LitI2_Byte                 ;Push 00 //为0则表示选择框不被选上
  :004055C9  C6                              EqI2                       ;检测是否被选上!
  :004055CA  C4                              AndI4   
  :004055CB  29200078FF70FF68                FFreeAd
  :004055EE  1CC101                          BranchF                 ;关键跳转,符合上面的条件,便不跳走
  ******Possible String Ref To->"true"
                                 |
  :004055F1  3ADCFE0300                      LitVarStr
  :004055F6  FD00ECFE                        FStVarCopy
  :004055FA  1ECA01                          Branch                     ;跳走
  ******Possible String Ref To->"false"
                                 |
  :004055FD  3ADCFE0400                      LitVarStr                 
  :00405602  FD00ECFE                        FStVarCopy
  :00405606  21                              FLdPrThis               ;跳来到这里(当符合上面的要求时)
  :00405607  0FBC03                          VCallAd                    ;得到滑动条1的状态
  :0040560A  1978FF                          FStAdFunc   
  :0040560D  0878FF                          FLdPr
  :00405610  61CCFE0B000000                  LateIdLdVar
  :00405617  FC22                            CI4Var
  :00405619  F503000000                      LitI4                      ;Push 00000003 //压入数值3
  :0040561E  C7                              EqI4                       ;Push (Pop1 == Pop2) //两者比较是否一样
  :0040561F  21                              FLdPrThis
  :00405620  0FB803                          VCallAd                    ;得到滑动条2的状态
  :00405623  1970FF                          FStAdFunc  
  :00405626  0870FF                          FLdPr
  :00405629  61BCFE0B000000                  LateIdLdVar
  :00405630  FC22                            CI4Var  
  :00405632  F508000000                      LitI4                      ;Push 00000008 //压入数值8
  :00405637  C7                              EqI4                       ;Push (Pop1 == Pop2) //两者比较是否一样
  :00405638  C4                              AndI4
  :00405639  29040078FF70FF                  FFreeAd
  :00405640  360400CCFEBCFE                  FFreeVar
  :00405647  1C1A02                          BranchF                    ;关键跳转,符合上面的条件,便不跳走
  ******Possible String Ref To->"true"
                                 |
  :0040564A  3ADCFE0300                      LitVarStr
  :0040564F  FD00ACFE                        FStVarCopy
  :00405653  1E2302                          Branch                     ;跳走
  ******Possible String Ref To->"false"
                                 |
  :00405656  3ADCFE0400                      LitVarStr
  :0040565B  FD00ACFE                        FStVarCopy
  :0040565F  04ECFE                          FLdRfVar                   ;跳来到这里(当符合上面的要求时)
  ******Possible String Ref To->"true"
                                 |
  :00405662  3ADCFE0300                      LitVarStr
  :00405667  5D                              HardType  
  :00405668  FB2FCCFE                        EqVar     
  :0040566C  04ACFE                          FLdRfVar  
  ******Possible String Ref To->"false"
                                 |
  :0040566F  3A9CFE0400                      LitVarStr
  :00405674  5D                              HardType
  :00405675  FB2FBCFE                        EqVar        
  :00405679  FB278CFE                        AndVar   
  :0040567D  FF1B                            CBoolVarNull   
  :0040567F  1C5B02                          BranchF                    ;关键跳转,符合上面的条件,跳走
  ******Possible String Ref To->"Almost there, now just get the slider values"
                                 |
  :00405682  1B0500                          LitStr                  ;这是快要成功的提示
  :00405685  21                              FLdPrThis      
  :00405686  0F7403                          VCallAd   
  :00405689  1978FF                          FStAdFunc
  :0040568C  0878FF                          FLdPr     
  ***********Reference To:[propput]Label.Caption
                                |
  :0040568F  0D54000600                      VCallHresult  
  :00405694  1A78FF                          FFree1Ad         
  :00405697  04ECFE                          FLdRfVar                   ;跳来到这里(当符合上面的要求时)
  ******Possible String Ref To->"false"
                                 |
  :0040569A  3ADCFE0400                      LitVarStr   
  :0040569F  5D                              HardType   
  :004056A0  FB2FCCFE                        EqVar      
  :004056A4  04ACFE                          FLdRfVar     
  ******Possible String Ref To->"true"
                                 |
  :004056A7  3A9CFE0300                      LitVarStr   
  :004056AC  5D                              HardType
  :004056AD  FB2FBCFE                        EqVar
  :004056B1  FB278CFE                        AndVar            
  :004056B5  FF1B                            CBoolVarNull
  :004056B7  1C9302                          BranchF                    ;关键跳转,符合上面的条件,跳走
  ******Possible String Ref To->"Almost there, now just get the boxes right"
                                 |
  :004056BA  1B0700                          LitStr                     ;这是快要成功的提示
  :004056BD  21                              FLdPrThis
  :004056BE  0F7403                          VCallAd
  :004056C1  1978FF                          FStAdFunc
  :004056C4  0878FF                          FLdPr
  ***********Reference To:[propput]Label.Caption
                                |
  :004056C7  0D54000600                      VCallHresult
  :004056CC  1A78FF                          FFree1Ad
  :004056CF  04ECFE                          FLdRfVar                   ;跳来到这里(当符合上面的要求时)
  ******Possible String Ref To->"true"
                                 |
  :004056D2  3ADCFE0300                      LitVarStr
  :004056D7  5D                              HardType
  :004056D8  FB2FCCFE                        EqVar
  :004056DC  04ACFE                          FLdRfVar
  ******Possible String Ref To->"true"
                                 |
  :004056DF  3A9CFE0300                      LitVarStr
  :004056E4  5D                              HardType
  :004056E5  FB2FBCFE                        EqVar
  :004056E9  FB278CFE                        AndVar
  :004056ED  FF1B                            CBoolVarNull
  :004056EF  1CCB02                          BranchF                    ;关键跳转,符合上面的条件,便不跳走
  ******Possible String Ref To->"Congradulations, you figured it out"
                                 |
  :004056F2  1B0800                          LitStr                     ;注册成功的提示
  :004056F5  21                              FLdPrThis  
  :004056F6  0F7403                          VCallAd  
  :004056F9  1978FF                          FStAdFunc
  :004056FC  0878FF                          FLdPr
  :后面的代码省略。。。
  
  
  从上面的比较来看,有8处的CheckBox状态检测是Push 01,剩下的8处便是Push 00,因此需要有8个CheckBox选择框需要被选上,它们分别是:第1、6、11、16、2、9、14、4位置的CheckBox选择框,而8、3、5、7、10、12、13、15位置的选择框则不能被选上;上面的第一根滑动条的数值必须是3,下面的第二根滑动条的数值必须是8,符合上面的这些要求,便注册成功了,哈哈^_^  
  
-----------------------------------------------------------------------------------
【版权声明】: 本文由 CuteSnail 原创, 转载请注明作者并保持文章的完整性, 谢谢! 再见!!


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 7
支持
分享
最新回复 (1)
雪    币: 721
活跃值: (350)
能力值: ( LV9,RANK:1250 )
在线值:
发帖
回帖
粉丝
2
很不错,鼓励。
2007-12-29 19:18
0
游客
登录 | 注册 方可回帖
返回
//