对P2PAPP的逆向分析

本文由米斯特安全攻防实验室原创投稿安全脉搏,安全脉搏独家发表本文,如需要转载,请先联系安全脉搏授权;未经授权请勿转载。

本文作者对P2PAPP进行了逆向分析,描述了恶意程序P2PAPP的一些可疑行为及整个释放流程。

Formplat函数

0x01

几种花指令类型

push ebp

mov ebp, esp

mov esp, ebp

pop ebp

 

这种花指令组合,在第二行和第三行之间进行的所有堆栈操作都不会在外层生效

add xxx
sub xxx

inc reg
dec reg

add reg, 0

 

 1将10004577改成0x90,实际执行的指令是下面这样:2

 

0x02

Formplat函数去掉花指令后,只抛出了一个异常,然后调用sub_10004550函数。

Sub_10004550函数首先取得PathRemoveFileSpecA、GetModuleFileNameA、ExpandEnvironmentStringsA函数地址:

3

然后从0x10003000往下遍历,搜索当前模块加载的基地址

4

接着获取当前模块的全路径,并判断模块名是否为p2papp.dll,如果是,跳转到loc_10004BE4执行,如果不是则继续往下执行。

5

判断成立

先分析判断成立的情况,loc_10004BE4分支中会调用loc_10004350函数

  • 0x01

首先三个反调试函数?

6

  • 0x02

接着程序打开当前目录下的temp文件,并在申请分配一块内存,将文件中的内容拷贝到此处

9

8

  • 0x03

接着对文件进行一个简单的解密操作

9

解密函数用C语言表示如下:

10

  • 0x04

接着程序对解密后的数据进行一系列的处理,将数据拷贝到当前进程空间,并修改内存的可执行权限,接着在处理后的数据中搜索”Run”标志,根据Run标志定位到一个函数,获取此函数的地址,并调用。

11

判断不成立

  • 0x01

拼接一个字符串%APPDATA%\formplat,并扩展出其中的环境变量

1213然后根据此字符串去创建文件夹

14

  • 0x02

接着将自身拷贝到上一步创建的文件夹下p2papp.dll文件

15

并且把程序当前目录下的temp文件拷贝到上面创建的文件夹中

16

  • 0x03

然后通过GetProcAddress函数获取ShellExecuteA函数的地址,并把地址存放到一个局部变量中

17

  • 0x04

18

程序后面调用了两次ShellExecuteA函数,第一次调用:

通过rundll32.exe程序调用shimgvw.dll动态链接库中的ImageView_Fullscreen函数,显示一张程序当前路径下的bbs.bmp图片。

第二次调用:

19

通过rundll32.exe程序调用上面创建的p2papp.dll动态链接库中的formplat函数。

Run函数

  • 0x01

查看图片1的属性

20

发现它会启动cmd.exe去调用png.bat。

查看png.bat,用十六进制打开

21

它会执行两条命令

mkdir “%programfiles%”rundll32.exe nvwsrds.dll,avmode –fn dfhrfguysdgdf
  • 0x02

在avmode函数里读取temp文件内容,将解密后的内容dump出来,发现是一个PE文件,找到其中的Run函数

22

  • 0x03

Run函数首先调用两次解密函数,得到一个腾讯微博地址和一个IP地址

23

  • 0x04

在%APPDATA%下创建一个avmode文件夹和一个avmode.inf文件

24

写入内容:

[Version]Signature="$CHICAGO$"Provider=t@t.com, 2002[DefaultInstall]; DelReg=run_DelRegAddReg=run_AddReg[run_DelReg]

[run_AddReg]

hkcu,"Software\Microsoft\Windows\CurrentVersion\Run","Update",,"rundll32.exe ""C:\Documents and Settings\test\Application Data\avmode\Bitavmode.dll"",avmode"

[Strings]

  • 0x05

接着创建一个线程,这个线程是的功能主要是和服务器通信,并根据服务器发送的指令执行相应的任务。

25

线程里主要用两种方法获取远程服务器的IP地址

  • 0x01

第一种:访问http://t.qq.com/xiaokanrensheng12121网址,从返回的内容中根据”IP>”解析出IP地址

26

获取的IP地址

27

  • 0x02

第二种方法,访问ip138,根据”>>”定位返回的内容中IP地址

28

0x06

获取服务器IP之后,并连接之后,会调用sub_10002450(下图中的firstTalk)函数和服务器进行一次简单的通信。

29

接着程序创建一个专门用来通信的线程,入口函数为recvAndDealData(10002790)。

recvAndDealData的处理过程和gh0st非常类似,接收到的数据传递给sub_10002890进行解析。

30

解析完之后,函数中调用**(v33+196) + 4偏移处的函数,并将解析后的数据当做参数传递。

30

最后会到达sub_100066A0主功能函数,一个switch-case分支结构,根据服务端发送过来的不同指令,执行对应的操作。

0x07

然后程序会创建又一个线程

32

这个线程有两个作用

  • 0x01

首先程序判断当前进程是不是由avmode进程所创建,如果是则调用sub_10008190函数,如果不是,死循环。

33

sub_10008190函数的作用是读取”Software\Microsoft\Windows\CurrentVersion\Run”键下”Update”项的值

34这个值是由上面avmode.inf安装文件指定的” C:\Documents and Settings\test\Application Data\avmode\Bitavmode.dll”,接着将当前目录下的nvwsrds.dll文件拷贝为C:\Documents and Settings\test\Application Data\avmode\Bitavmode.dll,实现自启。

  • 0x02

判断计算机当前有没有运行ZhuDongFangYu.exe程序,如果运行了执行一断额外的代码。

35

0x08

查看图片2的属性的目标:

C:\WINDOWS\system32\rundll32.exe advpack.dll,LaunchINFSectionEx %appdata%\avmode\avmode.inf,DefaultInstall,,32

会调用advpack.dll的LaunchINFSectionEx函数去加载上面创建的avmode.inf文件。

流程分析图

36

 

 

样本下载

链接: http://pan.baidu.com/s/1nuTCHEp 密码: q68s

 

本文由米斯特安全攻防实验室原创投稿安全脉搏,安全脉搏独家发表本文,如需要转载,请先联系安全脉搏授权;未经授权请勿转载。

 

本文作者:米斯特安全攻防实验室

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/53797.html

Tags:
评论  (1)
快来写下你的想法吧!
  • 香港虚拟主机 2016-12-08 15:03:54

    对P2PAPP进行了逆向分析,描述了恶意程序P2PAPP的一些可疑行为,但是对可疑行为的处理还有待加强

米斯特安全攻防实验室

文章数:5 积分: 2

你的网络启程是否安全?关注米斯特安全攻防实验室:Mst.Hi-OurLife.CoM

安全问答社区

安全问答社区

脉搏官方公众号

脉搏公众号