看了zombieys的《脱Flashfxp 1.4的壳》一文,也下个FlashFXP v1.4练练。 (6千字)
FlashFXP v1.4http://www.flashfxp.com
scouting... C:\Program Files\FlashFXP\FlashFXP.exe - 756224 bytes big
Entry Point :00176000 Image Base :00400000
Base of Data :0012C000 Size of Image :00178000
Tools used :
Procdump
Softice
icedump + iceload
看了zombieys的《脱Flashfxp 1.4的壳》一文,也下个FlashFXP v1.4练练。
还好比较简单,大家也可找来练练手脚。
仅供新手参考。
一,用tElock保护的FlashFXP中的反跟踪代码。
用bpint 3切入
017F:0057655E 8B642408 MOV ESP,[ESP+08] <-(1)-SEH proc address
017F:00576562 8B6C2408 MOV EBP,[ESP+08]
017F:00576566 8D85FE040000 LEA EAX,[EBP+000004FE]
017F:0057656C 50 PUSH EAX
017F:0057656D C3 RET <-(1)-回到017F:0057657B
017F:0057656E 2BC0 SUB EAX,EAX
017F:00576570 7402 JZ 00576574
017F:00576572 CD20 INT 20 VXDJmp A7E9,10CC
017F:00576574 CC INT 3 <-(1)-bpint 3切入
017F:00576575 90 NOP
017F:00576576 E9A7000000 JMP 00576622 <--退出处理
017F:0057657B 8D8510050000 LEA EAX,[EBP+00000510]
017F:00576581 89442404 MOV [ESP+04],EAX
017F:00576585 646789260000 MOV FS:[0000],ESP
017F:0057658B EB10 JMP 0057659D <-(1)-可按F7直接运行到此处
017F:0057658D 8B642408 MOV ESP,[ESP+08] <-(2)-SEH proc address
017F:00576591 8B6C2408 MOV EBP,[ESP+08]
017F:00576595 8D852F050000 LEA EAX,[EBP+0000052F]
017F:0057659B 50 PUSH EAX
017F:0057659C C3 RET <-(2)-回到017F:005765AC
017F:0057659D 2BDB SUB EBX,EBX
017F:0057659F 8BD3 MOV EDX,EBX
017F:005765A1 B872472388 MOV EAX,88234772
017F:005765A6 F7F3 DIV EBX <-(2)-除0
017F:005765A8 85D2 TEST EDX,EDX
017F:005765AA 7476 JZ 00576622 <--退出处理
017F:005765AC 8D8541050000 LEA EAX,[EBP+00000541]
017F:005765B2 89442404 MOV [ESP+04],EAX
017F:005765B6 646789260000 MOV FS:[0000],ESP
017F:005765BC EB10 JMP 005765CE <-(2)-可按F7直接运行到此处
017F:005765BE 8B642408 MOV ESP,[ESP+08]
017F:005765C2 8B6C2408 MOV EBP,[ESP+08]
017F:005765C6 8D855F050000 LEA EAX,[EBP+0000055F]
017F:005765CC 50 PUSH EAX
017F:005765CD C3 RET
017F:005765CE 66B80043 MOV AX,4300 <-(3)-Method of detection of the WinICE handler in the int68h (V86)
017F:005765D2 CD68 INT 68
017F:005765D4 66057B0C ADD AX,0C7B
017F:005765D8 6648 DEC AX <-(3)-相当于cmp ax,0F386h
017F:005765DA 7446 JZ 00576622 <-(3)-是00那么SoftICE_Detected,r fl z
017F:005765DC 8D8571050000 LEA EAX,[EBP+00000571]
017F:005765E2 89442404 MOV [ESP+04],EAX
017F:005765E6 646789260000 MOV FS:[0000],ESP
017F:005765EC EB10 JMP 005765FE
017F:005765EE 8B642408 MOV ESP,[ESP+08]
017F:005765F2 8B6C2408 MOV EBP,[ESP+08]
017F:005765F6 8D8599050000 LEA EAX,[EBP+00000599]
017F:005765FC 50 PUSH EAX
017F:005765FD C3 RET
017F:005765FE EB01 JMP 00576601 <--花指令
017F:00576601 33DB XOR EBX,EBX
017F:00576603 8BC3 MOV EAX,EBX <-(4)-比较善良,没想超度你
017F:00576605 66BE4746 MOV SI,4647 <-(4)-magic values
017F:00576609 66BF4D4A MOV DI,4A4D <-(4)-magic values
017F:0057660D CC INT 3 <-(4)-常用的检测方式
017F:0057660E F8 CLC
017F:0057660F 6681FE4746 CMP SI,4647 <-(4)--SI=4647h则SoftICE_Detected
017F:00576614 750C JNZ 00576622 <-(4)-存在SoftICE则退出,r fl z
017F:00576616 64678F060000 POP DWORD PTR FS:[0000]
017F:0057661C 83C404 ADD ESP,04
017F:0057661F 5D POP EBP
017F:00576620 EB16 JMP 00576638
017F:00576622 64678F060000 POP DWORD PTR FS:[0000]
017F:00576628 83C404 ADD ESP,04
017F:0057662B 5D POP EBP
017F:0057662C 81EDE59B4000 SUB EBP,00409BE5
017F:00576632 E946090000 JMP 00576F7D
017F:00576637 C3 RET
017F:00576638 8BDD MOV EBX,EBP
二,用tElock保护的FlashFXP脱壳
跳过tElock保护的反跟踪代码。
tELock找OEP很简单:bpx VirtualProtectEx中断后,稍微跟几步看见jmp [esp-30],就跳到OEP了。
/dump 400000 178000 c:\FFXP.exe
修改Entry Point:0052B8B0-00400000,以及Number of Sections为原来的数值。
以下是破坏Import Table的特征代码:
017F:00576C16 8B95BEAF4000 MOV EDX,[EBP+0040AFBE]
017F:00576C1C 8BB5AEAF4000 MOV ESI,[EBP+0040AFAE]
017F:00576C22 85F6 TEST ESI,ESI <--首次调用时的ESI就是Import Tabler的RVA
017F:00576C24 0F849D030000 JZ 00576FC7
017F:00576C2A 03F2 ADD ESI,EDX <-- EDX=00400000
017F:00576C2C 83A5AAB0400000 AND DWORD PTR [EBP+0040B0AA],00
017F:00576C33 8B460C MOV EAX,[ESI+0C]
017F:00576C36 83660C00 AND DWORD PTR [ESI+0C],00 <--开始把IMAGE_DATA_DIRECTORY中的Name清0
017F:00576C3A 85C0 TEST EAX,EAX
017F:00576C3C 0F8485030000 JZ 00576FC7
在清零之前可DUMP出完整的Import Table,然后用Procdump导入Import Table,再修改Import Table的RVA值为相应的值(133000)。
完工。
有个简便方法:
先对付反跟踪代码,再bpx VirtualProtectEx中断,F12返回。
找特征代码,记下地址。(s 400000 l 00178000 8B 46 0C 83 66 0C 00 85 C0)下次g到此处DUMP出完整的Import Table
找到OEP,并DUMP,最后作修正。
以上方法在tElock8.0、9.0上试验通过。
