首页
社区
课程
招聘
需要指明一个方向~我自己研究(Delphi程序&网络验证)
发表于: 2010-3-29 11:21 6079

需要指明一个方向~我自己研究(Delphi程序&网络验证)

2010-3-29 11:21
6079
首先要感谢看雪论坛,提供了非常多的研究资料和这个交流平台。
一直以来,我主要靠《看雪学院精华帖集1-9》进行破解方面的研究,为什么后面没有继续出精华帖合集了~~好遗憾~~~
今天想请教的是一个DELPHI编译的程序,使用的是网络验证,不是想请教很具体的问题,只是需要一个方向~~有兴趣的也可以看看我分析出来的程序流程。疑问放在了本文的末尾~~~~
===========================
破解软件:某网络游戏辅助程序
破解平台:Win xp sp3
使用到的工具:PEID\DIE\UnNsPack\DeDeDark\IDA\OD\PackAssist1130

厄~突然之间不知道从哪里引入话题了。。查壳、脱壳都是直接用的别人的工具,没什么好说的,问题应该是从按钮的事件响应函数开始,脱壳后知道程序是用DELPHI编写的,使用DEDE反编译成功~~直接找到登陆按钮对应函数,TForm1类下的bsSkinButton4Click,内容如下:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
0050FDD8   55                     push    ebp
0050FDD9   8BEC                   mov     ebp, esp
0050FDDB   B908000000             mov     ecx, $00000008
0050FDE0   6A00                   push    $00
0050FDE2   6A00                   push    $00
0050FDE4   49                     dec     ecx
0050FDE5   75F9                   jnz     0050FDE0
0050FDE7   51                     push    ecx
0050FDE8   53                     push    ebx
0050FDE9   8945FC                 mov     [ebp-$04], eax
0050FDEC   33C0                   xor     eax, eax
0050FDEE   55                     push    ebp

* Possible String Reference to: '?>?胫[嬪]?
|
0050FDEF   6871015100             push    $00510171

***** TRY
|
0050FDF4   64FF30                 push    dword ptr fs:[eax]
0050FDF7   648920                 mov     fs:[eax], esp
0050FDFA   68A6DEDEB7             push    $B7DEDEA6
0050FDFF   E989B41900             jmp     006AB28D

(注,以下灰色代码,虽然是函数的一部分,但不管是登陆成功还是失败,貌似都是不执行的~~)
0050FE04   98                     cwde
0050FE05   52                     push    edx
0050FE06   59                     pop     ecx
0050FE07   3937                   cmp     [edi], esi
0050FE09   F7F4                   div     esp
0050FE0B   F0                     lock
0050FE0C   E1A2                   loope   -$5E
0050FE0E   6E                     outsb
0050FE0F   F2                     repne
0050FE10   054E383706             add     eax, +$0637384E
0050FE15   D06AE4                 shr     byte ptr [edx-$1C], 1
0050FE18   084870                 or      [eax+$70], cl
0050FE1B   0E                     push    cs
0050FE1C   59                     pop     ecx
0050FE1D   CD80                   int     $80
0050FE1F   7FA7                   jnle    0050FDC8
0050FE21   9A989A8D05             call    $58D9A98
0050FE26   7440                   jz      0050FE68
0050FE28   59                     pop     ecx
0050FE29   4A                     dec     edx
0050FE2A   94                     xchg    eax, esp
0050FE2B   90                     nop
0050FE2C   D6                     DB  $D6  //
0050FE2D   8AA0ABB0A3FF           mov     ah, byte ptr [eax+$FFA3B0AB]
0050FE33   F4                     hlt
0050FE34   E3ED                   jcxz    -$13
0050FE36   3A2A                   cmp     ch, byte ptr [edx]
0050FE38   EBC6                   jmp     0050FE00
0050FE3A   8A6F7D                 mov     ch, byte ptr [edi+$7D]
0050FE3D   8FEE                   pop     esi
0050FE3F   00D7                   add     bh, dl
0050FE41   1E                     push    ds
0050FE42   8C7732                 mov     word ptr [edi+$32],
0050FE45   97                     xchg    eax, edi
0050FE46   BA61541A69             mov     edx, $691A5461
0050FE4B   C9                     leave
0050FE4C   EE                     out     dx, al
0050FE4D   6D                     insd
0050FE4E   CE                     into
0050FE4F   FC                     cld
0050FE50   C9                     leave
0050FE51   FB                     sti
0050FE52   A4                     movsb
0050FE53   C1CDA5                 ror     ebp, $A5
0050FE56   42                     inc     edx
0050FE57   3391FF8D0CF7           xor     edx, [ecx+$F70C8DFF]
0050FE5D   5D                     pop     ebp
0050FE5E   A7                     cmpsd
0050FE5F   5B                     pop     ebx
0050FE60   44                     inc     esp
0050FE61   FC                     cld
0050FE62   05E7CE6223             add     eax, +$2362CEE7
0050FE67   D4                     aam
0050FE68   51                     push    ecx
0050FE69   EC                     in      al, dx
0050FE6A   9D                     pop     
0050FE6B   69F49357DB06           imul    esi, esp, $06DB5793
0050FE71   FB                     sti
0050FE72   F6ACB2845E4031         imul    byte ptr [edx+esi*4+$31405E84], al
0050FE79   05EFCABDEA             add     eax, -$15423511
0050FE7E   5C                     pop     esp
0050FE7F   D38B7A0C0E16           ror     dword ptr [ebx+$160E0C7A], cl
0050FE85   CE                     into
0050FE86   40                     inc     eax
0050FE87   4D                     dec     ebp
0050FE88   AA                     stosb
0050FE89   46                     inc     esi
0050FE8A   3DD311F6B4             cmp     eax, $B4F611D3
0050FE8F   85B24705CE22           test    [edx+$22CE0547], esi
0050FE95   6B6C99C536             imul    ebp, [ecx+ebx*4-$3B], $36
0050FE9A   56                     push    esi
0050FE9B   115B4E                 adc     [ebx+$4E], ebx
0050FE9E   84C3                   test    bl, al
0050FEA0   38F0                   cmp     al, dh
0050FEA2   95                     xchg    eax, ebp
0050FEA3   A859                   test    al, $59
0050FEA5   3A26                   cmp     ah, byte ptr [esi]
0050FEA7   83495158               or      dword ptr [ecx+$51], +$58
0050FEAB   3884B117E371E8         cmp     [ecx+esi*4+$E871E317], al
0050FEB2   CD8A                   int     $8A
0050FEB4   97                     xchg    eax, edi
0050FEB5   E2E8                   loop    -$18
0050FEB7   2CFB                   sub     al, $FB
0050FEB9   854BBD                 test    [ebx-$43], ecx
0050FEBC   BE8A8B8D94             mov     esi, $948D8B8A
0050FEC1   57                     push    edi
0050FEC2   F5                     cmc
0050FEC3   A134E28826             mov     eax, dword ptr [$2688E234]
0050FEC8   B07A                   mov     al, $7A
0050FECA   F3                     rep
0050FECB   A1F45D3121             mov     eax, dword ptr [$21315DF4]
0050FED0   DDDC                   fstp    st(4)
0050FED2   B6A2                   mov     dh, $A2
0050FED4   632F                   arpl    [edi], bp
0050FED6   0CF6                   or      al, $F6
0050FED8   BAF27D4A00             mov     edx, $004A7DF2
0050FEDD   6212                   bound   edx, qword ptr [edx]
0050FEDF   B430                   mov     ah, $30
0050FEE1   DB5DFB                 fistp   dword ptr [ebp-$05]
0050FEE4   9F                     lahf
0050FEE5   61                     popa
0050FEE6   EF                     out     dx, eax
0050FEE7   7A3A                   jp      0050FF23
0050FEE9   3928                   cmp     [eax], ebp
0050FEEB   1F                     pop     ds
0050FEEC   09E3                   or      ebx, esp
0050FEEE   E7A8                   out     $A8, eax
0050FEF0   91                     xchg    eax, ecx
0050FEF1   5F                     pop     edi
0050FEF2   B476                   mov     ah, $76
0050FEF4   834276CA               add     dword ptr [edx+$76], -$36
0050FEF8   C9                     leave
0050FEF9   729F                   jb      0050FE9A
0050FEFB   CB                     ret

