能力值:
( LV13,RANK:270 )
|
-
-
7 楼
测试数据
用户名:admin
注册人为:admin
本机的校验码为:0000423A3456
注册码拿ABCDEFG测试.
0054E977 |. E8 F0F8F4FF CALL my_proje.0049E26C
0054E97C |. 84C0 TEST AL,AL
0054E97E |. 75 2C JNZ SHORT my_proje.0054E9AC
0054E980 |. 8D45 FC LEA EAX,DWORD PTR SS:[EBP-4]
0054E983 |. BA 4CEA5400 MOV EDX,my_proje.0054EA4C ; 输入注册码不正确,请检查!
0054E988 |. E8 1B5BEBFF CALL my_proje.004044A8
0054E98D |. 6A 40 PUSH 40
0054E98F |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
0054E992 |. E8 495FEBFF CALL my_proje.004048E0
0054E997 |. 8BD0 MOV EDX,EAX
0054E999 |. B9 68EA5400 MOV ECX,my_proje.0054EA68 ; 输入错误
0054E99E |. A1 C06B6200 MOV EAX,DWORD PTR DS:[626BC0]
0054E9A3 |. 8B00 MOV EAX,DWORD PTR DS:[EAX]
0054E9A5 |. E8 E6CAF4FF CALL my_proje.0049B490
0054E9AA |. EB 68 JMP SHORT my_proje.0054EA14
0054E9AC |> 68 7CEA5400 PUSH my_proje.0054EA7C ; 注册成功!\n注册信息为:\n组织名:
0054E9B1 |. 8BB3 3C030000 MOV ESI,DWORD PTR DS:[EBX+33C]
0054E9B7 |. FF76 48 PUSH DWORD PTR DS:[ESI+48]
0054E9BA |. 68 A8EA5400 PUSH my_proje.0054EAA8 ; \n
0054E9BF |. 68 B4EA5400 PUSH my_proje.0054EAB4 ; 注册人:
0054E9C4 |. FF76 54 PUSH DWORD PTR DS:[ESI+54]
0054E9C7 |. 68 A8EA5400 PUSH my_proje.0054EAA8 ; \n
0054E9CC |. 68 C8EA5400 PUSH my_proje.0054EAC8 ; 注册码:
0054E9D1 |. FF76 5C PUSH DWORD PTR DS:[ESI+5C]
0054E9D4 |. 68 A8EA5400 PUSH my_proje.0054EAA8 ; \n
0054E9D9 |. 68 DCEA5400 PUSH my_proje.0054EADC ; 感谢您对我们的支持!请重新启动报关信息管理系统。
0054E9DE |. 8D45 FC LEA EAX,DWORD PTR SS:[EBP-4]
0054E9E1 |. BA 0A000000 MOV EDX,0A
0054E9E6 |. E8 B55DEBFF CALL my_proje.004047A0
0054E9EB |. 6A 40 PUSH 40
0054E9ED |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
0054E9F0 |. E8 EB5EEBFF CALL my_proje.004048E0
0054E9F5 |. 8BD0 MOV EDX,EAX
0054E9F7 |. B9 10EB5400 MOV ECX,my_proje.0054EB10 ; 注册成功
很容易找到如上代码,可以看到
0054E977 |. E8 F0F8F4FF CALL my_proje.0049E26C
0054E97C |. 84C0 TEST AL,AL
这个为验证函数
0054E977 |. E8 F0F8F4FF CALL my_proje.0049E26C //这个函数是
如下:
0049E26C /$ 55 PUSH EBP
0049E26D |. 8BEC MOV EBP,ESP
0049E26F |. 83C4 F0 ADD ESP,-10
0049E272 |. 53 PUSH EBX
0049E273 |. 33DB XOR EBX,EBX
0049E275 |. 895D F0 MOV DWORD PTR SS:[EBP-10],EBX ; ebp
0049E278 |. 895D F4 MOV DWORD PTR SS:[EBP-C],EBX
0049E27B |. 894D F8 MOV DWORD PTR SS:[EBP-8],ECX ;注册人
0049E27E |. 8955 FC MOV DWORD PTR SS:[EBP-4],EDX ;用户名
0049E281 |. 8BD8 MOV EBX,EAX
0049E283 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
0049E286 |. E8 4566F6FF CALL my_proje.004048D0
//这个函数把注册人,用户名,和验证码的前八位中的01变成02.01 00 00 00 04 00 00 00 变成02 00 00 00 04 00 00 00 //
0049E28B |. 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8]
0049E28E |. E8 3D66F6FF CALL my_proje.004048D0
0049E293 |. 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
0049E296 |. E8 3566F6FF CALL my_proje.004048D0
0049E29B |. 33C0 XOR EAX,EAX
0049E29D |. 55 PUSH EBP
0049E29E |. 68 56E34900 PUSH my_proje.0049E356
0049E2A3 |. 64:FF30 PUSH DWORD PTR FS:[EAX]
0049E2A6 |. 64:8920 MOV DWORD PTR FS:[EAX],ESP
0049E2A9 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
0049E2AC |. E8 2F64F6FF CALL my_proje.004046E0 //把用户名附给eax,执行这个函数.返回值为[eax-4]的值,为04.为用户名的长度.
0049E2B1 |. 3B43 4C CMP EAX,DWORD PTR DS:[EBX+4C] //与[ebx+4c]比较,
0049E2B4 |. 7F 19 JG SHORT my_proje.0049E2CF //大于则跳转,[ebx+4c]为64.
0049E2B6 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] //又把用户名附给eax,再执行这个函数,
0049E2B9 |. E8 2264F6FF CALL my_proje.004046E0 //返回用户名的长度.
0049E2BE |. 3B43 50 CMP EAX,DWORD PTR DS:[EBX+50] //与[ebx+50]比较,其值为3,说明用户名长度为3<=len<=64...
0049E2C1 |. 7C 0C JL SHORT my_proje.0049E2CF
0049E2C3 |. 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
0049E2C6 |. E8 1564F6FF CALL my_proje.004046E0 //取回注册码的长度.
0049E2CB |. 85C0 TEST EAX,EAX
0049E2CD |. 75 04 JNZ SHORT my_proje.0049E2D3 //注册码长度如果不为0,则跳转.
0049E2CF |> 33DB XOR EBX,EBX
0049E2D1 |. EB 60 JMP SHORT my_proje.0049E333
->跳到这里
0049E2D3 |> 8D55 F4 LEA EDX,DWORD PTR SS:[EBP-C] //edx放着[ebp-c]的地址.
0049E2D6 |. 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8] //注册码
0049E2D9 |. E8 96A9F6FF CALL my_proje.00408C74 //执行这个函数.这个函数将注册码的,小写全部转化成大写.
0049E2DE |. 8B55 F4 MOV EDX,DWORD PTR SS:[EBP-C]
0049E2E1 |. 8D45 08 LEA EAX,DWORD PTR SS:[EBP+8]
0049E2E4 |. E8 BF61F6FF CALL my_proje.004044A8 //把注册码放入[ebp-c]中.
0049E2E9 |. 8D4D F0 LEA ECX,DWORD PTR SS:[EBP-10]
0049E2EC |. 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4]
0049E2EF |. 8BC3 MOV EAX,EBX
0049E2F1 |. E8 46FBFFFF CALL my_proje.0049DE3C // 这个函数应该是得到注册码的函数.放入[ebp-10]中.
0049E2F6 |. 8B45 F0 MOV EAX,DWORD PTR SS:[EBP-10] ;00007D189CEF ,这个里面放着的是注册码,把这个里面的值取出即可.具体算法未分析.
0049E2F9 |. 8B55 08 MOV EDX,DWORD PTR SS:[EBP+8] ; 00007D189CEF ,这个里面放着的是手动输入的注册码.
0049E2FC |. E8 EBA9F6FF CALL my_proje.00408CEC //?比较两个的长度....额....,不相等返回...非零.
0049E301 |. 85C0 TEST EAX,EAX
0049E303 |. 74 04 JE SHORT my_proje.0049E309
0049E305 |. 33DB XOR EBX,EBX
0049E307 |. EB 2A JMP SHORT my_proje.0049E333
0049E309 |> 8D43 48 LEA EAX,DWORD PTR DS:[EBX+48]
0049E30C |. 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4]
0049E30F |. E8 5061F6FF CALL my_proje.00404464
0049E314 |. 8D43 54 LEA EAX,DWORD PTR DS:[EBX+54]
0049E317 |. 8B55 F8 MOV EDX,DWORD PTR SS:[EBP-8]
0049E31A |. E8 4561F6FF CALL my_proje.00404464
0049E31F |. 8D43 5C LEA EAX,DWORD PTR DS:[EBX+5C]
0049E322 |. 8B55 08 MOV EDX,DWORD PTR SS:[EBP+8]
0049E325 |. E8 3A61F6FF CALL my_proje.00404464
0049E32A |. 8BC3 MOV EAX,EBX
0049E32C |. E8 5B020000 CALL my_proje.0049E58C
0049E331 |. B3 01 MOV BL,1
0049E333 |> 33C0 XOR EAX,EAX
0049E335 |. 5A POP EDX
0049E336 |. 59 POP ECX
0049E337 |. 59 POP ECX
0049E338 |. 64:8910 MOV DWORD PTR FS:[EAX],EDX
0049E33B |. 68 5DE34900 PUSH my_proje.0049E35D
0049E340 |> 8D45 F0 LEA EAX,DWORD PTR SS:[EBP-10]
0049E343 |. BA 04000000 MOV EDX,4
0049E348 |. E8 E760F6FF CALL my_proje.00404434
0049E34D |. 8D45 08 LEA EAX,DWORD PTR SS:[EBP+8]
0049E350 |. E8 BB60F6FF CALL my_proje.00404410
0049E355 \. C3 RETN
0049E356 .^ E9 D959F6FF JMP my_proje.00403D34
0049E35B .^ EB E3 JMP SHORT my_proje.0049E340
0049E35D . 8BC3 MOV EAX,EBX
0049E35F . 5B POP EBX
0049E360 . 8BE5 MOV ESP,EBP
0049E362 . 5D POP EBP
0049E363 . C2 0400 RETN 4
下面是生成注册码的CALL my_proje.0049DE3C
其关键部分:
......
---------------------------------这段是生成注册码的过程...
0049DF34 |> 8B45 F0 /MOV EAX,DWORD PTR SS:[EBP-10]
0049DF37 |. 8B55 F4 |MOV EDX,DWORD PTR SS:[EBP-C]
0049DF3A |. 0346 68 |ADD EAX,DWORD PTR DS:[ESI+68] ;注意这里的数据....
0049DF3D |. 1356 6C |ADC EDX,DWORD PTR DS:[ESI+6C]
0049DF40 |. 52 |PUSH EDX
0049DF41 |. 50 |PUSH EAX
0049DF42 |. 8B45 E0 |MOV EAX,DWORD PTR SS:[EBP-20]
0049DF45 |. 0FB64418 FF |MOVZX EAX,BYTE PTR DS:[EAX+EBX-1]
0049DF4A |. 50 |PUSH EAX
0049DF4B |. B8 59040000 |MOV EAX,459
0049DF50 |. 5A |POP EDX
0049DF51 |. 8BCA |MOV ECX,EDX
0049DF53 |. 33D2 |XOR EDX,EDX
0049DF55 |. F7F1 |DIV ECX
0049DF57 |. 8BC2 |MOV EAX,EDX
0049DF59 |. 33D2 |XOR EDX,EDX
0049DF5B |. 290424 |SUB DWORD PTR SS:[ESP],EAX
0049DF5E |. 195424 04 |SBB DWORD PTR SS:[ESP+4],EDX
0049DF62 |. 58 |POP EAX
0049DF63 |. 5A |POP EDX
0049DF64 |. 8945 F0 |MOV DWORD PTR SS:[EBP-10],EAX
0049DF67 |. 8955 F4 |MOV DWORD PTR SS:[EBP-C],EDX
0049DF6A |. 4B |DEC EBX
0049DF6B |> 8B45 E0 MOV EAX,DWORD PTR SS:[EBP-20]
0049DF6E |. E8 6D67F6FF |CALL my_proje.004046E0
0049DF73 |. 3BD8 |CMP EBX,EAX
0049DF75 |. 7F 04 |JG SHORT my_proje.0049DF7B
0049DF77 |. 85DB |TEST EBX,EBX
0049DF79 |.^ 7F B9 \JG SHORT my_proje.0049DF34
---------------------------
......
上述得到注册码
下面是拿php写的注册机,
<?php
$a = 0x75bcd15;
$b = 0;
$code = "000042admin3A3456"; //这里把用户名放到校验码的中间.
$len = strlen($code);
for ($i = 0;$i < $len;$i ++)
{
$b = $b + $a;
$b = $b - 0x459%ord($code[$len-$i-1]);
}
$c = dechex($b);
echo "0000".$c;
?>
不过不知道为什么,注册成功之后,仍提示为未注册版本....
不知道为啥....反正弹出注册成功的提示框来了....
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
呵呵,我后面没有管注册了
受网上部分贴子的启发,直接爆破的
在显示未注册的跳转这里用NOP填充了,一打开就显示为注册版了
然后再在试用时间过期需注册的提示那个跳转也用NOP填充,那样就算试用时间到了,虽然确认按钮是灰色的不能点击,但输完账号密码直接按回车键还是可以进入
你可以把你的电脑时间往前推一天试下,往前推一天就会提示试用到期不能进了~
不知道是不是这个软件还没有开放注册的原因,因为还是测试版,要不然注册码对了应该就是提示已注册了啊
你对代码熟悉的话可以研究下未注册部分的代码看下是不是这样的
|
能力值:
( LV13,RANK:270 )
|
-
-
11 楼
额,我以为你只要那个注册的算法呢...就把算法的部分看了下..
能用就成了.
呵呵..
|