首页
社区
课程
招聘
[讨论]die0.64 查壳扫描算法的分析 (输入表判断,讨论)
发表于: 2018-5-30 21:13 4744

[讨论]die0.64 查壳扫描算法的分析 (输入表判断,讨论)

2018-5-30 21:13
4744
我编写一个查壳工具。
编写了类库,算法,查壳功能也都实现了。看看其它查壳工具都有什么不同

peid和die0.64提取的特征码完全不同,
把入口点全部nop掉(peid查不出来了),把区段名改为upx1(die1.0查不出来了),依然能识别为aspack2.12
就算把输入表的desc全部删除依然能识别出 aspack2.12,只有当把输入表的地址改为0时,才会识别不出来。
  
经过我的分析,
die0.64最终判断一个文件是否是aspack2.12加的壳,判断的特征码是 “FAC13FAC F5413F54H”
然后提取字符串ASCII “FAC”,转换成数字保存在寄存器edi中, 然后循环判断edi如果是数字 $FAC则标记为aspack
大家可以自己调试一下, 找出他是怎么识别外壳的

另外我分析的数据。
LoadLibrayEx, FindResourceA(RT_RCDATA, DVCLAL,PackageInfo) —— 会判断是否是delphi编译器
应该是搜索输入表,找getprocessaddress这些,kernel32。dll这些

die0.64和测试程序下载
https://pan.baidu.com/s/1T-0lTklwm5ImBfYgQdRC4A

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

我分析的内容:





动态在内存中分配的,外壳结构体 =
还原成源代码为
type
  TPESign = packed  record
      Len: Byte;                      // 1个字节长度
      Name:string[35];        // 名字缓冲区  (十六进制$23)
      IsMatched: Boolean;    // 4个字节,是否识别为此外壳
  end;

* 好吧,还原出这个结构,
最后下断改写 ismatched,写入为1(真)的代码,发现断下
004D740A  |> \FF83 9C000000 inc     dword ptr [ebx+0x9C]             ;  核心改写函数


* 核心魔术跳
向上两三行找到关键比较部分,我惊奇的发现是这样的。
004D73FA  |.  81FF AC0F0000 cmp     edi, 0xFAC
我不知道为什么,为什么die0.64里有大量这种类型的代码,比较一个数字!
核心关键它是怎么判断和识别一个程序是否是aspack壳的外壳呢,是会判断 edi是否为 $FAC,如果是则设置此程序就是aspack!!!


* 外壳识别码($FAC)从何而来?
我给esi下段,查找改写的部分,
这是原始esi地址(pe识别的特征码所在的位置的原始内容)


核心查壳函数


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2018-5-31 00:01 被ladkjflk编辑 ,原因:
收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//