系统 : Windows xp

程序 : 某游戏客户端

程序下载地址 :不提供

要求 : 脱去压缩壳

使用工具 : OD & PEID & LordPE & Import REC

被感染客户端中的是Ramint蠕虫病毒,感染速度非常快,危害相当大。建议在虚拟机环境下进行逆向分析。

相关资料:

Ramnit(W32.Ramnit)的初始形态是蠕虫病毒,首次出现于2010年,激进的自繁殖策略使其得到迅速传播。一旦入侵计算机,该病毒就会找出本地硬盘和移动硬盘上所有的EXE、DLL、HTM和HTML文件,通过自身副本感染这些文件。 

本文参考了这篇帖子的12L回复:

会有一个新段位 rmnet的sfx段
取现在EP地址-(【EP+】得到的偏移数)= 原始OEP 动态劫持脱壳
EP处直接粘贴该二进制
E8 5D ED 2B AD 6C 1C FF E0 静态脱壳
先提取rmnet区段数据。然后取得 EP+328数据用ep减即可。。。然后删除rmnet区段。

客户端入口点在病毒区段,其内容为:

 >                pushad
E8 call
5D pop ebp
8BC5 mov eax, ebp
81ED 326F0120 sub ebp, 20016F32
0062200F 2B85 sub eax, dword ptr [ebp+]
4C720120 mov dword ptr [ebp+2001724C], eax
0062201B B0 mov al,
0062201D 9E740120 xchg byte ptr [ebp+2001749E], al
3C cmp al,
0F85 DE020000 jnz

按照帖子回复所说静态修改代码,其内容变为:

 >                pushad
E8 call
5D pop ebp
83ED sub ebp,
0062200A 2BAD sub ebp, dword ptr [ebp+]
896C24 1C mov dword ptr [esp+1C], ebp
popad
FFE0 jmp eax

以上指令找出了oep的位置,并直接跳转进入oep。也就是说,根本不用分析病毒行为,我们直接绕过它就可以。

脱壳时,运行到客户端真正的oep再完整转存内存映像,并在重建输入表的时候选择正确的oep,那么病毒代码就并不会执行。

紧接上部,jmp eax之后来到了程序的upx壳部分:

0060D080                  pushad
0060D081 BE mov esi,
0060D086 8DBE 00C0E8FF lea edi, dword ptr [esi+FFE8C000]
0060D08C push edi
0060D08D 83CD FF or ebp, FFFFFFFF
0060D090 EB jmp short 0060D0A2
0060D092 nop
0060D093 nop
0060D094 nop
0060D095 nop
0060D096 nop
0060D097 nop
0060D098 8A06 mov al, byte ptr [esi]
0060D09A inc esi
0060D09B mov byte ptr [edi], al
0060D09D inc edi
0060D09E 01DB add ebx, ebx
0060D0A0 jnz short 0060D0A9
0060D0A2 8B1E mov ebx, dword ptr [esi]

单步执行pushad之后,esp指向0012FFA4 ,键入命令hr 12FFA4下硬件断点,F9运行程序断在此处:

0060D207    8D4424        lea     eax, dword ptr [esp-]
0060D20B 6A push
0060D20D 39C4 cmp esp, eax
0060D20F ^ FA jnz short 0060D20B
0060D211 83EC sub esp, -
0060D214 - E9 93D9EFFF jmp 0050ABAC

直接在60D214出下断,跟入真正的oep:

0050ABAC                  push    ebp
0050ABAD 8BEC mov ebp, esp
0050ABAF 6A FF push -
0050ABB1 90C35100 push 0051C390
0050ABB6 60D65000 push 0050D660
0050ABBB :A1 mov eax, dword ptr fs:[]
0050ABC1 push eax
0050ABC2 : >mov dword ptr fs:[], esp
0050ABC9 83EC sub esp,
0050ABCC push ebx
0050ABCD push esi
0050ABCE push edi
0050ABCF E8 mov dword ptr [ebp-], esp
0050ABD2 FF15 A8B15100 call dword ptr [51B1A8] ; kernel32.GetVersion

此时单击菜单Debug->hardware breakpoints删除之前设置的硬件断点。

打开LordPE选择客户端程序并单击右键选择“完整转存”。

保存dump文件之后,再打开输入表重建工具Import REC附加到客户端程序。

填写OEP为“10ABAC”,依次单击“自动查找IAT”、“获取输入表”,最后,单击“修复转存文件”,选中之前的dump文件,则脱壳成功。

