首页
社区
课程
招聘
使用OllyDbg从零开始Cracking 第十六,十七,十八章-序列号生成算法分析-Part1,Part2,Part3
发表于: 2014-6-3 00:03 43436

使用OllyDbg从零开始Cracking 第十六,十七,十八章-序列号生成算法分析-Part1,Part2,Part3

2014-6-3 00:03
43436
收藏
免费 3
支持
分享
最新回复 (117)
雪    币: 2664
活跃值: (3401)
能力值: ( LV13,RANK:1760 )
在线值:
发帖
回帖
粉丝
51
有西班牙文和蹩脚的英文版的... China 老大哥上次已经上传过了  
原作者是西班牙人
http://bbs.pediy.com/showthread.php?t=184557
2014-6-8 11:13
0
雪    币: 299
活跃值: (55)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
52
楼主大好人
2014-6-10 12:32
0
雪    币: 178
活跃值: (392)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
53
写了个ruby脚本获取crackme 的序列号
#!/usr/bin/env ruby

print "input your name:"
name = gets.chomp

s=0;name.each_byte {|c| if c > 'A'.ord && c < 'Z'.ord then s+=c; else s+=c-0x20; end}

p "name:#{name}"
p "serial number: #{s^0x1234^0x5678}"
2014-6-12 10:41
0
雪    币: 2664
活跃值: (3401)
能力值: ( LV13,RANK:1760 )
在线值:
发帖
回帖
粉丝
54
...,挺好
2014-6-12 10:46
0
雪    币: 178
活跃值: (392)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
55
嘿嘿,我同样写了生成splish注册码程序,向楼主的奉献精神致敬!
http://bbs.pediy.com/showthread.php?t=187565&page=3#40
2014-6-12 15:02
0
雪    币: 178
活跃值: (392)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
56
第十六章的练习mexcrk1序列号应该是唯一的吧,总觉得不止一个,看了半天,发现好象只有一个.

厄,我是没看十七章之前发的..
2014-6-12 23:28
0
雪    币: 196
活跃值: (46)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
57
楼主辛苦了,谢谢,收藏
2014-6-14 19:06
0
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
58
楼主楼主我爱你,就像老鼠爱大米
2014-6-15 09:36
0
雪    币: 2664
活跃值: (3401)
能力值: ( LV13,RANK:1760 )
在线值:
发帖
回帖
粉丝
59
...
2014-6-15 09:46
0
雪    币: 44
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
60
谢谢楼主的翻译。
2014-6-15 10:50
0
雪    币: 175
活跃值: (2421)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
61
谢谢楼主...
2014-6-15 16:31
0
雪    币: 175
活跃值: (2421)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
62
翻译的很快,楼主辛苦了。
2014-6-15 16:32
0
雪    币: 175
活跃值: (2421)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
63
支持楼主,继续加油。
2014-6-15 16:33
0
雪    币: 178
活跃值: (392)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
64
第十七章生成Canasta注册码脚本,分析这个对于我这样的小菜还是有点绕的:)

#!/usr/bin/env ruby
#注意:
#并没有针对所有注册分支进行处理,so just try another License name if it doesn't work

#from instruction at 0x4b3dd8
magic=[
0x000000D9, 0x00000063, 0x00000058, 0x00000022, 0x0000003E, 0x00000093, 0x000000F0, 0x00000008, 0x00000034, 0x00000062, 
	0x0000001B, 0x000000BF, 0x000000D7, 0x000000B9, 0x0000006F, 0x0000004A, 0x0000005A, 0x000000B2, 0x00000084, 0x00000024
]
s=i=0
print "input License name:"
name=gets.chomp!
while(s%10**6<10**5)
i=0
name.each_byte{|c|
	s+=c*(i+1)*magic[i];i+=1	
}
end
printf "License name: #{name} \nLicense key: #{s}\n"


运行起来

./Canasta.rb 
input License name:jiych
License name: jiych 
License key: 121440
2014-6-15 17:30
0
雪    币: 2664
活跃值: (3401)
能力值: ( LV13,RANK:1760 )
在线值:
发帖
回帖
粉丝
65
Good job...
2014-6-15 17:54
0
雪    币: 178
活跃值: (392)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
66
thx,楼主辛苦了。
2014-6-15 19:25
0
雪    币: 178
活跃值: (392)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
67
F7按到手抽筋,delphi程序封装太厉害,算法本身很简单,改天把追踪过程总结下

