当前位置:首页 > 工具 > 正文内容

Win32汇编调试技巧

访客 工具 2026年10月7日 1

定位关键点有三种方法:过程函数、API调用和字符串匹配。根据具体情况选择合适的方法,因为不同程序可能适用不同的方法。

查看窗口控件信息

使用OllyDbg分析

OllyDbg可以帮助我们查看窗口控件的信息。

OllyDbg示例

使用Spy++工具

Spy++也是查看窗口控件信息的一个好工具。

Spy++示例

使用Visual Studio

通过Visual Studio打开程序,可以直接查看控件属性。

VS示例

COM注册机分析

定位关键点

首先,通过程序弹出的窗口或字符串来定位关键点。在OllyDbg中查找字符串并设置断点。

寻找关键分支

找到关键点后,检查函数中的条件跳转指令,设置断点以确定程序执行的路径。

分析关键调用

检查关键分支附近的CALL指令,这些通常涉及校验算法。可以通过修改代码来验证其功能。

逆向工程校验算法

校验算法通常包含位操作和算术运算。通过分析代码片段,可以推测其功能并实现自己的版本。

mov     eax, esi
xor     edx, edx
mov     ecx, 3
div     ecx
test    edx, edx
jnz     L050
push    004640F8
lea     ecx, dword ptr [esp+14]
call    0042F273
L050:
inc     esi
cmp     esi, 9
jb      L002

代码中存在一个全局字符串 "0123456789"。

全局字符串

通过观察CALL指令前后的变化,可以推测其功能。

CALL指令变化

实现注册码生成器

.386
.model flat, stdcall
option casemap :none

include Register.inc

.data
g_szUserName db 128 dup(0)
g_szNumber db "0123456789", 0
g_szSerNumb db "6769-", 32 dup(0)
g_ch db 2 dup(0)
g_szGang db "-", 0
g_dwCnt dd 0

.code
start:
invoke GetModuleHandle, NULL
mov hInstance, eax
invoke InitCommonControls
invoke DialogBoxParam, hInstance, IDD_DIALOG1, NULL, addr DlgProc, NULL
invoke ExitProcess, 0

Make proc uses esi ecx edi ebx hWin:HWND
LOCAL @dwCnt:DWORD

invoke GetDlgItemText, hWin, EDT_USERNAME, offset g_szUserName, size g_szUserName
mov g_dwCnt, eax

push ebp
xor esi, esi
L002:
lea ebp, g_szNumber
or ecx, 0FFFFFFFFh
mov edi, ebp
xor eax, eax
repne scas byte ptr es:[edi]
not ecx
dec ecx
mov eax, esi
xor edx, edx
mov edi, ebp
div ecx
mov ecx, g_dwCnt
mov eax, esi
movsx ebx, byte ptr [edx+ebp]
xor edx, edx
div ecx
movsx eax, byte ptr [edx + offset g_szUserName]
lea edx, dword ptr [eax+eax*2]
lea eax, dword ptr [eax+edx*4]
mov edx, esi
imul edx, esi
imul edx, esi
imul edx, ecx
add ebx, eax
or ecx, 0FFFFFFFFh
xor eax, eax
add ebx, edx
repne scas byte ptr es:[edi]
not ecx
dec ecx
mov eax, ebx
xor edx, edx
div ecx
mov al, byte ptr [edx+ebp]
mov g_ch, al
invoke crt_strcat, offset g_szSerNumb, offset g_ch

test esi, esi
je L050
mov eax, esi
xor edx, edx
mov ecx, 3
div ecx
test edx, edx
jnz L050
invoke crt_strcat, offset g_szSerNumb, offset g_szGang

L050:
inc esi
cmp esi, 9
jb L002
pop ebp

invoke SetDlgItemText, hWin, EDT_SERNUMBER, offset g_szSerNumb
ret
Make endp

DlgProc proc hWin:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
mov eax, uMsg
.if eax == WM_INITDIALOG
.elseif eax == WM_COMMAND
mov eax, wParam
.if ax == BTN_MAKE
invoke Make, hWin
.endif
.elseif eax == WM_CLOSE
invoke EndDialog, hWin, 0
.else
mov eax, FALSE
ret
.endif
mov eax, TRUE
ret
DlgProc endp

end start
返回列表

上一篇:C# Unity 依赖注入容器深度解析与实践

没有最新的文章了...

相关文章

Trojan服务器搭建与配置

一、整体架构(先对齐认知)Clash Meta (PC / iOS / Android)        ↓ TLS   Trojan Server (443)        ↓     InternetTrojan 的核心是: TLS + HTTPS 流量伪装 看起来像正常网站 非常适合...

Tailscale 的详细用法

Tailscale 是一种基于 WireGuard 协议 的 零配置 VPN(虚拟私有网络)服务,让设备之间能够 安全、加密地直接连接,就像它们在同一个本地网络一样。它的核心特点是 简单、安全、跨平台。Tailscale 非常适合 没有公网 IP、两台电脑不在同一局域网 的场景。 简单来说,Tailscale 是什么?Tailscale 是一款让你的各种设备(电脑、服务器、手机...

Clash Tun 模式 导致 爱快(iKuai SD-Wan)内网域名无法访问

一、Clash  DNS 配置dns:  enable: true  listen: 0.0.0.0:53  ipv6: true  enhanced-mode: redir-host  nameserver:    - 223.5.5.5    - 223.6.6.6iKuai 内网域名 ...

深入解析Node.js运行环境与异步I/O架构

深入解析Node.js运行环境与异步I/O架构

核心定义与价值Node.js本质上是一个JavaScript运行环境,而非编程语言或应用框架。它赋予了JavaScript脱离浏览器在服务端、命令行工具及网络应用中执行的能力。其核心意义在于:用单一语言打通前后端开发壁垒。基于事件驱动与非阻塞I/O的架构特性,Node.js在处理API网关、实时通信及微服务等I/O密集型场景时表现卓越,已成为现代后端工程的主流选择。浏览器沙箱限制1995年Java...

ADO.NET SQL参数化查询的最佳实践

在 ADO.NET 中执行 SQL 查询时,参数化查询是一种关键的安全措施和性能优化手段。它通过将 SQL 命令和用户提供的数据分开处理,有效防止了 SQL 注入攻击,并有助于数据库缓存执行计划。下面总结了几种常用的参数化查询方式。 1. 使用 SqlParameter 对象(推荐) 这是最推荐的参数化查询方式。通过显式创建 SqlParameter 对象,您可以精确控制参数的类...

基于ELK的日志集中化分析系统搭建

构建统一日志管理平台的必要性 在分布式架构中,各服务节点独立运行,日志分散存储于不同主机。传统通过命令行工具如grep、awk逐个检索日志的方式,在数据量庞大时效率极低,难以实现快速定位问题。为提升运维效率,需建立集中式日志处理体系,具备日志采集、传输、存储、分析与告警能力。 ELK技术栈核心组件解析 Elasticsearch:分布式搜索引擎,支持全文检索、实时数据分析和高可用集群部署,...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。