pyinstaller逆向 & pcapng报文分析 & IDA lumina & AMXX

2024-02-05

1. pyinstall re

不知道大家看到这张图片是否熟悉
这张图片常出现在python代码通过pyinstaller打包成exe可执行程序,exe程序的图标
如果有逆向的同学们应该就知道这个。
作为逆向的一个常规套路,当然有常规的解题手段,遇到这种开头的exe文件,直接用pyinstxtractor解包,再用python反编译工具把pyc反编译成py文件

1.1 曾经的方案

注意,该方案在使用过程中需要确保你正在运行的python版本,和目标exe文件打包时的python版本是一致的(3.x版本一致),反编译出正确值
如何获取exe文件打包时的python版本?在经过1.1步骤时也能得知。
pyinstxtractor
https://github.com/extremecoders-re/pyinstxtractor
下载这个工具后,根据提示运行

python pyinstxtractor.py <filename>

即可得到解压的目录。
需要注意的是,pyinstxtractor在解压过程中会列出可能的入口函数的pyc文件,之后反编译优先反编译它们即可

uncompyle6反编译
作为若干年前的神奇,uncompyle6给了我很多帮助,然而,uncompyle6只支持到python3.9版本,在python3.10版本后,需要使用其他工具

pip install uncompyle6

安装完成后,使用

uncompyle6 target.pyc > target.py

即可

1.2 现在的方案pydumpck

https://github.com/serfend/pydumpck
一键式的解决方案,让反编译变得简单轻松

pip install pydumpck

后,使用如下命令即可轻松编译

pydumpck xxx.exe

得到的结果中含有的pyc文件也会自动反编译响应的python文件,方便查看~

2. pcapng报文分析

最近遇到了关于misc wireshark抓包分析的题目,好奇一手做法

2.1 安装wireshark

话说回来,pcapng报文本身就产生自wireshark捕获网络流量报文
所以要想得到pcapng报文的内容,还得用wireshark启动分析
但是,wireshark工具本身虽然提供了友好的用户界面,想要批量分析报文时,还是需要脚本相助

2.2 安装pyshark

pyshark是个比较好用的python库,用于处理wireshark报文。

pip install pyshark

值得注意的是,pyshark默认的tshark.exe(wireshark安装时会存在)的目录在wireshark的默认目录下
使用时需要把tshark的文件路径替换成你安装的wireshakr路径

2.3 示例:提取tcp流中的payload

import pyshark

# 指定 pcap 文件路径
file_path = 'your_file_path_here.pcap'

# 创建一个 Capture 对象来读取文件
cap = pyshark.FileCapture(file_path)

# 遍历每个包
for packet in cap:
    # 检查包是否包含 TCP 层
    if 'TCP' in packet:
        # 获取 TCP 层的 payload 属性
        tcp_payload = packet.tcp.payload

        # 去掉 payload 中的冒号
        tcp_payload_clean = tcp_payload.replace(':', '')

        print(tcp_payload_clean)

在使用wireshark进行分析TCP报文时,需要理解SEQ和ACK的作用:SEQ指当前发送方发送的数据起始位置序列号,ACK指的是当前发送方已经接收到的数据的末尾序列号
有了这个概念你就比较好分析报文了。
另外,wireshark追踪流是丢掉报文头部的 只保留了payload,可以采用原始数据导出.

3. 什么是Lumina

Lumina是一种符号识别服务器,由IDA专门推出。
Lumina可以在线识别未命名函数

3.1 如何使用Lumina

https://abda.nl/lumen/

PS: 跟他类似的还有一个阿里云公开的插件 Finger
注意,在使用Finger时,不要使用科学上网!!!

4. AMXX re

因做到了原题让我感到想吐🤮
https://in1t.top/2022/06/14/justctf-2022-amxx/
不过也通过这道题了解了也行javagradle的用法,也算不虚此行