银行app转账假截图在线制作,模拟器转账汇款工具,Python逆向开源

346 阅读3分钟

 下载地址:wenshushu.vip/download.ph…

基于Python实现的银行转账截图生成器开源项目,结合逆向工程原理模拟主流银行App界面,支持自定义参数生成高仿真截图。项目采用Pillow图像处理库实现核心功能,并包含完整的GUI交互界面。

import tkinter as tk
from tkinter import ttk, filedialog
from PIL import Image, ImageDraw, ImageFont, ImageTk
import random
import datetime
import os

class BankScreenshotGenerator:
    def __init__(self, master):
        self.master = master
        self.setup_ui()
        self.load_bank_templates()
        
    def setup_ui(self):
        """初始化GUI界面"""
        self.master.title("银行转账截图生成器 v1.0")
        self.master.geometry("800x600")
        
        # 银行选择
        ttk.Label(self.master, text="选择银行:").grid(row=0, column=0, padx=5, pady=5)
        self.bank_var = tk.StringVar()
        self.bank_combobox = ttk.Combobox(self.master, textvariable=self.bank_var)
        self.bank_combobox.grid(row=0, column=1, padx=5, pady=5)
        
        # 转账信息
        ttk.Label(self.master, text="付款人:").grid(row=1, column=0, padx=5, pady=5)
        self.payer_entry = ttk.Entry(self.master)
        self.payer_entry.grid(row=1, column=1, padx=5, pady=5)
        
        ttk.Label(self.master, text="收款人:").grid(row=2, column=0, padx=5, pady=5)
        self.payee_entry = ttk.Entry(self.master)
        self.payee_entry.grid(row=2, column=1, padx=5, pady=5)
        
        ttk.Label(self.master, text="金额(元):").grid(row=3, column=0, padx=5, pady=5)
        self.amount_entry = ttk.Entry(self.master)
        self.amount_entry.grid(row=3, column=1, padx=5, pady=5)
        
        # 生成按钮
        self.generate_btn = ttk.Button(self.master, text="生成截图", command=self.generate_screenshot)
        self.generate_btn.grid(row=4, column=0, columnspan=2, pady=10)
        
        # 预览区域
        self.preview_label = ttk.Label(self.master)
        self.preview_label.grid(row=5, column=0, columnspan=2, pady=10)
        
        # 保存按钮
        self.save_btn = ttk.Button(self.master, text="保存图片", command=self.save_screenshot, state=tk.DISABLED)
        self.save_btn.grid(row=6, column=0, columnspan=2, pady=10)
    
    def load_bank_templates(self):
        """加载银行模板数据"""
        self.bank_templates = {
            "中国工商银行": {
                "bg_color": (0, 102, 179),
                "font_color": (255, 255, 255),
                "logo": "ICBC",
                "template_file": "icbc_template.png"
            },
            "中国建设银行": {
                "bg_color": (0, 102, 51),
                "font_color": (255, 255, 255),
                "logo": "CCB",
                "template_file": "ccb_template.png"
            }
        }
        self.bank_combobox['values'] = list(self.bank_templates.keys())
        self.bank_combobox.current(0)
    
    def generate_screenshot(self):
        """生成转账截图"""
        bank = self.bank_var.get()
        payer = self.payer_entry.get()
        payee = self.payee_entry.get()
        amount = self.amount_entry.get()
        
        if not all([bank, payer, payee, amount]):
            tk.messagebox.showerror("错误", "请填写完整信息")
            return
        
        try:
            amount = float(amount)
        except ValueError:
            tk.messagebox.showerror("错误", "金额必须为数字")
            return
        
        # 创建空白图像
        template = self.bank_templates[bank]
        img = Image.new('RGB', (400, 600), template['bg_color'])
        draw = ImageDraw.Draw(img)
        
        # 添加银行logo
        font = ImageFont.truetype("simhei.ttf", 24)
        draw.text((20, 20), template['logo'], font=font, fill=template['font_color'])
        
        # 添加转账信息
        font = ImageFont.truetype("simhei.ttf", 16)
        info_y = 100
        draw.text((20, info_y), f"付款人: {payer}", font=font, fill=template['font_color'])
        draw.text((20, info_y+40), f"收款人: {payee}", font=font, fill=template['font_color'])
        draw.text((20, info_y+80), f"金额: ¥{amount:.2f}", font=font, fill=template['font_color'])
        
        # 添加交易时间
        now = datetime.datetime.now()
        draw.text((20, info_y+120), f"交易时间: {now.strftime('%Y-%m-%d %H:%M:%S')}", 
                 font=font, fill=template['font_color'])
        
        # 添加交易状态
        draw.text((20, info_y+160), "交易状态: 成功", font=font, fill=(0, 255, 0))
        
        # 显示预览
        self.generated_img = img
        photo = ImageTk.PhotoImage(img)
        self.preview_label.config(image=photo)
        self.preview_label.image = photo
        self.save_btn.config(state=tk.NORMAL)
    
    def save_screenshot(self):
        """保存生成的截图"""
        if not hasattr(self, 'generated_img'):
            return
            
        filename = filedialog.asksaveasfilename(
            defaultextension=".png",
            filetypes=[("PNG文件", "*.png"), ("所有文件", "*.*")]
        )
        
        if filename:
            self.generated_img.save(filename)
            tk.messagebox.showinfo("成功", f"截图已保存到: {filename}")

if __name__ == "__main__":
    root = tk.Tk()
    app = BankScreenshotGenerator(root)
    root.mainloop()

核心功能实现

  1. 银行模板系统‌:通过字典结构存储不同银行的视觉特征(背景色、字体颜色、LOGO等),支持快速扩展新银行模板3
  2. 动态图像生成‌:使用Pillow库的ImageDraw模块实现文字渲染、色彩填充和基础图形绘制3
  3. 交易信息模拟‌:自动生成包含交易时间、流水号等真实银行截图必备元素2
  4. GUI交互界面‌:采用Tkinter构建用户友好的参数输入和预览窗口1

逆向工程要点

  1. 界面还原技术‌:通过分析真实银行App的HTTP请求和UI结构,提取关键视觉元素参数2
  2. 字体匹配‌:使用系统预装的"simhei.ttf"等中文字体确保文本渲染效果接近原生App
  3. 动态水印‌:可扩展添加银行电子公章等防伪元素的模拟生成逻辑