【萌新肥宅160crackme日记】--02 Afkayas
最近上岸了,准备趁着离职与入职之间的蜜汁暑假刷刷160 crackme(虽然很多大佬公布了逆向的方法,但本肥宅就是想记录一下自己的点点滴滴),熟悉熟悉常规逆向的思路和各种工具的使用吧,也算为以后接单积累点经验。废话不多说,走起。。。{:5_123:}{:5_123:}{:5_123:}{:5_123:}{:5_123:}{:5_123:}{:5_123:}{:5_123:}{:5_123:}{:5_123:}{:5_123:}{:5_123:}今天日的就是这玩意。
按ok的话会出现消息框,嗯,很常规。
然后拖入PEID发现是VB程序。
既然是VB程序,点OK后还会弹消息框,那不如直接下API断点咯。于是下了个rtcMsgBox函数的断点。当然,查字符串也是OJBK的。
点一下OK按钮就断下来了,然后回到程序领空。发现上面应该有关键跳。
然后往上翻,果不其然,关键跳就在这里,(试试Z标志位就知道了),只要NOP掉就OJBK了。
到这里,爆破就已经完事了。但也太简单了,所以不如分析下代码,看看序列号是如何产生的。虽然我不懂VB,也不熟悉VB的汇编特征,但看着OD给的注释发现,生成序列号的代码应该还在上面。
继续往上翻,发现一堆可以的地方,于是在00402415处下个断点。测试时假名为233,假码为11111。
断下之后发现若不其然,会获取名字的长度来作为生成序列号的依据。
然后一步一步F8下去,观察发现序列号的生成流程是:'AKA-'拼接一个字符串,暂且叫s,而s=转换成字符串(十进制(名字字符串长度*0x17cbf+名字字符串的第一个字符的asc码值))。即假设名字是233,则序列号为AKA-292643。
知道算法后,注册机就简单如拉屎了。python只要2行就行。。。
一开始还以为序列号的生成会在一个CALL里,害。{:5_188:}
十分感谢大佬 感谢楼主 感谢楼主 感谢楼主 感谢楼主 不知道来晚了没有 感谢楼主 感谢楼主 每天都能学到新知识,赞!