【文章标题】: vfp&exeNc-内存型 7.78演示版主程序脱壳
【文章作者】: 小彻小悟
【作者邮箱】: 问我妈妈
【作者主页】: 问我妈妈
【作者QQ号】: 问我妈妈
【软件名称】: vfp&exeNc-内存型 7.78演示版
【软件大小】: 490K
【下载地址】: http://www.czkj.com
【加壳方式】: 压缩未知壳
【保护方式】: vfp&exeNc7.78
【编写语言】: Borland Delphi 6.0 - 7.0
【使用工具】: OD Imprec 1.6F
【操作平台】: Windows Sp1
【软件介绍】: 内存型加密软件,保护您的源代码.
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
今天无意只间,看见了一款新壳.看雪论坛好象没有介绍过此壳,小弟就去官方网站下了个演示版脱壳练习练习,心得不感独享,
和广大朋友分享.(高手飘过)^-^
OD设置忽略所有异常,然后OD载入主程序.
00525F20 > 60 PUSHAD //停在这里
00525F21 E8 01000000 CALL vfpenc78.00525F27 //F8死,F7跟:) 这里用SEP定律也是死-,-
00525F26 6358 E8 ARPL WORD PTR DS:[EAX-18],BX
00525F29 0100 ADD DWORD PTR DS:[EAX],EAX
00525F2B 0000 ADD BYTE PTR DS:[EAX],AL
00525F2D 7A 58 JPE SHORT vfpenc78.00525F87
00525F2F 2D 0D104000 SUB EAX,vfpenc78.0040100D
00525F34 8D90 C1104000 LEA EDX,DWORD PTR DS:[EAX+4010C1]
00525F3A 52 PUSH EDX
00525F3B 50 PUSH EAX
00525F3C 8D80 49104000 LEA EAX,DWORD PTR DS:[EAX+401049]
00525F42 5D POP EBP
00525F43 50 PUSH EAX
00525F44 8D85 65104000 LEA EAX,DWORD PTR SS:[EBP+401065]
00525F4A 50 PUSH EAX
00525F4B 64:FF35 0000000>PUSH DWORD PTR FS:[0]
00525F52 64:8925 0000000>MOV DWORD PTR FS:[0],ESP
00525F59 CC INT3
00525F5A 90 NOP
00525F5B 64:8F05 0000000>POP DWORD PTR FS:[0]
00525F62 83C4 04 ADD ESP,4
00525F65 C3 RETN
00525F66 EB 11 JMP SHORT vfpenc78.00525F79
在00525F21代码处F7跟进
00525F27 58 POP EAX ; vfpenc78.00525F26 //来到这里
00525F28 E8 01000000 CALL vfpenc78.00525F2E //F8死 F7跟进
00525F2D 7A 58 JPE SHORT vfpenc78.00525F87
00525F2F 2D 0D104000 SUB EAX,vfpenc78.0040100D
00525F34 8D90 C1104000 LEA EDX,DWORD PTR DS:[EAX+4010C1]
00525F3A 52 PUSH EDX
00525F3B 50 PUSH EAX
00525F3C 8D80 49104000 LEA EAX,DWORD PTR DS:[EAX+401049]
00525F42 5D POP EBP
00525F43 50 PUSH EAX
00525F44 8D85 65104000 LEA EAX,DWORD PTR SS:[EBP+401065]
00525F4A 50 PUSH EAX
00525F4B 64:FF35 0000000>PUSH DWORD PTR FS:[0]
00525F52 64:8925 0000000>MOV DWORD PTR FS:[0],ESP
00525F59 CC INT3
00525F5A 90 NOP
00525F5B 64:8F05 0000000>POP DWORD PTR FS:[0]
00525F62 83C4 04 ADD ESP,4
00525F65 C3 RETN
继续。。在00525F28处 F7跟进后
00525F2E 58 POP EAX ; vfpenc78.00525F2D //来到这里
00525F2F 2D 0D104000 SUB EAX,vfpenc78.0040100D
00525F34 8D90 C1104000 LEA EDX,DWORD PTR DS:[EAX+4010C1]
00525F3A 52 PUSH EDX
00525F3B 50 PUSH EAX
00525F3C 8D80 49104000 LEA EAX,DWORD PTR DS:[EAX+401049]
00525F42 5D POP EBP
00525F43 50 PUSH EAX
00525F44 8D85 65104000 LEA EAX,DWORD PTR SS:[EBP+401065]
00525F4A 50 PUSH EAX
00525F4B 64:FF35 0000000>PUSH DWORD PTR FS:[0]
00525F52 64:8925 0000000>MOV DWORD PTR FS:[0],ESP
00525F59 CC INT3 //F8这里死 返回系统领空
00525F5A 90 NOP
00525F5B 64:8F05 0000000>POP DWORD PTR FS:[0] //在这里F2 SHIFT+F9运行到这里
00525F62 83C4 04 ADD ESP,4
00525F65 C3 RETN
00525F66 EB 11 JMP SHORT vfpenc78.00525F79
00525F68 59 POP ECX
00525F69 8D9D 00104000 LEA EBX,DWORD PTR SS:[EBP+401000]
00525F6F 53 PUSH EBX
00525F70 5F POP EDI
00525F71 2BFA SUB EDI,EDX
00525F73 57 PUSH EDI
00525F74 8A03 MOV AL,BYTE PTR DS:[EBX]
00525F76 3007 XOR BYTE PTR DS:[EDI],AL ; 异常
00525F78 43 INC EBX
00525F79 47 INC EDI
00525F7A ^ E2 F8 LOOPD SHORT vfpenc78.00525F74 //不让他回跳
00525F7C 58 POP EAX //F4到这里
00525F7D 894424 1C MOV DWORD PTR SS:[ESP+1C],EAX
00525F81 61 POPAD //当然,直接这里也可以
00525F82 FFE0 JMP EAX //让它跳把 不是OEP哦```
----------------------------------------------------------------------------------------------------------
00524001 60 PUSHAD //跳到这里来了,看代码就知道不是OEP-,-
00524002 E8 03000000 CALL vfpenc78.0052400A //E注意寄存器 ESP=0012ffa0(你的机器我不敢保证一样的)
00524007 - E9 EB045D45 JMP 45AF44F7
0052400C 55 PUSH EBP
0052400D C3 RETN
0052400E E8 01000000 CALL vfpenc78.00524014
00524013 EB 5D JMP SHORT vfpenc78.00524072
00524015 BB EDFFFFFF MOV EBX,-13
0052401A 03DD ADD EBX,EBP
0052401C 81EB 00401200 SUB EBX,124000
00524022 83BD 22040000 0>CMP DWORD PTR SS:[EBP+422],0
00524029 899D 22040000 MOV DWORD PTR SS:[EBP+422],EBX
0052402F 0F85 65030000 JNZ vfpenc78.0052439A
00524035 8D85 2E040000 LEA EAX,DWORD PTR SS:[EBP+42E]
0052403B 50 PUSH EAX
0052403C FF95 4D0F0000 CALL DWORD PTR SS:[EBP+F4D]
00524042 8985 26040000 MOV DWORD PTR SS:[EBP+426],EAX
00524048 8BF8 MOV EDI,EAX
0052404A 8D5D 5E LEA EBX,DWORD PTR SS:[EBP+5E]
0052404D 53 PUSH EBX
0052404E 50 PUSH EAX
0052404F FF95 490F0000 CALL DWORD PTR SS:[EBP+F49]
00524055 8985 4D050000 MOV DWORD PTR SS:[EBP+54D],EAX
0052405B 8D5D 6B LEA EBX,DWORD PTR SS:[EBP+6B]
动作
在ESP那一行鼠标又键,数据窗口跟随.
看下面的数据窗口
0012FFA0 00525FE1 vfpenc78.00525FE1
右键,断点,硬件访问,字 F9运行
005243B0 /75 08 JNZ SHORT vfpenc78.005243BA //运行后来到这里
005243B2 |B8 01000000 MOV EAX,1
005243B7 |C2 0C00 RETN 0C
005243BA \68 43854D00 PUSH vfpenc78.004D8543
005243BF C3 RETN //这里返回
005243C0 8B85 26040000 MOV EAX,DWORD PTR SS:[EBP+426]
005243C6 8D8D 3B040000 LEA ECX,DWORD PTR SS:[EBP+43B]
005243CC 51 PUSH ECX
005243CD 50 PUSH EAX
005243CE FF95 490F0000 CALL DWORD PTR SS:[EBP+F49]
005243D4 8985 55050000 MOV DWORD PTR SS:[EBP+555],EAX
005243DA 8D85 47040000 LEA EAX,DWORD PTR SS:[EBP+447]
005243E0 50 PUSH EAX
005243E1 FF95 510F0000 CALL DWORD PTR SS:[EBP+F51]
--------------------------------------------------------------------------------------------------------------------
004D8543 60 PUSHAD //返回到这里 记得清除上面的断点,养成一个好习惯!
004D8544 E8 00000000 CALL vfpenc78.004D8549
004D8549 5D POP EBP
004D854A 81ED 06104000 SUB EBP,vfpenc78.00401006
004D8550 8D85 56104000 LEA EAX,DWORD PTR SS:[EBP+401056]
004D8556 50 PUSH EAX
004D8557 64:FF35 0000000>PUSH DWORD PTR FS:[0]
004D855E 64:8925 0000000>MOV DWORD PTR FS:[0],ESP
004D8565 CC INT3 //返回到系统领空
004D8566 90 NOP
004D8567 64:8F05 0000000>POP DWORD PTR FS:[0] //F2断下,SHIFT+F9运行到这里,F4死。。
004D856E 83C4 04 ADD ESP,4
004D8571 74 05 JE SHORT vfpenc78.004D8578
004D8573 75 03 JNZ SHORT vfpenc78.004D8578
004D8575 EB 07 JMP SHORT vfpenc78.004D857E
004D8577 59 POP ECX
004D8578 8D9D 00104000 LEA EBX,DWORD PTR SS:[EBP+401000]
004D857E 53 PUSH EBX
004D857F 5F POP EDI
004D8580 2BFA SUB EDI,EDX
004D8582 57 PUSH EDI
004D8583 8A03 MOV AL,BYTE PTR DS:[EBX]
004D8585 3007 XOR BYTE PTR DS:[EDI],AL
004D8587 43 INC EBX
004D8588 47 INC EDI
004D8589 ^ E2 F8 LOOPD SHORT vfpenc78.004D8583
004D858B 58 POP EAX
004D858C 894424 1C MOV DWORD PTR SS:[ESP+1C],EAX
004D8590 61 POPAD
004D8591 FFE0 JMP EAX //飞象光明之颠^-^
004D8593 74 60 JE SHORT vfpenc78.004D85F5
004D8595 75 5E JNZ SHORT vfpenc78.004D85F5
004D8597 EB 55 JMP SHORT vfpenc78.004D85EE
004D8599 55 PUSH EBP
拿自带插件脱之,Imprec 1.6F 出场
OEP输入 D8591 自动获IAT表 抓取修复文件 运行正常^-^
查壳为Borland Delphi 6.0 - 7.0
----------------------------------------------------------------------
脱壳脚本:
/////////////////////////
//For vfpenc78,By wynney
#log
Var Addr1
Var Addr2
Var VirtualFree
log eip
cmt eip, "请忽略所有异常"
GPA "VirtualFree","kernel32.dll"
CMP $RESULT,0
JE ERR
MOV VirtualFree,$RESULT
BP VirtualFree
RUN
RUN
BC VirtualFree
RTU
find eip,#68????????C3#
CMP $RESULT,0
JE ERR
MOV Addr1,$RESULT
BP Addr1
RUN
BC Addr1
STO
STO
find eip,#61FFE0#
CMP $RESULT,0
JE ERR
MOV Addr2,$RESULT+1
BP Addr2
RUN
BC Addr2
STO
log eip
cmt eip, "This is the OEP! Found By: wynney "
RET
ERR:
MSG "error"
RET
/////////////////////////////
----------------------------------------------------------------------
【经验总结】
注意2个返回系统领空的位置就OK
另外 感谢 peaceclub KanXue Fly 大彻大悟 machenglin wynney laomms xxdoc forgot monkeycz 一直以来对我的帮助
祝大家2007新的一年 身体健康 万事如意 金猪大发
引用forgot老大的一句名言 写破文比脱壳难-,-
脱壳脚本是 wynney大侠所写 再次感谢wynney大侠 完美了这个破文:)
----------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
2007年01月14日
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!