路过人间 发表于 2008-2-26 15:40:57

不是明码的比较 只能爆破么?谢谢

进球彩***4.04
http://www.zc310.com/down/JQCDYJ/JQCDYJ2000.exe
跟了一上午 在堆栈里发现如下东东 应该不是明码比较 请教一下如何找注册码 不想要爆破 谢谢了

0012EFFC|014D5060   ASCII "2C36280289C71" 好像是假码算出来的
0012F000|00000000
0012F004|014D507C   ASCII "8160>;=3805"   这个是机器码算出来的
0012F008|014D50EC   ASCII "0D稼?,LF,"祍430B99C05B5EB54383725D3255CA56" 这个不知道是什么
0012F00C|014D5060   ASCII "2C36280289C71"
0012F010|00000000
0012F014|014D5008   ASCII "7777777777777777"
0012F018|014D5048   ASCII "89306392880"

zc_hit 发表于 2008-2-26 17:39:31

路过~~~~~~
不是明码不代表就找不到注册码呀!

magic659117852 发表于 2008-2-26 20:28:14

/:012 不是明码就要追出它的算法流程

路过人间 发表于 2008-2-26 21:24:28

谢谢楼上的 我追到整个算法流程了 可是不会写注册机啊 帮帮忙谢谢了

magic659117852 发表于 2008-2-26 21:33:12

呵呵怎么追算法流程

偶菜鸟不懂,,,教下偶等菜鸟吧...

baby520 发表于 2008-2-26 21:36:56

爆破了下


006417F1    90            nop
006417F2    90            nop

这里NOP下就OK了

洞庭风 发表于 2008-2-26 23:11:04

原帖由 baby520 于 2008-2-26 21:36 发表 https://www.chinapyg.com/images/common/back.gif
爆破了下


006417F1    90            nop
006417F2    90            nop

这里NOP下就OK了
高人啊,学习了

深海中的游鱼 发表于 2008-2-27 05:37:50

看到6楼的结果真的叫我们这些新手决的高呀

路过人间 发表于 2008-2-27 10:08:05

