首页
论坛
课程
招聘
[原创]英汉互译王V2007 算法分析之“联想分析法”
2007-2-16 14:40 10167

[原创]英汉互译王V2007 算法分析之“联想分析法”

2007-2-16 14:40
10167
【文章标题】: 英汉互译王V2007 算法分析之“联想分析法”
【文章作者】: KuNgBiM
【作者邮箱】: kungbim@163.com
【作者主页】: http://www.crkcn.com
【软件名称】: 英汉互译王V2007
【软件大小】: 743KB
【下载地址】: 自己搜索下载
【加壳方式】: N/A
【保护方式】: 延时NAG + 序列号
【编写语言】: Borland Delphi 6.0 - 7.0
【使用工具】: OD
【操作平台】: 盗版XPsp2
【软件介绍】: 一款快速高效的英汉翻译软件,不仅可以实现英汉互译,还可实现繁简互译。并伴有语音朗读功能。您在平时学习英语的过程中、上网浏览英文站点时、看英文原版书籍时、或是在做翻译工作时。你需要一个工具帮助您,从而使语言不再成为你前进的障碍,体验异彩纷呈的精神文明和文化世界,我们推荐您使用《英汉互译王》。她将是您工作、学习、网上生活的理想小伴侣。娃娃软件,科技开创美丽生活,祝您使用愉快。
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
  今天大觉醒来,向往日一样到论坛灌灌水,来到『软件调试论坛』看见一朋友写的《菜鸟破文之英汉互译王V2007注册爆破简单分析》,
  发现该程序为明码比较,看来算法也挺简单,于是乎分析之。
  
  不过今天这个算法也不能完全叫算法,只能用“联想分析法”这个词比较准确。为什么叫“联想分析法”呢?下面可以完全描述之。
  
  准备工作就不再详述,通过yumikeyabc朋友分析的虚拟地址来现成的!
  
  来到004B1FF9设断!F9运行,填写注册信息:
  
  机器码:BFED57300014782D24F5
  注册码:99999999999999999999
  
  004B1FF9  |.  55               push    ebp
  004B1FFA  |.  68 C2214B00      push    004B21C2
  004B1FFF  |.  64:FF30          push    dword ptr fs:[eax]
  004B2002  |.  64:8920          mov     dword ptr fs:[eax], esp
  004B2005  |.  8D55 F4          lea     edx, dword ptr [ebp-C]
  004B2008  |.  8B86 00030000    mov     eax, dword ptr [esi+300]
  004B200E  |.  E8 8998F9FF      call    0044B89C                      ;  取试炼注册码
  004B2013  |.  8B45 F4          mov     eax, dword ptr [ebp-C]        ;  ASCII "99999999999999999999"
  004B2016  |.  8D55 F8          lea     edx, dword ptr [ebp-8]
  004B2019  |.  E8 FA64F5FF      call    00408518                      ;  注册码格式检查
  004B201E  |.  8B45 F8          mov     eax, dword ptr [ebp-8]
  004B2021  |.  50               push    eax
  004B2022  |.  8D55 EC          lea     edx, dword ptr [ebp-14]
  004B2025  |.  8B86 0C030000    mov     eax, dword ptr [esi+30C]
  004B202B  |.  E8 6C98F9FF      call    0044B89C                      ;  ★取机器码,研究之★
  004B2030  |.  8B45 EC          mov     eax, dword ptr [ebp-14]       ;  ASCII "BFED57300014782D24F5"
                                                                       ;  第二次加载运行后来到此处,看堆栈,并修改之
  004B2033  |.  8D4D F0          lea     ecx, dword ptr [ebp-10]
  004B2036  |.  BA D8214B00      mov     edx, 004B21D8                 ;  t674
  004B203B  |.  E8 88FAFFFF      call    004B1AC8                      ;  算法CALL,不跟进
  004B2040  |.  8B55 F0          mov     edx, dword ptr [ebp-10]       ;  ★得到正确注册码★
                                                                       ;  ASCII "0307040574767271717170757679730573750774"
  004B2043  |.  58               pop     eax                           ;  试炼码,ASCII "99999999999999999999"
  004B2044  |.  E8 4B24F5FF      call    00404494                      ;  经典比较CALL
  004B2049  |.  0F85 E2000000    jnz     004B2131                      ;  跳则GAME OVER
  
  我们得到的注册码感觉很可疑(机器码中的000所对应的注册码为717171,难道有规律?)
  
  Ctrl+F2重新装载,在取机器码004B2030处设断,运行。中断后查看堆栈,并修改:
  ===========================================================================
  数据窗口中跟随数值:
  
  00E7EE30  42 46 45 44 35 37 33 30 30 30 31 34 37 38 32 44  BFED57300014782D
  00E7EE40  32 34 46 35 00 00 E7 00 0C F6 4B 00 0C F6 4B 00  24F5..?.鏊..鏊.
  00E7EE50  B4 11 00 00 00 00 00 00 EC 78 42 00 F0 ED E7 00  ?......禅B.痦?
  00E7EE60  C8 78 42 00 F0 ED E7 00 00 00 00 00 00 00 00 00  萨B.痦?........
  
  修改为:
  
  00E7EE30  31 32 33 34 35 36 37 38 39 30 41 42 43 44 45 46  1234567890ABCDEF
  00E7EE40  47 48 49 4A 00 00 E7 00 0C F6 4B 00 0C F6 4B 00  GHIJ..?.鏊..鏊.
  00E7EE50  B4 11 00 00 00 00 00 00 EC 78 42 00 F0 ED E7 00  ?......禅B.痦?
  00E7EE60  C8 78 42 00 F0 ED E7 00 00 00 00 00 00 00 00 00  萨B.痦?........
  ===========================================================================
  继续运行!
  
  修改后变为:
  
  004B202B  |.  E8 6C98F9FF      call    0044B89C                      ;  取机器码
  004B2030  |.  8B45 EC          mov     eax, dword ptr [ebp-14]       ;  ASCII "1234567890ABCDEFGHIJ"
  004B2033  |.  8D4D F0          lea     ecx, dword ptr [ebp-10]
  004B2036  |.  BA D8214B00      mov     edx, 004B21D8                 ;  t674
  004B203B  |.  E8 88FAFFFF      call    004B1AC8
  004B2040  |.  8B55 F0          mov     edx, dword ptr [ebp-10]       ;  ★得到正确注册码★
                                                                       ;  ASCII "707372757477767978710003020504070609080B"
  004B2043  |.  58               pop     eax                           
  
  难道“1234567890ABCDEFGHIJ”所对应的注册码值为“707372757477767978710003020504070609080B”
  
  根据推断,随后我整理了一张包含字母及数字有规律的密码表,如下:
  
  0 --> 71
  1 --> 70
  2 --> 73
  3 --> 72
  4 --> 75
  5 --> 74
  6 --> 77
  7 --> 76
  8 --> 79
  9 --> 78
  A --> 00
  B --> 03
  C --> 02
  D --> 05
  E --> 04
  F --> 07
  G --> 06
  H --> 09
  I --> 08
  J --> 0B
  K --> 0A
  L --> 0D
  M --> 0C
  N --> 0F
  O --> 0E
  P --> 11
  Q --> 10
  R --> 13
  S --> 12
  T --> 15
  U --> 14
  V --> 17
  W --> 16
  X --> 19
  Y --> 18
  Z --> 1B
  
  为了证实这个“联想分析法”得出的算法可行,写一个注册机来验证。
  
  ============ 以下程序在盗版XPsp2、VB6.0下编译测试通过 ============
  
  Private Sub Text1_Change()
  'Keygen by KuNgBiM
      Dim MachineCode As String
      Dim n, m, i As Byte
      Dim Sn, tmp  As String
      Dim Char As String
      Dim Table As String
      '字符串
      Char = "0123456789" & "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
      '字符串对应密码表
      Table = "717073727574777679780003020504070609080B0A0D0C0F0E111013121514171619181B"
      '输入机器码
      MachineCode = Text1.Text
      '计算注册码
      If Len(MachineCode) > 20 Then MachineCode = Mid(MachineCode, 1, 20)
      n = Len(MachineCode)
      For i = 1 To n
          tmp = Mid(MachineCode, i, 1)
          m = InStr(1, Char, tmp)
          Sn = Sn & Mid(Table, 2 * m - 1, 2)
      Next
      '输出注册码
      Text2.Text = Sn
  End Sub

  ============ 以下程序在盗版XPsp2、VC++6.0下编译测试通过 ============  

  void Ckeygen::OnChangeText1()
  {
        // TODO: Add your control notification handler code here
        // Keygen by KuNgBiM
         CString MachineCode;
         CComVariant n, m; BYTE i;
         CComVariant Sn; CString tmp;
         CString Char;
         CString Table;
        // 字符串
        Char = CString("0123456789")+"ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        // 字符串对应密码表
        Table = "717073727574777679780003020504070609080B0A0D0C0F0E111013121514171619181B";
        // 输入机器码
        MachineCode = Text(m_Text1);
        // 计算注册码
        if ( MachineCode.GetLength()>20) { MachineCode =  MachineCode.Mid(1-1, 20); }
        n =  MachineCode.GetLength();
        for(i=1; i<=n; i++) {
                tmp =  MachineCode.Mid(i-1, 1);
                m =  (1+Char.Find(tmp, 1-1));
                Sn = Sn+ Table.Mid(2*m-1-1, 2);
          }
        // 输出注册码
        m_Text2.SetWindowText(Sn);
  }

  ============ 以下程序在盗版XPsp2、Delphi 6.0下编译测试通过 ============  

  procedure Tkeygen.Text1Change(Sender: TObject);
  var
          MachineCode, tmp, Char, Table : AnsiString;
          n, m, Sn : Variant;
          i : Char;
  begin
          // Keygen by KuNgBiM

          // 字符串
          Char := '0123456789'+'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
          // 字符串对应密码表
          Table := '717073727574777679780003020504070609080B0A0D0C0F0E111013121514171619181B';
          // 输入机器码
          MachineCode := Text1.Text;
          // 计算注册码
          if  Length(MachineCode)>20 then begin MachineCode :=  Copy(MachineCode, 1, 20); end;
          n :=  Length(MachineCode);
          for i:=1 to n do begin
                  tmp :=  Copy(MachineCode, i, 1);
                  m :=  (1+Pos(tmp, PChar(Char)+1));
                  Sn := Sn+ Copy(Table, 2*m-1, 2);
          end;
          // 输出注册码
          Text2.Text := Sn;
  end;

  end.
--------------------------------------------------------------------------------
【经验总结】
  没什么好总结的,自创的“联想分析法”真好用!呵呵~
  
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2007年02月16日 PM 02:33:00

[2023春季班]《安卓高级研修班(网课)》月薪两万班招生中~

上传的附件:
收藏
点赞0
打赏
分享
最新回复 (18)
雪    币: 201
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ToT 活跃值 2007-2-16 15:00
2
0
呵呵,老K速度好快啊……

分析一下也不难,就是每一位都xor 0x41,然后把16进制串在一起就是注册码了

这个0x41=t xor 6 xor 7 xor 4
雪    币: 48779
活跃值: 活跃值 (171444)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
linhanshi 活跃值 2007-2-16 16:02
3
0
sustain.
雪    币: 0
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
疯狂菜鸟 活跃值 2007-2-16 16:18
4
0
K哥的文章真精彩 但是很可爱

每次都友情提示"XP盗版下"

哈哈 支持  新年快了 学习
雪    币: 202
活跃值: 活跃值 (10)
能力值: ( LV9,RANK:1130 )
在线值:
发帖
回帖
粉丝
binbinbin 活跃值 28 2007-2-17 16:25
5
0
这样都行。学习中~~~
另:新年快乐~
雪    币: 19
活跃值: 活跃值 (10)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
pendan2001 活跃值 4 2007-2-20 17:07
6
0
很久没来KuNgBiM做客了,支持!
雪    币: 219
活跃值: 活跃值 (20)
能力值: ( LV9,RANK:1140 )
在线值:
发帖
回帖
粉丝
冷血书生 活跃值 28 2007-2-20 21:43
7
0
老K的文章一向都这么好看!!!!
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
usb-hdd 活跃值 1 2007-2-21 01:46
8
0
精通VB ,VC ,Delphi
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
inbreak 活跃值 2 2007-2-21 20:10
9
0
屁。。。至少 DELPHI 编译通不过

procedure TForm1.Button1Click(Sender: TObject);
var
    MachineCode, tmp, Char, Table : AnsiString;
     Sn : string;
    i ,m,n: integer;
  begin
    // Keygen by KuNgBiM

    // 字符串
    Char := '0123456789'+'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
    // 字符串对应密码表
    Table := '717073727574777679780003020504070609080B0A0D0C0F0E111013121514171619181B';
    // 输入机器码
    MachineCode := Edit1.Text;
    // 计算注册码
    if  Length(MachineCode)>20 then begin MachineCode :=  Copy(MachineCode, 1, 20); end;
    n :=  Length(MachineCode);
    for i:=1 to n do begin
      tmp :=  Copy(MachineCode, i, 1);
      m :=  (1+Pos(tmp, PChar(Char)+1));
      Sn := Sn+ Copy(Table, 2*m-1, 2);
    end;
    // 输出注册码
    edit2.Text := Sn;

end;
雪    币: 1915
活跃值: 活跃值 (1384)
能力值: (RANK:215 )
在线值:
发帖
回帖
粉丝
china 活跃值 5 2007-2-21 20:20
10
0
最初由 inbreak 发布
屁。。。至少 DELPHI 编译通不过

procedure TForm1.Button1Click(Sender: TObject);
var
MachineCode, tmp, Char, Table : AnsiString;
........


你少了end;吧

怎么不能通过编译?
雪    币: 541
活跃值: 活跃值 (10)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
啊CR 活跃值 3 2007-2-21 23:52
11
0
tc tiancai tc
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
神猪 活跃值 2007-2-22 00:42
12
0
K哥果然高深,菜鸟学习!!!

长见识了。
雪    币: 5536
活跃值: 活跃值 (56)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
forgot 活跃值 26 2007-2-22 00:45
13
0
爆破是艺术,能爆就不浪费生命在算法上
雪    币: 200
活跃值: 活跃值 (197)
能力值: ( LV12,RANK:2670 )
在线值:
发帖
回帖
粉丝
KuNgBiM 活跃值 66 2007-2-22 02:03
14
0
最初由 china 发布
你少了end;吧

怎么不能通过编译?


ABC是不错的老师
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
inbreak 活跃值 2 2007-2-22 10:52
15
0
难道 互译王 2007 也有不同的版本?

我下的那个修改时间是 1-8号的,后来又去主页上去下,修改时间是 1-31号。

可是楼主这个,两个都不能注册成功。
雪    币: 5480
活跃值: 活跃值 (1032)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ldljlzw 活跃值 2007-7-4 09:52
16
0
有问题,注册不了!
雪    币: 502
活跃值: 活跃值 (35)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
BlueT 活跃值 2 2007-7-4 20:13
17
0
爆破确实算是一门艺术,但是一门老无所归的艺术。
不干破解了,你也就成了废品了,到时收破烂的都不要!

雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
pxfpxw 活跃值 2007-7-7 22:19
18
0
顶你了老 K 你还真是高手,俺小菜一个     pxf
雪    币: 206
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
newskrq 活跃值 2007-7-8 09:58
19
0
让 我受用很多呀.好文章是百看不厌
游客
登录 | 注册 方可回帖
返回