吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3506|回复: 15
收起左侧

[原创] CrackMe第三题追码+注册机

[复制链接]
growuphappily 发表于 2020-2-17 18:44
本帖最后由 growuphappily 于 2020-2-23 19:26 编辑

0x00 前言

最近真的没有什么帖子好写了,在无意中发现了这个:
https://www.52pojie.cn/thread-709699-1-1.html
于是我就打算每天做一道CrackMe的题目
第一题:https://www.52pojie.cn/forum.php?mod=viewthread&tid=1107523
第二题:https://www.52pojie.cn/forum.php?mod=viewthread&tid=1107888
第三题:https://www.52pojie.cn/thread-1108487-1-1.html
第四题:https://www.52pojie.cn/thread-1109140-1-1.html
第五题:太变态了,算了
第六题:https://www.52pojie.cn/thread-1111030-1-1.html
第七题:https://www.52pojie.cn/thread-1112318-1-1.html
第八题:https://www.52pojie.cn/thread-1113163-1-1.html
第九题算法:https://www.52pojie.cn/thread-1114003-1-1.html
第九题爆破:https://www.52pojie.cn/thread-1113295-1-1.html
0x01 正文开始

打开程序就看到了一个Nag:
去Nag参考这篇文章:http://www.52pojie.cn/thread-612982-1-1.html
rtcMsgBox断点
输入假码,注册
(注意这里要输入数字,不然报错)
断下了
在段首下断,再次注册
断下了
贴出第一部分代码:
这一部分主要是把name长度乘以15B38再加上第一个字符的ASCII再转换为十进制
[Asm] 纯文本查看 复制代码
004081E3    FF15 18B14000   call dword ptr ds:[<&MSVBVM50.__vbaHresultCh>; MSVBVM50.__vbaHresultCheckObj
004081E9    8B95 50FFFFFF   mov edx,dword ptr ss:[ebp-0xB0]
004081EF    8B45 E4         mov eax,dword ptr ss:[ebp-0x1C]
004081F2    50              push eax
004081F3    8B1A            mov ebx,dword ptr ds:[edx]
004081F5    FF15 F8B04000   call dword ptr ds:[<&MSVBVM50.__vbaLenBstr>] ; MSVBVM50.__vbaLenBstr
004081FB    8BF8            mov edi,eax                                  ; 把edi的值设置为name的长度
004081FD    8B4D E8         mov ecx,dword ptr ss:[ebp-0x18]              ; ecx设置为name
00408200    69FF 385B0100   imul edi,edi,0x15B38                         ; 将edi乘以0x15B38
00408206    51              push ecx
00408207    0F80 B7050000   jo AfKayAs_.004087C4
0040820D    FF15 0CB14000   call dword ptr ds:[<&MSVBVM50.#rtcAnsiValueB>; MSVBVM50.rtcAnsiValueBstr
00408213    0FBFD0          movsx edx,ax                                 ; edx为第一个字符的ASCII码
00408216    03FA            add edi,edx                                  ; 把edi加上edx
00408218    0F80 A6050000   jo AfKayAs_.004087C4
0040821E    57              push edi                                     ; MSVBVM50.__vbaObjSet
0040821F    FF15 F4B04000   call dword ptr ds:[<&MSVBVM50.__vbaStrI4>]   ; MSVBVM50.__vbaStrI4
00408225    8BD0            mov edx,eax                                  ; edx为edi转换为十进制之后

这部分和上次差不多
第二部分:
就是把第一部分算出来的值+2
[Asm] 纯文本查看 复制代码
004082E7    8B19            mov ebx,dword ptr ds:[ecx]
004082E9    FF15 74B14000   call dword ptr ds:[<&MSVBVM50.__vbaR8Str>]   ; 把edx压入浮点寄存器,此时ST0为266713
004082EF    D905 08104000   fld dword ptr ds:[0x401008]                  ; 把10压入浮点寄存器,此时ST0为10,ST1为266713
004082F5    833D 00904000 0>cmp dword ptr ds:[0x409000],0x0
004082FC    75 08           jnz short AfKayAs_.00408306
004082FE    D835 0C104000   fdiv dword ptr ds:[0x40100C]                 ; 把ST0除以5,此时ST0 = 2
00408304    EB 0B           jmp short AfKayAs_.00408311
00408306    FF35 0C104000   push dword ptr ds:[0x40100C]
0040830C    E8 578DFFFF     call <jmp.&MSVBVM50._adj_fdiv_m32>
00408311    83EC 08         sub esp,0x8                                  ; 把esp减去0x8
00408314    DFE0            fstsw ax
00408316    A8 0D           test al,0xD
00408318    0F85 A1040000   jnz AfKayAs_.004087BF
0040831E    DEC1            faddp st(1),st                               ; 把ST0与ST1相加,推出ST0
00408320    DFE0            fstsw ax

第三部分
这一部分比较简单,把第二部分算出来的值再乘以3减去2
[Asm] 纯文本查看 复制代码
004083F5    FF15 74B14000   call dword ptr ds:[<&MSVBVM50.__vbaR8Str>]   ; 把edx压入ST0
004083FB    DC0D 10104000   fmul qword ptr ds:[0x401010]                 ; 把ST0乘以3
00408401    83EC 08         sub esp,0x8
00408404    DC25 18104000   fsub qword ptr ds:[0x401018]                 ; 减去2
0040840A    DFE0            fstsw ax

第四部分
这一部分更简单了,就是加上15
[Asm] 纯文本查看 复制代码
004084DF    FF15 74B14000   call dword ptr ds:[<&MSVBVM50.__vbaR8Str>]   ; 把第三部分的值压入ST0
004084E5    DC25 20104000   fsub qword ptr ds:[0x401020]                 ; 减去-15
004084EB    83EC 08         sub esp,0x8
004084EE    DFE0            fstsw ax
004084F0    A8 0D           test al,0xD
004084F2    0F85 C7020000   jnz AfKayAs_.004087BF
004084F8    DD1C24          fstp qword ptr ss:[esp];推出ST0

所以我们可以得到公式:
注册码 = (name长度 * 88888 + name第一个字符的ASCII + 2)* 3 - 2 +15
可以写注册机了:
[Python] 纯文本查看 复制代码
#KeyGen2
name = input()
key = (len(name) * 88888 + ord(name[0]) + 2) * 3 -2 +15
print(key)

演示图:
成功.gif
0x03 最后

做这个帖子花费了我不少时间和精力,所以,
评分不要钱!评分不要钱评分不要钱!

免费评分

参与人数 17吾爱币 +23 热心值 +12 收起 理由
Hmily + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
1213141 + 1 + 1 用心讨论,共获提升!
木木夕土竟 + 1 日常膜拜大佬
问荆 + 1 + 1 用心讨论,共获提升!
solly + 1 + 1 我很赞同!
heshao123 + 1 + 1 我很赞同!
man666 + 1 + 1 用心讨论,共获提升!
笑己可笑 + 1 用心讨论,共获提升!
clevey + 1 我很赞同!
eden88888 + 1 + 1 我很赞同!
残剑丶 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
破解者灬禄 + 1 + 1 我很赞同!
moxiaowei + 1 + 1 谢谢@Thanks!
wasdzjh + 1 + 1 用心讨论,共获提升!
MaoKing + 1 + 1 用心讨论,共获提升!
zhenfengchun + 1 + 1 用心讨论,共获提升!
七个涨停一倍 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| growuphappily 发表于 2020-2-18 17:47
YenKoc 发表于 2020-2-18 17:11
老哥,我想问,感觉写注册机出来,是不是需要对汇编非常非常熟悉,我经常是call跳进去了,一大堆汇编命令, ...

简单的不太需要,而且一般都是在关键的语句上写注释,这样才有助于写注册机
有时候可以看函数的返回值来确定这个函数是什么意思
比如说:在call一个call之前,push了一个字符串,然后返回了一个数字,这个数值又是字符串的长度,
这样就可以看出这个cal就是计算字符串的长度
如果push了注册码和账号,返回值是1或0,那么这个call很可能是验证注册码的call
还有很多,我就不一一说了
YenKoc 发表于 2020-2-18 17:11
老哥,我想问,感觉写注册机出来,是不是需要对汇编非常非常熟悉,我经常是call跳进去了,一大堆汇编命令,能知道啥意思,但是组合起来,得不出这函数是啥意思,能解答一下吗
七个涨停一倍 发表于 2020-2-17 19:07
amovokiss 发表于 2020-2-17 19:28
好好学习下
qwert0312 发表于 2020-2-17 20:32
那个开机画面可以去掉吗?我搞不定
 楼主| growuphappily 发表于 2020-2-17 20:45
qwert0312 发表于 2020-2-17 20:32
那个开机画面可以去掉吗?我搞不定

可以,参考这篇:http://www.52pojie.cn/thread-612982-1-1.html
moxiaowei 发表于 2020-2-17 22:18
这个可以爆破吗?
定南吴彦祖 发表于 2020-2-17 23:53
非常有用,感谢分享
 楼主| growuphappily 发表于 2020-2-18 07:48
moxiaowei 发表于 2020-2-17 22:18
这个可以爆破吗?

可以,我主要是写的注册机  
ioajp 发表于 2020-2-18 08:03
学习学习。好技术。
eden88888 发表于 2020-2-18 08:41
墨水喝的少看不懂哈支持一下
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-29 02:13

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表