吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

搜索
查看: 4873|回复: 61
上一主题 下一主题

[原创] Safengine Shielden v2.40 IAT修复及脚本编写(x64dbg)

  [复制链接]
跳转到指定楼层
楼主
Lixinist 发表于 2020-7-29 11:25 回帖奖励
前言:
首先感谢L4nce前辈写的“浅谈Safengine系列脱壳”,给了我很大帮助,让我开始入门脱加密壳。
L4nce的这篇文章已经算是“巨人的肩膀”了,但我觉得仍有一些东西可以细写。由于是自己第一次研究脱壳写脚本,没有人指点,错误纰漏处还请指正包涵没看文章的务必先看看这篇文章 。其在 “浅谈Safengine系列脱壳”已经谈及的东西,这里就不细谈了,一笔带过。
地址:浅谈Safengine系列脱壳



环境:
x64dbg(2020-7-29)及其SharpOD插件。x64dbg设置单字节断点(int3),建议win7系统


正文:
到这里,我就假设大家已经看完L4nce的文章了。接下来我想谈一些他文章中没有写到或者写全的东西,以及一些我的“奇妙旅途”


关于研究脱壳写脚本,我是先从简单程序(只有几个API调用的汇编程序)入手,分析调用iat的代码有什么特征和功能,然后写个简易脚本,测试脱壳成功了。再用相对复杂程序(易语言静态编译程序)测试脚本并完善修改。
这个方法在我看来或许比较耗时,但可以逐步解决难关,避免在莫名其妙的问题上“卡关”。

再来谈谈SE的IAT加密。。。刚开始按照L4nce的思路写脚本,最后测试脱壳什么的都成功了。。。直到我√上了“使用散列API函数名称”再测试脱壳,就失效了。分析看了一下,不再走获得API地址的add edi,eax这条路了。这样就只能另辟蹊径获得API地址这逼的我重新分析两种情况下call sedata_section的流程,以图寻找共同点和突破点。

一般来说,为了程序的速度,壳对原程序的iat调用的加密不会多厉害,最多是在第一次跑的时候跑的久一点,之后调用都是马上取得目标地址,调用API或者对寄存器赋值API地址。这一点,我认为不仅适用于se,也适用于其他加密壳,照着这个想法找下去,总能找到希望。最终我找到了一个点:push xxxxxx se在虚拟机中获取到目标(API)地址后会将其修改成push 目标地址。由此我修改了脚本流程:

1.找 call sedata_section

2.步进跟踪找push xxxxxx和cmp dword ptr ss:[esp+0x4],0

3.对push的立即数下硬件写入断点,以此来获得目标(API)地址

4.判断调用IAT的类型,做出修复

在第4点上,L4nce说了大部分情况,但有些特殊情况没有细说了。我在此把相关情况列一下:

常见:
1.call dword ptr [iat]
2.jmp dword ptr [iat]

3.mov reg,dword ptr [iat]
   call reg

少见:
4.call @ jmp dword ptr [iat]
   jmp dword ptr [iat]

第4种情况的call,在加壳的时候有时候会加密,有时候不会(但其调用的 jmp dword ptr [iat] 是一定会加密的)。既然这样,就一律按加密的情况来考虑。接下来是判断调用IAT的类型。在l4nce方法的基础上,我做了一些较大的变动。方法如下:
1.分别对 call sedata_section+5call sedata_section+6这两处可能的返回地址下单字节断点(int3)


2.判断获取到的目标(API)地址所处地址是否大于壳区段,以此判断是否是Mov_Reg类型或者其他IAT调用类型



其他IAT调用类型 (shadow已破)


3.1如果是 Mov_Reg类型,直接run,停在返回地址后,依次判断哪个寄存器参与了调用。
3.2如果是其他IAT调用的类型,先对其API地址下硬件执行断点再run,此时EIP停在API领空,判断[esp]是否与 call sedata_section+5或者 call sedata_section+6相等,或者都不相等。


4.1如果与 call sedata_section+6相等,则是 call dword ptr [iat]
4.2如果与 call sedata_section+5相等,则是
       call @ jmp dword ptr [iat]
       jmp dword ptr [iat]
   中的call
4.3如果都不相等,则是 jmp dword ptr [iat]


至此,IAT的调用类型就判断完了,然后按照各自情况修复就可以了,可以直接参考脚本。特殊API如CreateThread不会填充push xxxxxx,手动修复即可




“写脚本的奇妙旅途”:
写x64dbg脚本,还真是发生了不少“奇妙事件”。有些解决了,有些只能回避掉。

1.单步步入(sti)无效:
在把EIP设置到call上后,第一次sti有一定几率停在原地不动

2.跑脚本时奇奇怪怪的异常崩溃:
也是把EIP设置到call上后,步进追踪可能崩溃,可能出现异常访问(偏偏手动单步执行脚本就不会出现,换个系统也有可能不会再出现)。遇到这种情况,只能把地址加入ignore表,到时候手动修复。所幸这都是少数,一般就3个左右

