能力值:
(RANK:650 )
|
-
-
2 楼
level0-level9都支持了
控制台程序
若加壳程序叫abc.dll
un abc.dll
会生成abc.shoooo.dll是脱壳后的
垃圾题目垃圾题目垃圾题目垃圾题目垃圾题目垃圾题目垃圾题目垃圾题目垃圾题目垃圾题目垃圾题目垃圾题目垃圾题目垃圾题目垃圾题目垃圾题目
|
能力值:
(RANK:650 )
|
-
-
3 楼
shoooo的petite23分析笔记
壳一共有两种压缩算法和对应的loader
level 0是第一种 (以下称level0)
level1-level9是第二种 (以下称level1)
下面的分析是以petgui主程序为例, 用的是level1. level0的就不贴了, 原理一样的
壳段的结构
Offset Length
+0x000 DWORD 壳输入表的偏移
+0x004 DWORD PE头的校验值
+0x008 DWORD 解压时存放压缩数据的GlobalAlloc地址
+0x00C 0x25 一段代码, 壳出错时会跑过来退出
+0x031 0x15 壳出错时弹出的信息字符串
+0x046 0x15A 壳的第一段Loader (A部分) EP
+0x160 0x14*5 解压信息 (B部分)
+0x204 0x1CA 壳本身的整个输入表
+0x3CE 到最后 程序的输入表的dll名字集合 (C部分)
需要定位A, B, C
A部分中我们需要知道如下
004E3046 B8 00304E00 mov eax,petgui.004E3000
004E304B 68 E3644100 push petgui.004164E3
这里004164E3是第二Loader部分,等解压完后会跳过去
004E30AC 81C6 02010000 add esi,102
这里102 可以定位到C部分
004E30B7 8D90 A0010000 lea edx,dword ptr ds:[eax+1A0]
这里1A0 可以定位到B部分
B部分是以0x14为一个分组的解压信息, 意义如下
000E2420 加密数据存放的地址
000007E9 解密后的大小
000E2420 解密后存放的地址
000007EE /2的值是最后清0的大小,%2的值决定是否要bswap e8e90f84
000000BD *4以后是加密数据的大小
C部分是输入表dll的名字
一个接一个排列, 每个以0结尾
----------------------------------------------------------
4164E3 这里是第二个loader, 是第一个loader解码出来的
Offset Length
+0x000 5 E84F000000
+0x005 0x0E 一段加密代码, 和最后跳回oep有关
+0x013 字符串 如果发现校验不同过,会显示这个
后面是代码了
有几个固定偏移的地方有些重要数据
00416587 6A 03 push 3
这个3是抽api的初始计数值
0041658C 68 3E030000 push 33E
这个33E过去是一个call 解码后是跳回ep-9的地方
004165C8 315C11 01 xor dword ptr ds:[ecx+edx+1],ebx ;
通过最后一个call 可以直接算出 ebx的值
00416605 8DB5 CC590100 lea esi,dword ptr ss:[ebp+159CC]
可以得到IID的位置, 修输入表其实就是恢复IID
00416704 /74 12 je short petgui.00416718
00416706 |3B1A cmp ebx,dword ptr ds:[edx]
00416708 |8318 00 sbb dword ptr ds:[eax],0
0041670B |390A cmp dword ptr ds:[edx],ecx
0041670D |8318 00 sbb dword ptr ds:[eax],0
00416710 |83C2 04 add edx,4
00416713 |C108 03 ror dword ptr ds:[eax],3
00416716 ^|EB E9 jmp short petgui.00416701
00416718 \C706 00000000 mov dword ptr ds:[esi],0
能过输入表的各数算oep
可以理解为, 抽则-2, 不抽则-1, 再ror 3
00416834 E8 04C80C00 call petgui.004E303D
跳回ep-9
004E303D 5F pop edi ;
petgui.00400852
004E303E F3:AA rep stos byte ptr es:[edi]
004E3040 61 popad
004E3041 66:9D popfw
004E3043 83C4 08 add esp,8
004E3046 E9 8CA0F2FF jmp petgui.0040D0D7
跳oep
|
能力值:
(RANK:170 )
|
-
-
4 楼
样本序号 执行结果 原始大小 解压大小
1 pass 20480 13824
2 pass 20480 13824
3 failed
4 failed
5 failed
6 pass 24576 21504
7 pass 24576 15872
8 failed
name 起始时间 结束时间 做题时间 脱壳成功文件数 解压比例 提交次数
shoooo 2007-9-2 12:00 2007-9-3 10:25 1345 4 1 2
得分
62.63297088
|
能力值:
(RANK:650 )
|
-
-
5 楼
样本传上来看看
|
能力值:
(RANK:650 )
|
-
-
6 楼
不好意思, 我就样算对不对
((7200-625)/7200) 1/2 * (4/8) * 1 * 150 - 5
= 66.670905882373218403043071976387
|
能力值:
(RANK:170 )
|
-
-
7 楼
应该是1345,而不是 625吧
|