吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 46533|回复: 96
收起左侧

[PC样本分析] py可执行程序分析

  [复制链接]
末日不孤单 发表于 2016-12-26 19:59
使用论坛附件上传样本压缩包时必须使用压缩密码保护,压缩密码:52pojie,否则会导致论坛被杀毒软件等误报,论坛有权随时删除相关附件和帖子!
病毒分析分区附件样本、网址谨慎下载点击,可能对计算机产生破坏,仅供安全人员在法律允许范围内研究,禁止非法用途!
禁止求非法渗透测试、非法网络攻击、获取隐私等违法内容,即使对方是非法内容,也应向警方求助!
本帖最后由 末日不孤单 于 2016-12-28 19:16 编辑

1. 概述
第一次分析这种python exe程序,最开始还比较懵逼,直接对exe就开始下手了,发现它竟然会去释放并运行python dll,一直没想明白,结果浪费了不少时间,最后终于找到了正确的分析思路,所以,觉得挺有意思的,就分享给大家看看。
样本很大,有3.16MB,一般的exe程序不会这么大,所以用了压缩壳UPX
1.1. 基本信息
文件名称:LogonUI.exe
文件大小:3314728 字节(3.16MB)
MD5                A25EC7749B2DE12C2A86167AFA88A4DD
SHA1        BB71254FBD41855E8E70F05231CE77FEE6F00388
CRC32        1D62CAB1
壳信息        UPX
1.2. 文件说明
LogonUI.exe.bak:样本源文件
LogonUI.exe.bak_upx -d脱壳后文件
Vbni7:反编译后文件
code.txtVbni7解码后文件
code.py.bakcode.txt源码修改后文件
decompiled.py.bak:网上下载的参考文件
QQ截图20161227091143.png
1.3. 相关文档
【原创】用 Python 反编译 Python 软件
http://bbs.pediy.com/showthread.php?t=111428
PYTHON INSTALLER打包程式拖出PYTHON程式碼
http://adr.xxxxx.im/?p=467
反编译py2exe程序
http://www.qiaoyue.net/blog/2016/05/%E5%8F%8D%E7%BC%96%E8%AF%91py2exe%E7%A8%8B%E5%BA%8F.html
2.LogonUI.exe分析
2.1 脱壳
使用PEID查壳,发现样本是UPX压缩壳,壳信息如下:
UPX -> www.upx.sourceforge.net [Overlay] *
必须使用“upx -d”命令脱壳才行,手工脱壳不行(样本是用pyinstaller打包的程序,手工脱壳的程序无法反编译
图片2.png
2.2. exe反编译成py文件
使用PyInstxtractor.py反编译出py文件,具体操作如下:
图片3.png
查看反编译目录,文件“Vbni7”即为python脚本文件;
图片4.png
2.3. 解码python脚本
打开python脚本,发现大量的乱码,最开始还以为解码出错了,然后还又找了其他的方式去解码,直到后面发现文件中有一个exec()函数,才确定原来解码正确的。
最后整理文档时,才发现网上这篇從PYTHON INSTALLER打包程式拖出PYTHON程式碼(“http://adr.xxxxx.im/?p=467”。。。。
文件内容如下:
图片5.png
将exec()函数修改为print()函数,把代码保存为文件;
图片6.png
图片7.png
查看code.txt代码,又发现所有的变量名和类名都使用唯一字符串处理过,猜测这应该是木马作者使用的代码混淆;
分析人员可以将代码替换为原来的代码,例如:将字符串pSsWAYdKJqgPHbRoVCwjkvMcmtuxInGEhaFfLBXUOrNlTyQzDe”全部替换为“base64.b64encode”,也可以写一个自动化脚本去替换,不过应该比较麻烦。。。。
图片8.png
在分析过程中,发现了几个特殊字符串,通过google,在github上找到了类似代码“https://github.com/pan-unit42/iocs/blob/master/seaduke/decompiled.py
可将github上代码下载查看,按照github上代码进行代码修改,但具体分析不能使用github上分析,因为不确定两个样本是否完全一样,一般都是不一样的。。。。。。
2.4. python反编译说明
在分析过程中,由于自己也对相关的python exe程序进行了相应的测试,故在这里和大家一起分享一下;
python程序打包为exe,可以使用pyinstallerpy2exe
2.4.1. pyinstaller打包程序
本篇报告中分析的样本就是一个pyinstaller打包程序,将样本脱壳后,使用IDA查看字符串,可以查看到大量的关于python的字符串:
图片9.png
针对pyinstaller打包程序,可以使用“pyinstxtractor.py”脚本工具反编译,查考PYTHON INSTALLER打包程式拖出PYTHON程式碼(“http://adr.xxxxx.im/?p=467”)
2.4.2. py2exe打包程序
使用py2exe打包的程序,脱壳后使用IDA查看字符串可直接看到字符串“PY2EXE_VERBOSE”:
图片10.png
针对py2exe打包程序可以使用unpy2exeuncompyle2两个脚本工具进行反编译,查考反编译py2exe程序(“http://www.qiaoyue.net/blog/2016/05/%E5%8F%8D%E7%BC%96%E8%AF%91py2exe%E7%A8%8B%E5%BA%8F.html”)
3. code.txt分析
3.1. 源码修改
由于代码中存在大量的唯一字符串,因此我在分析过程中参照decompiled.py对其进行了相应的代码修改,使代码方便查看调试;
由于通过print()函数打印出来的代码格式很紧凑,也不方便查看调试,因此,我又用pycharm编辑器对代码格式进行了调整;
pycharmCtrl + Alt + L代码格式化
代码相对比较好阅读查看了,将代码保存为code.py.bak”。
图片11.png
后续分析我也是使用pycharm编辑器进行代码调试,调试前需要安装相应的包,分析者可自行下载安装;
4. code.py.bak
4.1. 配置信息
样本将解码相应的配置信息,将配置信息保存在bot_settings中;
相关代码截图如下:
图片12.png
解码代码如下:(配置信息与decompiled.py一样,很可能两个样本是一样的,但为了以防万一,我还是没有使用decompiled.py进行分析
{
'first_run_delay': 0,
'keys': {
'aes': 'KIjbzZ/ZxdE5KD2XosXqIbEdrCxy3mqDSSLWJ7BFk3o=',
'aes_iv': 'cleUKIi+mAVSKL27O4J/UQ=='
},
'autoload_settings': {
'exe_name': 'LogonUI.exe',
'app_name': 'LogonUI.exe',
'delete_after': False
},
'host_scripts': ['http://monitor.syn.cn/rss.php'],
'referer': 'https://www.facebook.com/',
'user_agent': 'SiteBar/3.3.8 (Bookmark Server; http://sitebar.org/)',
'key_id': 'P4BNZR0',
'enable_autoload': False
}
4.2. 程序初始化
在进入”__main__”函数前,样本将创建BotKlass实例对象,并调用BotKlass构造函数;
相关代码截图如下:
图片13.png
在构造函数中:
  • 初始化self.__settings信息,根据bot_settings[‘key_id’]生成配置文件名“tmpp4bnzr0”;查找配置文件“C:\Users\admin\AppData\Local\tmpp4bnzr0”是否存在;如果不存在,表明这是样本第一次运行,样本将直接获取4.1节中的配置信息;如果存在,则直接读取配置文件,并解密得到上一次运行的配置信息;
  • 得到配置信息后,样本将把配置信息加密保存于C:\Users\admin\AppData\Local\tmpp4bnzr0”文件中;
  • 样本还将获取当前目录路径
  • 样本将生成随机密钥,保存于self.__broker_key中,用于确定是哪一个客户端;
图片14.png
4.3. 主函数
在主函数中,样本将判断当前系统是“windows”还是“Linux”系统,并执行相应的代码;
图片15.png
4.4. 获取任务
main函数中,样本调用networkHandleKlass.get_tasks()函数获取控制端分发的任务信息:
图片16.png
调用self.__send_request(id=botKlass.bot_id)函数,并传递当前客户端的bot_id
图片17.png
__send_request函数中,样本将bot_id加密为COOKIE进行请求;
图片18.png
图片19.png
如果样本请求数据成功,样本将调用decode_data函数对请求数据进行解密,并根据解密数据进行相应的远程命令;
4.5. 远程命令
样本根据解密数据进行相应的远程命令,由于都是python源码,阅读起来也应该比较简单,就不详细讲解功能了,把功能列举如下:
  • cd命令:更改工作目录
  • pwd命令:显示当前工作目录
  • cdt命令:改变工作目录到TEMP目录
图片20.png
  • :autoload:在指定的位置安装样本
  • :migrate:迁移进程文件
  • :clone_time:修改文件属性时间
  • :download:下载文件
  • :execw:执行命令
  • :get:上传文件(加密)
  • :upload_to:上传文件(不加密)
  • :b64encode:加密文件内容并返回
  • :eval:执行代码
  • :set_update_interval:设置请求时间间隔
  • :self_exit:停止运行样本
  • :seppuku:卸载安装样本
图片21.png

样本下载链接:链接: http://pan.baidu.com/s/1kUEOIHL 密码: a6fr
密码:52pojie





报告.7z

676.35 KB, 下载次数: 52, 下载积分: 吾爱币 -1 CB

pdf报告

点评

python的脚本很灵活(但好像很少见有人用python写病毒)。还好是upx壳。(不然就不能dump反编译了。)不过过程写的很好,值得学习 刚才评分抽风了  发表于 2016-12-28 19:20
pythonpythonдupxdumpд  发表于 2016-12-28 19:19

免费评分

参与人数 43吾爱币 +17 热心值 +42 收起 理由
3ky7in4 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
zhanghdong + 1 感谢您的宝贵建议,我们会努力争取做得更好!
lapop + 1 + 1 热心回复!
kernel + 1 + 1 用心讨论,共获提升!
至尊笨 + 1 + 1 我很赞同!
西行寺幽幽子 + 1 + 1 理由什么的必须写嘛
backhome + 1 + 1 用心讨论,共获提升!
maneii + 1 热心回复!
pass101 + 1 + 1 谢谢@Thanks!
362324 + 1 热心回复!
hfutfyj + 1 + 1 我很赞同!
夏雨微凉 + 1 用心讨论,共获提升!
lastest + 1 热心回复!
MEDICINE + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
capnik + 1 + 1 我很赞同!
hackeydg + 1 + 1 我很赞同!
huiji + 1 + 1 厉害。。
丄床 + 1 + 1 谢谢@Thanks!
2864095098 + 1 + 1 热心回复!
xouou + 2 + 1 我很赞同!
3ax31a + 1 用心讨论,共获提升!
mengyan_233 + 1 用心讨论,共获提升!
York2016 + 1 我很赞同!
Lbf + 1 谢谢@Thanks!
挥汗如雨 + 1 我很赞同!
LeoSky + 1 给你点赞
palmer680 + 1 谢谢@Thanks!
soyiC + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
博一笑 + 1 谢谢@Thanks!
夏日miku + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
howsk + 1 看见LoginUI.exe就知道肯定不是什么好东西,哈哈
KaQqi + 1 我很赞同!
gray小灰 + 1 谢谢@Thanks!
arryboom + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
swx5201314 + 1 用心讨论,共获提升!
临海 + 1 我很赞同!
lovehjs1314 + 1 我很赞同!
wcj1997 + 1 已答复!
初亦泽 + 1 我很赞同!
海底总动员 + 1 我很赞同!
LzSkyline + 1 鼓励鼓励~
geeky + 1 我很赞同!
KIMG + 1 我很赞同!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

xiaobai4188 发表于 2018-4-6 19:51
你好,看到麻烦回复下,我反编译后文件在此 dingzhi.txt (1.45 KB, 下载次数: 0)
文件无后缀
打开后是乱码。请问需要用什么来打开?
感谢
?               @   s  d dl T d dlZd dlZd dlZd dljZd dljZd dlZd dlZd dl        j
Z
d dl Z dd? Z dd? Z
e? Zej? jd?d  Zed? d        Ze e?Zd
ZxreD ]jZe
e?Zejed  ? ed jeed  ?? eejd ?? ed
 Zed
kr黣jd? ed? P ejd? q淲 e?  dS )?    )?*Nc             C   s:   t jj| ?}|j? }|jd?}g }tjdtj?j|?}|S )Nzutf-8z+<a href="(http://mp.weixin.qq.com/s/.*?)" >)       
 楼主| 末日不孤单 发表于 2016-12-28 19:30
