TA的每日心情 | 开心 2018-3-29 07:24 |
---|
签到天数: 4 天 [LV.2]偶尔看看I
|
发表于 2008-10-25 16:44:32
|
显示全部楼层
晕倒,原来内有乾坤,看不大懂啊?/:010
换了台2K3的机子,注册码就不行了,OD载入看了下:
..........
0401420 . 8>sub esp,6C
00401423 . 5>push esi
00401424 . B>mov al,5C
00401426 . 6>push 0A ; /pFileSystemNameSize = 0000000A
00401428 . 8>mov byte ptr ss:[esp+A],al ; |
0040142C . 8>mov byte ptr ss:[esp+B],al ; |
00401430 . 6>push 0 ; |pFileSystemNameBuffer = NULL
00401432 . 6>push 0 ; |pFileSystemFlags = NULL
00401434 . 8>lea eax,dword ptr ss:[esp+14] ; |
00401438 . 8>mov esi,ecx ; |
0040143A . 6>push 0 ; |pMaxFilenameLength = NULL
0040143C . 5>push eax ; |pVolumeSerialNumber
0040143D . 6>push 0C ; |MaxVolumeNameSize = C (12.)
0040143F . 8>lea ecx,dword ptr ss:[esp+1C] ; |
00401443 . 6>push 0 ; |VolumeNameBuffer = NULL
00401445 . 5>push ecx ; |RootPathName
00401446 . C>mov byte ptr ss:[esp+24],63 ; |
0040144B . C>mov byte ptr ss:[esp+25],3A ; |
00401450 . F>call dword ptr ds:[<&KERNEL32.GetVolumeI>; \GetVolumeInformationA
00401456 . 8>mov eax,dword ptr ss:[esp+8]
0040145A . 6>push 0
0040145C . 8>mov ecx,esi
0040145E . 8>lea edx,dword ptr ds:[eax-2]
00401461 . 3>xor edx,eax
00401463 . 8>add edx,10B
00401469 . 8>mov dword ptr ds:[4300B4],edx ; 这里写入ds:[4300B4]的值
...............
GetVolumeInformationA函数应该是查文件所在的磁盘卷标号吧,那么注册码应该和CM所在的磁盘卷标号有关了!
继续往下看:
...............
00401540 . 8>sub esp,50
00401543 . 5>push ebx
00401544 . 5>push ebp
00401545 . 5>push esi
00401546 . 8>mov esi,ecx
00401548 . 3>xor ebp,ebp
0040154A . 3>xor ecx,ecx
0040154C . 5>push edi
0040154D . 8>mov dword ptr ss:[esp+18],esi
00401551 . 3>xor eax,eax
00401553 > 0>movsx edx,byte ptr ds:[eax+42C0C0] ; 这段将程序内置的码值相加,结果为4FC
0040155A . 0>add ecx,edx
0040155C . 4>inc eax
0040155D . 8>cmp eax,22
00401560 .^ 7>jl short cc5.00401553
00401562 . A>mov eax,dword ptr ds:[4300B4] ; 注意这里,ds:[4300B4]的值,我的这台机子为111
00401567 . 8>lea edx,dword ptr ss:[esp+20]
0040156B . 6>push 0C ; /Arg3 = 0000000C
0040156D . 5>push edx ; |Arg2
0040156E . 8>lea ecx,dword ptr ds:[eax+ecx*2] ; |看这里ecx=111+4FC*2=B09
00401571 . 6>push 3E8 ; |Arg1 = 000003E8
00401576 . 8>mov dword ptr ss:[esp+28],ecx ; |值再赋到ss:[esp+28],也即后面的最后一个比较ss:[esp+1C]的地址
0040157A . 8>mov ecx,esi ; |
0040157C . E>call cc5.0041AA10 ; \cc5.0041AA10
00401581 . 8>lea edi,dword ptr ss:[esp+20]
........
最后一次比较处:
..........
004016D3 . 8>mov eax,dword ptr ss:[esp+1C] ss:[ebp+1c]中的值就是上面的ss:[esp+28]中的值
004016D7 . 6>push 0
004016D9 . 3>cmp ebp,eax ebp中为用户名和假码连接串变换后值的累加和
004016DB . 6>push 0
004016DD . 7>jnz short cc5.004016F5
..........
看前面的,如果磁盘卷标号不为空,ss:[esp+1c]的值在大家的机器上值应该是不一样的吧!
莫非还有猫腻/:010 ,等着楼主解密/:QQ2
[ 本帖最后由 x80x88 于 2008-10-25 16:59 编辑 ] |
|