概述
开源项目QPA
起因
最近做病毒分析的时候遇到远控马,需要记录连接的远程地址!用火绒剑
或者ProcessMonitr
可以看到一部分,但是我想要更全面的信息,于是捣鼓了WireShark
和Fiddler
。Filddler 使用比较简单,但是只能看到http
的流量,WireShark 虽然能捕获所有流量,但没法过滤特定进程的包,而且过滤规则对我来说太复杂了。感慨之际找到了一个名为openQPA
的开源项目,这里是项目主页
体验
然后开开心心下载源码下来,程序是用PyQt4
写的,还有两个依赖库httplib2
和dpkt
,pip install
安装好后双击 QPA.py 打开程序,第一印象:丑,这布局也太丑了吧!窗口还不能拉伸...
吐槽了一下界面,然后体验下功能,发现捕获进程包这功能是真的太强了
还有数据包分析的功能,P.S.这布局我真的很难忍受
除此之外还能添加数据包分析,总体来说功能十分强大,如果你没有强迫症就使用这个吧!反正我不太能忍受这界面,且我只需要捕获进程数据包
那个功能,然后自己用 WireShark 分析数据包。所以就需要在下面这么多文件中定位到捕获进程数据包的代码位置
调试源码
梳理项目
可以看到项目 ReadMe 中说明了其中几个文件的作用
然后用VS Code
和python插件
来调试源码梳理项目流程,开始就是针对性下断点,先猜测功能然后下断点印证,这是个比较漫长的过程,我就不截图了!最后知道数据包分析的文件是analysis2.py
,dpcap.py
以及calc.py
,程序的界面主要是在html
,css
和js
的地方,Window.py
用于初始化界面以及捕获进程包,QPA.py
是程序的入口文件。我需要捕获进程数据包功能,所以直接聚焦于Window.py
和QPA.py
文件
核心功能定位
先大致看下函数名称,在可疑函数处下断,然后点击开始捕获看程序是否能够断下,过程就是这样!最终找到的两个函数是readCap
和stopCap
断点下好后,然后转到QPA.py
点击开始调试,程序成功断在stopCap
,此处会杀掉了一个Cap.exe
的进程
然后 F11 继续跟,跟到了名为wa
的函数,这里会调用connect
中的exeCap
函数,这个看上去有点像捕获数据包的意思
在exeCap
运行前后分别记录下文件的内容,最后证实确实是在connect.exeCap
中开始捕获数据包的
然后继续向下运行,发现readCap
函数是一个类似消息循环的地方,会一直读取数据包然后显示在界面上,直到点击了停止捕获就会跳出循环再次执行stopCap
来杀掉进程
总结一下就是核心捕获进程数据包的功能在connect
文件中的exeCap
函数
逆向
逆pyc文件
先在项目文件中找到了connect.pyc
没有.py
源码,为什么会没有源码呢?说明核心功能就在里面
逆向pyc
很简单,先放网上或者下载uncompyle
反编译一下,稍微难一点的都是反编译不了的,然后就是看字节码还原python
源码,这东西网上有指令照着翻译就行了!但是这个 pyc 挺简单的,在线反编译都能搞定
原来捕获功能是connect
目录下的CAP.exe
,通过调试得知参数形式是U H U 1 dir 0
,其中 dir 就是目录名
这几个文件的作用分别是:cap.exe
捕获进程数据,.dll
是它的运行时库,NIC.exe
查看本地网卡,其它的没什么用了,我都 IDA 看了的!WinPcap
需要提前装好不然该程序会帮你安装一个
逆Cap.exe
什么保护措施都没有的程序,开始会判断你传入的命令行参数
然后经过一系列判断后,开始捕获进程数据
这个程序运行的参数很麻烦,需要这么写cap U H U 1 Dir 0
才能捕获进程的流量。由于代码不是非常多,有兴趣可以自己重写一份了。但我不想重写也不想这么复杂,就只有自己patch
程序了,思路就是:先一个jmp
跳到参数判断之后,然后利用中间的无用数据写一个赋值的代码,之后赋值跳转到上面去赋值再跳转回来。程序修改之后只需要cap dir
就能捕获进程的数据包了
P.S.
原本项目就是开源的,我还给人把核心功能提出来了,要是再把patch
后的程序放出来简直非人哉!所以我就不放打补丁的程序了,有需要的可以私信我!
END
最后
以上就是会撒娇小天鹅为你收集整理的 【openQPA】教你DIY进程流量捕获工具的全部内容,希望文章能够帮你解决 【openQPA】教你DIY进程流量捕获工具所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复