首页
社区
课程
招聘
斗地主7.2版算法分析
发表于: 2005-3-13 19:17 14838

斗地主7.2版算法分析

2005-3-13 19:17
14838

斗地主7.2版算法分析

[软件介绍]“斗地主”是近来流行全国的一种扑克游戏。
该游戏由四人玩两副牌(108张)或三人玩一副牌(54张),
地主为一方,其余三家或两家为另一方,双方对战,
先出完的一方胜。出牌规则类似“争上游”。

[使用限制]  试用30次和每次7局限制。

[保护方式]  采用机器码与注册名联合检查注册码,以保证注册码不得多机使用。

[破解工具]   olldbg1.10 、Peid0.92、Aspackdie1.41,RegSnap

[作者]  CrackerWu[BCG]

破解过程:

1.软件信息:

  该软件用VB编写,加ASPack 2.12 壳。

用RegSnap可发现试用次数保存在如下两处位置:
---------------------------------------------------------------
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProgrameID

   Old value: String: "6"   New value: String: "7"

HKEY_LOCAL_MACHINE\SOFTWARE\DDZ\Infomation\LicenseNumber

   Old value: String: "6"   New value: String: "7"
--------------------------------------------------------------

注册码保存在:
[HKEY_LOCAL_MACHINE\SOFTWARE\DDZ\Infomation]
@="斗地主软件信息"
"SetupDir"="d:\\DDZ"
"ProductId"="DDZ070040040530"
"ProductName"="斗地主扑克游戏"
"Writer"="周军"
"Version"="7.2 Build 668"
"LicenseNumber"="7"
"CPUCode"="6659630247"
"LicenseDate"="2005-3-8"
"RegName"="CrackerWu[BCG]"
"RegCode"=" "
"SetupDate"="2005-3-8"

  从《斗地主》扑克游戏注册说明及帮助中得到如下信息:
  注册名(中英文均可,但至少要两个字符以上),
  采用机器码与注册名联合检查注册码

  从注册框中输入注册码=10位才能注册。

  任意输入注册码:1234567890
  重启软件发现软件标题栏中 [未注册]字样消失了,但玩到第7局就回弹出
  注册对话框,要求注册。
  再运行软件[未注册]字样又出现了。检查注册表发现输入注册码被清除啦。

  看来注册流程可能是:

   在启动时先检查注册码是否存在,最后到第7局才判断是否正确。

2.脱壳后软件不能正常运行,跟踪可发现在如下位置有自校验:

004AD46D   . 52             PUSH EDX
004AD46E   . FF15 20134000  CALL DWORD PTR DS:[<&MSVBVM60.#578>]     ;  MSVBVM60.rtcFileLen
004AD474   . 3D 801A0600    CMP EAX,61A80                       ;比较文件长度若大于等于61A80 就玩完啦!
004AD479     7D 07          JGE SHORT unpacked.004AD482

004ADCFD   . 52             PUSH EDX
004ADCFE   . FF15 20134000  CALL DWORD PTR DS:[<&MSVBVM60.#578>]     ;  MSVBVM60.rtcFileLen
004ADD04   . 3D 801A0600    CMP EAX,61A80                    ;比较文件长度若大于等于61A80 就玩完啦!
004ADD09     7D 07          JGE SHORT unpacked.004ADD12

把上面两处跳转NOP掉,软件可正常运行.

3.用OD载入后通过查找参靠字符串:regcode 发现有10处,全部设断再一一跟踪可看到它是怎样检查注册码的.

下面这段是游戏中每次点击发牌后都要被OD中断在这里:

00440D9E   . FF15 B0104000  CALL DWORD PTR DS:[<&MSVBVM60.__vbaHresultCheckObj>;  MSVBVM60.__vbaHresultCheckObj
00440DA4   > 8B1D F8124000  MOV EBX,DWORD PTR DS:[<&MSVBVM60.__vbaStrCopy>]    ;  MSVBVM60.__vbaStrCopy
00440DAA   . BA DCED4100    MOV EDX,unpacked.0041EDDC                          ;  UNICODE "regcode"
00440DAF   . 8D4D DC        LEA ECX,DWORD PTR SS:[EBP-24]
00440DB2   . FFD3           CALL EBX                                           ;  <&MSVBVM60.__vbaStrCopy>
00440DB4   . BA 90B74100    MOV EDX,unpacked.0041B790                          ;  UNICODE "SoftWare\DDZ\Infomation"
00440DB9   . 8D4D E0        LEA ECX,DWORD PTR SS:[EBP-20]
00440DBC   . FFD3           CALL EBX
00440DBE   . 8D45 DC        LEA EAX,DWORD PTR SS:[EBP-24]
00440DC1   . 50             PUSH EAX                            ;"regcode"入栈
00440DC2   . 8D4D E0        LEA ECX,DWORD PTR SS:[EBP-20]
00440DC5   . 51             PUSH ECX                            ; "SoftWare\DDZ\Infomation"入栈
00440DC6   . 8D55 9C        LEA EDX,DWORD PTR SS:[EBP-64]
00440DC9   . 52             PUSH EDX
00440DCA   . C745 9C 020000>MOV DWORD PTR SS:[EBP-64],80000002
00440DD1   . E8 9A060600    CALL unpacked.004A1470               ;调用一个通用子程序从注册表中读取注册码。
00440DD6   . 8BD0           MOV EDX,EAX
00440DD8   . 8D4D D8        LEA ECX,DWORD PTR SS:[EBP-28]
00440DDB   . FF15 98134000  CALL DWORD PTR DS:[<&MSVBVM60.__vbaStrMove>]       ;  MSVBVM60.__vbaStrMove
00440DE1   . 50             PUSH EAX
00440DE2   . 68 38B84100    PUSH unpacked.0041B838
00440DE7   . FF15 A4114000  CALL DWORD PTR DS:[<&MSVBVM60.__vbaStrCmp>]        ;  MSVBVM60.__vbaStrCmp
00440DED   . 8B55 A0        MOV EDX,DWORD PTR SS:[EBP-60]
00440DF0   . 8BF0           MOV ESI,EAX
00440DF2   . F7DE           NEG ESI
00440DF4   . 1BF6           SBB ESI,ESI
00440DF6   . 46             INC ESI
00440DF7   . 8D45 D8        LEA EAX,DWORD PTR SS:[EBP-28]
00440DFA   . 50             PUSH EAX
00440DFB   . F7DE           NEG ESI
00440DFD   . 8D4D DC        LEA ECX,DWORD PTR SS:[EBP-24]
00440E00   . 0BF2           OR ESI,EDX
00440E02   . 51             PUSH ECX
00440E03   . 8D55 E0        LEA EDX,DWORD PTR SS:[EBP-20]
00440E06   . 52             PUSH EDX
00440E07   . 6A 03          PUSH 3
00440E09   . FF15 08134000  CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeStrList>]   ;  MSVBVM60.__vbaFreeStrList
00440E0F   . 83C4 10        ADD ESP,10
00440E12   . 8D4D D4        LEA ECX,DWORD PTR SS:[EBP-2C]
00440E15   . FF15 E4134000  CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeObj>]       ;  MSVBVM60.__vbaFreeObj
00440E1B   . 66:85F6        TEST SI,SI                      ;(爆破可改为 xor si,si  保正一定跳过下面限制)
00440E1E   . 0F84 62020000  JE unpacked.00441086           ;SI若为零就跳过试用30次和每次7局限制.
00440E24   . 833D 3C335200 >CMP DWORD PTR DS:[52333C],1E  ;比较试用次数时否大于30次
00440E2B   . 7D 1B          JGE SHORT unpacked.00440E48
00440E2D   . 833D 70315200 >CMP DWORD PTR DS:[523170],7   ;比较游戏局数时否小于7局
00440E34   . 0F8C 4C020000  JL unpacked.00441086
00440E3A   . 66:833D 003152>CMP WORD PTR DS:[523100],0
00440E42   . 0F85 3E020000  JNZ unpacked.00441086
00440E48   > 66:833D 003152>CMP WORD PTR DS:[523100],0
00440E50   . 75 0A          JNZ SHORT unpacked.00440E5C
00440E52   . 66:833D 403352>CMP WORD PTR DS:[523340],0
00440E5A   . 74 2A          JE SHORT unpacked.00440E86
00440E5C   > 8B07           MOV EAX,DWORD PTR DS:[EDI]
00440E5E   . 8D4D A0        LEA ECX,DWORD PTR SS:[EBP-60]
00440E61   . 51             PUSH ECX
00440E62   . 57             PUSH EDI

当游戏玩到第7局时被OD首先中断在这里 :

004599F4   . BA DCED4100    MOV EDX,unpacked.0041EDDC                          ;  UNICODE "regcode"
004599F9   . 8D4D C0        LEA ECX,DWORD PTR SS:[EBP-40]
004599FC   . 897D E8        MOV DWORD PTR SS:[EBP-18],EDI
004599FF   . 897D E0        MOV DWORD PTR SS:[EBP-20],EDI
00459A02   . 897D D4        MOV DWORD PTR SS:[EBP-2C],EDI
00459A05   . 897D D0        MOV DWORD PTR SS:[EBP-30],EDI
00459A08   . 897D CC        MOV DWORD PTR SS:[EBP-34],EDI
00459A0B   . 897D C8        MOV DWORD PTR SS:[EBP-38],EDI
00459A0E   . 897D C4        MOV DWORD PTR SS:[EBP-3C],EDI
00459A11   . 897D C0        MOV DWORD PTR SS:[EBP-40],EDI
00459A14   . 897D BC        MOV DWORD PTR SS:[EBP-44],EDI
00459A17   . 897D B8        MOV DWORD PTR SS:[EBP-48],EDI
00459A1A   . 897D B4        MOV DWORD PTR SS:[EBP-4C],EDI
00459A1D   . 897D A4        MOV DWORD PTR SS:[EBP-5C],EDI
00459A20   . 897D 94        MOV DWORD PTR SS:[EBP-6C],EDI
00459A23   . 897D 84        MOV DWORD PTR SS:[EBP-7C],EDI
00459A26   . 89BD 74FFFFFF  MOV DWORD PTR SS:[EBP-8C],EDI
00459A2C   . 89BD 70FFFFFF  MOV DWORD PTR SS:[EBP-90],EDI
00459A32   . 89BD 6CFFFFFF  MOV DWORD PTR SS:[EBP-94],EDI
00459A38   . FFD3           CALL EBX                                           ;  <&MSVBVM60.__vbaStrCopy>
00459A3A   . BA 90B74100    MOV EDX,unpacked.0041B790                          ;  UNICODE "SoftWare\DDZ\Infomation"
00459A3F   . 8D4D C4        LEA ECX,DWORD PTR SS:[EBP-3C]
00459A42   . FFD3           CALL EBX
00459A44   . 8D45 C0        LEA EAX,DWORD PTR SS:[EBP-40]
00459A47   . 50             PUSH EAX                                   "regcode"入栈
00459A48   . 8D4D C4        LEA ECX,DWORD PTR SS:[EBP-3C]
00459A4B   . 51             PUSH ECX                                   ;"SoftWare\DDZ\Infomation"入栈
00459A4C   . 8D95 6CFFFFFF  LEA EDX,DWORD PTR SS:[EBP-94]
00459A52   . 52             PUSH EDX
00459A53   . C785 6CFFFFFF >MOV DWORD PTR SS:[EBP-94],80000002
00459A5D   . E8 0E7A0400    CALL unpacked.004A1470                ;调用一个通用子程序从注册表中读取注册码。
00459A62   . 8B35 98134000  MOV ESI,DWORD PTR DS:[<&MSVBVM60.__vbaStrMove>]    ;  MSVBVM60.__vbaStrMove
00459A68   . 8BD0           MOV EDX,EAX
00459A6A   . 8D4D CC        LEA ECX,DWORD PTR SS:[EBP-34]
00459A6D   . FFD6           CALL ESI                                           ;  <&MSVBVM60.__vbaStrMove>
00459A6F   . 8D45 C0        LEA EAX,DWORD PTR SS:[EBP-40]
00459A72   . 50             PUSH EAX
00459A73   . 8D4D C4        LEA ECX,DWORD PTR SS:[EBP-3C]
00459A76   . 51             PUSH ECX
00459A77   . 6A 02          PUSH 2
00459A79   . FF15 08134000  CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeStrList>]   ;  MSVBVM60.__vbaFreeStrList
00459A7F   . 83C4 0C        ADD ESP,0C
00459A82   . BA E0064200    MOV EDX,unpacked.004206E0                          ;  UNICODE "regname"
00459A87   . 8D4D C0        LEA ECX,DWORD PTR SS:[EBP-40]
00459A8A   . FFD3           CALL EBX
00459A8C   . BA 90B74100    MOV EDX,unpacked.0041B790                          ;  UNICODE "SoftWare\DDZ\Infomation"
00459A91   . 8D4D C4        LEA ECX,DWORD PTR SS:[EBP-3C]
00459A94   . FFD3           CALL EBX
00459A96   . 8D55 C0        LEA EDX,DWORD PTR SS:[EBP-40]
00459A99   . 52             PUSH EDX                                 ;"regname"入栈
00459A9A   . 8D45 C4        LEA EAX,DWORD PTR SS:[EBP-3C]
00459A9D   . 50             PUSH EAX                                 ;"SoftWare\DDZ\Infomation"入栈
00459A9E   . 8D8D 6CFFFFFF  LEA ECX,DWORD PTR SS:[EBP-94]
00459AA4   . 51             PUSH ECX
00459AA5   . C785 6CFFFFFF >MOV DWORD PTR SS:[EBP-94],80000002
00459AAF   . E8 BC790400    CALL unpacked.004A1470                ; 调用一个通用子程序从注册表中读取注册名
                                                                   ;返回注册名字符放在eax中