0050FEFC   DC39                   fdivr   qword ptr [ecx]
0050FEFE   7B04                   jnp     0050FF04
0050FF00   41                     inc     ecx
0050FF01   1BC0                   sbb     eax, eax
0050FF03   0DB37901FF             or      eax, $FF0179B3
0050FF08   D6                     DB  $D6  //
0050FF09   AA                     stosb
0050FF0A   92                     xchg    eax, edx
0050FF0B   58                     pop     eax
0050FF0C   FB                     sti
0050FF0D   4C                     dec     esp
0050FF0E   D7                     xlat
0050FF0F   626158                 bound   esp, qword ptr [ecx+$58]
0050FF12   3E33592D               xor     ebx, ds:[ecx+$2D]
0050FF16   16                     push    ss
0050FF17   7258                   jb      0050FF71
0050FF19   50                     push    eax
0050FF1A   AC                     lodsb
0050FF1B   02CB                   add     cl, bl
0050FF1D   1216                   adc     dl, byte ptr [esi]
0050FF1F   6805D6610C             push    $0C61D605
0050FF24   8846E4                 mov     [esi-$1C], al
0050FF27   893E                   mov     [esi], edi
0050FF29   EBB3                   jmp     0050FEDE
0050FF2B   91                     xchg    eax, ecx
0050FF2C   BF7F7E6D64             mov     edi, $646D7E7F
0050FF31   4E                     dec     esi
0050FF32   282CEDD69F0D5E         sub     [$5E0D9FD6+ebp*8], ch
0050FF39   B438                   mov     ah, $38
0050FF3B   3474                   xor     al, $74
0050FF3D   D4                     aam
0050FF3E   B059                   mov     al, $59
0050FF40   45                     inc     ebp
0050FF41   31808BE03E52           xor     [eax+$523EE08B], eax
0050FF47   DED8                   DB  $DE, $D8  //
0050FF49   20D1                   and     cl, dl
0050FF4B   EA06D9AF8C             jmp     $8CAFD906
0050FF50   2CDB                   sub     al, $DB
0050FF52   8CB9E33367AA           mov     word ptr [ecx+$AA6733E3],
0050FF58   E69B                   out     $9B, al
0050FF5A   9D                     pop     
0050FF5B   F8                     clc
0050FF5C   27                     daa
0050FF5D   07                     pop     es
0050FF5E   02BD00523E9A           add     bh, byte ptr [ebp+$9A3E5200]
0050FF64   EAA6DA1EC5             jmp     $C51EDAA6
0050FF69   859080FA47C3           test    [eax+$C347FA80], edx
0050FF6F   5F                     pop     edi
0050FF70   E1F2                   loope   -$0E
0050FF72   8E1DB8314026           mov     ds, word ptr [$264031B8]
0050FF78   2C35                   sub     al, $35
0050FF7A   22BC47F26E2CCA         and     bh, byte ptr [edi+eax*2+$CA2C6EF2]
0050FF81   6F                     outsd
0050FF82   24D1                   and     al, $D1
0050FF84   99                     cdq
0050FF85   21C6                   and     esi, eax
0050FF87   15F1E2CAD2             adc     eax, $D2CAE2F1
0050FF8C   9A73585520             call    $20555873
0050FF91   FD                     std
0050FF92   2427                   and     al, $27
0050FF94   121580D4C310           adc     dl, byte ptr [$10C3D480]
0050FF9A   E3CB                   jcxz    -$35
0050FF9C   63ADBC49D8B6           arpl    [ebp+$B6D849BC], bp
0050FFA2   97                     xchg    eax, edi
0050FFA3   D1BEC1D1D655           sar     dword ptr [esi+$55D6D1C1], 1
0050FFA9   8ED3                   mov     ss, bx
0050FFAB   A4                     movsb
0050FFAC   3336                   xor     esi, [esi]
0050FFAE   F8                     clc
0050FFAF   F9                     stc
0050FFB0   5A                     pop     edx
0050FFB1   3A86B45B3A68           cmp     al, byte ptr [esi+$683A5BB4]
0050FFB7   7C40                   jl      0050FFF9
0050FFB9   B503                   mov     ch, $03
0050FFBB   C67B4074               mov     byte ptr [ebx+$40], $74
0050FFBF   7252                   jb      00510013
0050FFC1   EF                     out     dx, eax
0050FFC2   3D00A188AC             cmp     eax, $AC88A100
0050FFC7   65B6EC                 mov     dh, $EC
0050FFCA   DE18                   ficomp  word ptr [eax]
0050FFCC   02C8                   add     cl, al
0050FFCE   6BBE25F9C77314         imul    edi, [esi+$73C7F925], $14
0050FFD5   260980AEF70BCF         or      es:[eax+$CF0BF7AE], eax
0050FFDC   BB3CE56C23             mov     ebx, $236CE53C
0050FFE1   CE                     into
0050FFE2   6E                     outsb
0050FFE3   EE                     out     dx, al
0050FFE4   AE                     scasb
0050FFE5   59                     pop     ecx
0050FFE6   0DAFA8784E             or      eax, $4E78A8AF
0050FFEB   46                     inc     esi
0050FFEC   241F                   and     al, $1F
0050FFEE   27                     daa
0050FFEF   03F1                   add     esi, ecx
0050FFF1   EC                     in      al, dx
0050FFF2   DDB88387D923           fstsw   word ptr [eax+$23D98783]
0050FFF8   737E                   jnb     00510078
0050FFFA   2E7460                 jz      0051005D
0050FFFD   5A                     pop     edx
0050FFFE   AC                     lodsb
0050FFFF   6F                     outsd
00510000   50                     push    eax
00510001   1F                     pop     ds
00510002   07                     pop     es
00510003   6654                   push    sp
00510005   B7C8                   mov     bh, $C8
00510007   855A48                 test    [edx+$48], ebx
0051000A   788D                   js      0050FF99
0051000C   0C23                   or      al, $23
0051000E   F4                     hlt
0051000F   CF                     iret
00510010   A4                     movsb
00510011   847F36                 test    [edi+$36], bh
00510014   8DDF                   lea     ebx, edi
00510016   CB                     ret

