170530 逆向-CrackMe(6)
来源:互联网 发布:amd 知乎 编辑:程序博客网 时间:2024/06/05 00:10
1625-5 王子昂 总结《2017年5月30日》 【连续第241天总结】
A.CrackMe(6)
B.CrackMe(5)的难度是三星╮(╯_╰)╭自认为还是个菜鸟没可能通过,所以先做后面简单的吧
先拖入PEiD,发现是Delphi,无壳
放入OD中运行,点击HELP后知道本程序有两关:首先OK按钮是无效的,需要通过cancella使其有效;然后才能使用OK
字符串查找,发现没有任何有意义的单词
拖入DeDe,找到Cancella触发事件的地址,在OD中下断并跟随
逐步运行,在最后的地方找到一个test al,al后je,估计此处为关键跳转
爆破成功
同理,在DeDe中找到OK触发事件的地址,在OD中下断并跟随
逐步运行,在最后的地方同样是test al,al和je,爆破也成功
注册算法:
Cancella的地方逐步跟随,一步一步研究尝试,最终明白算法:
首先,Name的长度要大于5才能继续
取Name的第五个字符的ASCII码,除以7后取余,+2后阶乘,设结果为A
把Name的每个字符的ASCII与A相乘,结果累加后减去注册码
与0x7A69相等则判断通过
我的解决方法是随便输入一个Name,然后在内存中跟随得到结果,再用7A69相减逆推出注册码
这样的话注册机就很好做出了:同样算法得到结果,与7A69作差,结果就是注册码了
ps:我本来以为负数会导致错误的,尝试了一下结果可以╮(╯_╰)╭ 也对,StrToInt当然可以识别负数吧
然后进入到最后的serial算法,同样道理一步一步跟,基本类似:
首先,Serial的长度要大于5才能继续
把Serial的每个字符的ASCII平方后取16进制下的低四位,然后乘以位数,再除以19,余数+0x41后作为该位的值
每个字符处理以后形成一个新的字符串,与Serial比较,相等则通过
值得一提的是似乎重复进行了两次完全相同的比较,难道是防止爆破?爆两次不就行了吗_(:з」∠)_
ps:Serial不允许输入数字以外的字符,但是Name允许
判断过程非常复杂,重复性极强,不断重复判断单个字符。没有尝试各种组合来跟下去
但是只要相等似乎就能通过
这样注册机似乎只能反过来做,由Serial得到Name的值
另外,在下断过程中发现有一个事件会在修改Serial的文本框时触发,但是由于Cancella和OK两个按钮已经能完成所需功能,就没去跟运行
在查看他人的逆向过程时,发现他认为是有3个事件:修改文本框时如果Serial满足条件可使OK有效;点击Cancella可使Cancella消失;点击OK可使OK消失
不过我在逆的时候点击Cancella可以使Cancella消失、同时OK有效
还有就是他觉得只能输入一次Name和Serial,同时满足三(两)个条件
然而程序本身是允许分别输入分别通过的
如果同时满足两个条件的话就需要写注册机进行穷举了,应该难度不大吧
C.明日计划
CrackMe(7)
- 170530 逆向-CrackMe(6)
- 170524 逆向-CrackMe(1)
- 170526 逆向-CrackMe(3)
- 170527 逆向-CrackMe(4)
- crackMe的逆向分析
- python逆向Crackme.pyc题目
- 170531 逆向-CrackMe之007
- 170601 逆向-CrackMe之008
- 170602 逆向-CrackMe之009
- 170604 逆向-CrackMe之013
- 170604 逆向-CrackMe之014
- 170606 逆向-CrackMe之015
- 170610 逆向-CrackMe之019
- 170613 逆向-CrackMe之023
- 170617 逆向-CrackMe之024
- 170619 逆向-CrackMe之033
- 170620 逆向-CrackMe之034
- 170621 逆向-CrackMe之027
- 区块链开发专题(P2P技术如何验证消息)
- Linux新手入门:通过chmod改变文件权限
- 一、认识计算机
- PHP实现Unicode和Utf-8编码相互转换
- 使用ajax 实现用户的用户名注册验证,如果该用户已存在则提示该用户已存在
- 170530 逆向-CrackMe(6)
- git和github使用整理
- SVN上传代码
- 南阳理工18题
- 表单实现详细注册信息
- 【PHP编程之路
- css实现水平垂直居中的几种方法
- 依赖注入(DI) 和 控制反转(IoC)
- 【网站开发】搭建一个属入自己的网站