00459AB4   . 8D55 A4        LEA EDX,DWORD PTR SS:[EBP-5C]
00459AB7   . 8945 AC        MOV DWORD PTR SS:[EBP-54],EAX
00459ABA   . 52             PUSH EDX
00459ABB   . 8D45 94        LEA EAX,DWORD PTR SS:[EBP-6C]
00459ABE   . 50             PUSH EAX
00459ABF   . C745 A4 080000>MOV DWORD PTR SS:[EBP-5C],8
00459AC6   . FF15 80104000  CALL DWORD PTR DS:[<&MSVBVM60.#518>]    ;  MSVBVM60.rtcLowerCaseVar
                                                                     ;注册名字符转为小写
00459ACC   . 8D4D 94        LEA ECX,DWORD PTR SS:[EBP-6C]
00459ACF   . 51             PUSH ECX
00459AD0   . FF15 38104000  CALL DWORD PTR DS:[<&MSVBVM60.__vbaStrVarMove>]    ;  MSVBVM60.__vbaStrVarMove
00459AD6   . 8BD0           MOV EDX,EAX
00459AD8   . 8D4D D0        LEA ECX,DWORD PTR SS:[EBP-30]
00459ADB   . FFD6           CALL ESI
00459ADD   . 8D55 C0        LEA EDX,DWORD PTR SS:[EBP-40]
00459AE0   . 52             PUSH EDX
00459AE1   . 8D45 C4        LEA EAX,DWORD PTR SS:[EBP-3C]
00459AE4   . 50             PUSH EAX
00459AE5   . 6A 02          PUSH 2
00459AE7   . FF15 08134000  CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeStrList>]   ;  MSVBVM60.__vbaFreeStrList
00459AED   . 8D4D 94        LEA ECX,DWORD PTR SS:[EBP-6C]
00459AF0   . 51             PUSH ECX
00459AF1   . 8D55 A4        LEA EDX,DWORD PTR SS:[EBP-5C]
00459AF4   . 52             PUSH EDX
00459AF5   . 6A 02          PUSH 2
00459AF7   . FF15 44104000  CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeVarList>]   ;  MSVBVM60.__vbaFreeVarList
00459AFD   . 8B45 CC        MOV EAX,DWORD PTR SS:[EBP-34]
00459B00   . 83C4 18        ADD ESP,18
00459B03   . 50             PUSH EAX                                           ;注册码入栈
00459B04   . FF15 40104000  CALL DWORD PTR DS:[<&MSVBVM60.__vbaLenBstr>]       ;  MSVBVM60.__vbaLenBstr
                                                                                ;求注册码长度
00459B0A   . 8B4D D0        MOV ECX,DWORD PTR SS:[EBP-30]
00459B0D   . 33DB           XOR EBX,EBX
00459B0F   . 83F8 0A        CMP EAX,0A                                         ; 比较注册码长度是否10位
00459B12   . 51             PUSH ECX                                           ;注册名入栈
00459B13   . 0F95C3         SETNE BL
00459B16   . FF15 40104000  CALL DWORD PTR DS:[<&MSVBVM60.__vbaLenBstr>]       ;  MSVBVM60.__vbaLenBstr
                                                                               ;求注册名长度
00459B1C   . 33D2           XOR EDX,EDX
00459B1E   . 83F8 01        CMP EAX,1                                         ; 比较注册名长度是否大于1位
00459B21   . 0F9EC2         SETLE DL
00459B24   . 0BDA           OR EBX,EDX                                        ;只要不满作上两条就跳                                       
00459B26   . 0F85 08040000  JNZ unpacked.00459F34                             ;跳就是注册不正确
00459B2C   . 6A 07          PUSH 7
00459B2E   . 8D45 84        LEA EAX,DWORD PTR SS:[EBP-7C]
00459B31   . 50             PUSH EAX
00459B32   . 8D4D A4        LEA ECX,DWORD PTR SS:[EBP-5C]
00459B35   . 51             PUSH ECX
00459B36   . C745 8C 183452>MOV DWORD PTR SS:[EBP-74],unpacked.00523418
00459B3D   . C745 84 084000>MOV DWORD PTR SS:[EBP-7C],4008
00459B44   . FF15 AC134000  CALL DWORD PTR DS:[<&MSVBVM60.#619>]               ;  MSVBVM60.rtcRightCharVar
                                                                               ;取机器码右边7个字符
00459B4A   . 8B55 D0        MOV EDX,DWORD PTR SS:[EBP-30]
00459B4D   . 8D45 A4        LEA EAX,DWORD PTR SS:[EBP-5C]
00459B50   . 50             PUSH EAX
00459B51   . 8D8D 74FFFFFF  LEA ECX,DWORD PTR SS:[EBP-8C]
00459B57   . 8995 7CFFFFFF  MOV DWORD PTR SS:[EBP-84],EDX
00459B5D   . 51             PUSH ECX
00459B5E   . 8D55 94        LEA EDX,DWORD PTR SS:[EBP-6C]
00459B61   . 52             PUSH EDX
00459B62   . C785 74FFFFFF >MOV DWORD PTR SS:[EBP-8C],8
00459B6C   . FF15 98124000  CALL DWORD PTR DS:[<&MSVBVM60.__vbaVarCat>]        ;  MSVBVM60.__vbaVarCat
                                                                         ;机器码右边7个字符与注册名连接成一个字符串
00459B72   . 50             PUSH EAX
00459B73   . FF15 38104000  CALL DWORD PTR DS:[<&MSVBVM60.__vbaStrVarMove>]    ;  MSVBVM60.__vbaStrVarMove
00459B79   . 8BD0           MOV EDX,EAX
00459B7B   . 8D4D D4        LEA ECX,DWORD PTR SS:[EBP-2C]
00459B7E   . FFD6           CALL ESI
00459B80   . 8D45 94        LEA EAX,DWORD PTR SS:[EBP-6C]
00459B83   . 50             PUSH EAX
00459B84   . 8D4D A4        LEA ECX,DWORD PTR SS:[EBP-5C]
00459B87   . 51             PUSH ECX
00459B88   . 6A 02          PUSH 2
00459B8A   . FF15 44104000  CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeVarList>]   ;  MSVBVM60.__vbaFreeVarList
00459B90   . 83C4 0C        ADD ESP,0C
00459B93   . 8D55 D4        LEA EDX,DWORD PTR SS:[EBP-2C]
00459B96   . 52             PUSH EDX                ;上面机器码与注册名连接字符串入栈
00459B97   . E8 34340500    CALL unpacked.004ACFD0  ;计算注册码关键call  !!!!!!!!!!!!!!
00459B9C   . 8BD0           MOV EDX,EAX
00459B9E   . 8D4D C8        LEA ECX,DWORD PTR SS:[EBP-38]
00459BA1   . FFD6           CALL ESI
00459BA3   . 8B45 CC        MOV EAX,DWORD PTR SS:[EBP-34]
00459BA6   . 8B4D C8        MOV ECX,DWORD PTR SS:[EBP-38]
00459BA9   . 50             PUSH EAX                                  ;注册表中保存注册码入栈
00459BAA   . 51             PUSH ECX                                  ;程序计算注册码入栈
00459BAB   . FF15 A4114000  CALL DWORD PTR DS:[<&MSVBVM60.__vbaStrCmp>]        ;  MSVBVM60.__vbaStrCmp
                                                                ;比较注册码
