Third 第一篇破文----国产某六合彩软的注册码跟踪
国产某六合彩软
【软件简介】:六合软件
【软件限制】:注册后才能更新数据,数据利用注册码进行加密,我的软件id为TM -
W00370 - P77236。
【作者声明】:初学Crack,只是感兴趣,没有其它目的。失误之处敬请诸位大侠赐教!
【破解工具】:TRW2000
先进行一次数据更新,注册码输入7878787878-5656565656,在更新时出现I/O ERROR的窗口。从这里入手,TRW调入,BPX
Showwindow成功中断,进行多次尝试,发现在004c4b47时开始注册码运算。以下用正确注册码1200203673-1200240168
0167:004C4B47 MOV
EAX,[EBP+FFFFFD70] :d eax时可见1200203673,设
x=1200203673
0167:004C4B4D CALL 0040902C
:进入该call
--------------------------------------------
0167:0040902D PUSH ESI
0167:0040902E ADD ESP,BYTE -0C
0167:00409031 MOV EBX,EAX
0167:00409033 MOV EDX,ESP
0167:00409035 MOV EAX,EBX
0167:00409037 CALL 0040337C
:进入该call
---------------------------------------
0167:0040337C PUSH EBX
0167:0040337D PUSH ESI
0167:0040337E PUSH EDI
0167:0040337F MOV ESI,EAX
0167:00403381 PUSH EAX
0167:00403382 TEST EAX,EAX
0167:00403384 JZ
004033F2
0167:00403386 XOR EAX,EAX
0167:00403388 XOR EBX,EBX
0167:0040338A MOV EDI,0CCCCCCC
:注意该值
0167:0040338F MOV BL,[ESI]
0167:00403391 INC ESI
0167:00403392 CMP BL,20
0167:00403395 JZ
0040338F
0167:00403397 MOV CH,00
0167:00403399 CMP BL,2D
0167:0040339C JZ
00403400
0167:0040339E CMP BL,2B
0167:004033A1 JZ
00403402
0167:004033A3 CMP BL,24
0167:004033A6 JZ
00403407
0167:004033A8 CMP BL,78
0167:004033AB JZ
00403407
0167:004033AD CMP BL,58
0167:004033B0 JZ
00403407
0167:004033B2 CMP BL,30
0167:004033B5 JNZ 004033CA
0167:004033B7 MOV BL,[ESI]
0167:004033B9 INC ESI
0167:004033BA CMP BL,78
0167:004033BD JZ
00403407
0167:004033BF CMP BL,58
0167:004033C2 JZ
00403407
0167:004033C4 TEST BL,BL
0167:004033C6 JZ
004033E8
0167:004033C8 JMP SHORT
004033CE
0167:004033CA TEST BL,BL
0167:004033CC JZ
004033FB
0167:004033CE SUB BL,30
\
0167:004033D1 CMP BL,09
|
0167:004033D4 JA
004033FB |
0167:004033D6 CMP EAX,EDI
|将第一段十进制的注册码转
0167:004033D8 JA
004033FB |换为十六进制,并比较前九位不
0167:004033DA LEA EAX,[EAX+EAX*4]
|得大于0x0ccccccc=214748364
0167:004033DD ADD EAX,EAX
|大于就over
0167:004033DF ADD EAX,EBX
|
0167:004033E1 MOV BL,[ESI]
|
0167:004033E3 INC ESI
|
0167:004033E4 TEST BL,BL
|
0167:004033E6 JNZ 004033CE
/
0167:004033E8 DEC CH
0167:004033EA JZ
004033F5
0167:004033EC TEST EAX,EAX
0167:004033EE JNL 0040343E
..................................
..................................
----------------------------------------------
0167:0040903C MOV ESI,EAX
0167:0040903E CMP DWORD [ESP],BYTE
+00
0167:00409042 JZ 0040905D
:前面的比较在这里生效,想继
0167:00409044 MOV [ESP+04],EBX
续就得跳否则over
0167:00409048 MOV BYTE [ESP+08],0B
0167:0040904D LEA EDX,[ESP+04]
0167:00409051 MOV EAX,[004C828C]
0167:00409056 XOR ECX,ECX
0167:00409058 CALL 00408AB4
0167:0040905D MOV EAX,ESI
0167:0040905F ADD ESP,BYTE +0C
0167:00409062 POP ESI
0167:00409063 POP EBX
---------------------------------------------------
0167:004C4B52 MOV [EBP+FFFFFD9C],EAX
:转换为十六进制后进行浮点运算
0167:004C4B58 FILD DWORD [EBP+FFFFFD9C]
0167:004C4B5E FDIV DWORD [004C52FC]
0167:004C4B64 CALL 00402BA4
:以上以及该call的运算看不懂,
0167:004C4B69 MOV EDX,[004C8540]
不过发现eax的十 六进制值被3除
0167:004C4B6F MOV [EDX],EAX
取整,运算后y=(X)16 MOD 3,哈
0167:004C4B71 MOV EAX,000186A0
哈! 笨人自有妙计_^_
0167:004C4B76 CALL 004031E4
:进入该call
--------------------------------------------------
push ebx
xor ebx,ebx
imul edx,[ebx+0047008],08088405 :将y与0x08088405相乘后低八位送入edx
inc edx
:加一
mov [ebx+004c7008],edx
:保存结果以被下面循环调用
mul eax,edx
:eax=000186a0
mov eax,edx
:取高八位
pop ebx
ret
-------------------------------------------------
0167:004C4B7B LEA EDX,[EBP-10]
0167:004C4B7E CALL 00408FC8
:追踪该call不明
0167:004C4B83 MOV EAX,000186A0
0167:004C4B88 CALL 004031E4
:第二次循环
0167:004C4B8D LEA EDX,[EBP-10]
0167:004C4B90 CALL 00408FC8
0167:004C4B95 MOV EAX,000186A0
0167:004C4B9A CALL 004031E4
:第三次循环,巧了,注册码开始时是
0167:004C4B9F LEA EDX,[EBP-10]
mod 3,记住eax=172
0167:004C4BA2 CALL 00408FC8
:经过该call 十六172转换为370十进制
0167:004C4BA7 LEA EDX,[EBP+FFFFFD6C]
0167:004C4BAD MOV EAX,[EBP-04]
0167:004C4BB0 MOV EAX,[EAX+0988]
0167:004C4BB6 CALL 0043E84C
0167:004C4BBB MOV EAX,[EBP+FFFFFD6C] :d eax时可见1200203673
0167:004C4BC1 CALL 0040902C
0167:004C4BC6 MOV [EBP+FFFFFD9C],EAX
0167:004C4BCC FILD DWORD [EBP+FFFFFD9C]
0167:004C4BD2 FDIV DWORD [004C5300]
0167:004C4BD8 CALL 00402BA4
:以上以及该call的运算看不懂,0167:004C4BDD MOV
EDX,[004C8540] 不过发现eax的十六进制值被6除
0167:004C4BE3 MOV [EDX],EAX
取整,运算后y2=(X2)16 MOD 6。
0167:004C4BE5 MOV EAX,000186A0
:第一次循环
0167:004C4BEA CALL 004031E4
0167:004C4BEF LEA EDX,[EBP-0C]
0167:004C4BF2 CALL 00408FC8
0167:004C4BF7 MOV EAX,000186A0
:第二次循环
0167:004C4BFC CALL 004031E4
0167:004C4C01 LEA EDX,[EBP-0C]
0167:004C4C04 CALL 00408FC8
0167:004C4C09 MOV EAX,000186A0
:第三次循环
0167:004C4C0E CALL 004031E4
0167:004C4C13 LEA EDX,[EBP-0C]
0167:004C4C16 CALL 00408FC8
0167:004C4C1B MOV EAX,000186A0
:第四次循环
0167:004C4C20 CALL 004031E4
0167:004C4C25 LEA EDX,[EBP-0C]
0167:004C4C28 CALL 00408FC8
0167:004C4C2D MOV EAX,000186A0
:第五次循环
0167:004C4C32 CALL 004031E4
0167:004C4C37 LEA EDX,[EBP-0C]
0167:004C4C3A CALL 00408FC8
0167:004C4C3F MOV EAX,000186A0
0167:004C4C44 CALL 004031E4
:第六次循环 过后eax=12db4 巧了,注
0167:004C4C49 LEA EDX,[EBP-0C]
册码开始时是mod 6
0167:004C4C4C CALL 00408FC8
:经过该call 十六12db4转换为77236十0167:004C4C51 PUSH
BYTE +05 进制。
0167:004C4C53 LEA EAX,[EBP+FFFFFD68]
0167:004C4C59 PUSH EAX
0167:004C4C5A MOV CL,30
0167:004C4C5C MOV EDX,[EBP-0C]
0167:004C4C5F MOV EAX,[EBP-04]
0167:004C4C62 CALL 004A2F78
0167:004C4C67 MOV EDX,[EBP+FFFFFD68]
0167:004C4C6D LEA EAX,[EBP-10]
0167:004C4C70 CALL 00404AE0
0167:004C4C75 XOR EBX,EBX
0167:004C4C77 JMP SHORT 004C4C8A
0167:004C4C79 CALL 00402B30
0167:004C4C7E MOV EAX,540BE400
0167:004C4C83 CALL 004031E4
0167:004C4C88 MOV EBX,EAX
0167:004C4C8A LEA EDX,[EBP+FFFFFD64]
0167:004C4C90 MOV EAX,EBX
0167:004C4C92 CALL 00408FC8
0167:004C4C97 MOV EAX,[EBP+FFFFFD64]
0167:004C4C9D CALL 00404AD8
0167:004C4CA2 CMP EAX,BYTE +0A
0167:004C4CA5 JNZ 004C4C79
0167:004C4CA7 LEA EDX,[EBP+FFFFFD60]
0167:004C4CAD MOV EAX,EBX
0167:004C4CAF CALL 00408FC8
0167:004C4CB4 MOV EDX,[EBP+FFFFFD60]
0167:004C4CBA MOV EAX,004C530C
0167:004C4CBF CALL 00404E14
0167:004C4CC4 TEST EAX,EAX
:以上可能是取随机十位数,不明。
0167:004C4CC6 JG 004C4C79
0167:004C4CC8 MOV EAX,[EBP-10]
:eax 得37077236,有电了_^_(注1)。
0167:004C4CCB CALL 00404AD8
0167:004C4CD0 CMP EAX,BYTE +0A
0167:004C4CD3 JNL 004C4CF3
:不得大于十位。
0167:004C4CD5 PUSH BYTE +0A
0167:004C4CD7 LEA EAX,[EBP-0C]
0167:004C4CDA PUSH EAX
0167:004C4CDB MOV CL,30
0167:004C4CDD MOV EDX,[EBP-10]
0167:004C4CE0 MOV EAX,[EBP-04]
0167:004C4CE3 CALL 004A2F78
:经过该call,低于十位补零0037077236。
0167:004C4CE8 LEA EAX,[EBP-10]
与TM - W00370 - P77236有相同之处。
0167:004C4CEB MOV EDX,[EBP-0C]
0167:004C4CEE CALL 004048B8
0167:004C4CF3 LEA EAX,[EBP+FFFFFD5C] :以下开始对数据加密,有兴趣的可自己
......................................... 研究。
........................................
......................................... 加密的过程中产生REG+随机十位数的字串。
注1:第一次肯定不知该处必须是是37077236,必须对数据进行解密跟踪,此处省略。跟踪得知解密是用0037077236与数据本身的REG+随机十位数进行操作,REG判断是否已注册,如不是则用共享数据解密方法操作。
注册码变换流程:
第一段:1:转为十六进制=y,前九位不得大于0x0ccccccc
2:y=y mod 3
3: y=取低八位(y *0x8088405)
y=y+1
y=取低八位(y *0x8088405)
y=y+1
y=取低八位(y *0x8088405)
y=y+1
y=取高八位(y * 0x186a0)
4:(y=转为十进制)=370.
第二段:1:转为十六进制=y,前九位不得大于0x0ccccccc
2:y=y mod 6
3: y=取低八位(y *0x8088405)
y=y+1
y=取低八位(y *0x8088405)
y=y+1
y=取低八位(y *0x8088405)
y=y+1
y=取低八位(y *0x8088405)
y=y+1
y=取低八位(y *0x8088405)
y=y+1
y=取低八位(y *0x8088405)
y=y+1
y=取高八位(y * 0x186a0)
4:(y=转为十进制)=77236.
在注册码的逆变过程中,由于一会取低八位,一会取高八位,我想不到好的方法可以一次找出,只好用穷举法,好在变化不大,最多也就10万次。不过觉得有点蠢,请高手指点。