00510017   27                     daa
00510018   FC                     cld
00510019   67B231                 mov     dl, $31
0051001C   C1F835                 sar     eax, $35
0051001F   DCBBAAF2E0C0           fdivr   qword ptr [ebx+$C0E0F2AA]
00510025   50                     push    eax
00510026   A05FAE85E5             mov     al, byte ptr [$E585AE5F]
0051002B   E79B                   out     $9B, eax
0051002D   D8E4                   fsub    st(0), st(4)
0051002F   C9                     leave
00510030   D2FA                   sar     dl, cl
00510032   25FD476B79             and     eax, $796B47FD
00510037   0414                   add     al, +$14
00510039   7B9D                   jnp     0050FFD8
0051003B   E377                   jcxz    +$77
0051003D   653903                 cmp     gs:[ebx], eax
00510040   96                     xchg    eax, esi
00510041   3F                     aas
00510042   F9                     stc
00510043   AD                     lodsd
00510044   45                     inc     ebp
00510045   06                     push    es
00510046   C868                   enter   , $68
00510048   22C1                   and     al, cl
0051004A   65DEA48476795C27       fisub   word ptr gs:[esp+eax*4+$275C7976]
00510052   211B                   and     [ebx], ebx
00510054   E49F                   in      al, $9F
00510056   E226                   loop    +$26
00510058   2021                   and     [ecx], ah
0051005A   D3F3                   DB  $D3, $F3  //      ebx, cl
0051005C   E224                   loop    +$24
0051005E   2EA3F5740C89           mov     dword ptr [$890C74F5], eax
00510064   8F4161                 pop     dword ptr [ecx+$61]
00510067   4D                     dec     ebp
00510068   A3940957A1             mov     dword ptr [$A1570994], eax
0051006D   8D20                   lea     esp, [eax]
0051006F   0C13                   or      al, $13
00510071   5A                     pop     edx
00510072   81D31D1917B8           adc     ebx, $B817191D
00510078   71BF                   jno     00510039
0051007A   0476                   add     al, +$76
0051007C   673DC98FEC7A           cmp     eax, $7AEC8FC9
00510082   8F635F                 pop     dword ptr [ebx+$5F]
00510085   E7EC                   out     $EC, eax
00510087   6AE9                   push    $E9
00510089   81FE10DEC65E           cmp     esi, $5EC6DE10
0051008F   A8B2                   test    al, $B2
00510091   58                     pop     eax
00510092   A5                     movsd
00510093   7D75                   jnl     0051010A
00510095   7EDF                   jle     00510076
00510097   E0FA                   loopn   -$06
00510099   FFC0                   inc     eax
0051009B   9B                     wait
0051009C   08915A14B3B9           or      [ecx+$B9B3145A], dl
005100A2   AA                     stosb
005100A3   91                     xchg    eax, ecx
005100A4   33B634E2A334           xor     esi, [esi+$34A3E234]
005100AA   CD8B                   int     $8B
005100AC   43                     inc     ebx
005100AD   ED                     in      eax, dx
005100AE   7616                   jbe     005100C6
005100B0   382E                   cmp     [esi], ch
005100B2   37                     aaa
005100B3   19D3                   sbb     ebx, edx
005100B5   BBB9B58862             mov     ebx, $6288B5B9
005100BA   2C16                   sub     al, $16
005100BC   2E70ED                 jo      005100AC
005100BF   8D1427                 lea     edx, [edi]
005100C2   6D                     insd
005100C3   28E2                   sub     dl, ah
005100C5   FE4BA5                 dec     byte ptr [ebx-$5B]
005100C8   EE                     out     dx, al
005100C9   D352A0                 rcl     dword ptr [edx-$60], cl
005100CC   EA3935E237             jmp     $37E23539
005100D1   231D6F119BE5           and     ebx, [$E59B116F]
005100D7   22A2EAC6DA2A           and     ah, byte ptr [edx+$2ADAC6EA]
005100DD   F611                   not     byte ptr [ecx]
005100DF   024BF2                 add     cl, byte ptr [ebx-$0E]
005100E2   05EAC170D2             add     eax, -$2D8F3E16
005100E7   896681                 mov     [esi-$7F], esp
005100EA   61                     popa
005100EB   4C                     dec     esp
005100EC   5A                     pop     edx
005100ED   CB                     ret