00459BB1   . 85C0           TEST EAX,EAX
00459BB3   . 75 2F          JNZ SHORT unpacked.00459BE4  ;跳向未注册(标题栏出现了[未注册]字样)。

                          ..............................

跳出上面子称序后来到这段>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
00447876   > C785 E8FEFFFF >MOV DWORD PTR SS:[EBP-118],0
00447880   > C745 FC 480000>MOV DWORD PTR SS:[EBP-4],48
00447887   . A1 70315200    MOV EAX,DWORD PTR DS:[523170]
0044788C   . 99             CDQ
0044788D   . B9 07000000    MOV ECX,7
00447892   . F7F9           IDIV ECX                ;游戏局数除7
00447894   . 83FA 06        CMP EDX,6               ; 比较是否为6,为6就检查注册.
                                                   (可修改这里让游系每局都检查注册,方便我们跟踪)
00447897   . 75 16          JNZ SHORT unpacked.004478AF
00447899   . C745 FC 490000>MOV DWORD PTR SS:[EBP-4],49
004478A0   . 8B55 08        MOV EDX,DWORD PTR SS:[EBP+8]
004478A3   . 8B02           MOV EAX,DWORD PTR DS:[EDX]
004478A5   . 8B4D 08        MOV ECX,DWORD PTR SS:[EBP+8]
004478A8   . 51             PUSH ECX
004478A9   . FF90 D4080000  CALL DWORD PTR DS:[EAX+8D4]      ;检查用户是否已注册 call
004478AF   > C745 FC 4B0000>MOV DWORD PTR SS:[EBP-4],4B      ;跳出上面子称序后来到这里。         
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

下面跟进计算注册码关键call :
*************************************************************************************

004ACFD0   $ 55             PUSH EBP
004ACFD1   . 8BEC           MOV EBP,ESP
004ACFD3   . 83EC 0C        SUB ESP,0C
004ACFD6   . 68 A6924000    PUSH <JMP.&MSVBVM60.__vbaExceptHandler>          ;  SE handler installation
004ACFDB   . 64:A1 00000000 MOV EAX,DWORD PTR FS:[0]
004ACFE1   . 50             PUSH EAX
004ACFE2   . 64:8925 000000>MOV DWORD PTR FS:[0],ESP
004ACFE9   . 81EC 9C000000  SUB ESP,9C
004ACFEF   . 53             PUSH EBX
004ACFF0   . 56             PUSH ESI
004ACFF1   . 57             PUSH EDI
004ACFF2   . 8965 F4        MOV DWORD PTR SS:[EBP-C],ESP
004ACFF5   . C745 F8 505C40>MOV DWORD PTR SS:[EBP-8],unpacked.00405C50
004ACFFC   . 8B5D 08        MOV EBX,DWORD PTR SS:[EBP+8]     ;机器码与注册名连接字符串送EBX
004ACFFF   . 33C0           XOR EAX,EAX
004AD001   . BE 01000000    MOV ESI,1                        ;esi=1
004AD006   . 33C9           XOR ECX,ECX
004AD008   . 8945 D4        MOV DWORD PTR SS:[EBP-2C],EAX
004AD00B   . 8945 D0        MOV DWORD PTR SS:[EBP-30],EAX
004AD00E   . 8945 CC        MOV DWORD PTR SS:[EBP-34],EAX
004AD011   . 8945 C8        MOV DWORD PTR SS:[EBP-38],EAX
004AD014   . 8945 C4        MOV DWORD PTR SS:[EBP-3C],EAX
004AD017   . 8945 C0        MOV DWORD PTR SS:[EBP-40],EAX
004AD01A   . 8945 B0        MOV DWORD PTR SS:[EBP-50],EAX
004AD01D   . 8945 A0        MOV DWORD PTR SS:[EBP-60],EAX
004AD020   . 8945 90        MOV DWORD PTR SS:[EBP-70],EAX
004AD023   . 8945 80        MOV DWORD PTR SS:[EBP-80],EAX
004AD026   . 894D DC        MOV DWORD PTR SS:[EBP-24],ECX
004AD029   . 8945 D8        MOV DWORD PTR SS:[EBP-28],EAX
004AD02C   . 8BFE           MOV EDI,ESI                    ;循环变量edi=esi=1

004AD02E   > B8 05000000    MOV EAX,5                      ;循环开始 ,eax=5
004AD033   . 3BF8           CMP EDI,EAX                    ;比较循还次数是否大于5
004AD035   . 0F8F 94010000  JG unpacked.004AD1CF           ;大于就跳出循环

