欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

Third 第一篇破文----国产某六合彩软的注册码跟踪

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万次。不过觉得有点蠢,请高手指点。


注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功