[原创] 我的第一个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 这也是对我以后再次发帖的鼓励
太监文章哦 王大泥巴 发表于 2019-4-28 22:51
请问楼主最后是怎么发现规律是X433-75的
最后贴出来的 那部分 代码里面的变量的值 我没有贴出来
不过没数值也可以根据代码看出
是一堆浮点数 值的 运算 分别 是
分别是 类型转换 乘 和减 你可以下载样本 然后自己去那部分代码 下断点 走一遍 smile1110 发表于 2019-4-28 00:16
太监文章哦
{:1_937:} 能力不足努力学习 争取以后可以 向大佬看齐 学习一下,万一用的上! 初學反編譯
感謝大神分享 感谢楼主分享,学习 看看,学习一下 ?什么意思 感谢楼主分享,学习 看一下楼主的分析