首页
社区
课程
招聘
[原创]小试甲壳
发表于: 2009-8-22 23:58 19387

[原创]小试甲壳

2009-8-22 23:58
19387
设置SOD全选项 载入 停在TLS入口
007CD65E 55 push ebp
007CD65F 8BEC mov ebp,esp
007CD661 81EC 94000000 sub esp,94
007CD667 57 push edi
007CD668 50 push eax
007CD669 B8 09563412 mov eax,12345609
007CD66E 58 pop eax
007CD66F C745 B4 DE3A7C0>mov dword ptr ss:[ebp-4C],7C3ADE
007CD676 50 push eax
007CD677 B8 0C563412 mov eax,1234560C


在.text下内存写入断点,中断后取消 停在

007CC6E6 8801 mov byte ptr ds:[ecx],al


单步到

007CC6BB 3B4D CC cmp ecx,dword ptr ss:[ebp-34]
007CC6BE 73 5B jnb short 007CC71B ; 007CC71B


判断是否解码完毕 直接在007CC71B F4一下 再在.text段下内存访问断点

把0063B1C0 当做OEP好了

0063B1C0 8BFF mov edi,edi ; ntdll.7C930041
0063B1C2 55 push ebp
0063B1C3 8BEC mov ebp,esp
0063B1C5 E8 1B69EBFF call 004F1AE5 ; 004F1AE5
0063B1CA E8 11000000 call 0063B1E0 ; 0063B1E0
0063B1CF 5D pop ebp
0063B1D0 C3 retn


壳模拟了2个DLL KERNEL32.DLL和USER32.DLL
模拟后基址为00D60000和00E80000

随便跟一个FF15看看 找004FF171 这个好了

007C482B /74 09 je short 007C4836 ; 007C4836
007C482D |8B47 24 mov eax,dword ptr ds:[edi+24] ; 甲壳试用.004E9741
007C4830 |8800 mov byte ptr ds:[eax],al
007C4832 |C647 23 01 mov byte ptr ds:[edi+23],1
007C4836 \807F 21 01 cmp byte ptr ds:[edi+21],1
007C483A 75 05 jnz short 007C4841 ; 007C4841
007C483C E8 0DFBFFFF call 007C434E ; 007C434E
007C4841 807F 22 01 cmp byte ptr ds:[edi+22],1
007C4845 75 05 jnz short 007C484C ; 007C484C
007C4847 E8 02FBFFFF call 007C434E ; 007C434E
007C484C 58 pop eax
007C484D 2B07 sub eax,dword ptr ds:[edi]
007C484F 99 cdq
007C4850 B9 06000000 mov ecx,6
007C4855 F7F9 idiv ecx
007C4857 8B4F 04 mov ecx,dword ptr ds:[edi+4]
007C485A 8B0481 mov eax,dword ptr ds:[ecx+eax*4]
007C485D 8B4F 1C mov ecx,dword ptr ds:[edi+1C]
007C4860 8B57 18 mov edx,dword ptr ds:[edi+18]
007C4863 8B7F 14 mov edi,dword ptr ds:[edi+14]
007C4866 FFE0 jmp eax


在007C4866这里 EAX指向模拟函数或者正常函数 壳中还有部分函数没有加密
写脚本

var fi
var tmpesp
var oep
var tmp

bphwc
bc

bphws 007C4866,"x"
bphws 0063B1C0 ,"x"
esto
mov fi,004E6000 //.text段VA
mov oep,eip
mov tmpesp,esp

loop:
mov esp,tmpesp
inc fi
find fi,#FF15#
cmp $RESULT,0
je exit
mov fi,$RESULT
gci fi,DESTINATION
mov tmp,$RESULT
find tmp,#E8#,1//防出错处理
cmp $RESULT,0
je loop
cmp tmp,62C20000 //跟第一个系统DLL基址比较 跳过不加密的
jae loop
mov eip,fi
esto
cmp eax,62C20000//跟第一个系统DLL基址比较
ja fixnormal
cmp eax,00D60000
jb error //出错处理
cmp eax,00e80000 //USER32.DLL模拟后基址
ja fixuser32

