脱Flashfxp 1.4的壳
2007-01-12 20:13:14 来源:WEB开发网Flashfxp 1.4用fi查不出是加的什么壳,后来看到精品讨论汉化这个东西的时候才知道用的是telock。telock的壳保护很强,好像要比aspr的麻烦。我学脱这个还为时尚早,不过早晚都要碰的,花了n个小时来搞定它。特写此文,让你觉得脱telock的壳好像会很easy;-)
unpack(2001.9.26)
Flashfxp 1.4是用delphi写的,hoho运气真好:),更新一下用快速寻找delphi程序入口的方法(试过才知道我以前的方法=脱裤子放屁):执行Flashfxp 1.4,接着用winhex编辑Flashfxp的主内存,选择搜索文本,填runtime,执行搜索,搜到后,向前找到离runtime最近的机器码为55 8B EC的地方就是程序的oep,对应的地址是0052B8B0,ok完活。
ok,下面要在入口处脱壳,老规矩打开SuperBPM,点erase,用trw1.03娃娃修改过的版(因为其他任意一版trw都会死机的)载入Flashfxp,下g 0052B8B0,下suspend,用prodump选dump(full),非法操作,我倒~~~~~,怎么这么麻烦呀:(,后来参考一下hying和fpc大哥的关于telock的脱壳资料,hoho,telock会把原来的section数改写为ffff,所以只要把原来的section数写回去就行:)。用winhex内存编辑功能把400106-400107填回原来的值0900,再用prodump就成功啦。
接着修复import table
天哪,这都是什么乱七八糟的呀。it完全被telock改的面目全非了,用ImportREC根本无法修复。没办法跟踪程序吧,从telock重建It部分开始吧,用加了superbpm和icedump的s-ice重新载入Flashfxp,下bpm 870000,f5。在这里停下:
0187:00576E02 FF0424 INC DWord Ptr [ESP]
0187:00576E05 891F MOV [EDI],EBX
0187:00576E07 83C304 ADD EBX,00000004
0187:00576E0A 83C704 ADD EDI,00000004
0187:00576E0D 83242403 AND DWord Ptr [ESP],00000003
0187:00576E11 833C2400 CMP DWord Ptr [ESP],00000000
0187:00576E15 742E JZ 00576E45
0187:00576E17 833C2401 CMP DWord Ptr [ESP],00000001
0187:00576E1B 7430 JZ 00576E4D
0187:00576E1D 833C2402 CMP DWord Ptr [ESP],00000002
0187:00576E21 7447 JZ 00576E6A
0187:00576E23 C144240C10 ROL DWord Ptr [ESP+0C],10
0187:00576E28 668B44240C MOV AX,[ESP+0C]
0187:00576E2D 66AB STOSW
0187:00576E2F 8BC3 MOV EAX,EBX
0187:00576E31 C1E803 SHR EAX,03
0187:00576E34 83E003 AND EAX,00000003
0187:00576E37 8A440404 MOV AL,[ESP+1*EAX+04]
0187:00576E3B AA STOSB
0187:00576E3C B0C3 MOV AL,C3
0187:00576E3E AA STOSB
0187:00576E3F 66B8FF35 MOV AX,35FF
0187:00576E43 EB2D JMP 00576E72
0187:00576E45 8B442408 MOV EAX,[ESP+08]
0187:00576E49 AB STOSD
0187:00576E4A 4F DEC EDI
0187:00576E4B EBEF JMP 00576E3C
0187:00576E4D 668B44240C MOV AX,[ESP+0C]
0187:00576E52 66AB STOSW
0187:00576E54 B0C3 MOV AL,C3
0187:00576E56 AA STOSB
0187:00576E57 8BC3 MOV EAX,EBX
0187:00576E59 C1E803 SHR EAX,03
0187:00576E5C 83E003 AND EAX,00000003
0187:00576E5F 8A440404 MOV AL,[ESP+1*EAX+04]
0187:00576E63 AA STOSB
0187:00576E64 66B8FF35 MOV AX,35FF
0187:00576E68 EB08 JMP 00576E72
0187:00576E6A 8B442410 MOV EAX,[ESP+10]
0187:00576E6E AB STOSD
0187:00576E6F 4F DEC EDI
0187:00576E70 EBCA JMP 00576E3C
0187:00576E72 E28C LOOP 00576E00
0187:00576E74 66AB STOSW
0187:00576E76 83C414 ADD ESP,00000014
0187:00576E79 61 POPAD
0187:00576E7A 89BDAAB04000 MOV [EBP+0040B0AA],EDI //MOV [EBP+0040B0AA],EBX
899DAAB04000
0187:00576E80 8BBDAAB04000 MOV EDI,[EBP+0040B0AA] //MOV EDI,[EBP+0040B0B2]
8BBDB2B04000
0187:00576E86 8B85B2B04000 MOV EAX,[EBP+0040B0B2]
0187:00576E8C 0385AAAF4000 ADD EAX,[EBP+0040AFAA]
0187:00576E92 8B8DAEB04000 MOV ECX,[EBP+0040B0AE]
0187:00576E98 8908 MOV [EAX],ECX //将函数名写到正确的位置
0187:00576E9A 8385AEB040000A ADD DWord Ptr [EBP+0040B0AE],0000000A
0187:00576EA1 EB08 JMP 00576EAB
0187:00576EA3 838DAAB04000FF OR DWord Ptr [EBP+0040B0AA],FFFFFFFF
0187:00576EAA 61 POPAD
0187:00576EAB 03BDAAAF4000 ADD EDI,[EBP+0040AFAA]
0187:00576EB1 85DB TEST EBX,EBX
0187:00576EB3 0F84B4000000 JZ 00576F6D
0187:00576EB9 F7C300000080 TEST EBX,80000000
0187:00576EBF 6A00 PUSH 00000000
0187:00576EC1 7506 JNZ 00576EC9
0187:00576EC3 8D5C1302 LEA EBX,[EBX+1*EDX+02]
0187:00576EC7 EB3C JMP 00576F05
0187:00576EC9 FF0424 INC DWord Ptr [ESP]
0187:00576ECC 8B85A6AF4000 MOV EAX,[EBP+0040AFA6]
0187:00576ED2 3B859AB04000 CMP EAX,[EBP+0040B09A]
0187:00576ED8 752B JNZ 00576F05
0187:00576EDA 81E3FFFFFF7F AND EBX,7FFFFFFF
0187:00576EE0 8BD3 MOV EDX,EBX
0187:00576EE2 8D1495FCFFFFFF LEA EDX,[FFFFFFFC+4*EDX]
0187:00576EE9 8B9DA6AF4000 MOV EBX,[EBP+0040AFA6]
0187:00576EEF 8B433C MOV EAX,[EBX+3C]
0187:00576EF2 8B441878 MOV EAX,[EAX+1*EBX+78]
0187:00576EF6 035C181C ADD EBX,[EAX+1*EBX+1C]
0187:00576EFA 8B041A MOV EAX,[EDX+1*EBX]
0187:00576EFD 0385A6AF4000 ADD EAX,[EBP+0040AFA6]
0187:00576F03 EB13 JMP 00576F18
0187:00576F05 81E3FFFFFF7F AND EBX,7FFFFFFF
0187:00576F0B 53 PUSH EBX
0187:00576F0C FFB5A6AF4000 PUSH DWord Ptr [EBP+0040AFA6]
0187:00576F12 FF9514AF4000 CALL Near [`KERNEL32!GetProcAddress`] //读取函数名
0187:00576F18 40 INC EAX
0187:00576F19 48 DEC EAX
0187:00576F1A 7532 JNZ 00576F4E
0187:00576F1C 58 POP EAX
0187:00576F1D F9 STC
0187:00576F1E 0F829BFDFFFF JB 00576CBF
0187:00576F24 47 INC EDI
0187:00576F25 44 INC ESP
0187:00576F26 49 DEC ECX
0187:00576F27 3332 XOR ESI,[EDX]
0187:00576F29 2E44 INC ESP
0187:00576F2B 4C DEC ESP
0187:00576F2C 4C DEC ESP
0187:00576F2D 55 PUSH EBP
0187:00576F2E 53 PUSH EBX
0187:00576F2F 45 INC EBP
0187:00576F30 52 PUSH EDX
0187:00576F31 3332 XOR ESI,[EDX]
0187:00576F33 2E44 INC ESP
0187:00576F35 4C DEC ESP
0187:00576F36 4C DEC ESP
0187:00576F37 53 PUSH EBX
0187:00576F38 48 DEC EAX
0187:00576F39 45 INC EBP
0187:00576F3A 4C DEC ESP
0187:00576F3B 4C DEC ESP
0187:00576F3C 3332 XOR ESI,[EDX]
0187:00576F3E 2E44 INC ESP
0187:00576F40 4C DEC ESP
0187:00576F41 4C DEC ESP
0187:00576F42 4B DEC EBX
0187:00576F43 45 INC EBP
0187:00576F44 52 PUSH EDX
0187:00576F45 4E DEC ESI
0187:00576F46 45 INC EBP
0187:00576F47 4C DEC ESP
0187:00576F48 3332 XOR ESI,[EDX]
0187:00576F4A 2E44 INC ESP
0187:00576F4C 4C DEC ESP
0187:00576F4D 4C DEC ESP
0187:00576F4E 8907 MOV [EDI],EAX //把函数名写回去
0187:00576F50 58 POP EAX
0187:00576F51 48 DEC EAX
0187:00576F52 740D JZ 00576F61
0187:00576F54 40 INC EAX
0187:00576F55 F8 CLC
0187:00576F56 668943FE MOV [EBX-02],AX
0187:00576F5A 8803 MOV [EBX],AL
0187:00576F5C 43 INC EBX
0187:00576F5D 3803 CMP [EBX],AL
0187:00576F5F 75F9 JNZ 00576F5A
0187:00576F61 8385AAAF400004 ADD DWord Ptr [EBP+0040AFAA],00000004 //继续下一个
0187:00576F68 E9D4FDFFFF JMP 00576D41
0187:00576F6D 83C614 ADD ESI,00000014
0187:00576F70 8B95BEAF4000 MOV EDX,[EBP+0040AFBE]
0187:00576F76 E9B1FCFFFF JMP 00576C2C
0187:00576F7B 61 POPAD
sorry啊,我的表达能力太差了,我只能读懂那段的意思,实在是说不出来,语文没学好:(,按我改的做吧,就可以把正确的函数写到正确的位置去,具体有兴趣自己跟一下吧,看看就知道了。
赞助商链接