转高手的分析 类似算法
005FA53C   .8B55 E0       mov edx,dword ptr ss:
005FA53F   .8D45 F0       lea eax,dword ptr ss:
005FA542   .E8 89A7E0FF   call SSQDYJ.00404CD0            ;...
005FA547   .8D4D E8       lea ecx,dword ptr ss:
005FA54A   .33D2          xor edx,edx
005FA54C   .8B45 FC       mov eax,dword ptr ss:
005FA54F   .E8 2CE4FFFF   call SSQDYJ.005F8980            ;机器码通过异或运算运算得到文本 szKey = "6962>:514;4",跟进1
005FA554   .8D4D EC       lea ecx,dword ptr ss:
005FA557   .8B55 E8       mov edx,dword ptr ss:
005FA55A   .8B45 F0       mov eax,dword ptr ss:
005FA55D   .E8 16E2FFFF   call SSQDYJ.005F8778            ;需要跟进的关键调用,得到字符串 str1,跟进2
005FA562   .8D45 D8       lea eax,dword ptr ss:
005FA565   .50            push eax
005FA566   .B9 06000000   mov ecx,6
005FA56B   .BA 01000000   mov edx,1
005FA570   .8B45 FC       mov eax,dword ptr ss:
005FA573   .E8 D0ABE0FF   call SSQDYJ.00405148            ;szMac 的 1 到 6 位 "613262"
005FA578   .8B45 D8       mov eax,dword ptr ss:
005FA57B   .E8 D8F9E0FF   call SSQDYJ.00409F58            ;十进制文本转换为数值1
005FA580   .8BD8          mov ebx,eax
005FA582   .8D45 D4       lea eax,dword ptr ss:
005FA585   .50            push eax
005FA586   .B9 06000000   mov ecx,6
005FA58B   .BA 07000000   mov edx,7
005FA590   .8B45 FC       mov eax,dword ptr ss:
005FA593   .E8 B0ABE0FF   call SSQDYJ.00405148            ;机器码的 7 到 12 位 "10431"
005FA598   .8B45 D4       mov eax,dword ptr ss:
005FA59B   .E8 B8F9E0FF   call SSQDYJ.00409F58            ;十进制文本转换为数值2
005FA5A0   .03D8          add ebx,eax                     ;数值1 + 数值2 即 613262 + 10431 = 623693
005FA5A2   .8BC3          mov eax,ebx
005FA5A4   .8D55 DC       lea edx,dword ptr ss:
005FA5A7   .E8 CCF8E0FF   call SSQDYJ.00409E78            ;相加结果转换回十进制文本 str2 = "623693"
005FA5AC   .8B55 DC       mov edx,dword ptr ss:
005FA5AF   .8D45 FC       lea eax,dword ptr ss:
005FA5B2   .E8 19A7E0FF   call SSQDYJ.00404CD0            ;...
005FA5B7   .8D45 FC       lea eax,dword ptr ss:
005FA5BA   .50            push eax
005FA5BB   .B9 06000000   mov ecx,6
005FA5C0   .BA 01000000   mov edx,1
005FA5C5   .8B45 FC       mov eax,dword ptr ss:
005FA5C8   .E8 7BABE0FF   call SSQDYJ.00405148            ;取 str2 的 1 到 6 位 "623693"
005FA5CD   .8B45 FC       mov eax,dword ptr ss:
005FA5D0   .E8 1BA9E0FF   call SSQDYJ.00404EF0            ;strlen( str2 ) 这里应该等于 6
005FA5D5   .8BD8          mov ebx,eax
005FA5D7   .43            inc ebx
005FA5D8   .83FB 06       cmp ebx,6
005FA5DB   .7F 16         jg short SSQDYJ.005FA5F3
005FA5DD   >8D45 FC       lea eax,dword ptr ss:
005FA5E0   .8B4D FC       mov ecx,dword ptr ss:
005FA5E3   .BA E0A65F00   mov edx,SSQDYJ.005FA6E0
005FA5E8   .E8 4FA9E0FF   call SSQDYJ.00404F3C            ;str2 没有 6 位则在前面添加 0
005FA5ED   .43            inc ebx
005FA5EE   .83FB 07       cmp ebx,7
005FA5F1   .^ 75 EA         jnz short SSQDYJ.005FA5DD
005FA5F3      8B55 EC       mov edx,dword ptr ss:   ;str1( 由于插入了随机位置,所以每次跟踪会得到不同的结果,详见后面 )
005FA5F6   .8B45 FC       mov eax,dword ptr ss:      ;str2 = "623693"
005FA5F9   .E8 2EACE0FF   call SSQDYJ.0040522C            ;返回 str1 中 str2 的位置(失败返回 0)
005FA5FE   .8BD8          mov ebx,eax
005FA600   .85DB          test ebx,ebx
005FA602   .7E 6B         jle short SSQDYJ.005FA66F         ;关键跳
005FA604   .8B45 FC       mov eax,dword ptr ss:

    ---------------------------------------------------------------------------------------------------------------------------
    上面代码有两行需要跟进:
    005FA54F   .E8 2CE4FFFF   call SSQDYJ.005F8980            ;机器码通过异或运算运算得到文本 szKey = "6962>:514;4",跟进1
    005FA55D   .E8 16E2FFFF   call SSQDYJ.005F8778            ;需要跟进的关键调用,得到字符串 str1,跟进2
    等下说说这两个跟进,看看是如何得到 str1 的。
    继续向下看,看到了 F1( 机器码 ) 的处理:
    大致过程这样:我的机器码 "61326210431"
    机器码的前 6 位 + 接下来的 6 位 即 613236 + 10431 = 623693,然后再取前 6 位得到 str2 = '623693'
    ---------------------------------------------------------------------------------------------------------------------------



下面看下两个跟进,看看如何得到 str1:

    ---------------------------------------------------------------------------------------------------------------------------
    005FA54F   .E8 2CE4FFFF   call SSQDYJ.005F8980            ;机器码通过异或运算运算得到文本 szKey = "6962>:514;4",跟进1
    ---------------------------------------------------------------------------------------------------------------------------

