吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5810|回复: 37
收起左侧

[原创] 适合新手的160个crakeme--001(算法)

[复制链接]
heilongwang 发表于 2020-10-22 00:08
160个crakeme系列--001


前言:上个帖子没有算法部分,在这补充,上个帖子地址:[url=适合新手的160个crakeme--001 https://www.52pojie.cn/thread-1283093-1-1.html (出处: 吾爱破解论坛)]适合新手的160个crakeme--001 https://www.52pojie.cn/thread-1283093-1-1.html (出处: 吾爱破解论坛)[/url]


之前说到有两个跳转会导致弹出错误框,我们看第一个跳转,观察附近call功能
image.png
mov eax,[43176c]
call 406930
看上去这个函数参数传入一个全局变量 [43176c]
我们跟随看看函数代码
image.png


看到 repne scas 这条命令可以知道这是一个计算字符串长度的函数
mov edx,edi                           
mov edi,eax                     
mov ecx,-1h                              
xor al,al                     
repne scas byte es:[edi]       ;遍历edi指向的字符串,每次ecx-1,直到遇到al中的字符,这里为0,即字符串结尾符号
mov eax,-2h
sub eax,ecx                          ;因为之前计算的长度会算上结尾符号,所有这里用-2相减,即  -1  - (-1-(len+1)) -1 = -2 -(-2-len) = len
mov edi,edx
retn


我们f8运行这个函数
image.png
看到eax长度为1,可是我们输入的是‘123’,我们看看[43176c]指向的字符串是什么
image.png
image.png

可以看到[43176c]指向的字符串为  ascii码  10 对应的字符,长度为1
看上去不是计算我们输入的字符串的长度,我们输入 12345,678910,试试
image.png
看到eax为我们输入的用户名,可以确定此处限制了用户名的长度必须大于等于4
但为什么之前输入 123时计算的却是 另外一个字符串呢,我们往上看看是否有调用[43176c]这个全局变量的函数
image.png
看到这里将eax即用户名放入全局变量[43176c],此处 local.4 为ebp-10 ,local.4为od添加的标识,我们看运行下面的函数观察 全局变量[43176c]和ebp-10的变化
image.png

可以看出此处将用户名使用局部变量存储,全局变量改变了,我们研究的是序列号算法此处就不看了。
现在我们看下一个跳转
输入12345,6789跳过第一个call
image.png
不难看出此处正确的序列号已经生成为,“CW-4018-CRACKED”
该函数为比较序列号的函数我们输入 12345,“CW-4018-CRACKED”,看序列号是否正确
image.png
可以确定序列号就是“CW-4018-CRACKED”,说明序列号在之前就生成了,我们往上观察
image.png

看到熟悉的字符串,而且很多函数调用了局部变量,根据函数最后运行结果,这些局部变量存储了关键的字符串,
我们从0042fa79开始看,此处为第一个call跳转处且调用了局部变量
image.png

第一个call调用ebp-10,和一个整数值
image.png
eax返回5,ebp-10没有变化
可能也是一个计算长度的函数,继续往下看
0042FA87  |.  8B45 F0       mov eax,[local.4]                                         ;将用户名存入eax
0042FA8A  |.  0FB600        movzx eax,byte ptr ds:[eax]                        ;取第一个字符
0042FA8D  |.  F72D 50174300 imul dword ptr ds:[0x431750]              ;[431750]为29h,将第一个字符乘以29h结果存入edx:eax
0042FA93  |.  A3 50174300   mov dword ptr ds:[0x431750],eax          ;  
0042FA98  |.  A1 50174300   mov eax,dword ptr ds:[0x431750]          ;  因为edx为0,取结果放入[431750]
0042FA9D  |.  0105 50174300 add dword ptr ds:[0x431750],eax         ;结果*2 结果为  fb2即4018
接着向下看
image.png


可以看到403708传入ebp-4和字符串CW两个参数
运行后,ebp-4变为CW
403708应该是一个字符串赋值操作

接下来是将 CRACKED 赋值给ebp-8
接着是将 ebp-4(CW)和’-‘压栈
image.png
下面一个函数传入 ebp-18,以及 [431750],之前压栈的 ebp-4(CW)和’-‘未出栈,所以不是此函数的参数
运行后ebp-18变为“4018”此处应该是将整数转换成对应字符串
image.png
接着是三个压栈指令
并传入 ebp-c,5运行后出栈5个参数说明之前压栈的 ebp-4(CW)和’-‘未此函数的参数
运行后ebp-c存储着正确的序列号
紧接着是 41aa58函数 这个函数有点弄不懂,不过不影响
到此就到了第二个call指令处了 。
所以序列号算法为 ‘CW-’ + 用户名第一个 数*29*2+  ’-CRACKED‘

注册机 。。。。。省略

如果有错误或者建议,希望各位大佬指点。

    闲话:荒废了好久,以后尽量每天花点时间来练习并发帖,希望今年能将这160系列弄完,emmm发现汇编好难学啊,看完16位又要看32,还要看64。emmm


image.png
image.png
image.png
image.png
image.png

免费评分

参与人数 7吾爱币 +12 热心值 +7 收起 理由
pandypax + 1 + 1 热心回复!
Eaysuild.xean + 1 + 1 我很赞同!
tocabd + 1 + 1 用心讨论,共获提升!
火绒 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
Hmily + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
showwh + 1 + 1 谢谢@Thanks!
玉骨雪肌腻酥香 + 1 我很赞同!

查看全部评分

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

tt0202 发表于 2020-10-22 19:13
适合新手的160个crakeme--001(算法)太全面了  谢谢楼主的分享   很实用
norakura 发表于 2020-10-22 00:36
tt0202 发表于 2020-10-22 01:39
xicheying 发表于 2020-10-22 06:46
谢谢楼主,学习了
whngomj 发表于 2020-10-22 08:22
谢谢楼主,学习了
deityso 发表于 2020-10-22 08:24
涨知识了。高手
taotianc 发表于 2020-10-22 08:50
膜拜。。最近学习破解感觉要奔溃
jokony 发表于 2020-10-22 09:02
好专业啊,,看不懂 哈哈
tatu2010 发表于 2020-10-22 09:05
好像很厉害的样子 赞一个
ghy197674 发表于 2020-10-22 09:11
谢谢楼主
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-24 23:47

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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