首页
社区
课程
招聘
[原创]PC Shrink v0.71 beta壳的运行流程和其中的技术
发表于: 2008-5-9 20:07 4998

[原创]PC Shrink v0.71 beta壳的运行流程和其中的技术

2008-5-9 20:07
4998
加壳程序是从<破解实例信息资源(豪华版)>上下载的
加壳对象是罗云彬书第四章的窗口程序
附件里是脱的记事本
初学脱壳,正在一个壳一个壳的脱着来,都是老壳,纯粹是学习的,高人让过噶,请多指教:
1)程序OD进入后申请一块内存,用得到的内存开始地址减去0040397D后把结果存入ebp里面,后面要用它来定位数据,把自身的代码移动到申请的内存后解码.
00403000 >  9C              pushfd
00403001    60              pushad
00403002    BD BCF6FFFF     mov     ebp, -944
00403007    01AD 543A4000   add     dword ptr [ebp+403A54], ebp
0040300D    FFB5 503A4000   push    dword ptr [ebp+403A50]
00403013    6A 40           push    40
00403015    FF95 883A4000   call    dword ptr [ebp+403A88]                ; kernel32.GlobalAlloc
0040301B    50              push    eax
0040301C    50              push    eax
0040301D    2D 7D394000     sub     eax, 0040397D
00403022    8985 7E394000   mov     dword ptr [ebp+40397E], eax
00403028    5F              pop     edi
00403029    8DB5 7D394000   lea     esi, dword ptr [ebp+40397D]
0040302F    B9 FC000000     mov     ecx, 0FC
00403034    F3:A5           rep     movs dword ptr es:[edi], dword ptr [e>
00403036    5F              pop     edi
00403037    FFE7            jmp     edi                                   ; 分配内存后把,程序搬到动态内存中执行
2)进入后在一个call 001529B4里面解密壳代码存到下面,完了又存回来,然后跳过去执行
00152988    BD 0BF0D4F>mov     ebp, FFD4F00B
0015298D    8BF7       mov     esi, edi
0015298F    81C6 60010>add     esi, 160
00152995    81C7 EC030>add     edi, 3EC
0015299B    57         push    edi
0015299C    56         push    esi
0015299D    57         push    edi
0015299E    55         push    ebp
0015299F    57         push    edi
001529A0    56         push    esi
001529A1    E8 0E00000>call    001529B4                                        ;这个就是执行解密代码循环的
001529A6    83C4 08    add     esp, 8
001529A9    5D         pop     ebp
001529AA    91         xchg    eax, ecx
001529AB    5E         pop     esi
001529AC    5F         pop     edi
001529AD    F3:A4      rep     movs byte ptr es:[edi], byte ptr [esi];存回来
001529AF    E9 3401000>jmp     00152AE8                                ;从这里开始的代码就是程序刚解密出来的代码

3)壳读取第一个段中的源程序数据进行解密,算法与前面的相同:
00152AE8    5F         pop     edi
00152AE9    8DB5 713C4>lea     esi, dword ptr [ebp+403C71]
00152AEF    55         push    ebp
00152AF0    57         push    edi
00152AF1    56         push    esi
00152AF2    AD         lods    dword ptr [esi]
00152AF3    0BC0       or      eax, eax
00152AF5    74 3B      je      short 00152B32
00152AF7    92         xchg    eax, edx
00152AF8    AD         lods    dword ptr [esi]
00152AF9    91         xchg    eax, ecx
00152AFA    57         push    edi
00152AFB    51         push    ecx
00152AFC    8BF2       mov     esi, edx
00152AFE    F3:A4      rep     movs byte ptr es:[edi], byte ptr [esi]                        ;把源程序读取进来

00152B20    52         push    edx
00152B21    57         push    edi
00152B22    E8 8DFEFFF>call    001529B4                                        ;解密源程序代码

4)把解密出来的源程序数据存到[004011DD]和[00402000]开始的地方去
00152B45    57         push    edi
00152B46    56         push    esi
00152B47    87DE       xchg    esi, ebx
00152B49    57         push    edi
00152B4A    51         push    ecx
00152B4B    F3:A4      rep     movs byte ptr es:[edi], byte ptr [esi]
00152B4D    59         pop     ecx
00152B4E    5E         pop     esi
00152B4F    8BFA       mov     edi, edx
00152B51    F3:A4      rep     movs byte ptr es:[edi], byte ptr [esi]
上面的两个循环存储指令就是了,下面程序会把第一个[004011DD]的数据又给覆盖了,只只保留[00402000]的那一份
5)输入表的处理就紧接着:
00152BBF    03F2       add     esi, edx
00152BC1    52         push    edx
00152BC2    56         push    esi
00152BC3    E8 0F00000>call    00152BD7                                       
00152BC8    72 0B      jb      short 00152BD5
Call里就调用LoadLibrary和GetProcAddress函数来填充源程序的IAT表
00152BA6    61         popad
00152BA7    9D         popfd
00152BA8    BA 6311400>mov     edx, 401163
00152BAD  - FFE2       jmp     edx                                        ; pcsnk_Fi.00401163
输入表没有被破坏,壳直接就跳到OEP了,dump下来Import修复,一切搞定

还是传不上去

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 130
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
**一下 呵呵
2008-8-17 01:32
0
游客
登录 | 注册 方可回帖
返回
//