005100EE   EBA6                   jmp     00510096
005100F0   FA                     cli
005100F1   E0E3                   loopn   -$1D
005100F3   CE                     into
005100F4   D5                     aad
005100F5   BF5042BF5F             mov     edi, $5FBF4250
005100FA   AA                     stosb
005100FB   DFC4                   DB  $DF, $C4  //
005100FD   B944D26BF7             mov     ecx, $F76BD244
00510102   A9691F9D30             test    eax, $309D1F69
00510107   F2                     repne
00510108   B06A                   mov     al, $6A
0051010A   682DB05000             push    $0050B02D

|
0051010F   E972B1FFFF             jmp     0050B286
00510114   6C                     insb
00510115   306E68                 xor     [esi+$68], ch
00510118   71FE                   jno     00510118
0051011A   50                     push    eax
0051011B   00E9                   add     cl, ch
0051011D   65B1FF                 mov     cl, $FF
00510120   FF89539C682C           dec     dword ptr [ecx+$2C689C53]
00510126   FF5000                 call    dword ptr [eax+$00]

|
00510129   E958B1FFFF             jmp     0050B286
0051012E   EC                     in      al, dx
0051012F   4E                     dec     esi
00510130   6887FF5000             push    $0050FF87

|
00510135   E94CB1FFFF             jmp     0050B286
0051013A   709B                   jo      005100D7
0051013C   55                     push    ebp

0051013D   638103C233C0           arpl    [ecx+$C033C203], ax
00510143   5A                     pop     edx
00510144   59                     pop     ecx

00510145   59                     pop     ecx
00510146   648910                 mov     fs:[eax], edx

****** FINALLY
|

* Possible String Reference to: '[嬪]?
|
00510149   6878015100             push    $00510178
0051014E   8D45BC                 lea     eax, [ebp-$44]
00510151   BA07000000             mov     edx, $00000007

* Reference to: System.@LStrArrayClr(void;void;Integer);
|
00510156   E82145EFFF             call    0040467C
0051015B   8D45D8                 lea     eax, [ebp-$28]

* Reference to: System.@LStrClr(void;void);
|
0051015E   E8F544EFFF             call    00404658
00510163   8D45E4                 lea     eax, [ebp-$1C]
00510166   BA06000000             mov     edx, $00000006

* Reference to: System.@LStrArrayClr(void;void;Integer);
|
0051016B   E80C45EFFF             call    0040467C
00510170   C3                     ret

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