fixkernel32:
sub eax,00D60000
add eax,7c800000 //系统KERNEL32.DLL基址
mov tmp,[fi+2]
mov [tmp],eax
jmp loop

fixuser32:
sub eax,00E80000
add eax,77D10000 //系统USER32.DLL基址
mov tmp,[fi+2]
mov [tmp],eax
jmp loop

fixnormal:
mov tmp,[fi+2]
mov [tmp],eax
jmp loop

error:
msg "RP不好 出错了"
pause


exit:
mov eip,oep
mov esp,tmpesp
bphwc
ret


转悠一圈回来 脚本跑完了 IAT分布比较散 用UIF放到.idata段里 DUMP
IMPORTREC修复 清空TLS,重定位,调试,延迟等目录 修改下区段虚拟大小和物理大小
简单优化下 2.39M 原版6.88
收工
附件为脱壳后主程序

[课程]FART 脱壳王!加量不加价!FART作者讲授!

上传的附件:
收藏
免费 7
支持
分享
最新回复 (38)
雪    币: 129
活跃值: (53)
能力值: ( LV9,RANK:220 )
在线值:
发帖
回帖
粉丝
2
我在看雪的第一篇主题帖 谢谢管理鼓励 以后写文章UPK和看雪一起更新
2009-8-23 00:02
0
雪    币: 20
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
不是很懂!关于这些脚本。脚步是怎么写出来的啊?如何分析脚本啊?楼主可以做个教程说说吗?支持下。。。。
2009-8-23 00:24
0
雪    币: 1844
活跃值: (35)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
4
现在混口饭真不容易。。。。。。。。。。。。。。。。。。
2009-8-23 00:28
0
雪    币: 1025
活跃值: (225)
能力值: ( LV12,RANK:310 )
在线值:
发帖
回帖
粉丝
5
从unpack跟随到这里下免费的
2009-8-23 08:19
0
雪    币: 740
活跃值: (952)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
6
汗死。支持楼主,不过应给国产壳留点底……
2009-8-23 10:23
0
雪    币: 1183
活跃值: (2036)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
这个壳开发长达一年,流了很多血和汗,是卖钱的,发到这里是增加知名度,不是让大家破解的,
2009-8-23 11:57
0
雪    币: 35
活跃值: (11)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
我是作者 不过有些蹊跷 大哥的IMPORTREC好像用的太出神入化了  吧修复输入表部分也写写 让我见识见识
2009-8-23 12:10
0
雪    币: 35
活跃值: (11)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
9
可千万别说说根据我之前发布在网上的没加壳的版本脱壳的
2009-8-23 12:11
0
雪    币: 1233
活跃值: (907)
能力值: ( LV12,RANK:750 )
在线值:
发帖
回帖
粉丝
10
传说中的最强的壳,嘿嘿!
2009-8-23 12:16
0
雪    币: 334
活跃值: (22)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
11
这个kunkun好强大...
2009-8-23 19:13
0
雪    币: 7309
活跃值: (3778)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
12
你的兄弟好厉害
2009-8-23 19:21
0
雪    币: 271
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
哎~~大牛们都喜欢玩这些“前所未有的”“终极软件保护”壳
2009-8-23 20:22
0
雪    币: 152
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
对你表示无语
2009-8-23 20:51
0
雪    币: 129
活跃值: (53)
能力值: ( LV9,RANK:220 )
在线值:
发帖
回帖
粉丝
15
修复成直接调用然后用UIF修复 想必你看不懂我的脚本也不知道UIF吧

可千万别说说根据我之前发布在网上的没加壳的版本脱壳的

没见过没加壳版 事实上 脱壳花了1分钟 写脚本花了1分钟 跑脚本花的时间长点 最长的是写文章了 广告上牛吹大了


这个壳开发长达一年,流了很多血和汗,是卖钱的,发到这里是增加知名度,不是让大家破解的

