欢迎来到 嗅灵易学

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

到目前为止得到的结果如下 (3千字)

到目前为止得到的结果如下 (3千字)

序列号放在c:\windows\system\serial.sys中,
注册码放在c:\windows\system\secret.sys中。
这两个文件都是加密过的,算法很简单,用unfoxall(我只有demo版,而且这个demo版的40个文件限制无法去除,因强行修改40个文件限制会死机)对serial.exe进行反编译可以得到其加密和解密的算法。如下:
加密算法:
PROCEDURE secret
PARAMETER CSTRING
ESTRING = ''
NLONG = LEN(CSTRING)
FOR I = 1 TO NLONG
    ESTRING = ESTRING + CHR(ASC(SUBSTR(CSTRING,I,1)) + I + NLONG)
ENDFOR
RETURN ESTRING
ENDPROC
解密算法:
PROCEDURE desecret
PARAMETER CSTRING
ESTRING = ''
NLONG = LEN(CSTRING)
FOR I = 1 TO NLONG
    ESTRING = ESTRING + CHR(ASC(SUBSTR(CSTRING,I,1)) - I - NLONG)
ENDFOR
RETURN ESTRING
ENDPROC
用SoftICE跟踪它读取注册码后判断的过程,知道上述解密算法对应的汇编程序段如下:
0167:0C0746D7  MOV      ESI,ECX
0167:0C0746D9  MOV      EAX,[ESI]      //取一个字节
0167:0C0746DB  SUB      EAX,[EDX]      //相减
0167:0C0746DD  JO        0C12995B
0167:0C0746E3  MOV      [ESI],EAX
0167:0C0746E5  SUB      EAX,EAX
解开一个字符后,回到下面的地方,把解开的字符保存起来:
0167:0C018C1F  CALL      0C00CDEB    //解开一个字符
0167:0C018C24  MOV      ESI,EAX        //EAX中存放该字符
0167:0C018C26  MOV      ECX,ESI
0167:0C018C28  CALL      0C018C75
0167:0C018C2D  CMP      ESI,000000FF
0167:0C018C33  MOV      EDI,EAX
0167:0C018C35  JA        0C0D95E5
0167:0C018C3B  MOV      EDX,EDI
0167:0C018C3D  LEA      ECX,[ESP+0E]
之后它要把你输入的8位的注册码的前4位和后四位调换一下,比如我输入的为“12345678”,调换后变成“56781234”,
然后转换成一个数,对此数进行简单的浮点运算。
0167:0C09F332  LEA      EAX,[EDI*4+EDI]
0167:0C09F335  LEA      EDI,[EAX*2+ECX-30]  //每次转换一个字符
0167:0C09F339  MOV      AL,[ESP+11]
0167:0C09F33D  INC      ESI
0167:0C09F33E  TEST      AL,AL
0167:0C09F340  JNZ      0C09F383
0167:0C09F342  XOR      ECX,ECX
0167:0C09F344  MOV      CL,[ESI]
0167:0C09F346  LEA      EAX,[ECX-30]
0167:0C09F349  CMP      EAX,35
0167:0C09F34C  JA        0C09F367
0167:0C09F34E  XOR      EDX,EDX
0167:0C09F350  MOV      DL,[EAX+0C09F424]
0167:0C09F356  JMP      [EDX*4+0C09F410]
0167:0C09F35D  MOV      EAX,[ESP+18]
0167:0C09F361  TEST      EAX,EAX
0167:0C09F363  JZ        0C09F339
0167:0C09F365  JMP      0C09F311
0167:0C09F367  MOV      CL,[ESP+2C]
0167:0C09F36B  MOV      AL,[ESI]
0167:0C09F36D  CMP      AL,CL
0167:0C09F36F  JZ        0C09F378
0167:0C09F371  MOV      BYTE PTR [ESP+11],01
0167:0C09F376  JMP      0C09F339
0167:0C09F378  MOV      [ESP+11],BL
0167:0C09F37C  MOV      EBX,00000001
0167:0C09F381  JMP      0C09F339
0167:0C09F383  MOV      EAX,[ESP+24]
0167:0C09F387  MOV      DL,[ESP+13]
0167:0C09F38B  MOV      [ESP+14],EDI    //保存转换结果
0167:0C09F38F  MOV      [EAX],DL
0167:0C09F391  MOV      AL,[ESP+12]
0167:0C09F395  TEST      AL,AL
0167:0C09F397  JNZ      0C0EC5A9
0167:0C09F39D  MOV      EAX,[ESP+18]
0167:0C09F3A1  CMP      EAX,09
0167:0C09F3A4  JG        0C0EC5BE
0167:0C09F3AA  FILD      DWORD PTR [ESP+14]  //转换结果变成浮点数
离找到注册码还差一步,用SoftICE跟实在太累!

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

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

0 0 0 举报
复制成功