攻防世界-re-1000Click
第一种方法:IDA静态分析
拿到题目放进DIE分析,可见无壳,32位程序

点击Click,点击Check,弹出Error!!!

在IDA里shift+F12跳转到字符串界面,搜索error

双击“Error!!!”跳转到反汇编界面

ctrl+x交叉引用,双击地址跳转并向上查找

当然可以用最笨的方法在字符串界面搜索flag,对flag字符串进行交叉引用,哪个可以选哪个
第二种方法:CE进程修改,这个比较好玩
点击文件-打开进程-选择Click.exe-打开

在Click界面点击Click,点到哪个数就在CE中填入哪个数,选择精确数值(至于为什么选"精确数值",看官方文档),一般32位程序选择4字节,点击首次扫描

然后再点几次Click,把得到的次数填入CE,点击再次扫描,会得到一个地址,双击保存

双击数字7进行数值修改,填999,因为1000次才会显示flag

最后点击Click,获得flag

第三种方法x32dbg分析(od同理使用中文搜索,没下od就不演示了)
进入主程序界面,右键选择搜索-所有模块-字符串

搜索“error"

双击跳转值汇编窗口,向上查找

第四种连点器
点击查看代码
import tkinter as tk
from tkinter import ttk, messagebox
import threading
import time
import pyautogui
import keyboard
from pynput import mouse
class AutoClicker:
def __init__(self, root):
self.root = root
self.root.title("Python 连点器")
self.root.geometry("400x350")
self.root.resizable(False, False)
# 连点状态
self.clicking = False
self.click_thread = None
self.remaining_clicks = 0
# 设置变量
self.click_interval = tk.DoubleVar(value=0.1)
self.click_type = tk.StringVar(value="left")
self.click_mode = tk.StringVar(value="infinite") # infinite 或 limited
self.click_count = tk.IntVar(value=10)
self.hotkey_start = tk.StringVar(value="f6")
self.hotkey_stop = tk.StringVar(value="f7")
self.create_widgets()
self.setup_hotkeys()
def create_widgets(self):
# 主框架
main_frame = ttk.Frame(self.root, padding="10")
main_frame.grid(row=0, column=0, sticky=(tk.W, tk.E, tk.N, tk.S))
# 标题
title_label = ttk.Label(main_frame, text="Python 连点器", font=("Arial", 16, "bold"))
title_label.grid(row=0, column=0, columnspan=2, pady=(0, 20))
# 点击间隔设置
interval_frame = ttk.Frame(main_frame)
interval_frame.grid(row=1, column=0, columnspan=2, sticky=(tk.W, tk.E), pady=5)
ttk.Label(interval_frame, text="点击间隔 (秒):").grid(row=0, column=0, sticky=tk.W)
interval_scale = ttk.Scale(interval_frame, from_=0.01, to=2.0,
variable=self.click_interval, orient=tk.HORIZONTAL)
interval_scale.grid(row=0, column=1, sticky=(tk.W, tk.E), padx=5)
interval_value = ttk.Label(interval_frame, textvariable=self.click_interval)
interval_value.grid(row=0, column=2, padx=5)
# 点击类型选择
type_frame = ttk.Frame(main_frame)
type_frame.grid(row=2, column=0, columnspan=2, sticky=(tk.W, tk.E), pady=5)
ttk.Label(type_frame, text="点击类型:").grid(row=0, column=0, sticky=tk.W)
ttk.Radiobutton(type_frame, text="左键", variable=self.click_type,
value="left").grid(row=0, column=1, padx=5)
ttk.Radiobutton(type_frame, text="右键", variable=self.click_type,
value="right").grid(row=0, column=2, padx=5)
# 点击模式设置
mode_frame = ttk.Frame(main_frame)
mode_frame.grid(row=3, column=0, columnspan=2, sticky=(tk.W, tk.E), pady=5)
ttk.Label(mode_frame, text="点击模式:").grid(row=0, column=0, sticky=tk.W)
ttk.Radiobutton(mode_frame, text="无限", variable=self.click_mode,
value="infinite", command=self.toggle_click_mode).grid(row=0, column=1, padx=5)
ttk.Radiobutton(mode_frame, text="指定次数", variable=self.click_mode,
value="limited", command=self.toggle_click_mode).grid(row=0, column=2, padx=5)
# 点击次数设置
count_frame = ttk.Frame(main_frame)
count_frame.grid(row=4, column=0, columnspan=2, sticky=(tk.W, tk.E), pady=5)
ttk.Label(count_frame, text="点击次数:").grid(row=0, column=0, sticky=tk.W)
self.count_entry = ttk.Entry(count_frame, textvariable=self.click_count, width=10, state=tk.NORMAL)
self.count_entry.grid(row=0, column=1, padx=5, sticky=tk.W)
# 快捷键设置
hotkey_frame = ttk.Frame(main_frame)
hotkey_frame.grid(row=5, column=0, columnspan=2, sticky=(tk.W, tk.E), pady=5)
ttk.Label(hotkey_frame, text="开始快捷键:").grid(row=0, column=0, sticky=tk.W)
start_entry = ttk.Entry(hotkey_frame, textvariable=self.hotkey_start, width=5)
start_entry.grid(row=0, column=1, padx=5)
start_entry.bind('<FocusOut>', lambda e: self.update_hotkeys())
ttk.Label(hotkey_frame, text="停止快捷键:").grid(row=0, column=2, sticky=tk.W, padx=(20,0))
stop_entry = ttk.Entry(hotkey_frame, textvariable=self.hotkey_stop, width=5)
stop_entry.grid(row=0, column=3, padx=5)
stop_entry.bind('<FocusOut>', lambda e: self.update_hotkeys())
# 控制按钮
button_frame = ttk.Frame(main_frame)
button_frame.grid(row=6, column=0, columnspan=2, pady=20)
self.start_button = ttk.Button(button_frame, text="开始连点", command=self.start_clicking)
self.start_button.grid(row=0, column=0, padx=10)
self.stop_button = ttk.Button(button_frame, text="停止连点", command=self.stop_clicking, state=tk.DISABLED)
self.stop_button.grid(row=0, column=1, padx=10)
# 状态显示
self.status_var = tk.StringVar(value="状态: 就绪")
status_label = ttk.Label(main_frame, textvariable=self.status_var, font=("Arial", 10))
status_label.grid(row=7, column=0, columnspan=2, pady=10)
# 说明文本
info_text = tk.Text(main_frame, height=4, width=50, font=("Arial", 9))
info_text.grid(row=8, column=0, columnspan=2, pady=10)
info_text.insert(tk.END, "使用说明:\n")
info_text.insert(tk.END, "1. 设置点击间隔、类型和次数\n")
info_text.insert(tk.END, "2. 使用快捷键或按钮开始/停止连点\n")
info_text.insert(tk.END, "3. 将鼠标移动到需要点击的位置")
info_text.config(state=tk.DISABLED)
# 配置列权重
main_frame.columnconfigure(1, weight=1)
interval_frame.columnconfigure(1, weight=1)
# 初始化点击次数输入框状态
self.toggle_click_mode()
def toggle_click_mode(self):
if self.click_mode.get() == "limited":
self.count_entry.config(state=tk.NORMAL)
else:
self.count_entry.config(state=tk.DISABLED)
def setup_hotkeys(self):
try:
keyboard.add_hotkey(self.hotkey_start.get(), self.start_clicking)
keyboard.add_hotkey(self.hotkey_stop.get(), self.stop_clicking)
except Exception as e:
messagebox.showerror("错误", f"设置快捷键失败: {str(e)}")
def update_hotkeys(self):
try:
keyboard.clear_all_hotkeys()
keyboard.add_hotkey(self.hotkey_start.get(), self.start_clicking)
keyboard.add_hotkey(self.hotkey_stop.get(), self.stop_clicking)
except Exception as e:
messagebox.showerror("错误", f"更新快捷键失败: {str(e)}")
def start_clicking(self):
if not self.clicking:
# 验证点击次数
if self.click_mode.get() == "limited":
try:
count = self.click_count.get()
if count <= 0:
messagebox.showerror("错误", "点击次数必须大于0")
return
self.remaining_clicks = count
except tk.TclError:
messagebox.showerror("错误", "请输入有效的点击次数")
return
else:
self.remaining_clicks = -1 # 无限模式
self.clicking = True
self.start_button.config(state=tk.DISABLED)
self.stop_button.config(state=tk.NORMAL)
if self.click_mode.get() == "limited":
self.status_var.set(f"状态: 连点中 - 剩余 {self.remaining_clicks} 次")
else:
self.status_var.set(f"状态: 连点中 - 无限模式")
# 在新线程中执行连点
self.click_thread = threading.Thread(target=self.click_loop, daemon=True)
self.click_thread.start()
def stop_clicking(self):
self.clicking = False
self.start_button.config(state=tk.NORMAL)
self.stop_button.config(state=tk.DISABLED)
self.status_var.set("状态: 已停止")
def click_loop(self):
while self.clicking and (self.remaining_clicks == -1 or self.remaining_clicks > 0):
try:
if self.click_type.get() == "left":
pyautogui.click()
else:
pyautogui.click(button='right')
# 更新剩余点击次数
if self.remaining_clicks > 0:
self.remaining_clicks -= 1
self.root.after(0, self.update_status)
# 检查是否完成指定次数
if self.remaining_clicks == 0:
self.root.after(0, self.stop_clicking)
break
time.sleep(self.click_interval.get())
except Exception as e:
self.root.after(0, lambda: self.status_var.set(f"错误: {str(e)}"))
break
def update_status(self):
if self.click_mode.get() == "limited":
self.status_var.set(f"状态: 连点中 - 剩余 {self.remaining_clicks} 次")
def on_closing(self):
self.clicking = False
if self.click_thread and self.click_thread.is_alive():
self.click_thread.join(timeout=1.0)
self.root.destroy()
if __name__ == "__main__":
try:
root = tk.Tk()
app = AutoClicker(root)
root.protocol("WM_DELETE_WINDOW", app.on_closing)
root.mainloop()
except ImportError as e:
print(f"缺少必要的库,请安装: {e}")
print("运行: pip install pyautogui keyboard pynput")

浙公网安备 33010602011771号