(循环中第一部分)
004AD03B   . 50             PUSH EAX                       ;5入栈
004AD03C   . 8D45 80        LEA EAX,DWORD PTR SS:[EBP-80]
004AD03F   . 50             PUSH EAX
004AD040   . 8D4D B0        LEA ECX,DWORD PTR SS:[EBP-50]
004AD043   . 51             PUSH ECX
004AD044   . 895D 88        MOV DWORD PTR SS:[EBP-78],EBX    ;机器码与注册名连接字符串送[EBP-78]
004AD047   . C745 80 084000>MOV DWORD PTR SS:[EBP-80],4008
004AD04E   . FF15 88134000  CALL DWORD PTR DS:[<&MSVBVM60.#617>]             ;  MSVBVM60.rtcLeftCharVar
                                                           ;取机器码与注册名连接字符串左边5个字符组成字符串
                                                            ;(为叙述方便设为L5)            
004AD054   . 8D55 A0        LEA EDX,DWORD PTR SS:[EBP-60]
004AD057   . 52             PUSH EDX
004AD058   . 56             PUSH ESI
004AD059   . 8D45 B0        LEA EAX,DWORD PTR SS:[EBP-50]     ;L5入栈
004AD05C   . 50             PUSH EAX
004AD05D   . 8D4D 90        LEA ECX,DWORD PTR SS:[EBP-70]      ;[EBP-70]为返回值地址
004AD060   . 51             PUSH ECX
004AD061   . C745 A8 010000>MOV DWORD PTR SS:[EBP-58],1
004AD068   . C745 A0 020000>MOV DWORD PTR SS:[EBP-60],2
004AD06F   . FF15 84114000  CALL DWORD PTR DS:[<&MSVBVM60.#632>]             ;  MSVBVM60.rtcMidCharVar
                                                                  ;依次取L5每个字符

004AD075   . 8D55 90        LEA EDX,DWORD PTR SS:[EBP-70]
004AD078   . 52             PUSH EDX
004AD079   . 8D45 C4        LEA EAX,DWORD PTR SS:[EBP-3C]
004AD07C   . 50             PUSH EAX
004AD07D   . FF15 94124000  CALL DWORD PTR DS:[<&MSVBVM60.__vbaStrVarVal>]   ;  MSVBVM60.__vbaStrVarVal
                                                                             ;转字符
004AD083   . 50             PUSH EAX
004AD084   . FF15 20104000  CALL DWORD PTR DS:[<&MSVBVM60.#693>]             ;  MSVBVM60.rtcByteValueBstr
                                                                             ;求字符字节ASCII值
                                                                           
004AD08A   . 8885 6CFFFFFF  MOV BYTE PTR SS:[EBP-94],AL        ;L5每个字符字节ASCII值依次送[EBP-94]

004AD090   . B8 05000000    MOV EAX,5
004AD095   . 2BC7           SUB EAX,EDI                      ;5减 循环变量edi值
004AD097   . 8985 58FFFFFF  MOV DWORD PTR SS:[EBP-A8],EAX     ;送到[EBP-A8]
004AD09D   . DB85 58FFFFFF  FILD DWORD PTR SS:[EBP-A8]       ;装入浮点寄存器
004AD0A3   . 83EC 08        SUB ESP,8
004AD0A6   . DD1C24         FSTP QWORD PTR SS:[ESP]
004AD0A9   . 68 00002440    PUSH 40240000
004AD0AE   . 6A 00          PUSH 0
004AD0B0   . FF15 18134000  CALL DWORD PTR DS:[<&MSVBVM60.__vbaPowerR8>]     ;  MSVBVM60.__vbaPowerR8
                                                       ;求10的乘方.
                                                       ;依次为求:10的4次方,10的3次方,10的2次方,10的1次方,10的0次方.
004AD0B6   . 8B85 6CFFFFFF  MOV EAX,DWORD PTR SS:[EBP-94]
004AD0BC   . 25 FF000000    AND EAX,0FF
004AD0C1   . 99             CDQ
004AD0C2   . B9 0A000000    MOV ECX,0A                 ;L5每个字符ASCII码值除10
004AD0C7   . F7F9           IDIV ECX                        
004AD0C9   . 8995 54FFFFFF  MOV DWORD PTR SS:[EBP-AC],EDX  ;余数送[EBP-AC]
004AD0CF   . DB85 54FFFFFF  FILD DWORD PTR SS:[EBP-AC]    ;[EBP-AC]装入浮点寄存器
004AD0D5   . DEC9           FMULP ST(1),ST                ;余数与上面10的乘方相乘
004AD0D7   . DA45 DC        FIADD DWORD PTR SS:[EBP-24]    ;循环累加到[EBP-24]

004AD0DA   . FF15 6C134000  CALL DWORD PTR DS:[<&MSVBVM60.__vbaFpI4>]        ;  MSVBVM60.__vbaFpI4
                                                                  ;转整数
004AD0E0   . 8D4D C4        LEA ECX,DWORD PTR SS:[EBP-3C]
004AD0E3   . 8945 DC        MOV DWORD PTR SS:[EBP-24],EAX  ;整数值送[EBP-24]   

004AD0E6   . FF15 E8134000  CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeStr>]     ;  MSVBVM60.__vbaFreeStr
004AD0EC   . 8D55 90        LEA EDX,DWORD PTR SS:[EBP-70]
004AD0EF   . 52             PUSH EDX
004AD0F0   . 8D45 A0        LEA EAX,DWORD PTR SS:[EBP-60]
004AD0F3   . 50             PUSH EAX
004AD0F4   . 8D4D B0        LEA ECX,DWORD PTR SS:[EBP-50]
004AD0F7   . 51             PUSH ECX
004AD0F8   . 6A 03          PUSH 3
004AD0FA   . FF15 44104000  CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeVarList>] ;  MSVBVM60.__vbaFreeVarList
004AD100   . 83C4 10        ADD ESP,10

(循环中第二部分)
004AD103   . 6A 05          PUSH 5                        ;5入栈
004AD105   . 8D55 80        LEA EDX,DWORD PTR SS:[EBP-80]
004AD108   . 52             PUSH EDX
004AD109   . 8D45 B0        LEA EAX,DWORD PTR SS:[EBP-50]
004AD10C   . 50             PUSH EAX
004AD10D   . 895D 88        MOV DWORD PTR SS:[EBP-78],EBX  ; 机器码与注册名连接字符串送[EBP-78]
004AD110   . C745 80 084000>MOV DWORD PTR SS:[EBP-80],4008
004AD117   . FF15 AC134000  CALL DWORD PTR DS:[<&MSVBVM60.#619>]             ;  MSVBVM60.rtcRightCharVar
                                                   ;取机器码与注册名连接字符串右边5个字符组成字符串
                                                            ;(为叙述方便设为R5)            
004AD11D   . 8D4D A0        LEA ECX,DWORD PTR SS:[EBP-60]
004AD120   . 51             PUSH ECX
004AD121   . 56             PUSH ESI                         ;初始为1
004AD122   . 8D55 B0        LEA EDX,DWORD PTR SS:[EBP-50]
004AD125   . 52             PUSH EDX                         ;R5入栈
004AD126   . 8D45 90        LEA EAX,DWORD PTR SS:[EBP-70]    ;[EBP-70]为返回值地址
004AD129   . 50             PUSH EAX
004AD12A   . C745 A8 010000>MOV DWORD PTR SS:[EBP-58],1
004AD131   . C745 A0 020000>MOV DWORD PTR SS:[EBP-60],2
004AD138   . FF15 84114000  CALL DWORD PTR DS:[<&MSVBVM60.#632>]             ;  MSVBVM60.rtcMidCharVar
                                                                   ;依次取R5每个字符
004AD13E   . 8D4D 90        LEA ECX,DWORD PTR SS:[EBP-70]
004AD141   . 51             PUSH ECX
004AD142   . 8D55 C4        LEA EDX,DWORD PTR SS:[EBP-3C]
004AD145   . 52             PUSH EDX
004AD146   . FF15 94124000  CALL DWORD PTR DS:[<&MSVBVM60.__vbaStrVarVal>]   ;  MSVBVM60.__vbaStrVarVal
                                                                  ;转字符

004AD14C   . 50             PUSH EAX
004AD14D   . FF15 20104000  CALL DWORD PTR DS:[<&MSVBVM60.#693>]             ;  MSVBVM60.rtcByteValueBstr
                                                                     ;求字符字节ASCII值 (当为汉字时取的是低位字节)

004AD153   . DB85 58FFFFFF  FILD DWORD PTR SS:[EBP-A8]       ; [EBP-A8]装入浮点寄存器
004AD159   . 83EC 08        SUB ESP,8
004AD15C   . 8885 6CFFFFFF  MOV BYTE PTR SS:[EBP-94],AL       ;L5每个字符字节ASCII值依次送[EBP-94]
004AD162   . DD1C24         FSTP QWORD PTR SS:[ESP]
004AD165   . 68 00002440    PUSH 40240000
004AD16A   . 6A 00          PUSH 0
004AD16C   . FF15 18134000  CALL DWORD PTR DS:[<&MSVBVM60.__vbaPowerR8>]     ;  MSVBVM60.__vbaPowerR8
                                                                       ;求10的乘方.

004AD172   . 8B85 6CFFFFFF  MOV EAX,DWORD PTR SS:[EBP-94]
004AD178   . 25 FF000000    AND EAX,0FF
004AD17D   . 99             CDQ
004AD17E   . B9 0A000000    MOV ECX,0A
004AD183   . F7F9           IDIV ECX                                  ;除10
004AD185   . 8995 50FFFFFF  MOV DWORD PTR SS:[EBP-B0],EDX
004AD18B   . DB85 50FFFFFF  FILD DWORD PTR SS:[EBP-B0]
004AD191   . DEC9           FMULP ST(1),ST                                ;余数与上面10的乘方相乘
004AD193   . DA45 D8        FIADD DWORD PTR SS:[EBP-28]                   ;循环累加到[EBP-28]
004AD196   . FF15 6C134000  CALL DWORD PTR DS:[<&MSVBVM60.__vbaFpI4>]        ;  MSVBVM60.__vbaFpI4
                                                                             ;转整数
004AD19C   . 8D4D C4        LEA ECX,DWORD PTR SS:[EBP-3C]
004AD19F   . 8945 D8        MOV DWORD PTR SS:[EBP-28],EAX           ; 整数值送[EBP-28]
004AD1A2   . FF15 E8134000  CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeStr>]     ;  MSVBVM60.__vbaFreeStr
004AD1A8   . 8D55 90        LEA EDX,DWORD PTR SS:[EBP-70]
004AD1AB   . 52             PUSH EDX
004AD1AC   . 8D45 A0        LEA EAX,DWORD PTR SS:[EBP-60]
004AD1AF   . 50             PUSH EAX
004AD1B0   . 8D4D B0        LEA ECX,DWORD PTR SS:[EBP-50]
004AD1B3   . 51             PUSH ECX
004AD1B4   . 6A 03          PUSH 3
004AD1B6   . FF15 44104000  CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeVarList>] ;  MSVBVM60.__vbaFreeVarList
004AD1BC   . 8B4D DC        MOV ECX,DWORD PTR SS:[EBP-24]   ;[EBP-24]中值送[EBP-24]
004AD1BF   . 83C4 10        ADD ESP,10
004AD1C2   . B8 01000000    MOV EAX,1
004AD1C7   . 46             INC ESI                            ;esi加1
004AD1C8   . 03F8           ADD EDI,EAX                        ;edi加1
004AD1CA   .^E9 5FFEFFFF    JMP unpacked.004AD02E              ;跳向循环开头

循环结束后来到这里:
004AD1CF   > 8B55 D8        MOV EDX,DWORD PTR SS:[EBP-28]
004AD1D2   . 81F1 CADE0000  XOR ECX,0DECA     ;  上面第一部分累加值与57034(十进制)作异或
004AD1D8   . 81F2 13700000  XOR EDX,7013      ;  上面第二部分累加值与28691(十进制)作异或
004AD1DE   . 81F9 9F860100  CMP ECX,1869F     ;  与99999作比较,若大于就转为小于99999的数
004AD1E4   . 8955 D8        MOV DWORD PTR SS:[EBP-28],EDX ;异或值[EBP-28]
004AD1E7   . 7E 16          JLE SHORT unpacked.004AD1FF  ;
________________________________________________________________________
004AD1E9   . B8 67666666    MOV EAX,66666667    ;这段是把ECX中数转为小于99999(十进制)的数
004AD1EE   . F7E9           IMUL ECX
004AD1F0   . C1FA 02        SAR EDX,2
004AD1F3   . 8BC2           MOV EAX,EDX
004AD1F5   . C1E8 1F        SHR EAX,1F
004AD1F8   . 03D0           ADD EDX,EAX
004AD1FA   . 8955 DC        MOV DWORD PTR SS:[EBP-24],EDX
004AD1FD   . 8BCA           MOV ECX,EDX
_________________________________________________________________________
004AD1FF   > BE 10270000    MOV ESI,2710     ;ESI=10000(十进制)
004AD204   . 3BCE           CMP ECX,ESI      ;与10000(十进制)作比较,若小于就加10000
004AD206   . 7D 02          JGE SHORT unpacked.004AD20A
004AD208   . 03CE           ADD ECX,ESI       ;加10000(十进制)

----------------------------------------------对第二部分异或值作同样处理(保证数为5位,在10000--99999之间)
004AD20A   > 8B55 D8        MOV EDX,DWORD PTR SS:[EBP-28]
004AD20D   . 81FA 9F860100  CMP EDX,1869F
004AD213   . 7E 14          JLE SHORT unpacked.004AD229
004AD215   . B8 67666666    MOV EAX,66666667
004AD21A   . F7EA           IMUL EDX
004AD21C   . C1FA 02        SAR EDX,2
004AD21F   . 8BC2           MOV EAX,EDX
004AD221   . C1E8 1F        SHR EAX,1F
004AD224   . 03D0           ADD EDX,EAX
004AD226   . 8955 D8        MOV DWORD PTR SS:[EBP-28],EDX
004AD229   > 8B45 D8        MOV EAX,DWORD PTR SS:[EBP-28]
004AD22C   . 3BC6           CMP EAX,ESI
004AD22E   . 7D 05          JGE SHORT unpacked.004AD235
004AD230   . 03C6           ADD EAX,ESI
004AD232   . 8945 D8        MOV DWORD PTR SS:[EBP-28],EAX
-------------------------------------------------------------

004AD235   > 8B3D 18104000  MOV EDI,DWORD PTR DS:[<&MSVBVM60.__vbaStrI4>]    ;  MSVBVM60.__vbaStrI4
004AD23B   . 51             PUSH ECX
004AD23C   . FFD7           CALL EDI                                         ;  <&MSVBVM60.__vbaStrI4>
                                                                              ;整数转字符串
004AD23E   . 8B35 98134000  MOV ESI,DWORD PTR DS:[<&MSVBVM60.__vbaStrMove>]  ;  MSVBVM60.__vbaStrMove
004AD244   . 8BD0           MOV EDX,EAX
004AD246   . 8D4D C4        LEA ECX,DWORD PTR SS:[EBP-3C]
004AD249   . FFD6           CALL ESI                                         ;  <&MSVBVM60.__vbaStrMove>
004AD24B   . 8B4D D8        MOV ECX,DWORD PTR SS:[EBP-28]
004AD24E   . 50             PUSH EAX
004AD24F   . 51             PUSH ECX
004AD250   . FFD7           CALL EDI                                         ;整数转字符串
004AD252   . 8BD0           MOV EDX,EAX
004AD254   . 8D4D C0        LEA ECX,DWORD PTR SS:[EBP-40]
004AD257   . FFD6           CALL ESI
004AD259   . 50             PUSH EAX
004AD25A   . FF15 98104000  CALL DWORD PTR DS:[<&MSVBVM60.__vbaStrCat>]      ;  MSVBVM60.__vbaStrCat
                                                                            ;连结字符串得到注册码
004AD260   . 8BD0           MOV EDX,EAX
004AD262   . 8D4D CC        LEA ECX,DWORD PTR SS:[EBP-34]
004AD265   . FFD6           CALL ESI
004AD267   . 8D55 C0        LEA EDX,DWORD PTR SS:[EBP-40]
004AD26A   . 52             PUSH EDX
004AD26B   . 8D45 C4        LEA EAX,DWORD PTR SS:[EBP-3C]
004AD26E   . 50             PUSH EAX
004AD26F   . 6A 02          PUSH 2
004AD271   . FF15 08134000  CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeStrList>] ;  MSVBVM60.__vbaFreeStrList
004AD277   . 8B55 CC        MOV EDX,DWORD PTR SS:[EBP-34]
004AD27A   . 83C4 0C        ADD ESP,0C
004AD27D   . 8D4D D4        LEA ECX,DWORD PTR SS:[EBP-2C]
004AD280   . FF15 F8124000  CALL DWORD PTR DS:[<&MSVBVM60.__vbaStrCopy>]     ;  MSVBVM60.__vbaStrCopy
004AD286   . 9B             WAIT
004AD287   . 68 DBD24A00    PUSH unpacked.004AD2DB
004AD28C   . EB 37          JMP SHORT unpacked.004AD2C5
004AD28E   . F645 FC 04     TEST BYTE PTR SS:[EBP-4],4
004AD292   . 74 09          JE SHORT unpacked.004AD29D
004AD294   . 8D4D D4        LEA ECX,DWORD PTR SS:[EBP-2C]
004AD297   . FF15 E8134000  CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeStr>]     ;  MSVBVM60.__vbaFreeStr
004AD29D   > 8D4D C0        LEA ECX,DWORD PTR SS:[EBP-40]
004AD2A0   . 51             PUSH ECX
004AD2A1   . 8D55 C4        LEA EDX,DWORD PTR SS:[EBP-3C]
004AD2A4   . 52             PUSH EDX
004AD2A5   . 6A 02          PUSH 2
004AD2A7   . FF15 08134000  CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeStrList>] ;  MSVBVM60.__vbaFreeStrList
004AD2AD   . 8D45 90        LEA EAX,DWORD PTR SS:[EBP-70]
004AD2B0   . 50             PUSH EAX
004AD2B1   . 8D4D A0        LEA ECX,DWORD PTR SS:[EBP-60]
004AD2B4   . 51             PUSH ECX
004AD2B5   . 8D55 B0        LEA EDX,DWORD PTR SS:[EBP-50]
004AD2B8   . 52             PUSH EDX
004AD2B9   . 6A 03          PUSH 3
004AD2BB   . FF15 44104000  CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeVarList>] ;  MSVBVM60.__vbaFreeVarList
004AD2C1   . 83C4 1C        ADD ESP,1C
004AD2C4   . C3             RETN
004AD2C5   > 8B35 E8134000  MOV ESI,DWORD PTR DS:[<&MSVBVM60.__vbaFreeStr>]  ;  MSVBVM60.__vbaFreeStr
004AD2CB   . 8D4D D0        LEA ECX,DWORD PTR SS:[EBP-30]
004AD2CE   . FFD6           CALL ESI                                         ;  <&MSVBVM60.__vbaFreeStr>
004AD2D0   . 8D4D CC        LEA ECX,DWORD PTR SS:[EBP-34]
004AD2D3   . FFD6           CALL ESI
004AD2D5   . 8D4D C8        LEA ECX,DWORD PTR SS:[EBP-38]
004AD2D8   . FFD6           CALL ESI
004AD2DA   . C3             RETN
004AD2DB   . 8B4D EC        MOV ECX,DWORD PTR SS:[EBP-14]
004AD2DE   . 8B45 D4        MOV EAX,DWORD PTR SS:[EBP-2C]
004AD2E1   . 5F             POP EDI
004AD2E2   . 5E             POP ESI
004AD2E3   . 64:890D 000000>MOV DWORD PTR FS:[0],ECX
004AD2EA   . 5B             POP EBX
004AD2EB   . 8BE5           MOV ESP,EBP
004AD2ED   . 5D             POP EBP
004AD2EE   . C2 0400        RETN 4
***********************************************************************************************

