前段时间收到locky样本,分析之后遂做一个分析。

样本如下所示,一般locky勒索的先决条件是一个js的脚本,脚本经过了复杂的混淆,主要用于下载该样本文件并运行,。

解密

样本本身进行了保护,通过ida打开之后只有少量几个函数,如下图所示为样本的入口地址,代码进行了重度的混淆加密。

通过od加载样本,进入入口。

跳转至01172903处,在该函数中调用了call aWXdlbCm.011720E8处的函数,注意此处函数的压栈的参数地址为011832DC。

通过模块查询可以看到此处是一个数据段,经验告诉我们此处可能是加密之后的代码区,解密就要开始了。

更进该函数结果如下,函数整体并不复杂。

通过分析后发现,解密函数为011722CC。

该函数调用前,可以发现之前的可疑地址011832DC就是该函数的参数,其对应的反汇编代码如下内存面板所示,可以看出是明显的加密过的产物。

单步步过之后,内存面板中的数据发生了变化,由此推断我们的猜测是正确的。

跟进解密函数可以发现,整个函数很长,但实际做解密操作的地方和只有3处,如下所示,其余大部分代码都用于起混淆的作用。

如下是其中的一个解密片段,参数var_c处为解密的内存地址。

可以看到此时解密出的第一条指令。

之后通过retn跳转到解密函数处。

在该解密的函数中,首先通过getproaddress的方式动态获取了一些函数地址。

之后再次分配了一段内存空间,该段空间用于存储最终的样本解密代码。此处的地址为0016000。

  

经过解密之后的代码拷贝到00160000中,如下图内存面板所示。

再次通过通过retn返回到解密处执行,此次返回到之前解密处+100偏移的00160100处。

依次顺序单步多次。

最后在该处,解密完成进入eop。

详细分析

进入实际的样本代码,一开始首先获取了系统的时钟。

之后提升权限。

获取操作系统的语言,对老毛子地区不予以感染。

GetSystemDefaultLangID 取得系统默认ID对照表,主要用于判断系统语言

GetSystemDefaultLangID和GetUserDefaultLangID获取的语言,受区域语言设置中的选项影响,所以这两个函数是不能用的,GetUserDefaultUILanguage获取的是系统本身的语言

40000ms

打开配置注册表SoftWare/0Bur3Au0

之后获取系统tmp路径

将自身拷贝到tmp目录下,以svchost.exe命名。

获取域数据以及系统版本。

之后对系统的版本进行判断。

Net

之后进行请求拼接。

最后拼接字段如下。

之后对该字段进行hash。

最后通过HttpSendRequestA函数进行和服务器进行通信,获取rsa的秘钥。

在内存中还发现了其他的一些ip地址。

然后就是常见的勒索软件的行为,创建线程,遍历系统文件,对用户的文件进行加密,弹出勒索窗口。。。。。。。。

最新文章

  1. DirectShow Filter的开发实践
  2. MySQL MMM 双主在Failover时挂起
  3. svchost占用cpu
  4. C语言中的变量
  5. js物理弹性窗口
  6. [Android] RelativeLayout, LinearLayout,FrameLayout
  7. iOS上让按钮文本左对齐问题
  8. POJ 2955 (区间DP)
  9. 夺命雷公狗ThinkPHP项目之----企业网站4之数据库连接
  10. MYSQL存储过程中-流程控制语句
  11. HBase数据库配置中各配置项的释义及默认值
  12. PostgreSQL自学笔记:6 PostgreSQL函数
  13. 【原创】hdu1698 Just a Hook(线段树→区间更新,区间查询)
  14. [三边定位] C# 演示程序
  15. 并发之线程封闭与ThreadLocal解析
  16. gcc优化引起get_free_page比__get_free_page返回值多4096
  17. Django+Xadmin+Echarts动态获取数据legend颜色显示灰色问题已解决
  18. linux 内核 第四周 扒开系统调用的三层皮 上
  19. Struts2常见配置(草稿)
  20. Python的一个命名空间冲突,关于from-import机制

热门文章

  1. ump_player在线直播播放器
  2. MySQL练习-employees数据库(一)
  3. HashTable初次体验
  4. 关于TCP中的MSS
  5. iOS动态部署之RSA加密传输Patch补丁
  6. 高程(4):执行环境、作用域、上下文执行过程、垃圾收集、try...catch...
  7. 微信公众号开发系列教程一(调试环境部署续:vs远程调试)
  8. C#中的LINQ
  9. Git的checkout, reset, revert
  10. matlab绘图基础