CrackMe160 学习笔记 之 054
前言
做个简单的题目放松一下。
思路
直接分析即可。
分析
OK按钮点击事件
00427B65 |. E8 26E2FEFF call 00415D90 ; 获取name保存到ebp-4
00427B6A |. 8B45 FC mov eax, dword ptr [ebp-4]
00427B6D |. E8 3EBCFDFF call 004037B0 ; 获取name长度
00427B72 |. 48 dec eax ; 长度减一
00427B73 |. 7C 30 jl short 00427BA5 ; 判断长度是否大于1
00427B75 |. 8D55 FC lea edx, dword ptr [ebp-4]
00427B78 |. 8B83 EC010000 mov eax, dword ptr [ebx+1EC]
00427B7E |. E8 0DE2FEFF call 00415D90 ; 获取key保存到ebp-4
00427B83 |. 8B45 FC mov eax, dword ptr [ebp-4]
00427B86 |. 50 push eax
00427B87 |. 8D55 F8 lea edx, dword ptr [ebp-8]
00427B8A |. 8B83 DC010000 mov eax, dword ptr [ebx+1DC]
00427B90 |. E8 FBE1FEFF call 00415D90 ; 获取name保存到ebp-8
00427B95 |. 8B45 F8 mov eax, dword ptr [ebp-8]
00427B98 |. 5A pop edx
00427B99 |. E8 82FEFFFF call 00427A20 ; 验证函数
00427B9E |. 3D 4E61BC00 cmp eax, 0BC614E
00427BA3 |. 7D 1E jge short 00427BC3 ; 关键跳
验证函数
00427A59 |. E8 52BDFDFF call 004037B0 ; 返回name长度
00427A5E |. 8BF0 mov esi, eax
00427A60 |. 85F6 test esi, esi
00427A62 |. 7E 3C jle short 00427AA0 ; 长度小于等于0则跳转
00427A64 |. B8 01000000 mov eax, 1 ; eax = 1
00427A69 |> 8BD0 /mov edx, eax ; edx 保存计数器值
00427A6B |. 8B4D FC |mov ecx, dword ptr [ebp-4] ; 取name
00427A6E |. 0FB64C11 FF |movzx ecx, byte ptr [ecx+edx-1] ; 挨个取name字符
00427A73 |. 03D9 |add ebx, ecx ; ebx = ebx + ecx
00427A75 |. 71 05 |jno short 00427A7C ; 不溢出跳转
00427A77 |. E8 B4AFFDFF |call 00402A30 ; 只要小于0,就会乘-1,这里应该走不到
00427A7C |> C1E3 08 |shl ebx, 8 ; 左移8位
00427A7F |. 8B0D 80884200 |mov ecx, dword ptr [428880] ; eKH_1.004279FC
00427A85 |. 0FB65411 FF |movzx edx, byte ptr [ecx+edx-1] ; 从固定字符串取出字符
00427A8A |. 0BDA |or ebx, edx ; ebx = ebx | edx
00427A8C |. 85DB |test ebx, ebx
00427A8E |. 7D 0C |jge short 00427A9C ; 大于等于0则跳转
00427A90 |. 6BD3 FF |imul edx, ebx, -1 ; edx = ecx * -1
00427A93 |. 71 05 |jno short 00427A9A
00427A95 |. E8 96AFFDFF |call 00402A30
00427A9A |> 8BDA |mov ebx, edx
00427A9C |> 40 |inc eax ; 指向下一个字符
00427A9D |. 4E |dec esi ; esi为0时结束循环
00427A9E |.^ 75 C9 \jnz short 00427A69
00427AA0 |> 81F3 78563412 xor ebx, 12345678 ; ebx = ebx ^ 0x12345678
00427AA6 |. 8D55 F0 lea edx, dword ptr [ebp-10]
00427AA9 |. 8BC3 mov eax, ebx
00427AAB |. E8 44E9FDFF call 004063F4 ; 转成10进制保存到ebp-10中
00427AB0 |. 8B45 F0 mov eax, dword ptr [ebp-10]
00427AB3 |. E8 F8BCFDFF call 004037B0 ; 返回新字符串的长度
00427AB8 |. 8BF0 mov esi, eax
00427ABA |. 85F6 test esi, esi
00427ABC |. 7E 38 jle short 00427AF6 ; 判断新字符串长度是否小于等于0
00427ABE |> 8BC3 /mov eax, ebx ; 从ebx取出
00427AC0 |. B9 0A000000 |mov ecx, 0A
00427AC5 |. 99 |cdq
00427AC6 |. F7F9 |idiv ecx ; 除以10
00427AC8 |. 6215 3C7B4200 |bound edx, qword ptr [427B3C] ; edx为除法余数
00427ACE |. 8A92 84884200 |mov dl, byte ptr [edx+428884]
00427AD4 |. 8D45 F0 |lea eax, dword ptr [ebp-10]
00427AD7 |. E8 FCBBFDFF |call 004036D8 ; 转成字符保存到ebp-10中
00427ADC |. 8B55 F0 |mov edx, dword ptr [ebp-10]
00427ADF |. 8D45 F4 |lea eax, dword ptr [ebp-C]
00427AE2 |. E8 D1BCFDFF |call 004037B8 ; 连接字符串保存到ebp-C中
00427AE7 |. 8BC3 |mov eax, ebx
00427AE9 |. B9 0A000000 |mov ecx, 0A
00427AEE |. 99 |cdq
00427AEF |. F7F9 |idiv ecx ; 除以10
00427AF1 |. 8BD8 |mov ebx, eax ; 保存到ebx中
00427AF3 |. 4E |dec esi ; 计数器减一
00427AF4 |.^ 75 C8 \jnz short 00427ABE
00427AF6 |> 8B45 F4 mov eax, dword ptr [ebp-C]
00427AF9 |. 8B55 F8 mov edx, dword ptr [ebp-8]
00427AFC |. E8 BFBDFDFF call 004038C0 ; 字符串比较函数
注册机代码
/*004279FC 4C 41 4E 4E 59 44 49 42 41 4E 44 49 4E 47 49 4E LANNYDIBANDINGIN00427A0C 41 4E 41 4B 45 4B 48 59 41 4E 47 4E 47 45 4E 54 ANAKEKHYANGNGENT00427A1C 4F 54 OT
*//*00428884 4C 41 4E 4E 59 35 36 34 36 35 32 31 00 LANNY5646521.
*/#include<stdio.h>
int main()
{char* name;char* s="LANNYDIBANDINGINANAKEKHYANGNGENTOT";char* t="LANNY5646521";int len=0;unsigned int ebx=0;printf("name:");scanf("%[^\n]",name);if((len=strlen(name))<=0)return 0;for(int i=0;i<len;i++){ebx+=name[i];ebx<<=8;ebx|=s[i];if(ebx>=0x80000000)ebx*=-1;}ebx^=0x12345678;sprintf(name,"%d",ebx);len=strlen(name);printf("key:");for(int i=0;i<len;i++){printf("%c",t[ebx%10]);ebx/=10;}return 0;
}
CrackMe160 学习笔记 之 054相关推荐
- CrackMe160 学习笔记 之 023
前言 这个程序需要我们写出注册机. 思路 没有注册按钮.说明是由定时器来判断输入的. 查看API. 找到获取name输入和获取key输入的函数. 在验证函数可以看到如下语句. 004012AE |&g ...
- CrackMe160 学习笔记 之 024
前言 这个程序和023是一个作者. 说实话,这个作者是真的牛逼,能用汇编写出这样的程序. 每次调他写的程序就很头疼. 然而我还是差不多只花了一天就写出了注册机. 思路 这个程序没有明显的字符串,搜索字 ...
- CrackMe160 学习笔记 之 044
前言 感觉这个题目中规中矩. 都是一些反汇编里常见的函数. 眼睛瞄一下就能看出来了. 思路 和计算出的字符串比较. 分析 看着这个跳转表,注册机写起来也没意义. 00421BAE |. E8 45FC ...
- CrackMe160 学习笔记 之 053
前言 这个题目花了两天还没做出来,其中写注册机的时候涉及了矩阵的运算. 这一块不是很熟,算来算去始终算不对,我裂开了. ] 感觉在这一块花太多的时间没有意义. 现在先存个档,以后等我研究透了线性代数再 ...
- 随笔——Docker学习笔记
Docker学习笔记 一.Docker 安装 二.Docker常用命令 注意事项 1.删除容器 2.删除镜像 3.容器中命令 4.容器的生命周期 5.Dockerfile构建镜像 6.docker两个 ...
- 34.Oracle深度学习笔记——12C的AWR初步解读
34.Oracle深度学习笔记--12C的AWR初步解读 关于AWR,蛤蟆也经常看.因为经常看别人给出的建议,很难有深刻体会.对此,计划花费几个晚上时间好好体会一把并记录下来.此处以单实例为例.列出目 ...
- Flash/Flex学习笔记(51):3维旋转与透视变换(PerspectiveProjection)
Flash/Flex学习笔记(49):3D基础 里已经介绍了3D透视的基本原理,不过如果每次都要利用象该文中那样写一堆代码,估计很多人不喜欢,事实上AS3的DisplayObject类已经内置了z坐标 ...
- 《机器学习实战》学习笔记(七):利用AdaBoost 元算法提高分类性能
欢迎关注WX公众号:[程序员管小亮] [机器学习]<机器学习实战>读书笔记及代码 总目录 https://blog.csdn.net/TeFuirnever/article/details ...
- MySQL技术内幕-InnoDB存储引擎第2版-学习笔记-01
MySQL技术内幕-InnoDB存储引擎第2版-学习笔记-01 1. MySQL体系结构和存储引擎 1.1 定义数据库和实例 数据库database: 物理操作系统文件或其他形式文件类型的集合. 当使 ...
最新文章
- Exchange数据库无法装载的问题
- linux数据流重定向
- win32api.sendmessage模拟鼠标点击_安卓模拟器一键宏设置教程
- REST、RESTful 与 RESTful API
- 前端开发中的一些js小技巧
- (百万浏览量!)超详细MySQL安装及基本使用教程(史上最详细)
- python实现语音播放_用Python实现语音播报
- MySQL数据库创建用户root@%
- 从数据库读写RadioButtonList选中的值
- Oracle笔记:创建表空间、创建用户、授权
- 20155207实验2 Windows口令破解
- 网易考拉:已与雅诗兰黛各自撤销法院在诉案件
- DirectX 初始化DirectX(手写和红龙书里面的方式)
- UOS桌面操作系统专业版字体
- 对DSP的基本了解(一)--DSP是什么?
- linux中ftp禁止匿名,linux下禁止root和匿名用户登录ftp
- 如何设置或更改代理?这些方法你知道吗?
- html5ify插件,漂亮的jQuery对话框插件Dialogify
- 专注儿童编程,核桃编程招人啦~
- 网站服务器选择什么操作系统,网站服务器选择哪种操作系统比较好
热门文章
- 【数学】C019_LC_三锥形的表面积(减重叠面积)
- Unity中人物移动的几种方式
- MySQL表结构导出
- 数组类型参数传递问题:$.ajax传递数组的traditional参数传递必须true
- [DBT-11211] 当物理内存总量大于4GB时,不允许使用自动内存管理选项
- spring-session整合redis原理 排查失效原因
- 使用PyTorch实现对花朵的分类
- 均值归一化_数据归一化
- freeswitch实现监听、三方通话的两种方法
- 三本计算机专业考研能考985,2020考研:985院校真的难考吗?为什么三本院校的学生连试都不敢?...