此壳还有太多路要走 玩壳的都看出来了 点到即止
再一个 我只是讨论脱壳 没有动你功能代码 所以不算破解
2009-8-23 22:08
0
雪    币: 264
活跃值: (11)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
16
很快~~壳子放出来就是让玩的 境界应该是写出来的壳子没人玩动 甚至是拿到了也不敢玩
2009-8-24 01:25
0
雪    币: 872
活跃值: (165)
能力值: ( LV3,RANK:35 )
在线值:
发帖
回帖
粉丝
17
好像是在52破解上看到你说的这个甲壳了
不过,不少人说加完壳跑不起来.
可能真是 牛有点吹大了~
2009-8-24 10:21
0
雪    币: 224
活跃值: (147)
能力值: ( LV9,RANK:970 )
在线值:
发帖
回帖
粉丝
18
加密引擎完全自主开发,采用了大量自主研发的新型技术,
加密强度达到了前所未有的水平
2009-8-24 12:51
0
雪    币: 291
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
天草~~呵呵....好像天草培训那边就有关于NP教程...
2009-8-24 22:00
0
雪    币: 817
活跃值: (1927)
能力值: ( LV12,RANK:2670 )
在线值:
发帖
回帖
粉丝
20
想让别人掏腰包,不如自己先掏腰包。
2009-8-24 22:52
0
雪    币: 417
活跃值: (475)
能力值: ( LV9,RANK:1250 )
在线值:
发帖
回帖
粉丝
21
我也来玩一玩.
strongOD,HidePEB,停在系统断点后删除EP断点.

到达OEP
.text下内存写入断点,停在:
007CC6E6     8801               mov byte ptr ds:[ecx],al
007CC6E8     EB 03              jmp short 007CC6ED

取消,步进直到解码完毕:
007CC6B8     8B4D C4            mov ecx,dword ptr ss:[ebp-3C]
007CC6BB     3B4D CC            cmp ecx,dword ptr ss:[ebp-34]
007CC6BE     73 5B              jnb short 007CC71B
007CC6C0     EB 03              jmp short 007CC6C5

再次在.text下内存访问断点
004E9741    /E9 7A1A1500        jmp 0063B1C0
把他当oep.dump保存.

iat的解码处理:
007C0D1E     E8 BF3A0000        call 007C47E2                                             ; 甲壳试用.007C47E2

007C47E2     50                 push eax
007C47E3     B8 06563412        mov eax,12345606
007C47E8     58                 pop eax                                                   ; 00E891BE
007C47E9     EB 28              jmp short 007C4813                                        ; 甲壳试用.007C4813

007C4813     E8 00000000        call 007C4818                         ; 甲壳试用.007C4818
007C4818     58                 pop eax                               ; 00E891BE
007C4819     83E8 2D            sub eax,2D
007C481C     8978 14            mov dword ptr ds:[eax+14],edi
007C481F     8950 18            mov dword ptr ds:[eax+18],edx
007C4822     8948 1C            mov dword ptr ds:[eax+1C],ecx
007C4825     8BF8               mov edi,eax
007C4827     807F 23 01         cmp byte ptr ds:[edi+23],1
007C482B     74 09              je short 007C4836                     ; 甲壳试用.007C4836
007C482D     8B47 24            mov eax,dword ptr ds:[edi+24]         ; 甲壳试用.00724480
007C4830     8800               mov byte ptr ds:[eax],al
007C4832     C647 23 01         mov byte ptr ds:[edi+23],1
007C4836     807F 21 01         cmp byte ptr ds:[edi+21],1
007C483A     75 05              jnz short 007C4841                    ; 甲壳试用.007C4841
007C483C     E8 0DFBFFFF        call 007C434E                         ; 甲壳试用.007C434E
007C4841     807F 22 01         cmp byte ptr ds:[edi+22],1
007C4845     75 05              jnz short 007C484C                    ; 甲壳试用.007C484C
007C4847     E8 02FBFFFF        call 007C434E                         ; 甲壳试用.007C434E
007C484C     58                 pop eax                               ; 00E891BE
007C484D     2B07               sub eax,dword ptr ds:[edi]
007C484F     99                 cdq
007C4850     B9 06000000        mov ecx,6
007C4855     F7F9               idiv ecx
007C4857     8B4F 04            mov ecx,dword ptr ds:[edi+4]          ; 甲壳试用.006BAF1B
007C485A     8B0481             mov eax,dword ptr ds:[ecx+eax*4]
007C485D     8B4F 1C            mov ecx,dword ptr ds:[edi+1C]
007C4860     8B57 18            mov edx,dword ptr ds:[edi+18]
007C4863     8B7F 14            mov edi,dword ptr ds:[edi+14]         ; 甲壳试用.004ED8C3
007C4866   - FFE0               jmp eax