刀锋上前行!绕过Ramint蠕虫病毒直接脱壳的更多相关文章

  1. [转帖]Docker Hub上镜像发现挖矿蠕虫病毒,已导致2000台主机感染

    Docker Hub上镜像发现挖矿蠕虫病毒,已导致2000台主机感染 https://www.kubernetes.org.cn/5951.html 本来想说可以用 official版本的镜像 但是一 ...

  2. Trick蠕虫病毒来袭!幕后主使竟是一名高中生“黑客”!

    黑客一直是美国电影中的重要元素,很多经典大片中都有黑客的身影,如战争游戏.黑客帝国等.电影中黑客总是神通广大.行侠仗义,<战争游戏>中的年轻黑客大卫•莱特曼利用黑客技术避免引爆核武器,&l ...

  3. srv.exe蠕虫病毒~

    你是否在电脑使用过程中遇到过这样的问题: 1.文件运行后,同目录下会出现一个原名 srv.exe的文件 2.文件运行后会把浏览器打开 3.电脑上的html文件末尾会增加一大堆东西 完了,电脑中了srv ...

  4. Kali Linux Web 渗透测试视频教程—第十一课-扫描、sql注入、上传绕过

    Kali Linux Web 渗透测试视频教程—第十一课-扫描.sql注入.上传绕过 文/玄魂 原文链接:http://www.xuanhun521.com/Blog/2014/10/25/kali- ...

  5. CTF---Web入门第二题 上传绕过

    上传绕过分值:10 来源: Justatest 难度:易 参与人数:5847人 Get Flag:2272人 答题人数:2345人 解题通过率:97% bypass the upload 格式:fla ...

  6. 实验吧_程序逻辑问题(代码审计)&上传绕过

    一开始我先随便输入了几个账号名字进行测试,发现当输入的账号名为admin时会发生报错 经过测试果然是一个注入点 当拿到admin密码后发现根本没用,没办法另寻他路 审查元素时发现提示index.txt ...

  7. WannaCry勒索比特币蠕虫病毒解决方案

    WannaCry ransomware used in widespread attacks all over the world Customer Guidance for WannaCrypt a ...

  8. Window应急响应(二):蠕虫病毒

    0x00 前言 ​ 蠕虫病毒是一种十分古老的计算机病毒,它是一种自包含的程序(或是一套程序),通常通过网络途径传播,每入侵到一台新的计算机,它就在这台计算机上复制自己,并自动执行它自身的程序. 常见的 ...

  9. 服务器中了蠕虫病毒Wannamine2.0小记

    近期用户反馈某台服务器总感觉性能不是很好存在卡顿,于是今天远程上去分析. 打开任务管理器发现CPU使用率非常低,内存使用也在接受范围内(10/64G).不过我有一个偏好就是不喜欢用系统自带的任务管理器 ...

随机推荐

  1. AngularJS入门心得4——漫谈指令scope

    上篇<AngularJS入门心得3——HTML的左右手指令>初步介绍了指令的概念和作用.已经和指令打过一个照面,就不会那么陌生了,今天主要介绍的是一个困扰了我很久终于想通的问题,这个问题与 ...

  2. jQuery.queue源码分析

    作者:禅楼望月(http://www.cnblogs.com/yaoyinglong ) 队列是一种特殊的线性表,它的特殊之处在于他只允许在头部进行删除,在尾部进行插入.常用来表示先进先出的操作(FI ...

  3. PHP面向对象中的重要知识点(三)

    1. namespace: 和C++中的名字空间很像,作用也一样,都是为了避免在引用较多第三方库时而带来的名字冲突问题.通过名字空间,即便两个class的名称相同,但是因为位于不同的名字空间内,他们仍 ...

  4. js每天进步一点点3

    JS之样式的改变

  5. 坑人的微信新版支付(V3.3.6)

         现在微支付的需求越来越多,最近刚接到一个需要微支付的项目,于是身为程序猿的我拿到最新的微信支付接口文档(3.3.6)就开始研究微信支付.本以为应该跟支付宝差不多的感觉结果被坑了.恕在下无能, ...

  6. SQL Server中的事务日志管理(8/9):优化日志吞吐量

    当一切正常时,没有必要特别留意什么是事务日志,它是如何工作的.你只要确保每个数据库都有正确的备份.当出现问题时,事务日志的理解对于采取修正操作是重要的,尤其在需要紧急恢复数据库到指定点时.这系列文章会 ...

  7. TinyOS和Deluge的安装模拟(二)

    TinyOS的安装 TinyOS的安装是一件麻烦的事情,它不像其他的开发环境那样配置简单.要想成功安装好TinyOS,需要选择好PC操作系统,TinyOS安装文件的版本,工具链的版本…….总之,安装过 ...

  8. Android客户端消息推送原理简介

    首先简单介绍一下Android消息推送的主要三种方式,如果你已经看过类似的文章,请直接忽略三种介绍.    1.使用SMS服务,即服务器端发送短信,然后手机客户端监听短信的广播,然后对数据进行一定的处 ...

  9. 【转】关于redis.conf的参数配置

    1. Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程 daemonize no 2. 当Redis以守护进程方式运行时,Redis默认会把pid写入/var/ru ...

  10. Spring @Transactional propagation 各个属性值的含义

    REQUIRED:业务方法需要在一个容器里运行.如果方法运行时,已经处在一个事务中,那么加入到这个事务,否则自己新建一个新的事务. NOT_SUPPORTED:声明方法不需要事务.如果方法没有关联到一 ...