cqr2287 发表于 2016-12-28 19:21
python的脚本很灵活(但好像很少见有人用python写病毒)。还好是upx壳。(不然就不能dump反编译了。)不过 ...

在网上看,好像大多数python病毒都用的upx壳,可能就是因为压缩壳吧,python打包的程序太大了;我在想这个会不会成为趋势,毕竟用python写病毒跨平台方便啊。

免费评分

参与人数 1热心值 +1 收起 理由
KaQqi + 1 我很赞同!

查看全部评分

LzSkyline 发表于 2016-12-26 21:43
 楼主| 末日不孤单 发表于 2016-12-27 15:46
LzSkyline 发表于 2016-12-26 21:43
很全面的分析~赞一个

谢谢,一进来发现帖子好冷清,就你一个人回复
 楼主| 末日不孤单 发表于 2016-12-27 15:52
@Hmily H大大,给我评个分呗,帖子好冷清
Hmily 发表于 2016-12-28 10:14
python写的木马不多见,分析思路很清晰,加精鼓励,另外超链接由于组别比较低,所以都没生效,麻烦修改下直接添加链接吧。
wcj1997 发表于 2016-12-28 12:07
头头是道,感谢分享。
chenjingyes 发表于 2016-12-28 12:34
分析的很详细
 楼主| 末日不孤单 发表于 2016-12-28 13:58
Hmily 发表于 2016-12-28 10:14
python写的木马不多见,分析思路很清晰,加精鼓励,另外超链接由于组别比较低,所以都没生效,麻烦修改下直 ...

谢谢H大大,已经在相应地方添加了链接

点评

才发现,论坛不能用网挣网盘,换成百度或者腾讯之类的吧。  详情 回复 发表于 2016-12-28 17:57
wakichie 发表于 2016-12-28 14:38
大神  PYTHON怎么入门啊?
pascalqq 发表于 2016-12-28 16:49
谢谢分享,分析的很详细
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 11:39

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表