4.算法总结:
     以我的机器为例:
                             机器码: 6654554209
                             用户名:  CrackerWu[BCG]
           -------------------------------------------------------

          取机器码右边7个字符:  4554209
          用户名大写转小写得到: crackerwu[bcg]
         

       与用户名字符串连结得到: 4554209crackerwu[bcg]
        
            取左边5个字符得到:45542
            取右边5个字符得到:[bcg]

                                 
          字符 "4" 的ASCII值除10余数:52 mod 10 =2
          字符 "5" 的ASCII值除10余数:53 mod 10 =3
          字符 "5" 的ASCII值除10余数:53 mod 10 =3
          字符 "4" 的ASCII值除10余数:52 mod 10 =2
          字符 "2" 的ASCII值除10余数:50 mod 10 =0

        2 x 10^4+3 x 10^3+3 x 10^2+2x 10^1+0 x 10^0=2320
        ( 若累加和不在10000--99999之间,还要转为10000--99999之间的5位数)

          字符 "[" 的ASCII值除10余数:91 mod 10 =1    (注:为汉字时取低位字节ASCII码值)
          字符 "b" 的ASCII值除10余数:98 mod 10 =8
          字符 "c" 的ASCII值除10余数:99 mod 10 =9
          字符 "g" 的ASCII值除10余数:103 mod 10 =3
          字符 "]" 的ASCII值除10余数:93 mod 10 =3

       1 x 10^4+8 x 10^3+8 x 10^2+3 x 10^1+83 x 10^0=18833
       ( 若累加和不在10000--99999之间,还要转为10000--99999之间的5位数)
        

         23320 xor 57034(常数) =34258
         18833 xor 28691(常数) =14822

    两整数转字符串连结起来就得到注册码: 3425814822

5.VB注册机:

(使用 《软件加密技术内幕》配套光盘中 VbInLineASM控件 内联汇编 )

