selph
selph
发布于 2022-07-18 / 226 阅读
0
0

新160个CrackMe练习:007-reg

算法难度:⭐

爆破难度:⭐

信息收集

运行情况:

经典的用户名+序列号授权验证:

image.png

查壳与脱壳:

Delphi编写的32位GUI程序,无壳

image.png

查字符串:

大概看了一下,字符串里有个reg.dll,但CM文件只是单一的exe,可能存在释放文件

image.png

调试分析

对于Delphi程序,除了直接强行分析之外,还可以借助Delphi辅助分析工具:IDR(吾爱论坛上有)

因为是窗口程序,所以查窗口的相关内容:

image.png

直接查看点击Ok按钮的内容:大概就是把用户输入的用户名和序列号写入到了reg.dll文件中,也就是说这是个dll后缀的文本文件

image.png

提示语是重启软件后验证注册码,说明这是一种重启验证,在启动的时候进行校验

那么接下来查看创建窗口时的代码:

image.png

这个调用的函数:sub_0045D0F4,这应该就是一个校验函数,根据返回al的值是否为0,来进行判断跳转,这个跳转应该是关键跳了

image.png

暴力破解

修改关键跳:

image.png

然后跑起来:

image.png

算法分析

接下来看看具体校验call做了哪些事情:sub_45D0F4

首先获取参数之后,计算SN长度,SN长度需要是16个字符:

image.png

然后接下来是个循环,遍历SN每个字符,检查合法字符,这里允许的字符是0-9数字和A-F字母

image.png

然后紧接着进行一顿处理,处理用户名得到一个加密编码后的值

image.png

值通过x86dbg动态调试观察:计算的结果是8B45677A3AEBE84C

image.png

然后接下来,程序连续走了两趟相同的操作,分别是对刚刚通过用户名计算出来的结果和我们输入的SN,然后将结果进行对比,返回

image.png

这里具体生成用户名对应SN的代码过于复杂,暂时还写不出来注册机,但这里程序在分析过程中会出现SN真码明文,这里也就到此结束了,使用该SN打开程序:

image.png

总结

Delphi程序逆向练习,借助工具IDR可以很方便的识别Delphi函数,这个CM使用了经典的重启验证,让验证函数在窗口创建前进行验证,注册机较为复杂,暂时还写不出来

参考资料


评论