一般的按钮事件函数里,直接就进行了判断或者各种功能函数,但是这个按钮事件函数里只执行到
0050FDFF(上文红色字)然后执行完所有该执行的东西后(网络数据包发送,接受,验证登陆情况,成功则登陆成功,失败则弹出出错提示框),回到00510141,00510144(上文暗红色字),进行各种数据清空,然后函数执行结束。

有点好奇,那中间没有执行的一大段灰色代码。。难道就是废代码了??编译程序时不是不可能产生废代码的吧?但是不管是登陆成功与失败,灰色代码都是没有运行过的~
======================================
接着向大家展示我通过各种工具&断点,花了几天时间分析出的0050FDFF到00510141之间的程序大体程序跳转过程,与每个跳跃过程中的功能
494D48 所有按钮事件响应函数的入口点
->(代表很短距离的运行)
50FDD8 上文按钮事件的起点
->
50FDFF 跳离按钮事件函数后的位置
=>(代表JMP或者CALL,总之是长距离的跳跃,中间省略了很多细节代码)
6AB28D
=>
404A8B  JMP EAX(一个会反复执行到的代码,根据EAX不同跳跃到不同地方,总共会运行到这个位置13次,这是第一次)
=>
504B41
=>
404A8B:505399(冒号后为EAX这时的数值,将要运行到的地方)
=>
404A8B:4F1FE1
=>
404A8B:4F1FE1 (发送Connect数据包进行服务器连接)
=>(过程中发送Connect数据包进行服务器连接)
404A8B:4F1FE1
=>
404A8B:4F1FE1
=>
404A8B:4FAEDC(此地址重复4此,估计进行数据包的“造句”~)
=>
404A8B:4FAEDC
=>
404A8B:4FAEDC
=>
404A8B:4FAEDC
=>
404A8B:506918
=>(过程中进行Send Recv,数据包的发送与接受)
404A8B:502A96
=>
504BE0
=>(过程中进行了登陆是否成功的判断,下一句为转入弹出MessageBoxA出错的地方)
0050B39D RETN
->
006AB942 RETN
->
004075EC   $- FF25 58565200 JMP DWORD PTR DS:[<&USER32.MessageBoxA>] ;  USER32.MessageBoxA
=>
510141(回到按钮事件函数中)
->
510170(按钮事件函数结束)
=>
494D4E 所有按钮事件响应函数的出口点
======================================
看完上面的整个程序流程,或许大家已经可以基本了解到我破解的思路,这个程序需要上网充值才能使用,数据包发送的过程没有账号密码,只发送机器码到服务器,如果通过验证,返回结果,并且程序外挂功能启动成功,而我想要做的很简单,就是找到哪里进行服务器验证结果的判断点,直接跳过判断,实现外挂功能的启动。