Private Sub Label1_Click()
Dim i As Integer
Dim s1 As String, s2 As String, s3 As String
Dim r1 As String, r2 As String
Dim t1 As Long, t2 As Long

On Error Resume Next
s1 = Text1.Text   '机器码
s2 = Text2.Text   '用户名
If IsNumeric(s1) <> True Or Len(s1) <> 10 Or Len(s2) < 2 Then
MsgBox "机器码10位数字,用户名至少两个字符!!", vbInformation, "提示:"
Exit Sub
End If
s3 = Right(s1, 7) + LCase(s2)

r1 = Left(s3, 5)
r2 = Right(s3, 5)

For i = 1 To 5
c1 = (AscB(Mid(r1, i, 1)) Mod 10) * (10 ^ (5 - i)) + c1
c2 = (AscB(Mid(r2, i, 1)) Mod 10) * (10 ^ (5 - i)) + c2
Next i

t1 = c1 Xor 57034
t2 = c2 Xor 28691

If t1 > 99999 Then
Call ss(t1)
End If

If t1 < 10000 Then
t1 = 10000 + t1
End If

If t2 > 99999 Then
   Call ss(t2)
End If

If t2 < 10000 Then
t2 = 10000 + t2
End If

Text3.Text = Trim(Str(t1)) + Trim(Str(t2))

End Sub

'Module1 中内联汇编代码,把大于99999的数转换为10000--99999之间的5位数
Sub ss(ByRef t As Long)
'#ASM_START
'  push ebp
'  mov ebp, esp
'  MOV edx,DWORD PTR SS:[ebp+8]
'  mov ecx,edx
'  MOV EDX,DWORD PTR DS:[EDX]
'  MOV EAX,1717986919
'  IMUL EDX
'  SAR EDX,2
'  MOV EAX,EDX
'  SHR EAX,31
'  ADD EDX,EAX
'  mov DWORD PTR SS:[ecx],edx
'  mov esp, ebp
'  pop ebp
'  ret 8
'#ASM_END

End Sub

6.后记:
      它还有网络验证,反正我也是在单机下偶尔玩玩而已,我分析的是7.2.0.667版.


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

收藏
免费 7
支持
分享
最新回复 (22)
雪    币: 238
活跃值: (250)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
2
第一个支持你!!
2005-3-13 19:31
0
雪    币: 817
活跃值: (1927)
能力值: ( LV12,RANK:2670 )
在线值:
发帖
回帖
粉丝
3
第2个支持你!!
2005-3-13 20:39
0
雪    币: 235
活跃值: (191)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
4
第三个支持你
2005-3-13 21:28
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
第四个支持你 代码好长啊 辛苦!
2005-3-13 21:52
0
雪    币: 202
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
第五个支持你!
2005-3-13 22:01
0
雪    币: 206
活跃值: (22)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
第六个支持你!
2005-3-13 22:33
0
雪    币: 214
活跃值: (15)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
楼主:能否将"脱壳后软件不能正常运行,跟踪可发现在如下位置有自校验"这个跟踪过程写详细一些?
2005-3-13 23:37
0
雪    币: 110
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
第 8 个支持你!
2005-3-14 00:11
0
雪    币: 260
活跃值: (81)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
大家象在接力啊?那我就是第九个支持你的!!
2005-3-14 00:32
0
雪    币: 123
活跃值: (101)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
第十个支持你。
2005-3-14 08:52
0
雪    币: 419
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
第七个支持你!
2005-3-14 09:36
0
雪    币: 162
活跃值: (63)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
13
楼主好辛苦啊!呵呵
  能把脱壳后的自校验查找过程写出来吗?
  辛苦了!!
2005-3-14 09:45
0
雪    币: 107
活跃值: (54)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
upup
2005-3-14 11:14
0
雪    币: 202
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
好作品。。。。。。
2005-3-14 13:17
0
雪    币: 200
活跃值: (227)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
向你学习了
2005-3-14 13:59
0
雪    币: 241
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
好文章,学习中
2005-3-14 15:40
0
雪    币: 817
活跃值: (1927)
能力值: ( LV12,RANK:2670 )
在线值:
发帖
回帖
粉丝
18
最初由 ljy3282393 发布
楼主:能否将"脱壳后软件不能正常运行,跟踪可发现在如下位置有自校验"这个跟踪过程写详细一些?


你拿脱壳机脱当然不行咯~~~,手脱!修复!!程序没有自校验,只有黑名单
2005-3-14 15:42
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
好文章
支持.....你...
2005-3-14 17:24
0
雪    币: 400
活跃值: (239)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
20
to KuNgBiM[DFCG]:请写一篇脱文如何?

--------------------------------------------
to ljy3282393 :

下面是我的跟法:

方法1: 单步跟

一般遇CALL先按F8跟,若跟飞啦,再按F7跟进,
小技巧:DLL中跳过CALL时可先打上注释,以后再查找注释,设断,可直来到注释处免的从头跟。

进入OD后中停在这里:

00409890 > $ 68 B0994000    PUSH unpacked.004099B0                   ;  ASCII "VB5!6&vb6chs.dll"
00409895   . E8 EEFFFFFF    CALL <JMP.&MSVBVM60.#100>         ;F7单步跟进
0040989A   . 0000           ADD BYTE PTR DS:[EAX],AL
0040989C   . 0000           ADD BYTE PTR DS:[EAX],AL
0040989E   . 0000           ADD BYTE PTR DS:[EAX],AL
004098A0   . 3000           XOR BYTE PTR DS:[EAX],AL
004098A2   . 0000           ADD BYTE PTR DS:[EAX],AL