这个jmp eax就是函数出口,有2种,一种为真正的函数地址,一种是模拟地址,模拟了kernel32和user32.

iat:
0072B200  007C1C1E  甲壳试用.007C1C1E
0072B204  007C1C24  甲壳试用.007C1C24
...
0072C2C4  007C1CF0  甲壳试用.007C1CF0
0072C2C8  007C1CF6  甲壳试用.007C1CF6
0072C2CC  00000000

解密iat:
先解决第一次加密:
mov ecx,072b200

loop:
mov ebx,[ecx]
cmp ebx,0
je next
mov [addr],ecx
call ebx

retn:
mov ecx,[addr]
mov [ecx],eax

next:
add ecx,4
cmp ecx,72c2cc
jb loop
jmp end

申请空间写上:
B9 00 B2 72 00 8B 19 83 FB 00 74 17 89 0D 00 02 87 01 FF D3 90 00 00 00 00 00 00 8B 0D 00 02 87
01 89 01 83 C1 04 81 F9 CC C2 72 00 72 D7 EB FE

然后在jmp eax处patch,jmp回写的代码的retn处.
在开始处新建eip,然后F9,哦了一部分.

再解决模拟函数:
模拟函数地址为:
0D6000000        kernel32.dll        7c800000
0E8000000        user32.dll        77d10000

扣除该基址+函数本来基址就哦了.
mov ecx,72b200

loop:
mov eax,[ecx]
cmp eax,70000000
jg next
cmp eax,0d60000
jb next
cmp eax,0e80000
jb fix1
jmp fix2

fix1:
sub eax,0d60000
add eax,7c800000
mov [ecx],eax
jmp next

fix 2
sub eax,0e80000
add eax,77d10000
mov [ecx],eax
jmp next

next:
add ecx,4
cmp ecx,72c2cc
jb loop
jmp end

0187003E     B9 00B27200        mov ecx,72B200

照旧:
B9 00 B2 72 00 8B 01 3D 00 00 00 70 7F 2C 3D 00 00 D6 00 72 25 3D 00 00 E8 00 72 02 EB 0E 2D 00
00 D6 00 05 00 00 80 7C 89 01 EB 0E 2D 00 00 E8 00 05 00 00 D1 77 89 01 EB 00 83 C1 04 81 F9 CC
C2 72 00 72 C0 EB FE

importREC获取iat,修复dump,哦了.

修复后的程序可以在2k下动了.
2009-8-25 19:50
0
雪    币: 417
活跃值: (475)
能力值: ( LV9,RANK:1250 )
在线值:
发帖
回帖
粉丝
22
不知道这个试用版加的壳是不是最强保护,如果是,作者要走的路还n长.
2009-8-25 20:01
0
雪    币: 1844
活跃值: (35)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
23
关键是作者不能认识到自己的不足
2009-8-25 20:22
0
雪    币: 443
活跃值: (200)
能力值: ( LV9,RANK:1140 )
在线值:
发帖
回帖
粉丝
24
路过,纯支持!!!
2009-8-25 21:37
0
雪    币: 1233
活跃值: (907)
能力值: ( LV12,RANK:750 )
在线值:
发帖
回帖
粉丝
25
见证了最强的乌龟壳从开始到完蛋的全过程,嘿嘿
2009-8-25 23:04
0
游客
登录 | 注册 方可回帖
返回
//