一个和md5相关的软件的注册码
这个软件会在进行我们的注册码验证的时候,调用一个叫md5.dll如果这个dll被删除,会跳出缺少md5.dll的错误信息,证明其的确使用了md5.dll
我比较不解的是,大家不都是说md5基本上是不可逆的吗?
那我在这里请教一下大家的思路.
我有一个机器码Oooooooo(第一个字母是大写的O,其他的是o,我用这个软件在虚拟机上运行得出的机器码,觉得可能是与硬盘相关,在本机上注册码后面不全是零的)
软件随便输入直接点确定无任何反应,后来追踪发现,其必须输入16位注册码,也就是与我们字符串进行md5加密后的16位输出,暗合.
软件在计算注册码的一个call中,将我们输入的假注册码进行压缩,比如我们输入7878787878787878(字符串),其经过压缩后变成了xxxxxxxx(因为x的ascii是78)
然后调用md5.dll...(实在看不懂到底在md5里搞什么,只知道弄了一个1000多字节能堆栈,然后一通乱斌值)...
我上传一下这个md5.dll文件,那位兄弟帮我看看这个dll 到底在搞什么,只有一个导出函数.
//===============
我只是比较奇怪,他到底是如何通过机器码,计算出注册码的呢?md5不是不可逆的吗? 此软件下载地址:
http://eastern.3322.net/download/maxjxcsetup.exe
希望那位喜欢 关于md5注册码算法的朋友,一起交流指点.
目前已经爆破,输入任何去何16位注册码都可以显示注册成功.也去掉了99次试用的限制.
但其程序的关于单据输入数量和不能月结的限制仍无法去除.
其非常有创意的使用一个函数,通过压入两个不同的参数进行程序走向的控制.
硬改那个函数中的jmp是不行的..只要强行修改其在验证注册时的压入的参数,使其相同..
QQ:30002580 不能逆推你就顺着来,用的是MD5,那么你只要找出机器码经过怎么转换后得出什么样的值,再推入MD5进行计算,
你所说的MD5.dll应该是MD5算法函数,可能没有别的作用, 这个程序的注册验证,包括了重启后的注册表中的注册码验证.
使用次数验证...
其非常有创意的使用了一个综合的函数,
示例函数:
//这个函数在注册模块进行调用的时候,会使用堆栈中的字符指针,要求eax 和edx指向的字符串内容相同.
验证(参数EAX,参数EDX){
//最前面就是
cmp eax,edx
je跳往注册成功,并写入注册表
....
下面是其他模块调用,由于push的参数,EAX,和EDX并不相同,前面的JE跳转就不会跳往注册成功,而进行他实际需要的操作。。。
所以如果硬改最上面的je为jne是不行的。。。会使程序其他模块调用的时候出现问题。
只能通过修改其验证模块的时候,强行的使EAX和EDX在调用这个函数之前的值就相同,这样就完成了注册。
}
但其还是200张单据数限制和月结功能限制,所以如果不找出真正的注册码,是很难完美破解的。
[ 本帖最后由 梦晰 于 2007-12-15 12:02 编辑 ] 验证(参数EAX,参数EDX){
//最前面就是
cmp eax,edx
je跳往注册成功,并写入注册表
这里就是关键跳吗?我跟到这里了,之前有操作注册表,GetVolueInformatinn,CreateFile一个文件等,你比我强多了.... 楼上的朋友....
这个软件的核心算法我也跟到了.只是对于他调用函数的方式,实在有点搞不清楚.
主要对于他MD5变换后,从那里搞得变换后的代码搞不清楚....
如果有想研究算法的,我可以提供断点......
至于楼上的朋友,你说关键跳??我觉得远远并非如此的简单.
因为这里只是一种验证,我们强压入相同的eax和edx的确可以成功注册,
但是后面还有一种,也是同样的CALL这个函数,还是需要用相同的办法,将 eax 和edx的值,压为相同,
否则,会显示试用期做废,因为我们输入的注册码,毕竟不正确.
而且这个软件有200张单据的张数限制和月结的限制...所以只有想想办法算出其真正的注册码,才能算是
完美cr....否则,我看非常的麻烦了..
而且有朋友说好象不是md5到象是DES...哈.有喜欢共同研究的朋友可以尝试跟一下.
QQ:30002580
[ 本帖最后由 梦晰 于 2007-12-15 15:18 编辑 ] 没能追出来,汗,
只追到一部份,假码变换的前一部份,
里面有一个加密函数一个解密函数,其实是骗人的,调用的是同一个地方!
不像是MD5加密!
[ 本帖最后由 网络断魂 于 2007-12-15 21:34 编辑 ] 楼上哥们,我也卡在那里啊...我其实这几天就在想.如果他真的用md5散列了以后,他其他没有办法逆像..
但是我的md5.dll只有一个导出函数.可能这也就是你说的,调用的是同一个地方的意思吧.
如果他只是做假的,能不能在其要调用的参数的那个堆栈的地方下内存断点呢? 进来 学习下。。
页:
[1]