005F89CC|.8D45 F8       lea eax,dword ptr ss:
005F89CF|.BA 9C8A5F00   mov edx,SSQDYJ.005F8A9C         ;取一个字符串 szStr = "yxb_200@"
005F89D4|.E8 F7C2E0FF   call SSQDYJ.00404CD0            ;...
005F89D9|>837D FC 00    cmp dword ptr ss:,0
005F89DD|.75 0A         jnz short SSQDYJ.005F89E9
005F89DF|.8B45 F4       mov eax,dword ptr ss:
005F89E2|.E8 51C2E0FF   call SSQDYJ.00404C38            ;...
005F89E7|.EB 6C         jmp short SSQDYJ.005F8A55
005F89E9|>8D45 F0       lea eax,dword ptr ss:
005F89EC|.E8 47C2E0FF   call SSQDYJ.00404C38            ;...
005F89F1|.8B45 F8       mov eax,dword ptr ss:
005F89F4|.E8 F7C4E0FF   call SSQDYJ.00404EF0            ;strlen( "yxb_200@" ) = 8
005F89F9|.8945 EC       mov dword ptr ss:,eax
005F89FC|.8B45 FC       mov eax,dword ptr ss:
005F89FF|.E8 ECC4E0FF   call SSQDYJ.00404EF0            ;strlen( szMac ) = 11
005F8A04|.8BF0          mov esi,eax
005F8A06|.85F6          test esi,esi
005F8A08|.7E 40         jle short SSQDYJ.005F8A4A
005F8A0A|.BB 01000000   mov ebx,1                         ;i = 1 ( 以下循环 i 从 1 开始 )
005F8A0F|>8BC3          /mov eax,ebx
005F8A11|.99            |cdq
005F8A12|.F77D EC       |idiv dword ptr ss:       ;i % 8
005F8A15|.8BFA          |mov edi,edx
005F8A17|.47            |inc edi                        ;i % 8 + 1
005F8A18|.8B45 F8       |mov eax,dword ptr ss:
005F8A1B|.0FB64438 FF   |movzx eax,byte ptr ds:
005F8A20|.B9 0A000000   |mov ecx,0A
005F8A25|.33D2          |xor edx,edx
005F8A27|.F7F1          |div ecx                        ;szStr % 10
005F8A29|.8B45 FC       |mov eax,dword ptr ss:
005F8A2C|.0FB64418 FF   |movzx eax,byte ptr ds:
005F8A31|.33D0          |xor edx,eax                      ;szMac ^ ( szStr % 10 )
005F8A33|.8D45 E4       |lea eax,dword ptr ss:
005F8A36|.E8 DDC3E0FF   |call SSQDYJ.00404E18             ;转换成字符类型
005F8A3B|.8B55 E4       |mov edx,dword ptr ss:
005F8A3E|.8D45 F0       |lea eax,dword ptr ss:
005F8A41|.E8 B2C4E0FF   |call SSQDYJ.00404EF8             ;每轮计算结果连接
005F8A46|.43            |inc ebx
005F8A47|.4E            |dec esi
005F8A48|.^ 75 C5         \jnz short SSQDYJ.005F8A0F      ;处理完机器码所有的字符退出循环
005F8A4A|>8B45 F4       mov eax,dword ptr ss:
005F8A4D|.8B55 F0       mov edx,dword ptr ss:
005F8A50|.E8 37C2E0FF   call SSQDYJ.00404C8C
005F8A55|>33C0          xor eax,eax
005F8A57|.5A            pop edx
005F8A58|.59            pop ecx

    -----------------------------------------------------------------------------------------------------------
    005FA55D   .E8 16E2FFFF   call SSQDYJ.005F8778            ;需要跟进的关键调用,得到字符串 str1,跟进2
    -----------------------------------------------------------------------------------------------------------

