OD 实验(十八) - 简单注册机的编写
程序:

运行

这是一个注册机
随便输入点内容,点击 Check

弹出错误的对话框
逆向:
用 OD 载入程序
在文本框处下断点

按 Alt+B 查看断点

这个断点在动态链接库那里
跑一下程序,输入内容,点击 check

程序停在断点处
在动态链接库的断点处不能进行跟踪和修改
按 Alt+F9 让其回到程序的部分

这里上下都有一个文本框
这里的 eax 的值为 4,是 test 的长度
按 F8 往下走

又进入到刚才的地方,这次是从第二个文本框进来的
按 Alt+F9 回去

这里 eax 的值为 5,是 12345 的长度
按 F8 往下走

这里调用 lstrlenA 函数获取输入的 test 的长度,为 4

这三条指令,xor esi,esi 将 esi 清零,这个 esi 可能有很大的用处
mov ecx,eax 将 eax 的值传给 ecx,而 ecx 是用来循环计数的,mov eax,1 将 eax 赋值为 1

接下来这一段是一个循环
走进这个循环

edx 被赋予 403038 上的值,就是那个 test,edx 中的 74,73,65,74 分别对应 test 的 ASCII 码值

eax+0x403037 等于 403038

就是把 test 的第一个 t 传给 dl

and edx,0xFF 将 edx 和 0FF 进行与运算
0FF 中的 FF 转换为二进制为 1111 1111,也就是后八位为 1,前面的数为 0
0FF 和 edx 进行与运算之后,使得 edx 后八位不变,也就是 74 不变;前面的 24 位全为 0

mov ebx,edx 将 edx 的值传给 ebx,就是把 74 传给 ebx
imul ebx,edx 将 edx 的值乘 ebx 的值再赋给 ebx,就是十六进制的 74 * 74,为 3490,也就相当于 t * t

然后再把 ebx 的结果加到 esi 中

mov ebx,edx 又把 edx 的值传给 ebx
sar ebx,1 对 ebx 进行偏移计算,ebx 向右偏移 1 位,相当于除以 2,74/2 等于 3A

add ebx,0x3 把 ebx 的值加 3,即 3A+3,等于 3D
imul ebx,edx 将 ebx 乘以 edx,再存到 ebx 中,3D * 74 = 1BA4

将 ebx 的值减去 edx 的值,再存入 ebx,1BA4 - 74 = 1B30
然后再把 ebx 的值加到 esi 上,1B30 + 3490 = 4FC0

add esi,esi 将 esi 的值乘以 2
inc eax 将 eax 的值加 1,dec ecx 将 ecx 的值减 1
捋一下,esi 这一次循环的值为 ['t'*'t' + ('t'/2 * 3)*'t' - 't'] * 2
每次循环,esi 的值都会在原本的基础上运算
结束循环之后

循环过后通过 cmp 指令把 esi 的值和地址 403138 上的值进行比较
如果值相等的话就不执行 jnz 跳转,如果不相等的话就执行跳转,如果 jnz 执行跳转的话,将跳过弹出成功的对话框

这个 403138 是 GetDlgItemTextA 函数获取字符串后存放的缓冲区,值为 12345
也就是说,那个 cmp 指令是把循环后 esi 的值和 12345 进行比较
12345 那个文本框是输入注册码的,循环后 esi 的值可能是根据 test 生成的某个注册码,然后进行对比
所以此时 esi 存放的值是根据 test 生成的注册码
接下来要做的就是获取 esi 的值,也就是根据 test 生成的注册码
找个空白区域写内嵌补丁

按 Alt+M 查看数据段的地址

为 439000

把 439000 出开始的数据段作为一个临时存放区

修改 jnz 跳转指令

让其执行跳转的时候跳到内嵌补丁那

在内嵌补丁这添加一条跳转指令,让其跳回到原先 jnz 跳转到的地方
接下来修改 MessageBox 的内容,让其弹出的内容是注册码

第二个参数是消息框的内容,就是这第二个入栈的内容

修改为显示注册码的内容
运行程序

没有显示正确还是错误,而是显示了一个乱码
编写注册机
C:
#include <stdio.h>
#include <string.h> int main(void)
{
int i, len, result = 0;
char str[] = "test"; len = strlen(str); for (i = 0; i < len; i++)
{
result += str[i]*str[i] + (str[i]/2 + 3)*str[i] - str[i];
result *= 2;
}
printf("%d\n",result); return 0;
}
运行结果

十进制 571152 的十六进制为 8B710

