【圣才题库】离线注册码分析
本帖最后由 gmh5225 于 2014-12-18 00:00 编辑目标:http://tk.100xuexi.com/ 由于马上就要考4级了,找到了这个玩意儿。。。爆破很简单
010B7120/[ DISCUZ_CODE_4 ]nbsp; 55 push ebp
010B7121|.8BEC mov ebp, esp
010B7123|.81EC BC040000sub esp, 0x4BC
010B7129|.A1 B0D22801 mov eax, dword ptr
010B712E|.33C5 xor eax, ebp
010B7130|.8945 FC mov dword ptr , eax
010B7133|.8B45 08 mov eax, dword ptr
010B7136|.53 push ebx ;参数 5机器码长度+1
010B7137|.56 push esi ;参数4 激活码后9位
010B7138|.57 push edi ;参数3 机器码字符串
010B7139|.68 2B010000 push 0x12B ;参数2 299空间?
010B713E|.8BF1 mov esi, ecx
010B7140|.8D8D D1FEFFFFlea ecx, dword ptr
010B7146|.6A 00 push 0x0 ;参数1 0
010B7148|.51 push ecx ;参数0 未知
010B7149|.8BFA mov edi, edx
010B714B|.8985 48FBFFFFmov dword ptr , eax
010B7151|.C685 D0FEFFFF >mov byte ptr , 0x0
010B7158|.E8 23F01100 call 圣才题库.011D6180
010B715D|.68 83030000 push 0x383
010B7162|.8D95 4DFBFFFFlea edx, dword ptr
010B7168|.6A 00 push 0x0
010B716A|.52 push edx
010B716B|.C685 4CFBFFFF >mov byte ptr , 0x0
010B7172|.E8 09F01100 call 圣才题库.011D6180
010B7177|.8BC6 mov eax, esi
010B7179|.83C4 18 add esp, 0x18
010B717C|.8D50 01 lea edx, dword ptr
010B717F|.90 nop
010B7180|>8A08 /mov cl, byte ptr ;遍历取机器码
010B7182|.40 |inc eax
010B7183|.84C9 |test cl, cl
010B7185|.^ 75 F9 \jnz short 圣才题库.010B7180
010B7187|.2BC2 sub eax, edx ;得到机器码长度存入eax
010B7189|.8BD0 mov edx, eax
010B718B|.8BC7 mov eax, edi ;激活码后9位给了eax
010B718D|.8D58 01 lea ebx, dword ptr
010B7190|>8A08 /mov cl, byte ptr
010B7192|.40 |inc eax
010B7193|.84C9 |test cl, cl
010B7195|.^ 75 F9 \jnz short 圣才题库.010B7190 ;遍历取激活码
010B7197|.2BC3 sub eax, ebx ;得到激活码后9位的长度存入eax
010B7199|.8D4410 01 lea eax, dword ptr ;把2个字符串的长度相加再加1存入eax13
010B719D|.50 push eax ;参数 2字符串的长度+1
010B719E|.8985 44FBFFFFmov dword ptr , eax
010B71A4|.E8 4BC41100 call 圣才题库.011D35F4
010B71A9|.8BD8 mov ebx, eax
010B71AB|.8BD3 mov edx, ebx
010B71AD|.83C4 04 add esp, 0x4
010B71B0|.8BC6 mov eax, esi ;机器码给eax
010B71B2|.2BD6 sub edx, esi
010B71B4|>8A08 /mov cl, byte ptr
010B71B6|.880C02 |mov byte ptr , cl
010B71B9|.40 |inc eax
010B71BA|.84C9 |test cl, cl
010B71BC|.^ 75 F6 \jnz short 圣才题库.010B71B4 ;这里把机器码存入一个字符串中
010B71BE|.8BC7 mov eax, edi ;激活码后9位
010B71C0|.8BD7 mov edx, edi
010B71C2|>8A08 /mov cl, byte ptr
010B71C4|.40 |inc eax
010B71C5|.84C9 |test cl, cl
010B71C7|.^ 75 F9 \jnz short 圣才题库.010B71C2
010B71C9|.2BC2 sub eax, edx ;遍历 激活码长度+1 10
010B71CB|.8D7B FF lea edi, dword ptr ;把激活码后9位给edi
010B71CE|.8BFF mov edi, edi
010B71D0|>8A4F 01 /mov cl, byte ptr
010B71D3|.47 |inc edi
010B71D4|.84C9 |test cl, cl
010B71D6|.^ 75 F8 \jnz short 圣才题库.010B71D0
010B71D8|.8BC8 mov ecx, eax
010B71DA|.C1E9 02 shr ecx, 0x2 ;右移动 10 -》2
010B71DD|.8BF2 mov esi, edx ;把激活码后9位数据给esi
010B71DF|.F3:A5 rep movs dword ptr es:, dword p>
010B71E1|.8BC8 mov ecx, eax ;长度10给ecx
010B71E3|.83E1 03 and ecx, 0x3 ;10+3给ecx
010B71E6|.8D85 4CFBFFFFlea eax, dword ptr
010B71EC|.50 push eax ;此时的ebx是机器码+激活码后9位的前8位
010B71ED|.F3:A4 rep movs byte ptr es:, byte ptr>
010B71EF|.8B8D 44FBFFFFmov ecx, dword ptr ;此时的ebx是机器码+激活码后9位 ecx是新的字符串的长度17位
010B71F5|.53 push ebx ;压入合并的字符串与真码进行比较
010B71F6|.E8 7557FCFF call 圣才题库.0107C970
这时我们进入0107C970
0107C970/[ DISCUZ_CODE_5 ]nbsp; 55 push ebp
0107C971|.8BEC mov ebp, esp
0107C973|.81EC D8010000sub esp, 0x1D8
0107C979|.A1 B0D22801 mov eax, dword ptr
0107C97E|.33C5 xor eax, ebp
0107C980|.8945 FC mov dword ptr , eax
0107C983|.8B45 0C mov eax, dword ptr
0107C986|.53 push ebx ;压 机器码+激活码的后9位
0107C987|.56 push esi
0107C988|.8BF1 mov esi, ecx ;新的字符串的长度给13
0107C98A|.8D1CF5 0000000>lea ebx, dword ptr ;13*88个字节??
0107C991|.8D4B 02 lea ecx, dword ptr ;98+2
0107C994|.57 push edi ;7400
0107C995|.51 push ecx ;9A
0107C996|.89B5 34FEFFFFmov dword ptr , esi ;新的字符串长度
0107C99C|.8985 2CFEFFFFmov dword ptr , eax ;暂时是0
0107C9A2|.899D 28FEFFFFmov dword ptr , ebx ;98
0107C9A8|.E8 476C1500 call 圣才题库.011D35F4 ;未知
0107C9AD|.8985 30FEFFFFmov dword ptr , eax
0107C9B3|.83C4 04 add esp, 0x4
0107C9B6|.8D45 BC lea eax, dword ptr
0107C9B9|.E8 62FFFFFF call 圣才题库.0107C920
0107C9BE|.33FF xor edi, edi
0107C9C0|.33C0 xor eax, eax
0107C9C2|>0FBE4C05 BC /movsx ecx, byte ptr
0107C9C7|.0FBE5405 BF |movsx edx, byte ptr
0107C9CC|.03D1 |add edx, ecx
0107C9CE|.0FBE4C05 BE |movsx ecx, byte ptr
0107C9D3|.03D1 |add edx, ecx
0107C9D5|.0FBE4C05 BD |movsx ecx, byte ptr
0107C9DA|.03D1 |add edx, ecx
0107C9DC|.89BC05 3CFFFFF>|mov dword ptr , edi
0107C9E3|.019405 3CFFFFF>|add dword ptr , edx
0107C9EA|.83C0 04 |add eax, 0x4
0107C9ED|.83F8 40 |cmp eax, 0x40
0107C9F0|.^ 7C D0 \jl short 圣才题库.0107C9C2
0107C9F2|.8A85 3CFFFFFFmov al, byte ptr
0107C9F8|.8B95 40FFFFFFmov edx, dword ptr
0107C9FE|.8B8D 48FFFFFFmov ecx, dword ptr
0107CA04|.0FBEC0 movsx eax, al
0107CA07|.8985 40FFFFFFmov dword ptr , eax
0107CA0D|.8A85 44FFFFFFmov al, byte ptr
0107CA13|.8995 3CFFFFFFmov dword ptr , edx
0107CA19|.0FBED0 movsx edx, al
0107CA1C|.8A85 4CFFFFFFmov al, byte ptr
0107CA22|.8995 48FFFFFFmov dword ptr , edx
0107CA28|.0FBED0 movsx edx, al
0107CA2B|.8A85 54FFFFFFmov al, byte ptr
0107CA31|.898D 44FFFFFFmov dword ptr , ecx
0107CA37|.8B8D 50FFFFFFmov ecx, dword ptr
0107CA3D|.8995 50FFFFFFmov dword ptr , edx
0107CA43|.0FBED0 movsx edx, al
0107CA46|.8A85 5CFFFFFFmov al, byte ptr
0107CA4C|.898D 4CFFFFFFmov dword ptr , ecx
0107CA52|.8B8D 58FFFFFFmov ecx, dword ptr
0107CA58|.8995 58FFFFFFmov dword ptr , edx
0107CA5E|.0FBED0 movsx edx, al
0107CA61|.8A85 64FFFFFFmov al, byte ptr
0107CA67|.898D 54FFFFFFmov dword ptr , ecx
0107CA6D|.8B8D 60FFFFFFmov ecx, dword ptr
0107CA73|.8995 60FFFFFFmov dword ptr , edx
0107CA79|.0FBED0 movsx edx, al
0107CA7C|.8A85 6CFFFFFFmov al, byte ptr
0107CA82|.898D 5CFFFFFFmov dword ptr , ecx
0107CA88|.8B8D 68FFFFFFmov ecx, dword ptr
0107CA8E|.8995 68FFFFFFmov dword ptr , edx
0107CA94|.0FBED0 movsx edx, al
0107CA97|.8A85 74FFFFFFmov al, byte ptr
0107CA9D|.898D 64FFFFFFmov dword ptr , ecx
0107CAA3|.8B8D 70FFFFFFmov ecx, dword ptr
0107CAA9|.8995 70FFFFFFmov dword ptr , edx
0107CAAF|.0FBED0 movsx edx, al
0107CAB2|.898D 6CFFFFFFmov dword ptr , ecx
0107CAB8|.8B8D 78FFFFFFmov ecx, dword ptr
0107CABE|.898D 74FFFFFFmov dword ptr , ecx
0107CAC4|.8995 78FFFFFFmov dword ptr , edx
0107CACA|.3BF7 cmp esi, edi
0107CACC|.7E 4B jle short 圣才题库.0107CB19
0107CACE|.8BB5 30FEFFFFmov esi, dword ptr
0107CAD4|.83C6 07 add esi, 0x7
0107CAD7|.89B5 38FEFFFFmov dword ptr , esi
0107CADD|.8D49 00 lea ecx, dword ptr
0107CAE0|>8B45 08 /mov eax, dword ptr ;eax=新的字符串
0107CAE3|.8A1407 |mov dl, byte ptr ;取每个字符的ascii第一个是6,acsii是54
0107CAE6|.33C0 |xor eax, eax
0107CAE8|>8AC8 |/mov cl, al
0107CAEA|.8ADA ||mov bl, dl
0107CAEC|.D2FB ||sar bl, cl ;ebx=36>>eax
0107CAEE|.40 ||inc eax
0107CAEF|.4E ||dec esi
0107CAF0|.80E3 01 ||and bl, 0x1 ;取与运算,偶数就是0,奇数是1,第一次是54是偶数是0
0107CAF3|.885E 01 ||mov byte ptr , bl ;每次取得的二进制数都存入数组中
0107CAF6|.83F8 08 ||cmp eax, 0x8
0107CAF9|.^ 7C ED |\jl short 圣才题库.0107CAE8
0107CAFB|.8BB5 38FEFFFF|mov esi, dword ptr
0107CB01|.47 |inc edi
0107CB02|.83C6 08 |add esi, 0x8
0107CB05|.89B5 38FEFFFF|mov dword ptr , esi
0107CB0B|.3BBD 34FEFFFF|cmp edi, dword ptr ;这里是循环字符串长度的次数,也就是13次
0107CB11|.^ 7C CD \jl short 圣才题库.0107CAE0
0107CB13|.8B9D 28FEFFFFmov ebx, dword ptr ;98给ebx
0107CB19|>33F6 xor esi, esi
0107CB1B|.89B5 38FEFFFFmov dword ptr , esi
0107CB21|.3BDE cmp ebx, esi ;98《=0?
0107CB23|.0F8E 30010000jle 圣才题库.0107CC59 ;不跳,循环
0107CB29|.8DA424 0000000>lea esp, dword ptr
0107CB30|>8B8D 30FEFFFF/mov ecx, dword ptr
0107CB36|.8A140E |mov dl, byte ptr ;第一次是6的最后一个 0
0107CB39|.8D46 01 |lea eax, dword ptr ;eax给1
0107CB3C|.83E6 3F |and esi, 0x3F ;1&0x3f
0107CB3F|.8BC8 |mov ecx, eax ;1给ecx
0107CB41|.81E1 3F000080|and ecx, 0x8000003F ;1&
0107CB47|.8985 34FEFFFF|mov dword ptr , eax ;1给这个变量
0107CB4D|.885435 BC |mov byte ptr , dl ;给新的数组
0107CB51|.79 05 |jns short 圣才题库.0107CB58
0107CB53|.49 |dec ecx
0107CB54|.83C9 C0 |or ecx, 0xFFFFFFC0
0107CB57|.41 |inc ecx
0107CB58|>0F85 F1000000|jnz 圣才题库.0107CC4F ;先把 前64个数据 存入 下标为0-63的数组2CA434 a 中
0107CB5E|.33DB |xor ebx, ebx ;这是第65个清空98
0107CB60|>33C0 |/xor eax, eax ;清空0x4064
0107CB62|.8D4D 1B ||lea ecx, dword ptr
0107CB65|>83F8 10 ||/cmp eax, 0x10 ;0 >=16 no
0107CB68|.7D 05 |||jge short 圣才题库.0107CB6F
0107CB6A|.8A51 C0 |||mov dl, byte ptr
0107CB6D|.EB 18 |||jmp short 圣才题库.0107CB87
0107CB6F|>83F8 20 |||cmp eax, 0x20
0107CB72|.7D 06 |||jge short 圣才题库.0107CB7A
0107CB74|.8A5405 CC |||mov dl, byte ptr
0107CB78|.EB 0D |||jmp short 圣才题库.0107CB87
0107CB7A|>83F8 30 |||cmp eax, 0x30
0107CB7D|.7D 04 |||jge short 圣才题库.0107CB83
0107CB7F|.8A11 |||mov dl, byte ptr
0107CB81|.EB 04 |||jmp short 圣才题库.0107CB87
0107CB83|>8A5405 8C |||mov dl, byte ptr
0107CB87|>889405 7CFFFFF>|||mov byte ptr , dl
0107CB8E|.40 |||inc eax
0107CB8F|.49 |||dec ecx
0107CB90|.83F8 40 |||cmp eax, 0x40
0107CB93|.^ 7C D0 ||\jl short 圣才题库.0107CB65
0107CB95|.8B949D 3CFFFFF>||mov edx, dword ptr [ebp+ebx*4-0xC4>
0107CB9C|.B9 10000000 ||mov ecx, 0x10 ;16
0107CBA1|.8DB5 7CFFFFFF||lea esi, dword ptr ;新数组地址给esi
0107CBA7|.8D7D BC ||lea edi, dword ptr ;老数组
0107CBAA|.F3:A5 ||rep movs dword ptr es:, dword>;新数组拷贝给老数组,拷贝16次,每次4个字节,=完全拷贝
0107CBAC|.B9 40000000 ||mov ecx, 0x40 ;64个数据
0107CBB1|.2BCA ||sub ecx, edx ;64-1
0107CBB3|.33C0 ||xor eax, eax
0107CBB5|.85C9 ||test ecx, ecx ;循环减少,0停止
0107CBB7|.7E 17 ||jle short 圣才题库.0107CBD0
0107CBB9|.8D5415 BC ||lea edx, dword ptr ;a->edx
0107CBBD|.8D49 00 ||lea ecx, dword ptr ;63
0107CBC0|>0FBE3402 ||/movsx esi, byte ptr ;esi=a i从1开始
0107CBC4|.89B485 3CFEFFF>|||mov dword ptr , >;c=esi i从0
0107CBCB|.40 |||inc eax
0107CBCC|.3BC1 |||cmp eax, ecx
0107CBCE|.^ 7C F0 ||\jl short 圣才题库.0107CBC0
0107CBD0|>8BC1 ||mov eax, ecx
0107CBD2|.83F8 40 ||cmp eax, 0x40 ;3F》=40?? no
0107CBD5|.7D 1A ||jge short 圣才题库.0107CBF1
0107CBD7|.8D55 BC ||lea edx, dword ptr ;老数组给edx
0107CBDA|.2BD1 ||sub edx, ecx
0107CBDC|.8D6424 00 ||lea esp, dword ptr
0107CBE0|>0FBE0C02 ||/movsx ecx, byte ptr ;ecx=a
0107CBE4|.898C85 3CFEFFF>|||mov dword ptr , >;第64次 c是a存入c 只循环了一次
0107CBEB|.40 |||inc eax ;第64次 c是a存入c 只循环了一次
0107CBEC|.83F8 40 |||cmp eax, 0x40
0107CBEF|.^ 7C EF ||\jl short 圣才题库.0107CBE0
0107CBF1|>33C0 ||xor eax, eax
0107CBF3|>8A9485 3CFEFFF>||/mov dl, byte ptr
0107CBFA|.885405 BC |||mov byte ptr , dl ;a=c前者i从0开始后者i从1开始
0107CBFE|.40 |||inc eax
0107CBFF|.83F8 40 |||cmp eax, 0x40
0107CC02|.^ 7C EF ||\jl short 圣才题库.0107CBF3
0107CC04|.43 ||inc ebx
0107CC05|.83FB 10 ||cmp ebx, 0x10
0107CC08|.^ 0F8C 52FFFFFF|\jl 圣才题库.0107CB60
0107CC0E|.33C0 |xor eax, eax
0107CC10|>8A5405 BC |/mov dl, byte ptr ; 取数组中元素到dl
0107CC14|.8B8D 38FEFFFF||mov ecx, dword ptr ;循环次数
0107CC1A|.8BB5 2CFEFFFF||mov esi, dword ptr
0107CC20|.80C2 30 ||add dl, 0x30
0107CC23|.88140E ||mov byte ptr , dl
0107CC26|.41 ||inc ecx
0107CC27|.40 ||inc eax
0107CC28|.898D 38FEFFFF||mov dword ptr , ecx
0107CC2E|.83F8 40 ||cmp eax, 0x40
0107CC31|.^ 7C DD |\jl short 圣才题库.0107CC10 ;这个循环把数字转字符
0107CC33|.6A 40 |push 0x40
0107CC35|.8D45 BC |lea eax, dword ptr
0107CC38|.6A 00 |push 0x0
0107CC3A|.50 |push eax
0107CC3B|.E8 40951500 |call 圣才题库.011D6180
0107CC40|.8B85 34FEFFFF|mov eax, dword ptr ;0x40
0107CC46|.8B9D 28FEFFFF|mov ebx, dword ptr ;0x98
0107CC4C|.83C4 0C |add esp, 0xC
0107CC4F|>8BF0 |mov esi, eax
0107CC51|.3BF3 |cmp esi, ebx ;0x40是否小于0x98 循环
0107CC53|.^ 0F8C D7FEFFFF\jl 圣才题库.0107CB30 ;下面不用算了,已经出来结果了
0107CC59|>8B8D 30FEFFFFmov ecx, dword ptr
来到这个call0107C920
0107C920/[ DISCUZ_CODE_6 ]nbsp; 55 push ebp
0107C921|.8BEC mov ebp, esp
0107C923|.51 push ecx
0107C924|.53 push ebx
0107C925|.56 push esi
0107C926|.57 push edi
0107C927|.33FF xor edi, edi
0107C929|.83C0 07 add eax, 0x7
0107C92C|.8945 FC mov dword ptr , eax
0107C92F|.90 nop
0107C930|>8A97 9C042401/mov dl, byte ptr ;$8Y0fs&=
0107C936|.8B75 FC |mov esi, dword ptr ;取上述字符串的二进制
0107C939|.33C0 |xor eax, eax
0107C93B|.EB 03 |jmp short 圣才题库.0107C940
0107C93D| 8D49 00 |lea ecx, dword ptr
0107C940|>8AC8 |/mov cl, al ;进行如下运算
0107C942|.8ADA ||mov bl, dl
0107C944|.D2FB ||sar bl, cl
0107C946|.40 ||inc eax
0107C947|.4E ||dec esi
0107C948|.80E3 01 ||and bl, 0x1
0107C94B|.885E 01 ||mov byte ptr , bl
0107C94E|.83F8 08 ||cmp eax, 0x8
0107C951|.^ 7C ED |\jl short 圣才题库.0107C940
0107C953|.8345 FC 08 |add dword ptr , 0x8
0107C957|.47 |inc edi
0107C958|.83FF 08 |cmp edi, 0x8
0107C95B|.^ 7C D3 \jl short 圣才题库.0107C930
0107C95D|.5F pop edi
0107C95E|.5E pop esi
0107C95F|.33C0 xor eax, eax
0107C961|.5B pop ebx
0107C962|.8BE5 mov esp, ebp
0107C964|.5D pop ebp
0107C965\.C3 retn
上面算出的是个定值,我们记录后保存1 1 1 2 2 2 0 2 2 2 2 3 2 1 3 2
最后算出的结果+机器码就是注册码了,写的比较累。。。下面是C++写法**** Hidden Message *****
注意:这个题库刚下载下来会在C盘解压出来,大家要去C盘的根目录打开,然后记得是离线注册码,不是在线的!!
膜拜大神能搞Android又能搞exe,各种羡慕
膜拜 大神 非常详细 {:5_188:}
有搞安卓又搞算法,膜拜了{:5_189:}
学习了,膜拜大神!
学习一下C的代码,算法看都觉得复杂,写起来更麻烦,感谢分享。
谢谢分享真不错。
我被禁言了吗?这几天比较忙
对楼猪只能说,你太伟大了!!
有没有职称考试的题库啊