程序:

运行

这是一个注册机

随便输入点内容,点击 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 实验(十八) - 简单注册机的编写的更多相关文章

  1. 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验十八:SDRAM模块① — 单字读写

    实验十八:SDRAM模块① — 单字读写 笔者与SDRAM有段不短的孽缘,它作为冤魂日夜不断纠缠笔者.笔者尝试过许多方法将其退散,不过屡试屡败的笔者,最终心情像橘子一样橙.<整合篇>之际, ...

  2. OD 实验(十六) - 从对话框入手对程序的逆向

    对话框: 对话框从类型上分为两类:modal 对话框和 modeless 对话框,就是模态对话框和非模态对话框,也有叫成模式和非模式 模态对话框不允许用户在不同窗口间进行切换,非模态对话框允许用户在不 ...

  3. OD 实验(十四) - 内嵌补丁

    内嵌补丁(inline patch): 内嵌补丁指在程序文件中把补丁代码写入文件里面达到破解的目的 如果修改某行语句会影响后面的语句,例如某语句占用 3 个字节,修改完变为 5 个字节,会覆盖后面的语 ...

  4. OD 实验(十二) - 对一个 Delphi 程序的逆向

    程序: 运行程序 界面显示的是未注册 点击 Help -> About 点击 Use Reg Key 这里输入注册码 用 PEiD 看一下 该程序是用 Delphi 6.0 - 7.0 写的 逆 ...

  5. OD 实验(十) - 对一个 VB 程序的逆向

    前话: VB 程序用 OD 进行逆向的话,可以先查找相关的变量和字符串,以寻找突破口 变量: __vbaVarTstEq __vbaVarCompEq __vbaVarTstNe __vbaVarCo ...

  6. 【iCore3 双核心板_FPGA】实验十八:基于单口RAM的ARM+FPGA数据存取实验

    实验指导书及代码包下载: http://pan.baidu.com/s/1i58Ssvz iCore3 购买链接: https://item.taobao.com/item.htm?id=524229 ...

  7. 【iCore4 双核心板_FPGA】实验十八:Niosii——基于内部RAM建立第一个软核

    实验指导书及源代码下载地址: 链接:https://pan.baidu.com/s/1mjpwGJI 密码:6u8v iCore4链接:

  8. OD 实验(十九) - 对多态和变形程序的逆向

    程序: 这个窗口显示这是一个需要去除的 Nag 窗口 点击“确定” 用 PEiD 看一下 这是一个用汇编语言写的程序 逆向: 用 OD 载入程序 Nag 窗口的标题和文本 右键 -> 查找 -& ...

  9. OD 实验(十五) - 对一个程序的逆向

    程序: 打开程序 出现一个 NAG 窗口 这是主界面 点击 Exit 程序出现 NAG 窗口,然后退出 用 PEiD 看一下 是用 VC++ 6.0 写的程序 逆向: 用 OD 载入程序 跑一下程序 ...

随机推荐

  1. currentTarget,this,target区别

    currentTarget  : 事件处理程序当前正在处理事件的那个元素 this : 当前的事件发生的元素 target : 事件的目标 currentTarget和this值是始终相等的,但是ta ...

  2. flutter笔记1:VScode安装dart code插件踩坑记录

    新手菜鸟一枚,想从产品转入技术坑,目标:移动端APP开发.最近听技术达人 飞狐 说flutter beta发布了,支持跨平台APP开发,各种强大易上手,于是乎零基础入坑~话说想提高英文水平的同学,请移 ...

  3. allow-hotplug eth0 allow-hotplug error

    /********************************************************************* * allow-hotplug eth0 error * ...

  4. C语言共用体union

    union共用体说明: 当一个共用体被声明时, 编译程序自动地产生一个变量, 其长度为联合中最大的变量长度的整数倍. 比如union中有{int x; double x1; char name[10] ...

  5. NGUI动态给EventDelegate加参数

    示例代码如下: 响应的函数声明为: void OnChange(UIToggle toggle) { if(toggle.value) { // do something } }   添加响应的代码如 ...

  6. 每天一个linux命令(文件上传下载文件操作):【转载】gzip命令

    减少文件大小有两个明显的好处,一是可以减少存储空间,二是通过网络传输文件时,可以减少传输的时间.gzip是在Linux系统中经常使用的一个对文件进行压缩和解压缩的命令,既方便又好用.gzip不仅可以用 ...

  7. ResultSet.TYPE_SCROLL_SENSITIVE到底发生了什么?

    转自:https://blog.csdn.net/axman/article/details/3984103 这个问题我在几年前说过,但今天再次从CSDN上看到有人问这个问题,可以看出,真正懂这个问题 ...

  8. php7+Redis+Windows7安装 (phpstudy)

    1.首先去github网站上下载https://github.com/dmajkic/redis/downloads: 2.根据实际情况,将64bit的内容cp到自定义盘符目录,如D:\Redis; ...

  9. sqlserver docker 安装部署试用

    1. 镜像   docker pull exoplatform/sqlserver 2. 镜像参数    docker run -d -e SA_PASSWORD=<passord> -e ...

  10. JS实现动态提示框

    引言 什么项目都有个需求,应开发需求,需要写一个公式编辑器选择公式的插件,下面给大家讲一下实现过程.(擦汗,强作淡定,咳,开嗓~) 看图说话 本小菜开发功能前乐于先写个需求思维导图(纯属个人爱好): ...