3.跑脚本跑得x64dbg崩溃:
这个还好,跑脚本前把GUI更新关闭,堆栈更新关闭,日志更新关闭即可。出现特殊情况了,再解开GUI更新,分析情况。

4.call压入错误返回地址:
这个是最奇妙的。把EIP设置到call上后,第一次步进,,有几率出现压入错误的返回地址的现象!只能重新把EIP设置在call上,把之前的返回地址清0,再步进跟踪一次,就不会再出现了。





尾声:
脱壳时建议选择win7环境(xp貌似用不了x64dbg),win10下脱出来的易语言静态编译程序 (其他语言程序没问题) ,在其他平台运行不了。只有win7脱下来的正常运行在其他平台(暂时只测试了xp,win7,win10)脚本我写了比较多的注释,放上来供大家参考。至于特殊情况的判断和修复,相信对有心学习的人来说不是难事,对伸手党倒是难事。
(由于本文只探讨IAT的修复,所以练手例子没有检测线程干扰。寻找OEP和过检测线程的文章,看雪和吾爱有很多)
(为了方便,我将例子的OEP45e53d的下一行45e53e改成了jmp 0x45e53e,跑起来后,在45e53e下断停住,即可开始修复IAT)



附件超过了3MB,放不上来,只能放个地址
附件地址:https://wwa.lanzous.com/isvgTf37l5g

SE2.4修复脚本及例子.zip

4.45 MB, 下载次数: 107, 下载积分: 吾爱币 -1 CB

免费评分

参与人数 38吾爱币 +40 热心值 +33 收起 理由
sanbogong + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
Bnt + 1 + 1 用心讨论,共获提升!
嗯哼啊嗯呐 + 1 + 1 用心讨论,共获提升!
Zerobits + 1 + 1 我很赞同!
fengbolee + 1 + 1 谢谢@Thanks!
小马过河007 + 1 我很赞同!
poisonbcat + 1 + 1 谢谢@Thanks!
By阿清 + 1 + 1 我很赞同!
gaosld + 1 + 1 我很赞同!
Damitte + 1 + 1 我很赞同!
zsq + 1 + 1 谢谢@Thanks!
lookerJ + 1 + 1 用心讨论,共获提升!
VGA211200 + 1 用心讨论,共获提升!
lu_ + 3 + 1 用心讨论,共获提升!
情永在哥哥 + 1 + 1 用心讨论,共获提升!
pina123456 + 1 + 1 谢谢@Thanks!
zooah212 + 1 + 1 用心讨论,共获提升!
yixi + 1 + 1 我很赞同!
qq1269560093 + 1 + 1 我很赞同!
叶一苇 + 1 学习学习
shenjiyuan2hao + 1 + 1 我很赞同!
caoli5288 + 1 + 1 我很赞同!
evea + 1 + 1 我很赞同!
圣丶619 + 1 我很赞同!
兰笙c + 1 + 1 用心讨论,共获提升!
木子月 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
查无此凡 + 1 + 1 用心讨论,共获提升!
chenjingyes + 1 + 1 热心回复!
阳光如此温暖 + 2 我很赞同!
nut1999 + 1 + 1 我很赞同!
笙若 + 1 + 1 谢谢@Thanks!
独行风云 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
风扫春残雪 + 1 + 1 我很赞同!
涛涛丶 + 1 这个是大佬,VMP 3.x 什么时候研究一下!
涛之雨 + 1 + 1 膜拜,看不懂(气哭)
bp946 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
610100 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
dreamlivemeng + 1 + 1 用心讨论,共获提升!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
Hmily 发表于 2020-7-29 13:52
Lixinist 发表于 2020-7-29 11:31
其实早就应该发到52来了,当时没有邀请码。后来注册了号以后,距离在看雪发帖又已经过了半年了,偷懒一直没 ...

当时也可以通过技术文章发帖申请啦,附件我帮你编辑到帖子了。
推荐
我爱天空依旧蓝 发表于 2020-7-29 14:58
推荐
我爱天空依旧蓝 发表于 2020-7-29 17:51
5#
 楼主| Lixinist 发表于 2020-7-29 11:31 |楼主
本帖最后由 Lixinist 于 2020-7-29 11:45 编辑

其实早就应该发到52来了,当时没有邀请码。后来注册了号以后,距离在看雪发帖又已经过了半年了,偷懒一直没发。。。

点评

当时也可以通过技术文章发帖申请啦。  详情 回复 发表于 2020-7-29 13:52
6#
hardchao 发表于 2020-7-29 11:37
谢谢大佬的分享,学习。前排
7#
L4Nce 发表于 2020-7-29 11:45
字数补丁

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
Lixinist + 1 + 1 震惊! 谢谢@Thanks!

查看全部评分

8#
罗萨 发表于 2020-7-29 12:51
谢谢大佬分享,彩蛋2是T m d3.0iat修复脚本
9#
殠尛伟 发表于 2020-7-29 12:56
好,学习了
头像被屏蔽
10#
秋风和落叶 发表于 2020-7-29 13:12
提示: 该帖被管理员或版主屏蔽
11#
liuhaisong 发表于 2020-7-29 14:07
努力学习!!!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2020-8-15 13:45

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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