来到这里:
00409888   $-FF25 28134000  JMP DWORD PTR DS:[<&MSVBVM60.#100>]      ;  MSVBVM60.ThunRTMain

                                                                     ;F7单步跟进

来到这里:
6600357C > 55               PUSH EBP
6600357D   8BEC             MOV EBP,ESP
6600357F   6A FF            PUSH -1
66003581   68 C0940166      PUSH MSVBVM60.660194C0
66003586   68 26B10E66      PUSH MSVBVM60.660EB126
6600358B   64:A1 00000000   MOV EAX,DWORD PTR FS:[0]
66003591   50               PUSH EAX
66003592   64:8925 00000000 MOV DWORD PTR FS:[0],ESP
66003599   51               PUSH ECX
6600359A   51               PUSH ECX
6600359B   83EC 4C          SUB ESP,4C
6600359E   53               PUSH EBX
6600359F   56               PUSH ESI
660035A0   57               PUSH EDI
660035A1   8965 E8          MOV DWORD PTR SS:[EBP-18],ESP
660035A4   8B75 08          MOV ESI,DWORD PTR SS:[EBP+8]
660035A7   8935 6CE71066    MOV DWORD PTR DS:[6610E76C],ESI
660035AD   8365 FC 00       AND DWORD PTR SS:[EBP-4],0
660035B1   8D45 A0          LEA EAX,DWORD PTR SS:[EBP-60]
660035B4   50               PUSH EAX
660035B5   FF15 18110066    CALL DWORD PTR DS:[<&KERNEL32.GetStartup>; KERNEL32.GetStartupInfoA
660035BB   0FB745 D0        MOVZX EAX,WORD PTR SS:[EBP-30]
660035BF   A3 68E71066      MOV DWORD PTR DS:[6610E768],EAX
660035C4   FF35 D4E61066    PUSH DWORD PTR DS:[6610E6D4]             ; unpacked.00400000
660035CA   56               PUSH ESI
660035CB   BE 70E41066      MOV ESI,MSVBVM60.6610E470
660035D0   8BCE             MOV ECX,ESI
660035D2   90               NOP
660035D3   E8 5C000000      CALL MSVBVM60.66003634            ;一定要F7单步跟进
660035D8   8945 E4          MOV DWORD PTR SS:[EBP-1C],EAX
660035DB   85C0             TEST EAX,EAX
660035DD   0F8C 5DC20100    JL MSVBVM60.6601F840
660035E3   6A 00            PUSH 0
660035E5   6A 00            PUSH 0
660035E7   68 69100000      PUSH 1069
660035EC   FF15 C8100066    CALL DWORD PTR DS:[<&KERNEL32.GetCurrent>; KERNEL32.GetCurrentThreadId
660035F2   50               PUSH EAX
660035F3   FF15 3C160066    CALL DWORD PTR DS:[<&USER32.PostThreadMe>; USER32.PostThreadMessageA
660035F9   8D45 9C          LEA EAX,DWORD PTR SS:[EBP-64]
660035FC   50               PUSH EAX

66003634   55               PUSH EBP
66003635   8BEC             MOV EBP,ESP
66003637   51               PUSH ECX
66003638   8B45 0C          MOV EAX,DWORD PTR SS:[EBP+C]
6600363B   53               PUSH EBX
6600363C   56               PUSH ESI
6600363D   57               PUSH EDI
6600363E   8B7D 08          MOV EDI,DWORD PTR SS:[EBP+8]
66003641   8BF1             MOV ESI,ECX
66003643   8B1D C8E61066    MOV EBX,DWORD PTR DS:[6610E6C8]
66003649   8065 FF 00       AND BYTE PTR SS:[EBP-1],0
6600364D   8986 1C010000    MOV DWORD PTR DS:[ESI+11C],EAX
66003653   8B47 3C          MOV EAX,DWORD PTR DS:[EDI+3C]
66003656   8026 00          AND BYTE PTR DS:[ESI],0
66003659   68 04010000      PUSH 104
6600365E   F7D0             NOT EAX
66003660   C1E8 03          SHR EAX,3
66003663   24 01            AND AL,1
66003665   6A 08            PUSH 8
66003667   53               PUSH EBX
66003668   89BE 20010000    MOV DWORD PTR DS:[ESI+120],EDI
6600366E   8846 01          MOV BYTE PTR DS:[ESI+1],AL
66003671   FF15 D0100066    CALL DWORD PTR DS:[<&KERNEL32.HeapAlloc>>; ntdll.RtlAllocateHeap
66003677   85C0             TEST EAX,EAX
66003679   0F84 5CB30100    JE MSVBVM60.6601E9DB
6600367F   8918             MOV DWORD PTR DS:[EAX],EBX
66003681   83C0 04          ADD EAX,4
66003684   85C0             TEST EAX,EAX
66003686   0F84 4FB30100    JE MSVBVM60.6601E9DB
6600368C   6A 01            PUSH 1
6600368E   8BC8             MOV ECX,EAX
66003690   E8 5B000000      CALL MSVBVM60.660036F0
66003695   8BD8             MOV EBX,EAX
66003697   85DB             TEST EBX,EBX
66003699   0F84 43B30100    JE MSVBVM60.6601E9E2
6600369F   FF15 C8100066    CALL DWORD PTR DS:[<&KERNEL32.GetCurrent>; KERNEL32.GetCurrentThreadId
660036A5   56               PUSH ESI
660036A6   8BCB             MOV ECX,EBX
660036A8   8946 24          MOV DWORD PTR DS:[ESI+24],EAX
660036AB   E8 F6000000      CALL MSVBVM60.660037A6
660036B0   85C0             TEST EAX,EAX
660036B2   8945 08          MOV DWORD PTR SS:[EBP+8],EAX
660036B5   0F8C 2EB30100    JL MSVBVM60.6601E9E9
660036BB   53               PUSH EBX
660036BC   8BCE             MOV ECX,ESI
660036BE   E8 4D010000      CALL MSVBVM60.66003810
660036C3   FF75 0C          PUSH DWORD PTR SS:[EBP+C]
660036C6   8BCB             MOV ECX,EBX
660036C8   C645 FF 01       MOV BYTE PTR SS:[EBP-1],1
660036CC   57               PUSH EDI
660036CD   E8 9B010000      CALL MSVBVM60.6600386D          ;一定要F7单步跟进跟进
660036D2   85C0             TEST EAX,EAX
660036D4   8945 08          MOV DWORD PTR SS:[EBP+8],EAX
660036D7   0F8C 0CB30100    JL MSVBVM60.6601E9E9
660036DD   807E 01 00       CMP BYTE PTR DS:[ESI+1],0
660036E1   0F85 46B30100    JNZ MSVBVM60.6601EA2D
660036E7   33C0             XOR EAX,EAX
660036E9   5F               POP EDI
660036EA   5E               POP ESI
660036EB   5B               POP EBX
660036EC   C9               LEAVE
660036ED   C2 0800          RETN 8

来到这里:

6600386D   55               PUSH EBP
6600386E   8BEC             MOV EBP,ESP
66003870   51               PUSH ECX
66003871   8365 FC 00       AND DWORD PTR SS:[EBP-4],0
66003875   53               PUSH EBX
66003876   56               PUSH ESI
66003877   57               PUSH EDI
66003878   8B7D 08          MOV EDI,DWORD PTR SS:[EBP+8]
6600387B   8BF1             MOV ESI,ECX
6600387D   85FF             TEST EDI,EDI
6600387F   0F84 76AE0100    JE MSVBVM60.6601E6FB
66003885   8B45 0C          MOV EAX,DWORD PTR SS:[EBP+C]
66003888   85C0             TEST EAX,EAX
6600388A   0F84 79AE0100    JE MSVBVM60.6601E709
66003890   6A 01            PUSH 1
66003892   8945 08          MOV DWORD PTR SS:[EBP+8],EAX
66003895   5B               POP EBX
66003896   395E 3C          CMP DWORD PTR DS:[ESI+3C],EBX
66003899   7D 18            JGE SHORT MSVBVM60.660038B3
6600389B   8B4E 28          MOV ECX,DWORD PTR DS:[ESI+28]
6600389E   50               PUSH EAX
6600389F   57               PUSH EDI
660038A0   E8 E5000000      CALL MSVBVM60.6600398A
660038A5   85C0             TEST EAX,EAX
660038A7   8945 FC          MOV DWORD PTR SS:[EBP-4],EAX
660038AA   0F8C AC000000    JL MSVBVM60.6600395C
660038B0   895E 3C          MOV DWORD PTR DS:[ESI+3C],EBX
660038B3   833D 70E71066 00 CMP DWORD PTR DS:[6610E770],0
660038BA   0F85 57AE0100    JNZ MSVBVM60.6601E717
660038C0   8B5F 3C          MOV EBX,DWORD PTR DS:[EDI+3C]
660038C3   C1E3 1D          SHL EBX,1D
660038C6   C1FB 1F          SAR EBX,1F
660038C9   837E 3C 02       CMP DWORD PTR DS:[ESI+3C],2
660038CD   7D 41            JGE SHORT MSVBVM60.66003910
660038CF   8B47 3C          MOV EAX,DWORD PTR DS:[EDI+3C]
660038D2   C1E0 1F          SHL EAX,1F
660038D5   C1F8 1F          SAR EAX,1F
660038D8   50               PUSH EAX
660038D9   FF76 2C          PUSH DWORD PTR DS:[ESI+2C]
660038DC   E8 4E230000      CALL MSVBVM60.66005C2F
660038E1   85C0             TEST EAX,EAX
660038E3   8945 FC          MOV DWORD PTR SS:[EBP-4],EAX
660038E6   7C 74            JL SHORT MSVBVM60.6600395C
660038E8   F647 3C 01       TEST BYTE PTR DS:[EDI+3C],1
660038EC   6A 02            PUSH 2
660038EE   58               POP EAX
660038EF   8946 3C          MOV DWORD PTR DS:[ESI+3C],EAX
660038F2   0F85 2AAE0100    JNZ MSVBVM60.6601E722
660038F8   33C9             XOR ECX,ECX
660038FA   3946 30          CMP DWORD PTR DS:[ESI+30],EAX
660038FD   0F94C1           SETE CL
66003900   84C9             TEST CL,CL
66003902   0F85 1AAE0100    JNZ MSVBVM60.6601E722
66003908   85DB             TEST EBX,EBX
6600390A   0F85 12AE0100    JNZ MSVBVM60.6601E722
66003910   837E 3C 03       CMP DWORD PTR DS:[ESI+3C],3
66003914   7D 28            JGE SHORT MSVBVM60.6600393E
66003916   85DB             TEST EBX,EBX
66003918   0F85 1AAE0100    JNZ MSVBVM60.6601E738
6600391E   8B47 3C          MOV EAX,DWORD PTR DS:[EDI+3C]
66003921   C1E0 1F          SHL EAX,1F
66003924   C1F8 1F          SAR EAX,1F
66003927   50               PUSH EAX
66003928   FF76 2C          PUSH DWORD PTR DS:[ESI+2C]
6600392B   E8 9F3B0000      CALL MSVBVM60.660074CF
66003930   85C0             TEST EAX,EAX
66003932   8945 FC          MOV DWORD PTR SS:[EBP-4],EAX
66003935   7C 25            JL SHORT MSVBVM60.6600395C
66003937   C746 3C 03000000 MOV DWORD PTR DS:[ESI+3C],3
6600393E   FF75 08          PUSH DWORD PTR SS:[EBP+8]
66003941   E8 C13F0000      CALL MSVBVM60.66007907
66003946   85C0             TEST EAX,EAX
66003948   0F85 00AE0100    JNZ MSVBVM60.6601E74E
6600394E   FF75 08          PUSH DWORD PTR SS:[EBP+8]
66003951   8BCE             MOV ECX,ESI
66003953   57               PUSH EDI
66003954   E8 6A400000      CALL MSVBVM60.660079C3          ;F7单步跟进
66003959   8945 FC          MOV DWORD PTR SS:[EBP-4],EAX
6600395C   837D FC 00       CMP DWORD PTR SS:[EBP-4],0
66003960   0F8C 1AAE0100    JL MSVBVM60.6601E780
66003966   8B45 FC          MOV EAX,DWORD PTR SS:[EBP-4]
66003969   8986 F0000000    MOV DWORD PTR DS:[ESI+F0],EAX
6600396F   33C0             XOR EAX,EAX
66003971   837E 30 02       CMP DWORD PTR DS:[ESI+30],2
66003975   0F94C0           SETE AL
66003978   84C0             TEST AL,AL
6600397A   0F85 16AE0100    JNZ MSVBVM60.6601E796
66003980   8B45 FC          MOV EAX,DWORD PTR SS:[EBP-4]
66003983   5F               POP EDI
66003984   5E               POP ESI
66003985   5B               POP EBX
66003986   C9               LEAVE
66003987   C2 0800          RETN 8

来到这里:

660079C3   55               PUSH EBP
660079C4   8BEC             MOV EBP,ESP
660079C6   83EC 0C          SUB ESP,0C
660079C9   53               PUSH EBX
660079CA   56               PUSH ESI
660079CB   8BF1             MOV ESI,ECX
660079CD   57               PUSH EDI
660079CE   33DB             XOR EBX,EBX
660079D0   8D4D F8          LEA ECX,DWORD PTR SS:[EBP-8]
660079D3   8B46 28          MOV EAX,DWORD PTR DS:[ESI+28]
660079D6   895D FC          MOV DWORD PTR SS:[EBP-4],EBX
660079D9   83C0 28          ADD EAX,28
660079DC   50               PUSH EAX
660079DD   E8 4ABBFFFF      CALL MSVBVM60.6600352C
660079E2   8D45 FC          LEA EAX,DWORD PTR SS:[EBP-4]
660079E5   50               PUSH EAX
660079E6   FF75 0C          PUSH DWORD PTR SS:[EBP+C]
660079E9   FF75 08          PUSH DWORD PTR SS:[EBP+8]
660079EC   E8 7A000000      CALL MSVBVM60.66007A6B
660079F1   8BF8             MOV EDI,EAX
660079F3   3BFB             CMP EDI,EBX
660079F5   0F8C BD6D0100    JL MSVBVM60.6601E7B8
660079FB   8B46 28          MOV EAX,DWORD PTR DS:[ESI+28]
660079FE   FF46 24          INC DWORD PTR DS:[ESI+24]
66007A01   6A 01            PUSH 1
66007A03   3998 24010000    CMP DWORD PTR DS:[EAX+124],EBX
66007A09   5F               POP EDI
66007A0A   75 16            JNZ SHORT MSVBVM60.66007A22
66007A0C   E8 A6230000      CALL MSVBVM60.66009DB7
66007A11   85C0             TEST EAX,EAX
66007A13   0F84 AE6D0100    JE MSVBVM60.6601E7C7
66007A19   8B46 28          MOV EAX,DWORD PTR DS:[ESI+28]
66007A1C   89B8 24010000    MOV DWORD PTR DS:[EAX+124],EDI
66007A22   8D4D F8          LEA ECX,DWORD PTR SS:[EBP-8]
66007A25   E8 35BBFFFF      CALL MSVBVM60.6600355F
66007A2A   8B4D FC          MOV ECX,DWORD PTR SS:[EBP-4]
66007A2D   8D45 F4          LEA EAX,DWORD PTR SS:[EBP-C]
66007A30   50               PUSH EAX
66007A31   E8 171C0000      CALL MSVBVM60.6600964D         
66007A36   85C0             TEST EAX,EAX
66007A38   74 18            JE SHORT MSVBVM60.66007A52
66007A3A   FF75 F4          PUSH DWORD PTR SS:[EBP-C]
66007A3D   8BCE             MOV ECX,ESI
66007A3F   FF75 FC          PUSH DWORD PTR SS:[EBP-4]
66007A42   E8 1F240000      CALL MSVBVM60.66009E66
66007A47   3BC3             CMP EAX,EBX
66007A49   8945 0C          MOV DWORD PTR SS:[EBP+C],EAX
66007A4C   0F8C 936D0100    JL MSVBVM60.6601E7E5
66007A52   FF75 FC          PUSH DWORD PTR SS:[EBP-4]
66007A55   E8 8A240000      CALL MSVBVM60.66009EE4               ;F7单步跟进
66007A5A   85C0             TEST EAX,EAX
66007A5C   0F84 976D0100    JE MSVBVM60.6601E7F9
66007A62   33C0             XOR EAX,EAX
66007A64   5F               POP EDI
66007A65   5E               POP ESI
66007A66   5B               POP EBX
66007A67   C9               LEAVE
66007A68   C2 0800          RETN 8

来到:

66009EE4   55               PUSH EBP
66009EE5   8BEC             MOV EBP,ESP
66009EE7   81EC 30010000    SUB ESP,130
66009EED   56               PUSH ESI
66009EEE   8B75 08          MOV ESI,DWORD PTR SS:[EBP+8]
66009EF1   57               PUSH EDI
66009EF2   8B46 10          MOV EAX,DWORD PTR DS:[ESI+10]
66009EF5   F640 3C 01       TEST BYTE PTR DS:[EAX+3C],1
66009EF9   75 26            JNZ SHORT MSVBVM60.66009F21
66009EFB   8D85 D0FEFFFF    LEA EAX,DWORD PTR SS:[EBP-130]
66009F01   68 04010000      PUSH 104
66009F06   50               PUSH EAX
66009F07   8BCE             MOV ECX,ESI
66009F09   E8 68000000      CALL MSVBVM60.66009F76
66009F0E   8D85 D0FEFFFF    LEA EAX,DWORD PTR SS:[EBP-130]
66009F14   50               PUSH EAX
66009F15   E8 BC000000      CALL MSVBVM60.66009FD6
66009F1A   50               PUSH EAX
66009F1B   FF15 DC140066    CALL DWORD PTR DS:[<&USER32.SetWindowTex>; USER32.SetWindowTextA
66009F21   6A 00            PUSH 0
66009F23   E8 6AC7FFFF      CALL MSVBVM60.66006692
66009F28   8B46 30          MOV EAX,DWORD PTR DS:[ESI+30]
66009F2B   83F8 FF          CMP EAX,-1
66009F2E   74 08            JE SHORT MSVBVM60.66009F38
66009F30   85C0             TEST EAX,EAX
66009F32   0F85 EC450100    JNZ MSVBVM60.6601E524
66009F38   83BE 94000000 00 CMP DWORD PTR DS:[ESI+94],0
66009F3F   74 2C            JE SHORT MSVBVM60.66009F6D
66009F41   8B46 1C          MOV EAX,DWORD PTR DS:[ESI+1C]
66009F44   8945 F8          MOV DWORD PTR SS:[EBP-8],EAX
66009F47   8D45 D4          LEA EAX,DWORD PTR SS:[EBP-2C]
66009F4A   50               PUSH EAX
66009F4B   E8 AB000000      CALL MSVBVM60.66009FFB
66009F50   50               PUSH EAX
66009F51   E8 F9300F00      CALL MSVBVM60.660FD04F
66009F56   85C0             TEST EAX,EAX
66009F58   0F85 10460100    JNZ MSVBVM60.6601E56E
66009F5E   FF96 94000000    CALL DWORD PTR DS:[ESI+94]     ; unpacked.004A1E10
                                                           ;到这句就跳向程序领空
66009F64   8D45 D4          LEA EAX,DWORD PTR SS:[EBP-2C]
66009F67   50               PUSH EAX
66009F68   E8 0B030000      CALL MSVBVM60.6600A278
66009F6D   6A 01            PUSH 1
66009F6F   58               POP EAX
66009F70   5F               POP EDI
66009F71   5E               POP ESI
66009F72   C9               LEAVE
66009F73   C2 0400          RETN 4

程序领空:(现在程序就在我们掌控下啦,剩下就慢慢跟吧)
004A1E10   . 55             PUSH EBP
004A1E11   . 8BEC           MOV EBP,ESP
004A1E13   . 83EC 18        SUB ESP,18
004A1E16   . 68 A6924000    PUSH <JMP.&MSVBVM60.__vbaExceptHandler>  ;  SE handler installation
004A1E1B   . 64:A1 00000000 MOV EAX,DWORD PTR FS:[0]
004A1E21   . 50             PUSH EAX
004A1E22   . 64:8925 000000>MOV DWORD PTR FS:[0],ESP
004A1E29   . B8 54030000  
             .....................
             .....................
             .....................
         
方法2: 投机取巧
      既然程序一运行就退出,试一下在OD中对所有参考字符串设断,看能不能中断它。

  F9运行被OD中断在这里,向下可看到函数: rtcFileLen,很明显这是用来读文件长度的。
   
004AD431   . 68 102B4200    PUSH unpacked.00422B10                   ;  UNICODE ".exe"
004AD436   . FFD6           CALL ESI
004AD438   . 8BD0           MOV EDX,EAX
004AD43A   . 8D4D E8        LEA ECX,DWORD PTR SS:[EBP-18]
004AD43D   . FFD7           CALL EDI
004AD43F   . 8D55 D8        LEA EDX,DWORD PTR SS:[EBP-28]
004AD442   . 52             PUSH EDX
004AD443   . 8D45 E0        LEA EAX,DWORD PTR SS:[EBP-20]
004AD446   . 50             PUSH EAX
004AD447   . 8D4D DC        LEA ECX,DWORD PTR SS:[EBP-24]
004AD44A   . 51             PUSH ECX
004AD44B   . 8D55 E4        LEA EDX,DWORD PTR SS:[EBP-1C]
004AD44E   . 52             PUSH EDX
004AD44F   . 6A 04          PUSH 4
004AD451   . FF15 08134000  CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeS>;  MSVBVM60.__vbaFreeStrList
004AD457   . 8D45 D0        LEA EAX,DWORD PTR SS:[EBP-30]
004AD45A   . 50             PUSH EAX
004AD45B   . 8D4D D4        LEA ECX,DWORD PTR SS:[EBP-2C]
004AD45E   . 51             PUSH ECX
004AD45F   . 6A 02          PUSH 2
004AD461   . FF15 68104000  CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeO>;  MSVBVM60.__vbaFreeObjList
004AD467   . 8B55 E8        MOV EDX,DWORD PTR SS:[EBP-18]
004AD46A   . 83C4 20        ADD ESP,20                               ;  
004AD46D   . 52             PUSH EDX
004AD46E   . FF15 20134000  CALL DWORD PTR DS:[<&MSVBVM60.#578>]     ;  MSVBVM60.rtcFileLen
004AD474   . 3D 801A0600    CMP EAX,61A80

跳过这里比较后,运行发现不久程序就会突然退出,再查找rtcFileLen可发别处比较。

其实不脱壳也可对它跟。
2005-3-14 20:12
0
雪    币: 277
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
收藏文章学习思路
2005-3-16 12:47
0
雪    币: 61
活跃值: (160)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
22
好作品
2005-3-16 19:27
0
雪    币: 217
活跃值: (91)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
23
一直期待的......
2005-4-9 14:48
0
游客
登录 | 注册 方可回帖
返回
//