#include <stdio.h>
#include <string.h>

/***********
by jiych
1.字符和所在位置异或,并求和a;
2.取最后一个字符异或的结果,循环左移0xC位,得结果b;
3.将a和b相加后的数转变为10进制数。

注意:
并没有针对所有注册分支进行处理,so just try another License name if it doesn't work
***********/


int main(void)
{
	char name[65];

	printf("input name:");
	name[0] = 0;
	scanf("%64s", name);
	int len = strlen(name);
	int i;
	int a, b, ba;
	a=b=ba=0;
	for(i=0;i<len;i++){
		ba = name[i]^(i+1);
		a += ba;
	}
	b = ba>>(32-0xC) | ba<<0xC;
	a += b;
	printf("Nombre:%s\n", name);
	printf("Codigo:%d\n", a);

	return 0;
}


执行,
./a.out 
input name:jiych
Nombre:jiych
Codigo:447012

2014-6-20 01:08
0
雪    币: 2664
活跃值: (3401)
能力值: ( LV13,RANK:1760 )
在线值:
发帖
回帖
粉丝
68
很用心,赞
2014-6-20 09:39
0
雪    币: 178
活跃值: (392)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
69
紧随安大步伐
2014-6-20 10:39
0
雪    币: 2664
活跃值: (3401)
能力值: ( LV13,RANK:1760 )
在线值:
发帖
回帖
粉丝
70
,你怎么嘛还没转正? 还差3kx?
2014-6-20 10:41
0
雪    币: 178
活跃值: (392)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
71
是呀,好惭愧,10年注册的
还好不是太在意,而且也快了
2014-6-20 11:35
0
雪    币: 2664
活跃值: (3401)
能力值: ( LV13,RANK:1760 )
在线值:
发帖
回帖
粉丝
72
恩,快了...
2014-6-20 12:01
0
雪    币: 178
活跃值: (392)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
73
用ruby脚本写的,代码如下:
#!/usr/bin/env ruby
#
=begin
第十八章CRACKME2.exe破解 by jiych
1.将输入的字符串进行如下处理:
  1.1 大写字符或小于'A'的字符保持不变;
  1.2 大于字符'Z'的,减去0x20
2.将1中处理后的每个字节和'Messing_in_bytes'字符串异或;
3.将2中异或后的字节依次和0x402150处的字节进行比较,若全部相等则检查通过

0x402150:
0x1F, 0x2C, 0x37, 0x36, 0x3B, 0x3D, 0x28, 0x19, 0x3D, 0x26, 
0x1A, 0x31, 0x2D, 0x3B, 0x37, 0x3E

注意, CRACKME2.exe程序中有bug:
只要输入一个字符,则都可以通过检查;
输入超过一个字符时,则只要整个输入字符串(n个字符)的前n-1个字符可以通过,整个就可以通过检查。
=end

magic = [0x1F, 0x2C, 0x37, 0x36, 0x3B, 0x3D, 0x28, 0x19, 0x3D, 0x26, 
			0x1A, 0x31, 0x2D, 0x3B, 0x37, 0x3E]
bytes = "Messing_in_bytes"
print "input number of password you wanto generata[1-16]:"
len = (gets.chomp!).to_i
key = ''
magic.each_with_index{|m,ind|
	rd = Integer(rand*100)%2
	tmp = (m^bytes[ind].ord).chr
		if tmp >= 'A' && tmp <= 'Z'
			key += ((m^bytes[ind].ord)+rd*0x20).chr
		else
			key += tmp
		end
		if key.length >= len
			break
		end
}

printf "password: #{key}\n"


运行:
./cm_crackme2.rb 
input number of password you wanto generata[1-16]:13
password: RiDerSOftHeST

2014-6-21 18:13
0
雪    币: 2664
活跃值: (3401)
能力值: ( LV13,RANK:1760 )
在线值:
发帖
回帖
粉丝
74
有点nice呀,又是ruby,又是python,又是C
2014-6-21 18:15
0
雪    币: 266
活跃值: (44)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
75
紧跟大神脚步,,(虽然还有很远)
2014-9-1 12:39
0
游客
登录 | 注册 方可回帖
返回
//