005F87AD   .55            push ebp
005F87AE   .68 2B895F00   push SSQDYJ.005F892B
005F87B3   .64:FF30       push dword ptr fs:
005F87B6   .64:8920       mov dword ptr fs:,esp
005F87B9   .8B45 F8       mov eax,dword ptr ss:
005F87BC   .E8 2FC7E0FF   call SSQDYJ.00404EF0            ;strlen( szKey ) = 11
005F87C1   .8945 F0       mov dword ptr ss:,eax
005F87C4   .837D F0 00    cmp dword ptr ss:,0
005F87C8   .75 0D         jnz short SSQDYJ.005F87D7
005F87CA   .8D45 F8       lea eax,dword ptr ss:
005F87CD   .BA 44895F00   mov edx,SSQDYJ.005F8944         ;ASCII "yxb_200@"
005F87D2   .E8 F9C4E0FF   call SSQDYJ.00404CD0            ;...
005F87D7   >33F6          xor esi,esi
005F87D9   .33C0          xor eax,eax
005F87DB   .55            push ebp
005F87DC   .68 97885F00   push SSQDYJ.005F8897
005F87E1   .64:FF30       push dword ptr fs:
005F87E4   .64:8920       mov dword ptr fs:,esp
005F87E7   .8B45 F8       mov eax,dword ptr ss:
005F87EA   .E8 25FFFFFF   call SSQDYJ.005F8714            ;szKey = "6962>:514;4"各字符求和 得到 600
005F87EF   .B9 FF000000   mov ecx,0FF
005F87F4   .99            cdq
005F87F5   .F7F9          idiv ecx                        ;600 % 0xFF = 90
005F87F7   .8BFA          mov edi,edx
005F87F9   .8D45 EC       lea eax,dword ptr ss:
005F87FC   .E8 37C4E0FF   call SSQDYJ.00404C38            ;...
005F8801   .C745 E8 01000>mov dword ptr ss:,1       ;下面循环 i 初值是 1 ( 不是 0 )
005F8808   >8D45 DC       lea eax,dword ptr ss:
005F880B   .50            push eax
005F880C   .B9 02000000   mov ecx,2
005F8811   .8B55 E8       mov edx,dword ptr ss:
005F8814   .8B45 FC       mov eax,dword ptr ss:
005F8817   .E8 2CC9E0FF   call SSQDYJ.00405148            ;循环取 "00A6E1236B9AF7" 中的两个字符
005F881C   .8B4D DC       mov ecx,dword ptr ss:
005F881F   .8D45 E0       lea eax,dword ptr ss:
005F8822   .BA 58895F00   mov edx,SSQDYJ.005F8958
005F8827   .E8 10C7E0FF   call SSQDYJ.00404F3C            ;字符串前 + '$'
005F882C   .8B45 E0       mov eax,dword ptr ss:
005F882F   .E8 2417E1FF   call SSQDYJ.00409F58            ;文本转换为数值
005F8834   .8945 E4       mov dword ptr ss:,eax
005F8837   .3B75 F0       cmp esi,dword ptr ss:
005F883A   .7D 03         jge short SSQDYJ.005F883F
005F883C   .46            inc esi                           ;这里让 ESI 从 1 到 11 ( szKey 的长度) 循环
005F883D   .EB 05         jmp short SSQDYJ.005F8844
005F883F   >BE 01000000   mov esi,1
005F8844   >8B45 F8       mov eax,dword ptr ss:
005F8847   .33DB          xor ebx,ebx
005F8849   .8A5C30 FF   mov bl,byte ptr ds:
005F884D   .335D E4       xor ebx,dword ptr ss:   ;结果 ^ szKey[ ESI - 1]
005F8850   .3BFB          cmp edi,ebx
005F8852   .7C 0A         jl short SSQDYJ.005F885E
005F8854   .81C3 FF000000 add ebx,0FF                     ;异或结果 - 上轮结果 ( 不够减就先加上 255 再减 )
005F885A   .2BDF          sub ebx,edi
005F885C   .EB 02         jmp short SSQDYJ.005F8860
005F885E   >2BDF          sub ebx,edi                     ;异或结果 - 上轮结果 ( 够减就直接减 )
005F8860   >8D45 D8       lea eax,dword ptr ss:
005F8863   .8BD3          mov edx,ebx
005F8865   .E8 AEC5E0FF   call SSQDYJ.00404E18
005F886A   .8B55 D8       mov edx,dword ptr ss:
005F886D   .8D45 EC       lea eax,dword ptr ss:
005F8870   .E8 83C6E0FF   call SSQDYJ.00404EF8            ;连接每轮计算结果
005F8875   .8B7D E4       mov edi,dword ptr ss:
005F8878   .8345 E8 02    add dword ptr ss:,2       ;i = i + 2
005F887C   .8B45 FC       mov eax,dword ptr ss:
005F887F   .E8 6CC6E0FF   call SSQDYJ.00404EF0            ;读取字符串的 strlen( )
005F8884   .3B45 E8       cmp eax,dword ptr ss:
005F8887   .^ 0F8F 7BFFFFFF jg SSQDYJ.005F8808                ;是否处理完所有的字符串
005F888D   .33C0          xor eax,eax
005F888F   .5A            pop edx
005F8890   .59            pop ecx
005F8891   .59            pop ecx
005F8892   .64:8910       mov dword ptr fs:,edx
005F8895   .EB 12         jmp short SSQDYJ.005F88A9
005F8897   .^ E9 88B9E0FF   jmp SSQDYJ.00404224
005F889C   .8D45 EC       lea eax,dword ptr ss:
005F889F   .E8 94C3E0FF   call SSQDYJ.00404C38            ;...
005F88A4   .E8 A7BDE0FF   call SSQDYJ.00404650
005F88A9   >8B4D F4       mov ecx,dword ptr ss:
005F88AC   .BA 64895F00   mov edx,SSQDYJ.005F8964         ;ASCII "hazizi"
005F88B1   .B8 74895F00   mov eax,SSQDYJ.005F8974         ;ASCII "zizi#826_zc"
005F88B6   .E8 45FCFFFF   call SSQDYJ.005F8500            ;得到字符串 szStr = "0D430B99C05B5EB54383725D3255CA56"
005F88BB   .8D55 D4       lea edx,dword ptr ss:   ;上面的这个字符串跟机器无关,无须跟进
005F88BE   .8B45 EC       mov eax,dword ptr ss:
005F88C1   .E8 0A11E1FF   call SSQDYJ.004099D0            ;去掉字符串前后的空格
005F88C6   .837D D4 00    cmp dword ptr ss:,0
005F88CA   .75 0D         jnz short SSQDYJ.005F88D9
005F88CC   .8D45 EC       lea eax,dword ptr ss:
005F88CF   .BA 64895F00   mov edx,SSQDYJ.005F8964         ;ASCII "hazizi"
005F88D4   .E8 F7C3E0FF   call SSQDYJ.00404CD0            ;...
005F88D9   >B8 06000000   mov eax,6
005F88DE   .E8 71AAE0FF   call SSQDYJ.00403354            ;生成一个随机数
005F88E3   .8BF0          mov esi,eax
005F88E5   .85F6          test esi,esi
005F88E7   .7D 05         jge short SSQDYJ.005F88EE
005F88E9   .BE 01000000   mov esi,1
005F88EE   >8B55 F4       mov edx,dword ptr ss:
005F88F1   .8BCE          mov ecx,esi
005F88F3   .8B45 EC       mov eax,dword ptr ss:
005F88F6   .E8 D5C8E0FF   call SSQDYJ.004051D0            ;将上面循环结果插入到 szStr 的随机位置
005F88FB   .33C0          xor eax,eax
005F88FD   .5A            pop edx

    ---------------------------------------------------------------------------------------------------------------
    先把前面得到的 "00A6E1236B9AF7" 分成 6 个 byte 得到 byte bHex = {0x00,0xA6,0xE1,0x23,0x6B,0x9A,0xF7}
    然后循环处理:bHex ^ szKey - bHex
    说明:不够减则加上 0xFF 再减,另外 i = 0 时 ,bHex 另外单独算,大概是 sum( szKey ) % 255
    最后我们看到程序解密出一个字符串 "0D430B99C05B5EB54383725D3255CA56",然后将循环结果插入随机位置,为后面校验准备
    实际,我们并不关心 "0D430B99C05B5EB54383725D3255CA56" 这个字符串,只要让 str1 = str2 即可通过注册
页: [1]
查看完整版本: 不是明码的比较 只能爆破么?谢谢