飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 2972|回复: 3

Windows 历史记录清理助手 2.0注册算法分析

[复制链接]
  • TA的每日心情
    无聊
    2018-12-10 18:30
  • 签到天数: 70 天

    [LV.6]常住居民II

    发表于 2006-3-21 20:38:54 | 显示全部楼层 |阅读模式
    【破文标题】Windows 历史记录清理助手 2.0注册算法分析
    【破文作者】HBQJXHW[PYG]
    破解工具】OD
    【破解平台】WIN2000-SP4
    【软件名称】Windows 历史记录清理助手 2.0  
    【软件大小】391k
    【原版下载】http://www.pcsoft.com.cn/Soft/Soft_3618.htm
    【保护方式】SN
    【软件简介】你是否曾经有过上网的的记录被人查看的经历,是否有过电脑操记录被人偷窥的体验,是否曾经为电脑里一些没用的文件占用磁盘空间而苦恼过? 现在Windows 历史记录清理助手可以帮你解决这些问题. 本软件具有以下的特点: 1.先扫描后清理,让你自己可以选择要清理掉的文件,让你对你清理掉的文件看的明明白白. 2.你可以选择对系统记录文件的清理,还可以选择针对磁盘,选择自己定义要扫描的文件类型,清理掉你想清除的文件.


    【破解声明】我是一只小菜鸟,偶得一点心得,愿与大家分享
    【破解过程】
    ------------------------------------------------------------------------
    Peid 0.93查壳,无壳(Microsoft Visual C++ 6.0)
    运行,输入注册码,有错误提示.
    OllyDbg载入,来到:
    00413F7C >/$  55            PUSH EBP                                 ;  (初始 cpu 选择)
    00413F7D  |.  8BEC          MOV EBP,ESP
    00413F7F  |.  6A FF         PUSH -1
    00413F81  |.  68 40654300   PUSH Windows_.00436540
    00413F86  |.  68 AC834100   PUSH Windows_.004183AC                   ;  SE 处理程序安装

    右键-->Ultra字符串参考-->查找ASCII-->Ctrl+F-->输入"注册号无效"-->双击来到:0040890C处!

    00408890   .  6A FF         PUSH -1
    00408892   .  68 18004300   PUSH Windows_.00430018                   ;  SE 处理程序安装
    00408897   .  64:A1 0000000>MOV EAX,DWORD PTR FS:[0]
    0040889D   .  50            PUSH EAX
    0040889E   .  64:8925 00000>MOV DWORD PTR FS:[0],ESP
    004088A5   .  83EC 08       SUB ESP,8
    004088A8   .  56            PUSH ESI
    004088A9   .  8BF1          MOV ESI,ECX
    004088AB   .  6A 01         PUSH 1
    004088AD   .  E8 2BD50100   CALL Windows_.00425DDD
    004088B2   .  A1 5CFD4300   MOV EAX,DWORD PTR DS:[43FD5C]
    004088B7   .  894424 04     MOV DWORD PTR SS:[ESP+4],EAX
    004088BB   .  8D8E 1C010000 LEA ECX,DWORD PTR DS:[ESI+11C]
    004088C1   .  C74424 14 000>MOV DWORD PTR SS:[ESP+14],0
    004088C9   .  51            PUSH ECX
    004088CA   .  8D4C24 08     LEA ECX,DWORD PTR SS:[ESP+8]
    004088CE   .  E8 0DEA0100   CALL Windows_.004272E0
    004088D3   .  51            PUSH ECX
    004088D4   .  8D5424 08     LEA EDX,DWORD PTR SS:[ESP+8]
    004088D8   .  8BCC          MOV ECX,ESP
    004088DA   .  896424 0C     MOV DWORD PTR SS:[ESP+C],ESP
    004088DE   .  52            PUSH EDX
    004088DF   .  E8 38E60100   CALL Windows_.00426F1C
    004088E4   .  E8 77FEFFFF   CALL Windows_.00408760                   ;  重要算法CALL进入
    004088E9   .  83C4 04       ADD ESP,4
    004088EC   .  85C0          TEST EAX,EAX
    004088EE   .  6A 00         PUSH 0
    004088F0   .  68 1CF54300   PUSH Windows_.0043F51C                   ;  ngnsss
    004088F5   .  74 15         JE SHORT Windows_.0040890C
    004088F7   .  68 24F54300   PUSH Windows_.0043F524                   ;  注册成功
    004088FC   .  8BCE          MOV ECX,ESI
    004088FE   .  E8 7ECD0100   CALL Windows_.00425681
    00408903   .  8BCE          MOV ECX,ESI
    00408905   .  E8 8BB10100   CALL Windows_.00423A95
    0040890A   .  EB 0C         JMP SHORT Windows_.00408918
    0040890C   >  68 10F54300   PUSH Windows_.0043F510                   ;  注册号无效
    00408911   .  8BCE          MOV ECX,ESI
    00408913   .  E8 69CD0100   CALL Windows_.00425681
    00408918   >  8D4C24 04     LEA ECX,DWORD PTR SS:[ESP+4]
    0040891C   .  C74424 14 FFF>MOV DWORD PTR SS:[ESP+14],-1
    00408924   .  E8 7EE80100   CALL Windows_.004271A7
    00408929   .  8B4C24 0C     MOV ECX,DWORD PTR SS:[ESP+C]
    0040892D   .  5E            POP ESI
    0040892E   .  64:890D 00000>MOV DWORD PTR FS:[0],ECX
    00408935   .  83C4 14       ADD ESP,14
    00408938   .  C3            RETN


    ------------------CALL Windows_.00408760------------------------     ;这里要重复调用二次
    00408760  /$  6A FF         PUSH -1
    00408762  |.  68 F8FF4200   PUSH Windows_.0042FFF8                   ;  SE 处理程序安装
    00408767  |.  64:A1 0000000>MOV EAX,DWORD PTR FS:[0]
    0040876D  |.  50            PUSH EAX
    0040876E  |.  64:8925 00000>MOV DWORD PTR FS:[0],ESP
    00408775  |.  83EC 18       SUB ESP,18
    00408778  |.  53            PUSH EBX
    00408779  |.  8B4C24 2C     MOV ECX,DWORD PTR SS:[ESP+2C]            ;  注册码给ECX
    0040877D  |.  33C0          XOR EAX,EAX
    0040877F  |.  894424 05     MOV DWORD PTR SS:[ESP+5],EAX
    00408783  |.  33DB          XOR EBX,EBX
    00408785  |.  66:894424 09  MOV WORD PTR SS:[ESP+9],AX
    0040878A  |.  895C24 24     MOV DWORD PTR SS:[ESP+24],EBX
    0040878E  |.  884424 0B     MOV BYTE PTR SS:[ESP+B],AL
    00408792  |.  8B41 F8       MOV EAX,DWORD PTR DS:[ECX-8]             ;  注册码位数给EAX
    00408795  |.  83F8 10       CMP EAX,10                               ;  注册码位数是否为16位数
    00408798  |.  885C24 04     MOV BYTE PTR SS:[ESP+4],BL
    0040879C  |.  0F8C C0000000 JL Windows_.00408862
    004087A2  |.  56            PUSH ESI
    004087A3  |.  68 04010000   PUSH 104
    004087A8  |.  8D4C24 34     LEA ECX,DWORD PTR SS:[ESP+34]
    004087AC  |.  E8 D8EC0100   CALL Windows_.00427489
    004087B1  |.  8B10          MOV EDX,DWORD PTR DS:[EAX]
    004087B3  |.  33F6          XOR ESI,ESI
    004087B5  |.  895424 10     MOV DWORD PTR SS:[ESP+10],EDX
    004087B9  |.  8B48 04       MOV ECX,DWORD PTR DS:[EAX+4]
    004087BC  |.  894C24 14     MOV DWORD PTR SS:[ESP+14],ECX
    004087C0  |.  8B50 08       MOV EDX,DWORD PTR DS:[EAX+8]
    004087C3  |.  895424 18     MOV DWORD PTR SS:[ESP+18],EDX
    004087C7  |.  8B40 0C       MOV EAX,DWORD PTR DS:[EAX+C]
    004087CA  |.  894424 1C     MOV DWORD PTR SS:[ESP+1C],EAX
    004087CE  |>  8A4C34 10     /MOV CL,BYTE PTR SS:[ESP+ESI+10]
    004087D2  |.  51            |PUSH ECX
    004087D3  |.  E8 68FFFFFF   |CALL Windows_.00408740
    004087D8  |.  83C4 04       |ADD ESP,4
    004087DB  |.  884434 10     |MOV BYTE PTR SS:[ESP+ESI+10],AL
    004087DF  |.  46            |INC ESI
    004087E0  |.  83FE 10       |CMP ESI,10
    004087E3  |.^ 7C E9         \JL SHORT Windows_.004087CE
    004087E5  |.  33C0          XOR EAX,EAX
    004087E7  |.  8D4C24 10     LEA ECX,DWORD PTR SS:[ESP+10]
    004087EB  |.  5E            POP ESI
    004087EC  |>  8A51 01       /MOV DL,BYTE PTR DS:[ECX+1]
    004087EF  |.  8A19          |MOV BL,BYTE PTR DS:[ECX]
    004087F1  |.  C0E2 04       |SHL DL,4
    004087F4  |.  02D3          |ADD DL,BL
    004087F6  |.  83C1 02       |ADD ECX,2
    004087F9  |.  885404 04     |MOV BYTE PTR SS:[ESP+EAX+4],DL
    004087FD  |.  40            |INC EAX
    004087FE  |.  83F8 08       |CMP EAX,8
    00408801  |.^ 7C E9         \JL SHORT Windows_.004087EC
    (上面是把注册码每2位数交换例如:1234567890123456交换后的结果为2143658709214365)
    00408803  |.  8A4424 07     MOV AL,BYTE PTR SS:[ESP+7]
    00408807  |.  8A5C24 04     MOV BL,BYTE PTR SS:[ESP+4]
    0040880B  |.  8A4C24 0B     MOV CL,BYTE PTR SS:[ESP+B]
    0040880F  |.  8A5424 05     MOV DL,BYTE PTR SS:[ESP+5]
    00408813  |.  32C3          XOR AL,BL                                  异或运算
    00408815  |.  8A5C24 06     MOV BL,BYTE PTR SS:[ESP+6]
    00408819  |.  32CA          XOR CL,DL                                  异或运算
    0040881B  |.  8A5424 09     MOV DL,BYTE PTR SS:[ESP+9]
    0040881F  |.  32D3          XOR DL,BL                                  异或运算
    00408821  |.  8A5C24 08     MOV BL,BYTE PTR SS:[ESP+8]
    00408825  |.  325C24 0A     XOR BL,BYTE PTR SS:[ESP+A]                  异或运算
    00408829  |.  3C 39         CMP AL,39                                ;  比较AL是否等于0x39
    0040882B      75 35         JNZ SHORT Windows_.00408862                   ;  爆破口
    0040882D  |.  80F9 6F       CMP CL,6F                                ;  比较CL是否等于0x6F
    00408830      75 30         JNZ SHORT Windows_.00408862                   ;  爆破口
    00408832  |.  80FA 4F       CMP DL,4F                                ;  比较DL是否等于0x4F
    00408835      75 2B         JNZ SHORT Windows_.00408862                   ;  爆破口
    00408837  |.  80FB 1B       CMP BL,1B                                ;  比较BL是否等于0x1B
    0040883A      75 26         JNZ SHORT Windows_.00408862
    0040883C  |.  8D4C24 2C     LEA ECX,DWORD PTR SS:[ESP+2C]
    00408840  |.  C74424 24 FFF>MOV DWORD PTR SS:[ESP+24],-1
    00408848  |.  E8 5AE90100   CALL Windows_.004271A7
    0040884D  |.  B8 01000000   MOV EAX,1
    00408852  |.  5B            POP EBX
    00408853  |.  8B4C24 18     MOV ECX,DWORD PTR SS:[ESP+18]
    00408857  |.  64:890D 00000>MOV DWORD PTR FS:[0],ECX
    0040885E  |.  83C4 24       ADD ESP,24
    00408861  |.  C3            RETN
    00408862  |>  8D4C24 2C     LEA ECX,DWORD PTR SS:[ESP+2C]
    00408866  |.  C74424 24 FFF>MOV DWORD PTR SS:[ESP+24],-1
    0040886E  |.  E8 34E90100   CALL Windows_.004271A7
    00408873  |.  8B4C24 1C     MOV ECX,DWORD PTR SS:[ESP+1C]
    00408877  |.  33C0          XOR EAX,EAX
    00408879  |.  5B            POP EBX
    0040887A  |.  64:890D 00000>MOV DWORD PTR FS:[0],ECX
    00408881  |.  83C4 24       ADD ESP,24
    00408884  \.  C3            RETN
    ---------------------------------------------------------

    C程序为:(太冗长,请不要见笑,如有更好的还请教了)


    1. #include <stdlib.h>
    2. #include <stdio.h>
    3. #include <time.h>
    4. #include <ctype.h>

    5. int main(void)
    6. {  int num[4];
    7.    static int str[16];
    8.    int i;
    9.    int a,b,c,d;
    10.    time_t t;
    11.    srand((unsigned) time(&t));
    12.    for(i=0; i<4; i++)
    13.        num[i]=rand() % 0x100;
    14. a=0x39^num[0];
    15. b=0x6f^num[1];
    16. c=0x4f^num[2];
    17. d=0x1b^num[3];
    18. str[0]=num[0]%0x10;
    19. str[1]=num[0]/0x10;
    20. str[2]=num[1]%0x10;
    21. str[3]=num[1]/0x10;
    22. str[4]=num[2]%0x10;
    23. str[5]=num[2]/0x10;
    24. str[6]=a%0x10;
    25. str[7]=a/0x10;
    26. str[8]=num[3]%0x10;
    27. str[9]=num[3]/0x10;
    28. str[10]=c%0x10;
    29. str[11]=c/0x10;
    30. str[12]=d%0x10;
    31. str[13]=d/0x10;
    32. str[14]=b%0x10;
    33. str[15]=b/0x10;
    34. printf("\n\n     UPPER [    ");
    35. for (i=0;i<16;i++)
    36.     printf("%x",str[i]);
    37.     printf("    ]");
    38.     getch();
    39.     return 0;
    40. }
    复制代码

    注:输入注册码时字母请输入大写字母。

    注册信息保存在注册表中:
    [HKEY_LOCAL_MACHINE\SOFTWARE\ngnsss]
    "diskcleaner"="1234567890123456"
    ------------------------------------------------------------------------
    【版权声明】本文纯属技术交流, 转载请注明作者信息并保持文章的完整, 谢谢!
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-3-22 00:40:53 | 显示全部楼层
    嘿嘿!!~
    偶的更烂的代码:
    不要扔我臭鸡蛋!!!
    用VB实现

    1. Private Sub LGiveMe_Click()
    2. '==================================================
    3. '此事件即为注册算号用。
    4. '其中Text_Yname为输入机器码或用户名用文本框
    5. 'Text_KeyCode为注册码输出框,其Locked属性为真,运行时只读!
    6. '==================================================
    7. Dim SouStr As String * 16, sn As String
    8. Dim i As Integer, al1 As String, al2 As String, bl1 As String, bl2 As String
    9. Dim cl1 As String, cl2 As String, dl1 As String, dl2 As String
    10. Dim count(8) As Integer, tmpCnt As Integer
    11. Dim tmpSn(16) As String, tmpSn1 As String * 2
    12. Randomize Timer
    13. SouStr = "1234567890ABCDEF"
    14. For i = 1 To 16
    15. tmpSn(i) = Mid(SouStr, Int(16 * Rnd() + 1), 1)
    16. Next
    17. Debug.Print tmpSn(16)
    18. Debug.Print toVal(tmpSn(16), "F")
    19. tmpSn1 = Format(Hex(toVal(tmpSn(8), tmpSn(7)) Xor 57), "00")
    20. tmpSn(2) = Left(tmpSn1, 1)
    21. tmpSn(1) = Right(tmpSn1, 1)
    22. tmpSn1 = Format(Hex(toVal(tmpSn(16), tmpSn(15)) Xor 111), "00")
    23. tmpSn(4) = Left(tmpSn1, 1)
    24. tmpSn(3) = Right(tmpSn1, 1)
    25. tmpSn1 = Format(Hex(toVal(tmpSn(6), tmpSn(5)) Xor 79), "00")
    26. tmpSn(12) = Left(tmpSn1, 1)
    27. tmpSn(11) = Right(tmpSn1, 1)
    28. tmpSn1 = Format(Hex(toVal(tmpSn(14), tmpSn(13)) Xor 27), "00")
    29. tmpSn(10) = Left(tmpSn1, 1)
    30. tmpSn(9) = Right(tmpSn1, 1)
    31. For i = 1 To 16
    32.     sn = sn & tmpSn(i)
    33. Next
    34. Text_KeyCode.Text = Trim(sn)
    35. End Sub
    36. Function toVal(mm1 As String, mm2 As String)
    37.     Dim s1, s2
    38.     If Asc(mm1) >= 48 And Asc(mm1) <= 57 Then
    39.             s1 = Val(mm1)
    40.     Else
    41.         Select Case mm1
    42.          Case "A"
    43.             s1 = 10
    44.          Case "B"
    45.             s1 = 11
    46.         Case "C"
    47.             s1 = 12
    48.         Case "D"
    49.             s1 = 13
    50.         Case "E"
    51.             s1 = 14
    52.         Case "F"
    53.             s1 = 15
    54.        End Select
    55.     End If
    56.     If Asc(mm2) >= 48 And Asc(mm2) <= 57 Then
    57.         s2 = Val(mm2)
    58.     Else
    59.         Select Case mm2
    60.             Case "A"
    61.             s2 = 10
    62.             Case "B"
    63.             s2 = 11
    64.             Case "C"
    65.             s2 = 12
    66.             Case "D"
    67.             s2 = 13
    68.             Case "E"
    69.             s2 = 14
    70.             Case "F"
    71.             s2 = 15
    72.         End Select
    73.     End If
    74. toVal = s1 * 16 + s2
    75. End Function
    复制代码
    PYG19周年生日快乐!
  • TA的每日心情
    难过
    2024-4-22 14:49
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    发表于 2006-3-22 06:48:29 | 显示全部楼层
    两位的KEYGEN代码真是太棒了!学习!
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-3-22 20:13:50 | 显示全部楼层
    都是牛人啊```严重学习中!
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表