连晋 发表于 2019-4-28 00:03

[原创] 我的第一个PC勒索病毒样本分析

本帖最后由 连晋 于 2019-5-2 17:02 编辑

之前逛论坛的时候看到了一个帖子帖子地址[可疑样本] 勒索病毒   提交了病毒样本求分析
http://ww1.sinaimg.cn/large/e38a7f8bgy1g2hm7r35gqj21bo0orql6.jpg
下载样本大概看了一下很简单   很适合我这种新人学习 所以就打算动手写一份   样本分析发上来

病毒逻辑很简单重点是遇到问题的解决思路 以及 这是我第一次分析PC 病毒样本以此留恋

点击此处可到B站查看视频详细版本分析   (我还做了其他的视频哦)
首先拿到样本   名字为阴阳师外挂(电脑版).zip   两次解压之后得到阴阳师外挂(电脑版).exe

http://ww1.sinaimg.cn/large/e38a7f8bgy1g2hmaio1wzj202n02lglo.jpg

查壳 得出为 upx 压缩壳直接用工具脱壳

http://ww1.sinaimg.cn/large/e38a7f8bgy1g2hmc13r9rj20lv0gdn95.jpg


脱壳完毕   运行试试   

http://ww1.sinaimg.cn/large/e38a7f8bgy1g2hmd4s0vwj20zh0p7mxh.jpg

Emmm 正常运行nice 我们的机器 成功的被锁了


这一步该怎么办 ?   

试试 ctrl + alt +delete   任务管理器   不行 几秒钟后 就被 关闭了 任务管理器

尝试按了一下 win键    windows 的菜单栏居然还可以打开
http://ww1.sinaimg.cn/large/e38a7f8bgy1g2hmfdtmimj20z00p8q4s.jpg

瞬间明白了    其实这个病毒是创建了一个窗口最大化 铺满电脑屏幕并且位置 一直为 最前

并且我在之前 尝试 打开 任务管理器   的时候 发现 任务管理器   可以启动 但是 过了几秒就 又被关闭了

注意 这里是 没有禁止启动 任务管理器   而是 任务管理器   启动以后 就 隔了几秒终止 任务管理器      

此处有2个想法 在我心里浮现   
第一 这个病毒 作者水平可能还没我这么菜的人高
第二点 这个软件 很可能是E语言写的(事实证明看OD丢进去看也确实是E写的 )

说明   整个 病毒 最少有 1个时钟事件 用来不停的终止 任务管理器   的进程 并且把自己设为 窗口 最前

接下来开始构思解决方案   

并且基于 以下几点
1. 我从来没分析过PC病毒样本足以说明我 各方面都不行
2. 我2周之前连OD 怎么用也不知道   大部分快捷键都是 骚猪教我的 @感冒的猪baby   
3. 汇编指令 它认识我 我不认识它
4. 病毒是通过 E语言来实现的 窗口 每隔一段时间就 置前

碰巧发现 精易编程助手可以强制窗口置前

http://ww1.sinaimg.cn/large/e38a7f8bgy1g2hmprgtjwj20jg0fw3zu.jpg


所以接下来 运行精易编程助手把 置顶 勾上

然后再去运行病毒样本   

尝试 按alt+tab   ----》 成功精易编程助手 成功出现在屏幕上面

接下来拖动左上角的放大镜 选择 病毒程序   然后 修改它的 窗口大小
http://ww1.sinaimg.cn/large/e38a7f8bgy1g2hmtemr9mj20zi0p44d5.jpg

用 E debug 调试 得出有2个时钟周期事件和 一个按钮事件

http://ww1.sinaimg.cn/large/e38a7f8bgy1g2hmx8bjh5j20890dtjry.jpg


00401377和 00401479应该就是终止任务管理器   和窗口一直置前 的 时钟周期任务了   
OD 进端首ret 即可

接下来去分析 按键事件   004010B9

打开OD附加   病毒   ctrl+g 跳转到 004010B9