OD 实验(十八) - 简单注册机的编写的更多相关文章
- 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验十八:SDRAM模块① — 单字读写
实验十八:SDRAM模块① — 单字读写 笔者与SDRAM有段不短的孽缘,它作为冤魂日夜不断纠缠笔者.笔者尝试过许多方法将其退散,不过屡试屡败的笔者,最终心情像橘子一样橙.<整合篇>之际, ...
- OD 实验(十六) - 从对话框入手对程序的逆向
对话框: 对话框从类型上分为两类:modal 对话框和 modeless 对话框,就是模态对话框和非模态对话框,也有叫成模式和非模式 模态对话框不允许用户在不同窗口间进行切换,非模态对话框允许用户在不 ...
- OD 实验(十四) - 内嵌补丁
内嵌补丁(inline patch): 内嵌补丁指在程序文件中把补丁代码写入文件里面达到破解的目的 如果修改某行语句会影响后面的语句,例如某语句占用 3 个字节,修改完变为 5 个字节,会覆盖后面的语 ...
- OD 实验(十二) - 对一个 Delphi 程序的逆向
程序: 运行程序 界面显示的是未注册 点击 Help -> About 点击 Use Reg Key 这里输入注册码 用 PEiD 看一下 该程序是用 Delphi 6.0 - 7.0 写的 逆 ...
- OD 实验(十) - 对一个 VB 程序的逆向
前话: VB 程序用 OD 进行逆向的话,可以先查找相关的变量和字符串,以寻找突破口 变量: __vbaVarTstEq __vbaVarCompEq __vbaVarTstNe __vbaVarCo ...
- 【iCore3 双核心板_FPGA】实验十八:基于单口RAM的ARM+FPGA数据存取实验
实验指导书及代码包下载: http://pan.baidu.com/s/1i58Ssvz iCore3 购买链接: https://item.taobao.com/item.htm?id=524229 ...
- 【iCore4 双核心板_FPGA】实验十八:Niosii——基于内部RAM建立第一个软核
实验指导书及源代码下载地址: 链接:https://pan.baidu.com/s/1mjpwGJI 密码:6u8v iCore4链接:
- OD 实验(十九) - 对多态和变形程序的逆向
程序: 这个窗口显示这是一个需要去除的 Nag 窗口 点击“确定” 用 PEiD 看一下 这是一个用汇编语言写的程序 逆向: 用 OD 载入程序 Nag 窗口的标题和文本 右键 -> 查找 -& ...
- OD 实验(十五) - 对一个程序的逆向
程序: 打开程序 出现一个 NAG 窗口 这是主界面 点击 Exit 程序出现 NAG 窗口,然后退出 用 PEiD 看一下 是用 VC++ 6.0 写的程序 逆向: 用 OD 载入程序 跑一下程序 ...
随机推荐
- ET之快递测试法学习感悟20140922
快递测试法,是从ET学习中了解到的一种测试方法,顾名思义就是数据类似于那些通过联邦快递系统在这个星球上被不断移动的包裹一样,在软件中也不断的流动.数据从被输入后就开始了它的生命周期,先被存储在内部变量 ...
- Machine Learning|Andrew Ng|Coursera 吴恩达机器学习笔记(完结)
Week 1: Machine Learning: A computer program is said to learn from experience E with respect to some ...
- Python matplotlib 数据分布
利用plt.hist() import matplotlib.pylab as plt %matplotlib inline plt.figure(figsize=(21, 12)) plt.hist ...
- js获得分辨率
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...
- SEO中H1标签的用法- 1
在网上找了很多关于H1标签对SEO意义的资料,不可否认H1对SEO具有重大的意义,但是具体情况每个人有每个人的见解吧.这里主要根据网上搜索的资料,以及自己的一些经验整理出来的,但是本人毕竟不是专业SE ...
- sublime忽略打开工程中某些文件夹,不在搜索之列
{ "folders": [ { "follow_symlinks": true, "path": ".", " ...
- windows上安装Gradle并配置环境变量
安装Gradle 下载Gradle,然后配置运行环境就可以了,有一点要注意的是gradle使用的是Groovy语言,而这个语言依赖于java,因此你必须安装配置java环境. 首先下载gradle,我 ...
- linux自学(四)之开始centos学习,网络配置
上一篇:linux自学(三)之开启虚拟机 安装好镜像之后,重启之后需要登录,我这里直接是root账号直接登录的,注意:输入密码的时候不显示. 之后输入ifconfig最常用的命令来查看网卡信息,出现c ...
- 初次使用git遇到的问题总结
第一次使用git时,遇到好多问题,但也都是小问题,下边我把这些问题总结一下. 问题一: 创建远程仓库的时候,如果你勾选了Initialize this repository with a README ...
- 每天一个linux命令(目录文件操作):【转载】Linux 目录结构
对于每一个Linux学习者来说,了解Linux文件系统的目录结构,是学好Linux的至关重要的一步.,深入了解linux文件目录结构的标准和每个目录的详细功能,对于我们用好linux系统至关重要,下面 ...