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 载入程序 跑一下程序 ...
随机推荐
- Machine Learning|Andrew Ng|Coursera 吴恩达机器学习笔记(完结)
Week 1: Machine Learning: A computer program is said to learn from experience E with respect to some ...
- [知识图谱] 环境配置:Java8 + Maven3 + HBase + Titan
1.Java Java8安装配置 2.Maven Linux下的Maven安装与配置 3.Hbase 官方安装教程:http://s3.thinkaurelius.com/docs/titan/1.0 ...
- HTML中Div、span、label标签的区别
div与span 大家在初学div+css布局时,有很多困惑,在div与span的使用过程没觉得有一定的”章法”,觉得两个区别不大,在w3c的关于div和span的定义:div作为分割文档结构自然使它 ...
- CMake入门实践
为了更好的代码管理,选择一款make工具非常重要,cmake取百家之长,现在在github上已经是工程管理的常客了,最大的优势是跨平台.本文将避开理论,直接教你如何在windows和linux上实现c ...
- LARAVEL IOC容器 示例解析
<?php class People { public $dog = null; public function __construct() { $this->dog = new Dog( ...
- JAXP使用Stax API时格式化输出XML
最近项目中需要生成XBRL instance,对于XML读写和验证进行了一些学习.由于Stax API不支持格式化输出,默认全都写在一行上,网上也没有搜到现成的东西,自己写了一个格式化输出的帮助类. ...
- 基于NodeJS的全栈式开发(基于NodeJS的前后端分离)
也谈基于NodeJS的全栈式开发(基于NodeJS的前后端分离) 前言 为了解决传统Web开发模式带来的各种问题,我们进行了许多尝试,但由于前/后端的物理鸿沟,尝试的方案都大同小异.痛定思痛,今天我们 ...
- 在 GitHub 公开仓库中隐藏自己的私人邮箱地址
GitHub 重点在开方源代码,其本身还是非常注重隐私的.这一点与面向企业的 GitLab 很不一样. 不过,你依然可能在 GitHub 上泄露隐私信息,例如企业内部所用的电子邮箱. GitHub 对 ...
- 【转】VC中MessageBox与AfxMessageBox用法与区别
原文网址:http://blog.csdn.net/holybin/article/details/28403109 一.MessageBox()用法 1.函数原型 Messagebox函数在Win3 ...
- 关于WCF引用方式之WCF服务寄宿控制台
1.创建解决方案WCFService 依次添加四个项目,如上图,Client和Hosting为控制台应用程序,Service和Service.Interface均为类库. 2.引用关系 Service ...