```
004010B9/.55            push ebp
004010BA|.8BEC          mov ebp,esp
004010BC|.81EC 30000000 sub esp,0x30
004010C2|.6A FF         push -0x1
004010C4|.6A 08         push 0x8
004010C6|.68 37000116   push 0x16010037
004010CB|.68 01000152   push 0x52010001
004010D0|.E8 A8140000   call 1.0040257D                        ;取识别码
004010D5|.83C4 10       add esp,0x10
004010D8|.8945 FC       mov ,eax
004010DB|.68 04000080   push 0x80000004
004010E0|.6A 00         push 0x0
004010E2|.8B45 FC       mov eax,
004010E5|.85C0          test eax,eax
004010E7|.75 05         jnz short 1.004010EE
004010E9|.B8 9C604800   mov eax,1.0048609C
004010EE|>50            push eax
004010EF|.68 01000000   push 0x1
004010F4|.BB 50284000   mov ebx,1.00402850
004010F9|.E8 67140000   call 1.00402565
004010FE|.83C4 10       add esp,0x10
00401101|.8945 F8       mov ,eax
00401104|.8B5D FC       mov ebx,
00401107|.85DB          test ebx,ebx
00401109|.74 09         je short 1.00401114
0040110B|.53            push ebx
0040110C|.E8 66140000   call 1.00402577
00401111|.83C4 04       add esp,0x4
00401114|>DB45 F8       fild
00401117|.DD5D F0       fstp qword ptr ss:
0040111A|.DD45 F0       fld qword ptr ss:
0040111D|.DC0D 9D604800 fmul qword ptr ds:
00401123|.DD5D E8       fstp qword ptr ss:
00401126|.DD45 E8       fld qword ptr ss:
00401129|.DC25 A5604800 fsub qword ptr ds:
0040112F|.DD5D E0       fstp qword ptr ss:
00401132|.68 01060080   push 0x80000601
00401137|.FF75 E4       push
0040113A|.FF75 E0       push
0040113D|.68 01000000   push 0x1
00401142|.BB 50284000   mov ebx,1.00402850
00401147|.E8 19140000   call 1.00402565
0040114C|.83C4 10       add esp,0x10
0040114F|.68 01030080   push 0x80000301
00401154|.6A 00         push 0x0
00401156|.50            push eax
00401157|.68 01000000   push 0x1
0040115C|.BB 302A4000   mov ebx,1.00402A30
00401161|.E8 FF130000   call 1.00402565
00401166|.83C4 10       add esp,0x10
00401169|.8945 D8       mov ,eax
0040116C|.6A FF         push -0x1
0040116E|.6A 08         push 0x8
00401170|.68 07000116   push 0x16010007
00401175|.68 01000152   push 0x52010001
0040117A|.E8 FE130000   call 1.0040257D
0040117F|.83C4 10       add esp,0x10
00401182|.8945 D4       mov ,eax
00401185|.8B45 D8       mov eax,
00401188|.50            push eax
00401189|.FF75 D4       push
0040118C|.E8 8BFEFFFF   call 1.0040101C
00401191|.83C4 08       add esp,0x8
00401194|.83F8 00       cmp eax,0x0
00401197|.B8 00000000   mov eax,0x0
0040119C|.0f94c0      sete al
0040119F|.8945 D0       mov ,eax
004011A2|.8B5D D4       mov ebx,
004011A5|.85DB          test ebx,ebx
004011A7|.74 09         je short 1.004011B2
004011A9|.53            push ebx
004011AA|.E8 C8130000   call 1.00402577
004011AF|.83C4 04       add esp,0x4
004011B2|>8B5D D8       mov ebx,
004011B5|.85DB          test ebx,ebx
004011B7|.74 09         je short 1.004011C2
004011B9|.53            push ebx
004011BA|.E8 B8130000   call 1.00402577
004011BF|.83C4 04       add esp,0x4
004011C2|>837D D0 00    cmp ,0x0
004011C6|.0F84 E0000000 je 1.004012AC                            ;确定按钮关键跳
004011CC|.68 04000080   push 0x80000004
............此处省略
004012AC|>8BE5          mov esp,ebp
004012AE|.5D            pop ebp
004012AF\.C3            retn


```

在OD 中结合看这几处代码

我也是一个一个查手册才知道的 是 什么 意思

|.E8 66140000   call 1.00402577
00401111|.83C4 04       add esp,0x4
00401114|>DB45 F8       fild
00401117|.DD5D F0       fstp qword ptr ss:               //    值 为   程序显示的识别码
0040111A|.DD45 F0       fld qword ptr ss:
0040111D|.DC0D 9D604800 fmul qword ptr ds:      //dd0x48609D 值为433.00000000
00401123|.DD5D E8       fstp qword ptr ss:
00401126|.DD45 E8       fld qword ptr ss:
00401129|.DC25 A5604800 fsub qword ptr ds:   //       dd0x4860A5 值为   75.00000000
0040112F|.DD5D E0       fstp qword ptr ss:
00401132|.68 01060080   push 0x80000601
00401137|.FF75 E4       push

最终得出
(识别码 乘以 433)再减去 75 = 解锁密码
额 有小伙伴问是怎么得出这个结果的 其实有我的锅存在   怪我太菜 没写详细最后贴出来的 这部分 代码里面的变量的值
经过@smile1110老哥提醒 特地 补充了一下帖子
并且过程中遇到一些不懂的问题 感谢@asd9988 大佬的热心帮助

我没有贴出来         

首先
00401117   中   为程序显示的 识别码
0040111D    fmul qword ptr ds:      //dd0x48609D 值为433.00000000      fmul是 ST0的值和 相乘   得就是程序识别码 X 433

00401129    fsub qword ptr ds:      //       dd0x4860A5 值为   75.00000000fsub   是 ST0的值减         就是   (程序识别码 X 433)-75

所以最终 算法 应该是   (识别码 乘以 433)再减去 75 = 解锁密码

啥是ST0 ?   

看图。。。。

http://ww1.sinaimg.cn/large/007BfExzgy1g2jp89bafkj30xy0lmdkz.jpg
吃水不忘挖井人 如果你觉得这个帖子对你有用的话
麻烦点一下 免费的热心和 CB   这也是对我以后再次发帖的鼓励


smile1110 发表于 2019-4-28 00:16

太监文章哦

连晋 发表于 2019-4-29 00:24

王大泥巴 发表于 2019-4-28 22:51
请问楼主最后是怎么发现规律是X433-75的

最后贴出来的 那部分 代码里面的变量的值 我没有贴出来         
不过没数值也可以根据代码看出

是一堆浮点数 值的 运算 分别 是

分别是   类型转换   乘    和减   你可以下载样本 然后自己去那部分代码 下断点 走一遍

连晋 发表于 2019-4-28 00:22

smile1110 发表于 2019-4-28 00:16
太监文章哦

{:1_937:}      能力不足努力学习 争取以后可以 向大佬看齐

FioreZ 发表于 2019-4-28 00:34

学习一下,万一用的上!

zxcnny930 发表于 2019-4-28 00:36

初學反編譯
感謝大神分享

knxmy 发表于 2019-4-28 00:46

感谢楼主分享,学习

wjqok 发表于 2019-4-28 00:55

看看,学习一下

呦哎我去 发表于 2019-4-28 00:59

?什么意思

拉风丶 发表于 2019-4-28 01:05

感谢楼主分享,学习

星辰物语呀 发表于 2019-4-28 01:07

看一下楼主的分析
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: [原创] 我的第一个PC勒索病毒样本分析