飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 9870|回复: 22

PECompact2.x脱壳

[复制链接]
  • TA的每日心情
    难过
    4 天前
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    发表于 2005-3-24 13:18:02 | 显示全部楼层 |阅读模式
    【文章标题】PECompact2.x脱壳----绿鹰PC万能精灵 3.89主程序
    【脱壳作者】 飘云[PYG]
    【脱壳平台】 winxp
    【脱壳工具】 二哥版OD 、Peid0.92、ImportREC1.6
    【软件名称】 绿鹰PC万能精灵3.76
    【下载页面】 http://www.onlinedown.net/soft/6396.htm
    【软件大小】 1275KB
    【开 发 商】 http://www.cnlvker.com
    【软件介绍】 这是一款集系统优化,病毒清理,黑客防御,OICQ娱乐于一体的综合软件。该软件将不同的功能分成不同的精灵管理,其功能涵盖了个人电脑用户日常需求,其中包括:清除各种流行木马及病毒的[守卫精灵],实时监控木马进程及端口 - 功能判断,可杀未来木马;防止网站恶意修改及任意脚本病毒的[IE反修改精灵];增强系统安全,优化系统配置的[WINDOWS精灵];功能强劲的[OICQ辅助精灵]。【脱壳声明】 只供学习和交流,没有其他目的。失误之处敬请诸位大侠赐教!
    【脱壳过程】
    用PEid查看为PECompact 2.x -> Jeremy Collake,用OD载入程序主程序adam.exe停在这里:

    00439465 adam.<Mo> $  B8 A8D25A00        mov eax,adam.005AD2A8
    0043946A           .  50                 push eax
    0043946B           .  64:FF35 00000000   push dword ptr fs:[0]
    00439472           .  64:8925 00000000   mov dword ptr fs:[0],esp
    00439479           .  33C0               xor eax,eax
    0043947B           .  8908               mov dword ptr ds:[eax],ecx
    0043947D           .  50                 push eax
    0043947E           .  45                 inc ebp
    0043947F           .  43                 inc ebx
    00439480           .  6F                 outs dx,dword ptr es:[edi]
    00439481           >  6D                 ins dword ptr es:[edi],dx

    下断点:bp VirtualFree  F9运行
    77E59E34 kernel32>  55                   push ebp
    77E59E35            8BEC                 mov ebp,esp
    77E59E37            FF75 10              push dword ptr ss:[ebp+10]
    77E59E3A            FF75 0C              push dword ptr ss:[ebp+C]
    77E59E3D            FF75 08              push dword ptr ss:[ebp+8]
    77E59E40            6A FF                push -1
    77E59E42            E8 04000000          call kernel32.VirtualFreeEx
    77E59E47            5D                   pop ebp
    77E59E48            C2 0C00              retn 0C

    经过retn后:
    00B8041C            8B46 0C              mov eax,dword ptr ds:[esi+C]
    00B8041F            03C7                 add eax,edi
    00B80421            5D                   pop ebp
    00B80422            5E                   pop esi
    00B80423            5F                   pop edi
    00B80424            5B                   pop ebx
    00B80425            C3                   retn

    再次经过retn后:
    005AD355            8985 23120010        mov dword ptr ss:[ebp+10001223],eax            ; adam.<ModuleEntryPoint>
    005AD35B            8BF0                 mov esi,eax
    005AD35D            59                   pop ecx
    005AD35E            5A                   pop edx
    005AD35F            03CA                 add ecx,edx
    005AD361            68 00800000          push 8000
    005AD366            6A 00                push 0
    005AD368            57                   push edi
    005AD369            FF11                 call dword ptr ds:[ecx]
    005AD36B            8BC6                 mov eax,esi
    005AD36D            5A                   pop edx
    005AD36E            5E                   pop esi
    005AD36F            5F                   pop edi
    005AD370            59                   pop ecx
    005AD371            5B                   pop ebx
    005AD372            5D                   pop ebp
    005AD373            FFE0                 jmp eax ★★呵呵!注意这里,跳向OEP

    一次F8来到这里:
    00439465 adam.<Mo> $  55                 push ebp
    00439466           ?  8BEC               mov ebp,esp
    00439468           ?  6A FF              push -1
    0043946A           .  68 50594600        push adam.00465950
    0043946F           ?  68 E0CD4300        push adam.0043CDE0
    00439474           ?  64:A1 00000000     mov eax,dword ptr fs:[0]
    0043947A           ?  50                 push eax
    0043947B           .  64:8925 00000000   mov dword ptr fs:[0],esp

    用OD脱壳插件直接脱壳,保存文件123.exe,晕!不能运行
    但是不要急,ImportREC1.6出场:
    启动绿鹰PC万能精灵主程序,打开ImportREC,选取adam进程,
    1.按“IAT AutoSearch”,OEP:00039465, RAV:0005FFFC, Size:00000700
    2.按“Get Imports”,IAT信息载入成功!
    3.按“Show Invalid”,没有发现错误
    4.按“Fix Dump”,选取123.exe,自动保存为123_.exe。

    再次PEid查看,显示:Microsoft Visual C++ 6.0
    运行123_exe,一切OK!

    收工!

    【版权声明】 本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2005-3-24 17:27:54 | 显示全部楼层
    学习,谢谢
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2017-4-4 09:40
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2005-3-24 19:39:19 | 显示全部楼层
    学习~~~
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2023-12-22 19:44
  • 签到天数: 44 天

    [LV.5]常住居民I

    发表于 2005-3-25 19:02:39 | 显示全部楼层
    学习,呵呵~~~~~~~~
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2005-4-5 14:55:06 | 显示全部楼层
    好,学习,学习~~~~~~~~~~~~~~
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2005-6-24 21:59:02 | 显示全部楼层
    老大,软件是绿鹰PC万能精灵 3.89主程序,还是绿鹰PC万能精灵3.76
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2005-6-25 11:03:00 | 显示全部楼层
    现在是版本3.92了。
    老大,我也追到这儿了呀!

    00439465 adam.<Mo> $  55                 push ebp
    00439466           ?  8BEC               mov ebp,esp
    00439468           ?  6A FF              push -1
    0043946A           .  68 50594600        push adam.00465950  就这儿不太一样
    0043946F           ?  68 E0CD4300        push adam.0043CDE0  这儿不太一样
    ,后面的地址不一样!
    00439474           ?  64:A1 00000000     mov eax,dword ptr fs:[0]
    0043947A           ?  50                 push eax
    0043947B           .  64:8925 00000000   mov dword ptr fs:[0],esp

    用OD脱壳插件直接脱壳,保存文件123.exe,晕!不能运行
    但是不要急,ImportREC1.6出场:
    启动绿鹰PC万能精灵主程序,打开ImportREC,选取adam进程,
    1.按“IAT AutoSearch”,OEP:00039465, RAV:0005FFFC, Size:00000700
    2.按“Get Imports”,IAT信息载入成功!
    3.按“Show Invalid”,没有发现错误   这儿发现个错误,我有跟踪,错误消除,
    4.按“Fix Dump”,选取123.exe,自动保存为123_.exe。

    完了后程序不能运行。老大看看呀!

    [ Last edited by brightsm on 2005-6-25 at 11:06 AM ]
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2005-6-25 12:56:28 | 显示全部楼层

    找了另一篇就是修复不了IAT?(3.92版)

    PeCompact 2.x 通用简单脱壳法
    文章作者: peaceclub 文章来源:看雪论坛
    今天还有朋友在问PeCompact2.x的脱壳方法,我再这里把我的通用脱法提一下(在看其它高手们文章的基础上总结的,在此表示感谢).
    [法则]:
    PeCompact2.x是制造了两个异常(00000000内存写异常和Single Step单步循环异常),我们可以轻松通过查看SEH链来进行脱壳

    下面我说一下通用简单脱壳法:

    1、去掉所有异常忽略,保留kernel32里的内存读写异常忽略
    2、F9,run
    3、遇到写[00000000]内存异常,暂停
    4、查看SEH 链,也可从esp+4获得第一个SE Handle,Ctrl+G,来到此地址
    5、向下找jmp eax,大概在$+CB处,记住此地址
    6、ollydbg重新载入,下硬件执行断点: he 第5步的地址,F9,Shift+F9,中断
    7、F8
    8、dump,imprec fix iat,完工

    [例子]:
    GameThrust1.2: http://www.onlinedown.net/soft/37372.htm
    工具: Ollydbg/LordPE/Imprec
    依照上面提及通用方法,去掉ollydbg中所有异常忽略,保留kernel32里的内存读写异常忽略
    用ollydbg载入GameThrust.exe,F9

    引用:
    --------------------------------------------------------------------------------

    00401000 > B8 34C05000 MOV EAX,GameThru.0050C034
    00401005 50 PUSH EAX
    00401006 64:FF35 00000000 PUSH DWORD PTR FS:[0]
    0040100D 64:8925 00000000 MOV DWORD PTR FS:[0],ESP
    00401014 33C0 XOR EAX,EAX
    00401016 8908 MOV DWORD PTR DS:[EAX],ECX ;****此处异常****
    00401018 50 PUSH EAX
    00401019 45 INC EBP
    0040101A 43 INC EBX
    --------------------------------------------------------------------------------


    查看SEH 链,也可从esp+4获得第一个SE Handle

    引用:
    --------------------------------------------------------------------------------

    0012FFBC 0012FFE0 Pointer to next SEH record
    0012FFC0 0050C034 SE handler ;******SE handle 50C034*****
    0012FFC4 7C816D4F RETURN to kernel32.7C816D4F
    0012FFC8 7C930738 ntdll.7C930738
    0012FFCC FFFFFFFF
    0012FFD0 7FFD9000
    0012FFD4 8054C038


    --------------------------------------------------------------------------------


    Ctrl+G,50C034

    引用:
    --------------------------------------------------------------------------------

    0050C034 B8 DEAE50F0 MOV EAX,F050AEDE ;***来到这里***
    0050C039 8D88 79110010 LEA ECX,DWORD PTR DS:[EAX+10001179]
    0050C03F 8941 01 MOV DWORD PTR DS:[ECX+1],EAX
    0050C042 8B5424 04 MOV EDX,DWORD PTR SS:[ESP+4]
    0050C046 8B52 0C MOV EDX,DWORD PTR DS:[EDX+C]
    0050C049 C602 E9 MOV BYTE PTR DS:[EDX],0E9
    0050C04C 83C2 05 ADD EDX,5
    0050C04F 2BCA SUB ECX,EDX
    0050C051 894A FC MOV DWORD PTR DS:[EDX-4],ECX
    0050C054 33C0 XOR EAX,EAX
    0050C056 C3 RETN
    0050C057 B8 78563412 MOV EAX,12345678
    0050C05C 64:8F05 00000000 POP DWORD PTR FS:[0]
    0050C063 83C4 04 ADD ESP,4
    0050C066 55 PUSH EBP
    0050C067 53 PUSH EBX
    0050C068 51 PUSH ECX
    0050C069 57 PUSH EDI
    0050C06A 56 PUSH ESI
    0050C06B 52 PUSH EDX
    0050C06C 8D98 32110010 LEA EBX,DWORD PTR DS:[EAX+10001132]
    0050C072 8B53 18 MOV EDX,DWORD PTR DS:[EBX+18]
    0050C075 52 PUSH EDX
    0050C076 8BE8 MOV EBP,EAX
    0050C078 6A 40 PUSH 40
    0050C07A 68 00100000 PUSH 1000
    0050C07F FF73 04 PUSH DWORD PTR DS:[EBX+4]
    0050C082 6A 00 PUSH 0
    0050C084 8B4B 10 MOV ECX,DWORD PTR DS:[EBX+10]
    0050C087 03CA ADD ECX,EDX
    0050C089 8B01 MOV EAX,DWORD PTR DS:[ECX]
    0050C08B FFD0 CALL EAX
    0050C08D 5A POP EDX
    0050C08E 8BF8 MOV EDI,EAX
    0050C090 50 PUSH EAX
    0050C091 52 PUSH EDX
    0050C092 8B33 MOV ESI,DWORD PTR DS:[EBX]
    0050C094 8B43 20 MOV EAX,DWORD PTR DS:[EBX+20]
    0050C097 03C2 ADD EAX,EDX
    0050C099 8B08 MOV ECX,DWORD PTR DS:[EAX]
    0050C09B 894B 20 MOV DWORD PTR DS:[EBX+20],ECX
    0050C09E 8B43 1C MOV EAX,DWORD PTR DS:[EBX+1C]
    0050C0A1 03C2 ADD EAX,EDX
    0050C0A3 8B08 MOV ECX,DWORD PTR DS:[EAX]
    0050C0A5 894B 1C MOV DWORD PTR DS:[EBX+1C],ECX
    0050C0A8 03F2 ADD ESI,EDX
    0050C0AA 8B4B 0C MOV ECX,DWORD PTR DS:[EBX+C]
    0050C0AD 03CA ADD ECX,EDX
    0050C0AF 8D43 1C LEA EAX,DWORD PTR DS:[EBX+1C]
    0050C0B2 50 PUSH EAX
    0050C0B3 57 PUSH EDI
    0050C0B4 56 PUSH ESI
    0050C0B5 FFD1 CALL ECX
    0050C0B7 5A POP EDX
    0050C0B8 58 POP EAX
    0050C0B9 0343 08 ADD EAX,DWORD PTR DS:[EBX+8]
    0050C0BC 8BF8 MOV EDI,EAX
    0050C0BE 52 PUSH EDX
    0050C0BF 8BF0 MOV ESI,EAX
    0050C0C1 8B46 FC MOV EAX,DWORD PTR DS:[ESI-4]
    0050C0C4 83C0 04 ADD EAX,4
    0050C0C7 2BF0 SUB ESI,EAX
    0050C0C9 8956 08 MOV DWORD PTR DS:[ESI+8],EDX
    0050C0CC 8B4B 10 MOV ECX,DWORD PTR DS:[EBX+10]
    0050C0CF 894E 24 MOV DWORD PTR DS:[ESI+24],ECX
    0050C0D2 8B4B 14 MOV ECX,DWORD PTR DS:[EBX+14]
    0050C0D5 51 PUSH ECX
    0050C0D6 894E 28 MOV DWORD PTR DS:[ESI+28],ECX
    0050C0D9 8B4B 0C MOV ECX,DWORD PTR DS:[EBX+C]
    0050C0DC 894E 14 MOV DWORD PTR DS:[ESI+14],ECX
    0050C0DF FFD7 CALL EDI
    0050C0E1 8985 23120010 MOV DWORD PTR SS:[EBP+10001223],EAX
    0050C0E7 8BF0 MOV ESI,EAX
    0050C0E9 59 POP ECX
    0050C0EA 5A POP EDX
    0050C0EB 03CA ADD ECX,EDX
    0050C0ED 68 00800000 PUSH 8000
    0050C0F2 6A 00 PUSH 0
    0050C0F4 57 PUSH EDI
    0050C0F5 FF11 CALL DWORD PTR DS:[ECX]
    0050C0F7 8BC6 MOV EAX,ESI
    0050C0F9 5A POP EDX
    0050C0FA 5E POP ESI
    0050C0FB 5F POP EDI
    0050C0FC 59 POP ECX
    0050C0FD 5B POP EBX
    0050C0FE 5D POP EBP
    0050C0FF FFE0 JMP EAX ;*****JMP EAX*****
    0050C101 0000 ADD BYTE PTR DS:[EAX],AL
    0050C103 0000 ADD BYTE PTR DS:[EAX],AL


    --------------------------------------------------------------------------------


    向下找jmp eax,大概在$+CB处,记住此地址50c0ff

    用ollydbg重新载入,下硬件执行断点: he 50c0ff,F9,Shift+F9,中断
    F8,来到487228处

    引用:
    --------------------------------------------------------------------------------

    00487228 55 PUSH EBP *****OEP******
    00487229 8BEC MOV EBP,ESP
    0048722B B9 35000000 MOV ECX,35
    00487230 6A 00 PUSH 0
    00487232 6A 00 PUSH 0
    00487234 49 DEC ECX
    00487235 ^75 F9 JNZ SHORT GameThru.00487230
    00487237 51 PUSH ECX
    00487238 53 PUSH EBX
    00487239 56 PUSH ESI
    0048723A 57 PUSH EDI
    0048723B B8 706E4800 MOV EAX,GameThru.00486E70
    00487240 E8 97EDF7FF CALL GameThru.00405FDC
    00487245 33C0 XOR EAX,EAX


    --------------------------------------------------------------------------------


    dump,imprec fix iat,完工.


    别看写了这么多,真正做起来就几步,实际上有经验的话,几个F8,然后shift+F8,跟踪几下就到了.
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2005-6-25 13:57:57 | 显示全部楼层
    还要问下老大,用OD脱壳时,有一个“方法 一”和“方法二”那个有什么区别?
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2005-6-25 13:59:30 | 显示全部楼层
    import的用法给贴出来呀!
    每个按扭的功能,还有涉及的专业术语,修复原理都给说说!
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表