-
-
[原创]tElock 1.0脱壳 风云防火墙个人版
-
发表于: 2009-3-24 14:29 4725
-
tElock 1.0脱壳 风云防火墙个人版
下载地址: be6K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6e0t1I4z5q4)9J5k6h3y4U0i4K6u0r3
【软件简介】:一款不错的ARP防火墙软件
【作者声明】:初学脱壳,只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
【调试环境】:WinXP SP3、Ollydbg1.10、PEiD、LordPE、ImportREC
【Ollydbg调试插件】:HideOD、PlantOm、异常计数器
—————————————————————————————————
【脱壳过程】:
1. PEID查壳:tElock 1.0 (private) -> tE!
第一次见到这个壳,参考了看雪论坛精华版FLY大侠tElock 0.98b1 脱壳——AntiyPorts V1.2
的脱壳教程。但不懂之处甚多,大侠们见笑了。
2.OD载入FYFireWall.exe主程序,使用HideOD插件隐藏OD,据说tElock会查找窗口和进程,因此使用PlantOm插件隐藏窗口和进程。
3.OD载入后停在下面的地方:
006B5F81 >^\E9 7AE0FFFF JMP FYFireWa.006B4000
006B5F86 0000 ADD BYTE PTR DS:[EAX],AL
006B5F88 00FE ADD DH,BH
006B5F8A FA CLI
006B5F8B D038 SAR BYTE PTR DS:[EAX],1
006B5F8D C9 LEAVE
006B5F8E 5F POP EDI
4.忽略除内存访问异常以外所有异常,使用异常计数器插件 第一步:开始计数直到程序完全运行。
5.使用异常计数器插件 第二步:带我到OEP,程序停在下面的地方:
006B5BA3 E8 06000000 CALL FYFireWa.006B5BAE
006B5BA8 8B6424 08 MOV ESP,DWORD PTR SS:[ESP+8] //SEH异常处理
006B5BAC EB 1A JMP SHORT FYFireWa.006B5BC8
006B5BAE 64:67:FF36 0000 PUSH DWORD PTR FS:[0]
006B5BB4 64:67:8926 0000 MOV DWORD PTR FS:[0],ESP
006B5BBA 9C PUSHFD
006B5BBB 810C24 00010000 OR DWORD PTR SS:[ESP],100
006B5BC2 9D POPFD
006B5BC3 F8 CLC
006B5BC4 ^ 73 DC JNB SHORT FYFireWa.006B5BA2 //计数器插件中断在这里
006B5BC6 CD 20 INT 20
006B5BC8 64:67:8F06 0000 POP DWORD PTR FS:[0]
006B5BCE 58 POP EAX
006B5BCF 61 POPAD
006B5BD0 F9 STC
006B5BD1 72 02 JB SHORT FYFireWa.006B5BD5
这个时候看堆栈:
0012FF58 0012FFE0 指向下一个 SEH 记录的指针
0012FF5C 006B5BA8 SE处理程序
在006B5BA8下断点,Shift+F9运行,中断在006B5BA8,取消断点,单步
006B5BC8 64:67:8F06 0000 POP DWORD PTR FS:[0]
006B5BCE 58 POP EAX
006B5BCF 61 POPAD
006B5BD0 F9 STC
006B5BD1 72 02 JB SHORT FYFireWa.006B5BD5
006B5BD3 CD 20 INT 20
006B5BD5 C1E8 BF SHR EAX,0BF ; 移位常量超出 1..31 的范围
006B5BD8 E8 00000000 CALL FYFireWa.006B5BDD
006B5BDD EB 01 JMP SHORT FYFireWa.006B5BE0
这个跳转过去后应该就是开始代码部分的解密了
单步运行到
006B5C79 ^\EB AF JMP SHORT FYFireWa.006B5C2A
006B5C7B 59 POP ECX
在006B5C7B处按F4,继续单步,到下面的地方,就完成了外壳部分的解密
006B5B0C 66:AB STOS WORD PTR ES:[EDI]
006B5B0E 8DBD 00104000 LEA EDI,DWORD PTR SS:[EBP+401000]
006B5B14 85F6 TEST ESI,ESI
006B5B16 75 08 JNZ SHORT FYFireWa.006B5B20
006B5B18 C707 33C040C3 MOV DWORD PTR DS:[EDI],C340C033
006B5B1E EB 0B JMP SHORT FYFireWa.006B5B2B
006B5B20 C607 E9 MOV BYTE PTR DS:[EDI],0E9
006B5B23 47 INC EDI
006B5B24 2BDF SUB EBX,EDI
006B5B26 83EB 04 SUB EBX,4
006B5B29 891F MOV DWORD PTR DS:[EDI],EBX
006B5B2B 8DBD E32A4000 LEA EDI,DWORD PTR SS:[EBP+402AE3]
006B5B31 B9 2C000000 MOV ECX,2C
006B5B36 F3:AA REP STOS BYTE PTR ES:[EDI]
006B5B38 66:AB STOS WORD PTR ES:[EDI]
006B5B3A EB 02 JMP SHORT FYFireWa.006B5B3E
006B5B3C CD 20 INT 20
006B5B3E 61 POPAD
006B5B3F E8 00000000 CALL FYFireWa.006B5B44
006B5B44 5A POP EDX
006B5B45 81EA 0E000000 SUB EDX,0E
006B5B4B 57 PUSH EDI
006B5B4C 51 PUSH ECX
006B5B4D 33C0 XOR EAX,EAX
006B5B4F 8D3A LEA EDI,DWORD PTR DS:[EDX]
006B5B51 B9 20000000 MOV ECX,20
006B5B56 F3:AA REP STOS BYTE PTR ES:[EDI]
006B5B58 66:AB STOS WORD PTR ES:[EDI]
006B5B5A 59 POP ECX
006B5B5B 5F POP EDI
006B5B5C C3 RETN //返回到OEP
RETN之后就是我们熟悉的 Delphi 入口函数代码了。
00571A08 55 PUSH EBP
00571A09 8BEC MOV EBP,ESP
00571A0B 83C4 E4 ADD ESP,-1C
00571A0E 53 PUSH EBX
00571A0F 56 PUSH ESI
00571A10 33C0 XOR EAX,EAX
00571A12 8945 E4 MOV DWORD PTR SS:[EBP-1C],EAX
00571A15 8945 EC MOV DWORD PTR SS:[EBP-14],EAX
00571A18 8945 E8 MOV DWORD PTR SS:[EBP-18],EAX
00571A1B B8 E0155700 MOV EAX,FYFireWa.005715E0
00571A20 E8 3353E9FF CALL FYFireWa.00406D58
00571A25 8B35 74625700 MOV ESI,DWORD PTR DS:[576274] ; FYFireWa.00577BC8
00571A2B 33C0 XOR EAX,EAX
00571A2D 55 PUSH EBP
00571A2E 68 D61B5700 PUSH FYFireWa.00571BD6
00571A33 64:FF30 PUSH DWORD PTR FS:[EAX]
00571A36 64:8920 MOV DWORD PTR FS:[EAX],ESP
00571A39 68 E41B5700 PUSH FYFireWa.00571BE4 ; ASCII "FireWallAppMain"
00571A3E 6A FF PUSH -1
00571A40 6A 00 PUSH 0
00571A42 E8 D555E9FF CALL FYFireWa.0040701C
00571A47 8BD8 MOV EBX,EAX
00571A49 85DB TEST EBX,EBX
00571A4B 74 1E JE SHORT FYFireWa.00571A6B
00571A4D E8 0A57E9FF CALL FYFireWa.0040715C ; JMP 到 ntdll.RtlGetLastWin32Error
00571A52 3D B7000000 CMP EAX,0B7
00571A57 75 12 JNZ SHORT FYFireWa.00571A6B
00571A59 53 PUSH EBX
00571A5A E8 8555E9FF CALL FYFireWa.00406FE4 ; JMP 到 kernel32.CloseHandle
00571A5F 6A 00 PUSH 0
00571A61 E8 0656E9FF CALL FYFireWa.0040706C ; JMP 到 kernel32.ExitProcess
dump: 打开LordPE,选择脱壳进程,修正一下进程大小,然后完整转存。
修复IAT:打开ImportREC,选择脱壳进程,OEP修改为71A08,点IAT AutoSearch,然后Get Imports,可以看到没有无效指针,点Fix dump修复即可。
用PEID查修复好了的壳,为Borland Delphi 6.0 - 7.0,双击正常运行,脱壳完成。
6.第一次写脱壳文章,错误之处望各位大侠不吝赐教。
下载地址: be6K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6e0t1I4z5q4)9J5k6h3y4U0i4K6u0r3
【软件简介】:一款不错的ARP防火墙软件
【作者声明】:初学脱壳,只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
【调试环境】:WinXP SP3、Ollydbg1.10、PEiD、LordPE、ImportREC
【Ollydbg调试插件】:HideOD、PlantOm、异常计数器
—————————————————————————————————
【脱壳过程】:
1. PEID查壳:tElock 1.0 (private) -> tE!
第一次见到这个壳,参考了看雪论坛精华版FLY大侠tElock 0.98b1 脱壳——AntiyPorts V1.2
的脱壳教程。但不懂之处甚多,大侠们见笑了。
2.OD载入FYFireWall.exe主程序,使用HideOD插件隐藏OD,据说tElock会查找窗口和进程,因此使用PlantOm插件隐藏窗口和进程。
3.OD载入后停在下面的地方:
006B5F81 >^\E9 7AE0FFFF JMP FYFireWa.006B4000
006B5F86 0000 ADD BYTE PTR DS:[EAX],AL
006B5F88 00FE ADD DH,BH
006B5F8A FA CLI
006B5F8B D038 SAR BYTE PTR DS:[EAX],1
006B5F8D C9 LEAVE
006B5F8E 5F POP EDI
4.忽略除内存访问异常以外所有异常,使用异常计数器插件 第一步:开始计数直到程序完全运行。
5.使用异常计数器插件 第二步:带我到OEP,程序停在下面的地方:
006B5BA3 E8 06000000 CALL FYFireWa.006B5BAE
006B5BA8 8B6424 08 MOV ESP,DWORD PTR SS:[ESP+8] //SEH异常处理
006B5BAC EB 1A JMP SHORT FYFireWa.006B5BC8
006B5BAE 64:67:FF36 0000 PUSH DWORD PTR FS:[0]
006B5BB4 64:67:8926 0000 MOV DWORD PTR FS:[0],ESP
006B5BBA 9C PUSHFD
006B5BBB 810C24 00010000 OR DWORD PTR SS:[ESP],100
006B5BC2 9D POPFD
006B5BC3 F8 CLC
006B5BC4 ^ 73 DC JNB SHORT FYFireWa.006B5BA2 //计数器插件中断在这里
006B5BC6 CD 20 INT 20
006B5BC8 64:67:8F06 0000 POP DWORD PTR FS:[0]
006B5BCE 58 POP EAX
006B5BCF 61 POPAD
006B5BD0 F9 STC
006B5BD1 72 02 JB SHORT FYFireWa.006B5BD5
这个时候看堆栈:
0012FF58 0012FFE0 指向下一个 SEH 记录的指针
0012FF5C 006B5BA8 SE处理程序
在006B5BA8下断点,Shift+F9运行,中断在006B5BA8,取消断点,单步
006B5BC8 64:67:8F06 0000 POP DWORD PTR FS:[0]
006B5BCE 58 POP EAX
006B5BCF 61 POPAD
006B5BD0 F9 STC
006B5BD1 72 02 JB SHORT FYFireWa.006B5BD5
006B5BD3 CD 20 INT 20
006B5BD5 C1E8 BF SHR EAX,0BF ; 移位常量超出 1..31 的范围
006B5BD8 E8 00000000 CALL FYFireWa.006B5BDD
006B5BDD EB 01 JMP SHORT FYFireWa.006B5BE0
这个跳转过去后应该就是开始代码部分的解密了
单步运行到
006B5C79 ^\EB AF JMP SHORT FYFireWa.006B5C2A
006B5C7B 59 POP ECX
在006B5C7B处按F4,继续单步,到下面的地方,就完成了外壳部分的解密
006B5B0C 66:AB STOS WORD PTR ES:[EDI]
006B5B0E 8DBD 00104000 LEA EDI,DWORD PTR SS:[EBP+401000]
006B5B14 85F6 TEST ESI,ESI
006B5B16 75 08 JNZ SHORT FYFireWa.006B5B20
006B5B18 C707 33C040C3 MOV DWORD PTR DS:[EDI],C340C033
006B5B1E EB 0B JMP SHORT FYFireWa.006B5B2B
006B5B20 C607 E9 MOV BYTE PTR DS:[EDI],0E9
006B5B23 47 INC EDI
006B5B24 2BDF SUB EBX,EDI
006B5B26 83EB 04 SUB EBX,4
006B5B29 891F MOV DWORD PTR DS:[EDI],EBX
006B5B2B 8DBD E32A4000 LEA EDI,DWORD PTR SS:[EBP+402AE3]
006B5B31 B9 2C000000 MOV ECX,2C
006B5B36 F3:AA REP STOS BYTE PTR ES:[EDI]
006B5B38 66:AB STOS WORD PTR ES:[EDI]
006B5B3A EB 02 JMP SHORT FYFireWa.006B5B3E
006B5B3C CD 20 INT 20
006B5B3E 61 POPAD
006B5B3F E8 00000000 CALL FYFireWa.006B5B44
006B5B44 5A POP EDX
006B5B45 81EA 0E000000 SUB EDX,0E
006B5B4B 57 PUSH EDI
006B5B4C 51 PUSH ECX
006B5B4D 33C0 XOR EAX,EAX
006B5B4F 8D3A LEA EDI,DWORD PTR DS:[EDX]
006B5B51 B9 20000000 MOV ECX,20
006B5B56 F3:AA REP STOS BYTE PTR ES:[EDI]
006B5B58 66:AB STOS WORD PTR ES:[EDI]
006B5B5A 59 POP ECX
006B5B5B 5F POP EDI
006B5B5C C3 RETN //返回到OEP
RETN之后就是我们熟悉的 Delphi 入口函数代码了。
00571A08 55 PUSH EBP
00571A09 8BEC MOV EBP,ESP
00571A0B 83C4 E4 ADD ESP,-1C
00571A0E 53 PUSH EBX
00571A0F 56 PUSH ESI
00571A10 33C0 XOR EAX,EAX
00571A12 8945 E4 MOV DWORD PTR SS:[EBP-1C],EAX
00571A15 8945 EC MOV DWORD PTR SS:[EBP-14],EAX
00571A18 8945 E8 MOV DWORD PTR SS:[EBP-18],EAX
00571A1B B8 E0155700 MOV EAX,FYFireWa.005715E0
00571A20 E8 3353E9FF CALL FYFireWa.00406D58
00571A25 8B35 74625700 MOV ESI,DWORD PTR DS:[576274] ; FYFireWa.00577BC8
00571A2B 33C0 XOR EAX,EAX
00571A2D 55 PUSH EBP
00571A2E 68 D61B5700 PUSH FYFireWa.00571BD6
00571A33 64:FF30 PUSH DWORD PTR FS:[EAX]
00571A36 64:8920 MOV DWORD PTR FS:[EAX],ESP
00571A39 68 E41B5700 PUSH FYFireWa.00571BE4 ; ASCII "FireWallAppMain"
00571A3E 6A FF PUSH -1
00571A40 6A 00 PUSH 0
00571A42 E8 D555E9FF CALL FYFireWa.0040701C
00571A47 8BD8 MOV EBX,EAX
00571A49 85DB TEST EBX,EBX
00571A4B 74 1E JE SHORT FYFireWa.00571A6B
00571A4D E8 0A57E9FF CALL FYFireWa.0040715C ; JMP 到 ntdll.RtlGetLastWin32Error
00571A52 3D B7000000 CMP EAX,0B7
00571A57 75 12 JNZ SHORT FYFireWa.00571A6B
00571A59 53 PUSH EBX
00571A5A E8 8555E9FF CALL FYFireWa.00406FE4 ; JMP 到 kernel32.CloseHandle
00571A5F 6A 00 PUSH 0
00571A61 E8 0656E9FF CALL FYFireWa.0040706C ; JMP 到 kernel32.ExitProcess
dump: 打开LordPE,选择脱壳进程,修正一下进程大小,然后完整转存。
修复IAT:打开ImportREC,选择脱壳进程,OEP修改为71A08,点IAT AutoSearch,然后Get Imports,可以看到没有无效指针,点Fix dump修复即可。
用PEID查修复好了的壳,为Borland Delphi 6.0 - 7.0,双击正常运行,脱壳完成。
6.第一次写脱壳文章,错误之处望各位大侠不吝赐教。
赞赏
他的文章
赞赏
雪币:
留言: