飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 6634|回复: 13

E语言KeyGen的中文名与位数取值以英文形式如何解决?

[复制链接]
  • TA的每日心情
    开心
    2018-5-6 16:27
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    发表于 2006-7-15 12:03:05 | 显示全部楼层 |阅读模式
    https://www.chinapyg.com/viewthr ... &extra=page%3D2

    今天早上搞了1个小时,咱做的E KeyGen还是只支持E文.

    接着用中文名字将这个CrackMe跟了一下,结果是这样子的:

    取的中文名字以一个中文字符为一位,如:我的猫呀~   <--位数是5
    中文名字第一位代码是4个数字.

    易语言里的是:
    用户名:我的猫呀~  <---位数是10 ,晕咯,当成E文来计算.
    第一位的代码是2位的数字...呵呵~乱呀~~~


    +++++++++++++++++++++++++++++++++

    算法心得:
    注册名: WildCatIII <------
    在40241B处位数10位,16进制中为A,
    在402420处注册名位数A乘以17CFB积得CC1CE,

    在402433处取注册名首字母W的16位表达值57,在402436与上面所得的积相加得:EE225

    在40243F这个Call里转换成10进制得975397,这个结果在402523位置与软件作者预定的AKA-相组合得最终注册码:AKA-975397

    从这个简单的算法来看,注册过程中只提取用户名位数,检验用户名首字符,所以如果满足了这两个条件注册码还是一样的。。。

    用咱的注册名引出的例子如:
    注册名:W123456789 <--10位且第一个字母为W,所以一样的注册成功!
    注册码:AKA-975397
    ++++++++++++++++++++++++++++++++++++

    .版本 2

    .程序集 窗口程序集1

    .子程序 _按钮2_被单击

    信息框 (“Code by WildCatIII[D.4s]” + #换行符 + #换行符 + “ 独立完成于2006/06/26” + #换行符 + #换行符 + “中文用户名Di支持有待修复!”, 0, “关于”)


    .子程序 __启动窗口_创建完毕

    _启动窗口.标题 = “VBCrackMe1 Keygen!”

    .子程序 _按钮1_被单击
    .局部变量 user, 文本型
    .局部变量 code, 整数型
    .局部变量 i, 整数型
    .局部变量 Me2, 整数型
    .局部变量 Word, 文本型
    .局部变量 变量, 整数型

    user = 编辑框1.内容
    i = 取文本长度 (user)
    Me2 = i × 97531  ' 注册名位数乘以17CFBh
    Word = “AKA-”
    .如果 (i ≥ 1)
        .计次循环首 (i, 变量)
            code = Me2 + 取代码 (user, 1)
        .计次循环尾 ()
        编辑框2.内容 = Word + 到文本 (code)
    .否则
        否则 ()
        信息框 (“用户名还没输入噢!”, 0, “温馨提示!”)
    .如果结束


    .子程序 否则




    周笔畅 笔记 Flash
    http://vlike.8812345.com/flash/18609.htm

    Lifes a struggle
    http://vlike.8812345.com/flash/15581.htm

    阿地的进行曲
    http://www.8812345.com/flash/11/17.htm

    周笔畅 天鹅
    http://www.vlike.com/flash/20488.htm

    [ 本帖最后由 野猫III 于 2006-7-15 12:32 编辑 ]

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?加入我们

    x
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-7-15 16:50:17 | 显示全部楼层

    中英文随你便

    00402415    FF15 E4404000   CALL DWORD PTR DS:[<&MSVBVM50.__vbaLenBstr>]             ; MSVBVM50.__vbaLenBstr
    0040241B    8BF8            MOV EDI,EAX
    0040241D    8B4D E8         MOV ECX,DWORD PTR SS:[EBP-18]
    00402420    69FF FB7C0100   IMUL EDI,EDI,17CFB
    00402426    51              PUSH ECX
    00402427    0F80 91020000   JO CrackMe1.004026BE
    0040242D    FF15 F8404000   CALL DWORD PTR DS:[<&MSVBVM50.#516>]                     ; MSVBVM50.rtcAnsiValueBstr
    00402433    0FBFD0          MOVSX EDX,AX
    00402436    03FA            ADD EDI,EDX
    00402438    0F80 80020000   JO CrackMe1.004026BE
    0040243E    57              PUSH EDI
    0040243F    FF15 E0404000   CALL DWORD PTR DS:[<&MSVBVM50.__vbaStrI4>]               ; MSVBVM50.__vbaStrI4





    'W'+'i'+'l'+'d'+'C'+'a'+'t'+'I'+'I'+'I'


    int WideCharToMultiByte(

        UINT CodePage,        // code page
        DWORD dwFlags,        // performance and mapping flags
        LPCWSTR lpWideCharStr,        // address of wide-character string
        int cchWideChar,        // number of characters in string
        LPSTR lpMultiByteStr,        // address of buffer for new string
        int cchMultiByte,        // size of buffer
        LPCSTR lpDefaultChar,        // address of default for unmappable characters  
        LPBOOL lpUsedDefaultChar         // address of flag set when default char. used
       );

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?加入我们

    x
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-7-15 16:52:32 | 显示全部楼层
    截图   ===================

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?加入我们

    x
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-7-15 17:06:56 | 显示全部楼层
    指出猫兄一个冗长语句,没错但没必要

    原帖由 野猫III 于 2006-7-15 12:03 发表
    .计次循环首 (i, 变量)
            code = Me2 + 取代码 (user, 1)
        .计次循环尾 ()


    我E语言不熟,上述语句误导了我,还以为你手误写错了,跟了一下才知道完全没必要用循环




    另外,如果用VB写keygen的话,估计要直观容易的多,因为crackme就是vb的,照着写就OK了

    [ 本帖最后由 快雪时晴 于 2006-7-15 17:08 编辑 ]
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2018-5-6 16:27
  • 签到天数: 7 天

    [LV.3]偶尔看看II

     楼主| 发表于 2006-7-15 17:50:07 | 显示全部楼层
    呵呵~不是误导,是咱菜才用这个循环的,但这个循环的作用是只取前面的一个字符。
    呵呵~ 菜鸟笨坏了的方法,请莫见笑~~~


    没看到兄弟的E源码呀~~~着急中~
    Private Sub Command1_Click()
    Dim Name, Str1, Code As String
    Dim LenName, Name1 As Integer
    Dim Code1 As Long

    Name = Text1.Text
    LenName = Len(Name)
    Str1 = "AKA-"
    If LenName <> 0 Then
       Name1 = Asc(Left(Name, 1))
       Code1 = LenName * 97531
       Code1 = Code1 + Name1
          Code = Code1
       Text2.Text = Str1 + Code
    Else
       MsgBox "用户名还没输入呢!", 0, "输入有误"
    End If
    End Sub

    [ 本帖最后由 野猫III 于 2006-7-15 17:56 编辑 ]
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-7-15 18:17:35 | 显示全部楼层
    菜鸟还看不大明白,学习中。。。。。
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-7-16 15:24:06 | 显示全部楼层
    原帖由 野猫III 于 2006-7-15 17:50 发表
    没看到兄弟的E源码呀~~~着急中~





    1. .版本 2

    2. .程序集 窗口程序集1

    3. .子程序 _按钮2_被单击

    4. 信息框 (“Code by 快雪时晴[PYG], 完美支持中英文混合” + #换行符 + #换行符 + “ 2006/07/15” + #换行符 + #换行符 + “:-)”, 0, “关于”)


    5. .子程序 __启动窗口_创建完毕

    6. _启动窗口.标题 = “VBCrackMe1 Keygen!”

    7. .子程序 _按钮1_被单击
    8. .局部变量 user, 文本型
    9. .局部变量 code, 整数型
    10. .局部变量 i, 整数型
    11. .局部变量 Me2, 整数型
    12. .局部变量 Word, 文本型
    13. .局部变量 变量, 整数型
    14. .局部变量 y, 字节型
    15. .局部变量 bstr, 字节集


    16. user = 编辑框1.内容

    17. ' 举例: 我1
    18. ' (ASCII)宽字符为 CE D2 31
    19. ' Unicode 为 11 62 31 00
    20. ' UTF-8 为 91 88 E6 31

    21. bstr = ANSI转UNICODE (user)
    22. i = 取字节集长度 (bstr) - 2
    23. i = i ÷ 2

    24. Me2 = i × 97531  ' 注册名位数乘以17CFBh

    25. Word = “AKA-”
    26. .如果 (i ≥ 1)

    27.     code = 取代码 (user, 1)
    28.     .如果真 (code < 0)
    29.         ' 中文字符
    30.         bstr = 取字节集左边 (到字节集 (user), 2)
    31.         y = 取字节集数据 (bstr, 1, 2)
    32.         code = code × 256 + y  

    33.     .如果真结束


    34.     code = Me2 + code

    35.     编辑框2.内容 = Word + 到文本 (code)
    36. .否则
    37.     否则 ()
    38.     信息框 (“用户名还没输入噢!”, 0, “温馨提示!”)
    39. .如果结束


    40. .子程序 否则



    复制代码



    函数库:

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?加入我们

    x
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2018-5-6 16:27
  • 签到天数: 7 天

    [LV.3]偶尔看看II

     楼主| 发表于 2006-7-20 10:53:45 | 显示全部楼层
    哈哈~建议老大封快雪时晴兄为万事懂,热心僮!

    再问一下:

    .如果真 (code < 0)
            ' 中文字符
            bstr = 取字节集左边 (到字节集 (user), 2)
            y = 取字节集数据 (bstr, 1, 2)
            code = code × 256 + y    '不知道这乘以256是什么意思?原算法没有这个~

        .如果真结束


        code = Me2 + code

        编辑框2.内容 = Word + 到文本 (code)
    PYG19周年生日快乐!
  • TA的每日心情
    擦汗
    2017-9-28 11:05
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2006-7-20 19:06:43 | 显示全部楼层
    上面的方法还得用上一个模块。很不爽的。直接用下面的方法就可以了


    1. .版本 2

    2. .程序集 窗口程序集1

    3. .子程序 _按钮1_被单击
    4. .局部变量 试验用字, 文本型
    5. .局部变量 十六进制文本, 文本型
    6. .局部变量 字前, 整数型
    7. .局部变量 字后, 整数型
    8. .局部变量 转回汉字, 文本型

    9. 试验用字 = “我”
    10. 字前 = 取代码 (试验用字, 1) + 256  ' 一个汉字分为二个字节,这是取前面的字节.加256是因为易语言取代码取出的值为负的原因
    11. 字后 = 取代码 (试验用字, 2) + 256  ' 一个汉字分为二个字节,这是取后面的字节
    12. 十六进制文本 = 取十六进制文本 (字前) + 取十六进制文本 (字后)  ' 取十六进制文本
    13. 转回汉字 = 字符 (字前) + 字符 (字后)  ' 通过十六进制的ASCII值转回汉字
    14. 编辑框1.内容 = 十六进制文本  ' 在编辑框中显示
    15. 编辑框2.内容 = 转回汉字

    复制代码

    [ 本帖最后由 pentacle 于 2006-7-20 19:08 编辑 ]

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?加入我们

    x
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-7-20 22:53:59 | 显示全部楼层
    原帖由 野猫III 于 2006-7-20 10:53 发表
    哈哈~建议老大封快雪时晴兄为万事懂,热心僮!

    再问一下:
    code = code × 256 + y    '不知道这乘以256是什么意思?原算法没有这个~
        ...



    *256=左移8位
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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