Win32汇编学习笔记05
定位关键点3种方法: 过程函数 api 字符串
但是不确定用要哪一种方法,可以3种方法都用一下,因为在不同的程序,实用的方法是不一样的
窗口程序看控件信息
1.通过OD去看

还可以用 spy ++ 查看

还可以用vs2019 ,打开软件,找到对应控件直接看属性

一般拿句柄没用,因为按钮是响应 WM_COMMAND 消息,因此需要知道控件id
可以修改控件属性的软件: eXeScope Restorato
OD 没有查看资源的功能
OD没有通过控件ID下断点功能 ,可在在 WM_COMMAND 消息 下条件断点
COM注册机
- 第一件事情就是定位关键点
关键点一般还是看它弹得什么窗扣,然后通过窗口上的字符串取OD查找字符串,找到字符串后下断点,运行程序,看看有没有断下来
- 寻找关键分支
找到关键点后,找到函数开头,然后看一下所有条件跳转,因为肯定存在校验后的失败和成功跳转,在所有跳转下断点后,重新运行软件,看看失败后执行那些分支执行了跳转,没执行的 就说明不是
- 查看关键分支最近的 call ,因此这个 调用校验算法 一般是通过调用函数 实现的
可以通过删除该段代码,看看程序是否提示失败,如果没有就说明该出是调用校验算法,验证完就撤销修改
- 校验算法一般移位和算术运算用的很多
找到关键代码复制出来,然后去分析算法,分析算法主中函数的功能传入和传出,即参数和返回值,猜出其大概作用,然后用自己的代码去替换
xor esi, esi
mov dword ptr [esp+20], esi
L002:
mov ebp, dword ptr [463E48]
or ecx, FFFFFFFF
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, dword ptr [esp+14]
mov eax, esi
movsx ebx, byte ptr [edx+ebp]
xor edx, edx
div ecx
movsx eax, byte ptr [edx+469968]
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, FFFFFFFF
xor eax, eax
add ebx, edx
repne scas byte ptr es:[edi]
not ecx
dec ecx
mov eax, ebx
xor edx, edx
div ecx
lea ecx, dword ptr [esp+10]
mov al, byte ptr [edx+ebp]
push eax
call 0042F29A
test esi, esi
je L050
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 ;32 bit memory model option casemap :none ;case sensitive 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 ;将字符串长度给 g_dwCnt ;算法解析开始 push ebp ;因为改变了 edp,所以需要先入栈 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 ;这里换全局变量是因为 ebp的值发生了改变 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 ;将 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
注册成功删除 注册表重新注册 搜索 4Developers
Win32汇编学习笔记05的更多相关文章
- 汇编学习笔记(11)int指令和端口
格式 int指令也是一种内中断指令,int指令的格式为int n,n是中断类型码.也就是说,使用int指令可以调用任意的中断例程,例如我们可以显示的调用0号中断例程,还记得在汇编学习笔记(10)中我们 ...
- Win32汇编学习(4):绘制文本
这次,我们将学习如何在窗口的客户区"绘制"字符串.我们还将学习关于"设备环境"的概念. 理论: "绘制"字符串 Windows 中的文本是一 ...
- 机器学习实战(Machine Learning in Action)学习笔记————05.Logistic回归
机器学习实战(Machine Learning in Action)学习笔记————05.Logistic回归 关键字:Logistic回归.python.源码解析.测试作者:米仓山下时间:2018- ...
- C++ GUI Qt4学习笔记05
C++ GUI Qt4学习笔记05 qtc++正则表达式 QIntValidator -- 只让用户输入整数 QDoubleValidator -- 只让用户输入浮 ...
- 汇编学习笔记(3)[bx]和loop
本文是<汇编语言>一书的学习笔记,对应书中的4-6章. 汇编程序的执行 要想将源代码变为可执行的程序需经过编译.连接两个步骤,WIN7操作系统下需要MASM程序来进行编译连接工作.将MAS ...
- Win32汇编学习(5):绘制文本2
这次我们将学习有关文本的诸多属性如字体和颜色等. 理论: Windows 的颜色系统是用RGB值来表示的,R 代表红色,G 代表绿色,B 代表蓝色.如果您想指定一种颜色就必须给该颜色赋相关的 RGB ...
- Win32汇编学习(1):基本概念
背景知识 Windows 把每一个 Win32 应用程序放到分开的虚拟地址空间中去运行,也就是说每一个应用程序都拥有其相互独立的 4GB 地址空间,当然这倒不是说它们都拥有 4GB 的物理地址空间,而 ...
- 罗云彬win32汇编教程笔记 子函数的声明, 定义与调用
在主程序中用call指令来调用子程序. Win32汇编中的子程序也采用堆栈来传递参数,这样就可以用invoke伪指令来进行调用和语法检查工作. 一. 子程序的定义 子程序的定义方式如下所示. 子程序名 ...
- [Golang学习笔记] 05 程序实体2 作用域访问权限和变量重声明
作用域访问权限: 程序实体访问权限(作用域)有三种:1. 包级私有(代码包)2. 模块级私有(代码包)3. 公开(全域). 一个函数是一个代码块.一个程序实体的作用域总是会被限制在某个代码块中.好处: ...
- stm32寄存器版学习笔记05 PWM
STM32除TIM6和TIM7外都可以产生PWM输出.高级定时器TIM1和TIM8可以同时产生7路PWM,通用定时器可以产生4路PWM输出. 1.TIM1 CH1输出PWM配置步骤 ①开启TIM1时钟 ...
随机推荐
- Zookeeper - 客户端常用命令
查看客户端命令帮助信息 查看Zookeeper的版本 查看使用过的历史命令 查看根目录下的znode 创建znode 查看节点信息 修改znode的内容 删除znode 关闭连接 连接客户端 退出客户 ...
- Flink学习(十四) Flink 窗口、时间和水位线
Flink 框架中支持事件时间.摄入时间和处理时间三种.而当我们在流式计算环境中数据从 Source 产生,再到转换和输出,这个过程由于网络和反压的原因会导致消息乱序.因此,需要有一个机制来解决这个问 ...
- Flink学习(九) Sink到Kafka
package com.wyh.streamingApi.sink import java.util.Properties import org.apache.flink.api.common.ser ...
- 视频笔记软件JumpVideo技术解析一:Electron案例-调用VLC播放器
大家好,我是TheGodOfKing,是 最强考研学习神器,免费视频笔记应用JumpVideo,可以快速添加截图时间戳,支持所有笔记软件,学习效率MAX!的开发者之一,分享技术的目的是想找到更多志同道 ...
- Golang 入门 : 浮点数
浮点数介绍 Go语言提供了两种精度的浮点数:float32 和 float64.它们的算术规范由IEEE754浮点数国际标准定义,该浮点数规范被所有现代的CPU支持. 这些浮点数类型的范围可以从很微小 ...
- 同一局域网下,远程连接另一台电脑的Mysql数据库
博客地址:https://www.cnblogs.com/zylyehuo/ 参考链接 同一局域网,远程连接别人的Mysql数据库 用电脑A去远程电脑B的数据库,那我们要先在电脑B上设置一下: ste ...
- Hack The Box-Chemistry靶机渗透
通过信息收集访问5000端口,cif历史cve漏洞反弹shell,获取数据库,利用低权限用户登录,监听端口,开放8080端口,aihttp服务漏洞文件包含,获取root密码hash值,ssh指定登录 ...
- 适配器设计模式--java进阶day03
1.设计模式 通俗来讲,设计模式就是其他程序员遇到某些问题时的解决经验,我们学习设计模式,在遇到了同样的问题后便可解决 2.适配器设计模式 有人可能会感到疑惑,接口和实现类会有什么问题,我们举两个例子 ...
- 快戳进来!PostgreSQL实战型系列文章来了!
快戳进来!PostgreSQL实战型系列文章来了! Whoami:6年+金融.政府.医疗领域工作经验的DBA Certificate:PGCM.OCP.YCP Skill:Oracle.Mysql.P ...
- javaWeb之路径
一. 路径写法: 1. 路径分类 a. 相对路径:通过相对路径不可以确定唯一资源 * 如:./index.html * 不以/开头,以.开头路径 * 规则:找到当前资源和目标资源之间的相对位置关系 * ...