上面的整个流程,看起来好像已经非常清晰了,其实不然,在这个程序中有个特殊的地方,上面的整个流程中,所有“=>”的地方,都翻来覆去执行了一个代码段(在整个流程中,从50B286开始的执行了数十次, 从50B2D2开始的执行了1300多次),如下:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
0050B286   >  53            PUSH EBX
0050B287   . |51            PUSH ECX
0050B288   . |56            PUSH ESI
0050B289   . |57            PUSH EDI
0050B28A   . |52            PUSH EDX
0050B28B   . |55            PUSH EBP
0050B28C   . |9C            PUSHFD
0050B28D   . |50            PUSH EAX
0050B28E   . |55            PUSH EBP
0050B28F   . |68 00000000   PUSH 0
0050B294   . |8B7424 28     MOV ESI,DWORD PTR SS:[ESP+28]
0050B298   . |BA 00A05200   MOV EDX,QJ.0052A000
0050B29D   . |FF15 E4515200 CALL DWORD PTR DS:[<&KERNEL32.GetCurrent>; [GetCurrentThreadId
0050B2A3   . |89C3          MOV EBX,EAX
0050B2A5   . |B9 00010000   MOV ECX,100
0050B2AA   . |89D7          MOV EDI,EDX
0050B2AC   . |9C            PUSHFD
0050B2AD   . |FC            CLD
0050B2AE   . |F2:AF         REPNE SCAS DWORD PTR ES:[EDI]
0050B2B0   . |74 0D         JE SHORT QJ.0050B2BF
0050B2B2   . |B8 00010000   MOV EAX,100
0050B2B7   . |91            XCHG EAX,ECX
0050B2B8   . |89D7          MOV EDI,EDX
0050B2BA   . |F2:AF         REPNE SCAS DWORD PTR ES:[EDI]
0050B2BC   . |895F FC       MOV DWORD PTR DS:[EDI-4],EBX
0050B2BF   > |89FD          MOV EBP,EDI
0050B2C1   . |29D7          SUB EDI,EDX
0050B2C3   . |D1E7          SHL EDI,1
0050B2C5   . |8DBCFA C00300>LEA EDI,DWORD PTR DS:[EDX+EDI*8+3C0]
0050B2CC   . |9D            POPFD
0050B2CD   > |89F3          MOV EBX,ESI
0050B2CF   . |033424        ADD ESI,DWORD PTR SS:[ESP]
0050B2D2   > |8A06          MOV AL,BYTE PTR DS:[ESI]
0050B2D4   . |28D8          SUB AL,BL
0050B2D6   . |04 7C         ADD AL,7C
0050B2D8   . |C0C0 07       ROL AL,7
0050B2DB   . |FEC8          DEC AL
0050B2DD   . |83C6 01       ADD ESI,1
0050B2E0   . |C0C8 05       ROR AL,5
0050B2E3   . |28C3          SUB BL,AL
0050B2E5   . |0FB6C0        MOVZX EAX,AL
0050B2E8   . |FF2485 00E452>JMP DWORD PTR DS:[EAX*4+52E400]

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
可以从上面的代码看出来,
0050B2E8   . |FF2485 00E452>JMP DWORD PTR DS:[EAX*4+52E400]
是一个动态的地址,他会跳到很多地方,而这些地方最终又会跳回50B286或者50B2D2
这就像一个迷宫一样,翻来覆去,覆去翻来~~~~我已经完全没有头绪了~~

事实上,至今为止我基本可以肯定,流程中504BE0到50B39D之间就是判断登陆是否成功的地方,因为出错,然后进入了弹出MESSAGEBOXA的过程~我也有登陆成功的整个程序执行流程,也试验过拿登陆失败的整个程序流程进行对比,知道从哪里开始寄存器中的数值发生了变化,哪里开始执行的代码发生了变化。但我依旧无法找到是哪里进行了验证的比较。最主要的问题还是出在迷宫这里,迷宫让人根本无法通过CALL,或者调用API来分析程序的功能与它是怎样执行的。

在上面出现的迷宫中,跳来跳去,都是JMP。。。很少有CALL或者函数调用,只是进行了大量的运算(具体干什么了弄不清楚)。

随便贴一些它跳到的地方出来给大家看看:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
0050B2EF   > \8B06          MOV EAX,DWORD PTR DS:[ESI]
0050B2F1   .  29D8          SUB EAX,EBX
0050B2F3   .  48            DEC EAX
0050B2F4   .  C1C0 1D       ROL EAX,1D
0050B2F7   .  40            INC EAX
0050B2F8   .  F7D0          NOT EAX
0050B2FA   .  8D76 04       LEA ESI,DWORD PTR DS:[ESI+4]
0050B2FD   .  48            DEC EAX
0050B2FE   .  F7D0          NOT EAX
0050B300   .  0FC8          BSWAP EAX
0050B302   .  C1C8 12       ROR EAX,12
0050B305   .  29C3          SUB EBX,EAX
0050B307   .  50            PUSH EAX
0050B308   .^ E9 C5FFFFFF   JMP QJ.0050B2D2
0050B30D   >  58            POP EAX
0050B30E   .  66:5A         POP DX
0050B310   .  8810          MOV BYTE PTR DS:[EAX],DL
0050B312   .^ E9 BBFFFFFF   JMP QJ.0050B2D2
0050B317   >  66:8B06       MOV AX,WORD PTR DS:[ESI]
0050B31A   .  66:31D8       XOR AX,BX
0050B31D   .  66:35 E731    XOR AX,31E7
0050B321   .  66:2D ADA3    SUB AX,0A3AD
0050B325   .  66:F7D8       NEG AX
0050B328   .  66:05 1480    ADD AX,8014
0050B32C   .  66:31C3       XOR BX,AX
0050B32F   .  66:50         PUSH AX
0050B331   .  8D76 02       LEA ESI,DWORD PTR DS:[ESI+2]
0050B334   .^ E9 99FFFFFF   JMP QJ.0050B2D2
0050B339   >  5A            POP EDX
0050B33A   .  28ED          SUB CH,CH
0050B33C   .  64:8A0A       MOV CL,BYTE PTR FS:[EDX]
0050B33F   .  66:51         PUSH CX
0050B341   .^ E9 8CFFFFFF   JMP QJ.0050B2D2
0050B346   >  5A            POP EDX
0050B347   .  66:58         POP AX
0050B349   .  36:8802       MOV BYTE PTR SS:[EDX],AL
0050B34C   .^ E9 81FFFFFF   JMP QJ.0050B2D2
0050B351      0A            DB 0A
0050B352   .  83C4 18       ADD ESP,18
0050B355   .  5F            POP EDI
0050B356   .  5E            POP ESI
0050B357   .  5B            POP EBX
0050B358   .  C3            RETN
0050B359      8D40 00       LEA EAX,DWORD PTR DS:[EAX]
0050B35C   $  53            PUSH EBX
0050B35D   .  56            PUSH ESI
0050B35E   .  57            PUSH EDI
0050B35F   .  55            PUSH EBP
0050B360   .  83C4 E0       ADD ESP,-20
0050B363   .  8BD8          MOV EBX,EAX
0050B365   .  68 EB37040D   PUSH 0D0437EB
0050B36A   .  E9 6AF01900   JMP QJ.006AA3D9
0050B36F   >  F71424        NOT DWORD PTR SS:[ESP]
0050B372   .  66:59         POP CX
0050B374   .  66:210C24     AND WORD PTR SS:[ESP],CX
0050B378   .  9C            PUSHFD
0050B379   .^ E9 54FFFFFF   JMP QJ.0050B2D2
0050B37E   >  66:5A         POP DX
0050B380   .  66:59         POP CX
0050B382   .  D2E2          SHL DL,CL
0050B384   .  66:52         PUSH DX
0050B386   .  9C            PUSHFD
0050B387   .^ E9 46FFFFFF   JMP QJ.0050B2D2
0050B38C   >  C745 FC 00000>MOV DWORD PTR SS:[EBP-4],0
0050B393   .  5A            POP EDX
0050B394   .  5D            POP EBP
0050B395   .  58            POP EAX
0050B396   .  9D            POPFD
0050B397   .  5B            POP EBX
0050B398   .  5A            POP EDX
0050B399   .  5F            POP EDI
0050B39A   .  5E            POP ESI
0050B39B   .  59            POP ECX
0050B39C   .  5B            POP EBX
0050B39D   .  C3            RETN
0050B39E   >  66:59         POP CX
0050B3A0   .  000C24        ADD BYTE PTR SS:[ESP],CL
0050B3A3   .  9C            PUSHFD
0050B3A4   .^ E9 29FFFFFF   JMP QJ.0050B2D2
0050B3A9   >  5A            POP EDX
0050B3AA   .  8F02          POP DWORD PTR DS:[EDX]
0050B3AC   .^ E9 21FFFFFF   JMP QJ.0050B2D2
0050B3B1   >  5A            POP EDX
0050B3B2   .  66:64:8F02    POP WORD PTR FS:[EDX]
0050B3B6   .^ E9 17FFFFFF   JMP QJ.0050B2D2
0050B3BB   >  8A06          MOV AL,BYTE PTR DS:[ESI]
0050B3BD   .  30D8          XOR AL,BL
0050B3BF   .  FEC8          DEC AL
0050B3C1   .  F6D0          NOT AL
0050B3C3   .  C0C8 06       ROR AL,6
0050B3C6   .  F6D8          NEG AL
0050B3C8   .  83C6 01       ADD ESI,1
0050B3CB   .  C0C0 03       ROL AL,3
0050B3CE   .  30C3          XOR BL,AL
0050B3D0   .  66:8F0407     POP WORD PTR DS:[EDI+EAX]
0050B3D4   .^ E9 F9FEFFFF   JMP QJ.0050B2D2
0050B3D9   >  5A            POP EDX
0050B3DA   .  66:59         POP CX
0050B3DC   .  D3E2          SHL EDX,CL
0050B3DE   .  52            PUSH EDX
0050B3DF   .  9C            PUSHFD
0050B3E0   .^ E9 EDFEFFFF   JMP QJ.0050B2D2
0050B3E5   >  59            POP ECX
0050B3E6   .  64:FF31       PUSH DWORD PTR FS:[ECX]
0050B3E9   .^ E9 E4FEFFFF   JMP QJ.0050B2D2
0050B3EE   >  58            POP EAX
0050B3EF   .  64:8F00       POP DWORD PTR FS:[EAX]
0050B3F2   .^ E9 DBFEFFFF   JMP QJ.0050B2D2
0050B3F7   >  66:58         POP AX
0050B3F9   .  66:59         POP CX
0050B3FB   .  D2E8          SHR AL,CL
0050B3FD   .  66:50         PUSH AX
0050B3FF   .  9C            PUSHFD
0050B400   .^ E9 CDFEFFFF   JMP QJ.0050B2D2
0050B405   >  59            POP ECX
0050B406   .  89CE          MOV ESI,ECX
0050B408   .^ E9 C0FEFFFF   JMP QJ.0050B2CD
0050B40D   >  66:58         POP AX
0050B40F   .  66:59         POP CX
0050B411   .  F6D0          NOT AL
0050B413   .  F6D1          NOT CL
0050B415   .  20C8          AND AL,CL
0050B417   .  66:50         PUSH AX
0050B419   .  9C            PUSHFD
0050B41A   .^ E9 B3FEFFFF   JMP QJ.0050B2D2
0050B41F   >  66:5C         POP SP
0050B421   .^ E9 ACFEFFFF   JMP QJ.0050B2D2
0050B426   >  0FB606        MOVZX EAX,BYTE PTR DS:[ESI]
0050B429   .  00D8          ADD AL,BL
0050B42B   .  83C6 01       ADD ESI,1
0050B42E   .  C0C8 06       ROR AL,6
0050B431   .  F6D8          NEG AL
0050B433   .  04 E1         ADD AL,0E1
0050B435   .  34 78         XOR AL,78
0050B437   .  F6D8          NEG AL
0050B439   .  04 19         ADD AL,19
0050B43B   .  F6D0          NOT AL
0050B43D   .  FEC8          DEC AL
0050B43F   .  34 07         XOR AL,7
0050B441   .  00C3          ADD BL,AL
0050B443   .  66:59         POP CX
0050B445   .  880C07        MOV BYTE PTR DS:[EDI+EAX],CL
0050B448   .^ E9 85FEFFFF   JMP QJ.0050B2D2
0050B44D   >  59            POP ECX
0050B44E   .  F7D1          NOT ECX
0050B450   .  F71424        NOT DWORD PTR SS:[ESP]
0050B453   .  210C24        AND DWORD PTR SS:[ESP],ECX
0050B456   .  9C            PUSHFD
0050B457   .^ E9 76FEFFFF   JMP QJ.0050B2D2
0050B45C   >  58            POP EAX
0050B45D   .  5A            POP EDX
0050B45E   .  66:59         POP CX
0050B460   .  0FA5D0        SHLD EAX,EDX,CL
0050B463   .  50            PUSH EAX
0050B464   .  9C            PUSHFD
0050B465   .^ E9 68FEFFFF   JMP QJ.0050B2D2
0050B46A   >  80E0 3C       AND AL,3C
0050B46D   .  FF3407        PUSH DWORD PTR DS:[EDI+EAX]
0050B470   .^ E9 5DFEFFFF   JMP QJ.0050B2D2

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

请教,0050B2D2处的动态跳转代码段--迷宫,究竟是什么东西?花指令?代码混淆???还是什么其他的东西???是通过反反编译工具做出来的,还是编程作者在编写代码时设计的?

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 622
活跃值: (294)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
2
看起来很像VM...那段灰色的不是不被执行,是被VM转换之后的VM_Opcode.
0050B286应该是VM入口,0050B2D2是VM的Next_EIP
2010-3-29 17:00
0
雪    币: 209
活跃值: (26)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
首先~~~非常感谢你的回帖!

VM是指虚拟机吧~通过虚拟机技术保护核心代码,我最近在另一个软件那里,检测到一个壳是用VMPropectd保护的,暂时不知道怎么脱壳。

可以再请教一下么,你感觉这是VM的,VM有没有检测手段?只能通过感觉判断么?接下来我会去找一下VM的相关资料~看看能不能更进一步地破解它~

以前在破解.NET程序的时候遇见过混淆的概念,混淆字符串,甚至混淆代码,但是它的代码混淆基本上还是可以还原的,就不知道VM是否可以了~~

其他人有什么其他的看法也欢迎提出。
2010-3-29 17:28
0
雪    币: 209
活跃值: (26)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
突然想补充一点,VM是壳么?
VM的介绍看过一点,说是可以让编程作者有选择地对某些代码段进行保护,保护段落会丢进虚拟机中进行执行,以起到无法直接反编译获得可辨识汇编代码。

而在看雪反了不少的文章,貌似都是在说如何找到VM入口,然后脱VM壳~~

VM是壳???

加了壳的程序DEDE都是无法反编译的,会显示“发现使用运行时间包编译的应用程序”~
而我所遇到的这个程序,开始是加了壳的,NsPacK V3.7 -> LiuXingPing *的壳,而用DiE 0.64可以检测到是DELPHI编译但不知道确切版本,通过脱壳机脱壳成功后,再用PEID或者DiE检测,都可以检测到具体的DELPHI版本Borland Delphi 6.0 - 7.0 [Overlay]。

当然不拍出PEID或者DIE误报,毕竟尽信他们不如没他们~~我之前也在另一个加壳程序检测时,检测不出是什么壳,但是通过DiE的Entropy功能依然是可以检测出Packed,用通用脱壳机脱壳后,显示Not Packed。

现在的程序,脱NsPacK壳后也是显示没有Packed的~~所以我不认为还有壳啊。。

当然。。对于VM的了解我仅仅是皮毛。。只是看论坛中大家都在说VM脱壳。。VM是壳么?如果只是像.net程序里的混淆器那样的原理,那应该不能称为壳吧。
2010-3-29 18:07
0
雪    币: 442
活跃值: (43)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
0050FDF4   64FF30                 push    dword ptr fs:[eax]
0050FDF7   648920                 mov     fs:[eax], esp
0050FDFA   68A6DEDEB7             push    $B7DEDEA6
0050FDFF   E989B41900             jmp     006AB28D                      ;这句跳进虚拟机,下面的代码确实不执行

VM不是壳,自然无法被脱壳
2010-3-29 18:14
0
雪    币: 209
活跃值: (26)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
[QUOTE=ucantseeme;783025]0050FDF4   64FF30                 push    dword ptr fs:[eax]
0050FDF7   648920                 mov     fs:[eax], esp
0050FDFA   68A6DEDEB7            ...[/QUOTE]

楼上好言简意赅啊~~好,方向有了,我自己研究。。

如果有相关问题大家有兴趣讨论的,就说~

提高奖励到30,然后回答者一人一半吧~~~
2010-3-29 18:20
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
VM不是壳,自然无法被脱壳
2010-3-30 22:02
0
雪    币: 209
活跃值: (26)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
今天看了很多VM的资料,VM是一种虚拟机保护技术,我也确实在大家贴出来的VM代码中找出了我遇到的这种GETCURTHREADID开头的迷宫~~

VM作为虚拟机保护技术,可以只保护核心代码,也可以把整个程序纳入保护,后者会使得入口点被隐藏,无法正常进入程序入口进行调试,论坛上的反VMP技术一般只在于找到入口点,并且修复入口,但没有一种好的方法可以反出VMP保护的代码。

看到很多人说到NOOBY会VMP还原代码,专门搜索了一个下午,才知道NOOBY是谁,做过什么,他对VMP的一些了解与认识。

在另一个论坛找到他说的一段话:
“VM有什么强的?
一段VM,和外面有哪些交流都搞清楚了,把正确的数据喂给他,难道还能生出个孬种来?”

厄。。从原理上说,我能理解他的做法,也确实可行~~但是我更像做到的是可以更改代码流程,跳过一些地方,跳到另一些地方,而不仅仅是需要某个判断通过。

另外,VM_CODE的代码研究是一个高难度的工作啊~而且,还不知道如何修改VM_CODE。。不知道VM_CODE是怎么实现JE\JZ等比较的。
2010-3-30 23:19
0
游客
登录 | 注册 方可回帖
返回
//