首先要感谢看雪论坛,提供了非常多的研究资料和这个交流平台。
一直以来,我主要靠《看雪学院精华帖集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处的动态跳转代码段--迷宫,究竟是什么东西?花指令?代码混淆???还是什么其他的东西???是通过反反编译工具做出来的,还是编程作者在编写代码时设计的?
[课程]Linux pwn 探索篇!