首页
社区
课程
招聘
[原创]monkey Crackme #1 算法分析和delphi注册机代码实现
2006-7-24 16:04 5519

[原创]monkey Crackme #1 算法分析和delphi注册机代码实现

2006-7-24 16:04
5519
【文章标题】: monkey Crackme #1 算法分析和delphi注册机代码实现
【作    者】: testkey
【邮    箱】: pediytest@sina.com
【主    页】: http://bbs.pediy.com
【软件名称】: monkey crackme #1
【下载地址】: 本地下载
【保护方式】: 注册码
【工    具】: OD
【作者声明】: 仅做分析研究,无商业用途。
--------------------------------------------------------------------------------
【详细过程】
  
  
  注册名和注册码都为空时,通过注册,可能是一个没进行处理的BUG吧。
  
  注册码计算过程中用到下面的内容表数据:
  
  00D7A8F0  D0 61 46 00 6D CE BF 58  嗅F.m慰X
  
  ================================================================================================
  0046627A  |> /8B45 F8       /mov     eax, [ebp-8]
  0046627D  |. |8B55 F0       |mov     edx, [ebp-10]
  00466280  |. |8A4410 FF     |mov     al, [eax+edx-1]                 ;  用户名HEX
  00466284  |. |0FB755 EE     |movzx   edx, word ptr [ebp-12]          ;  4DE1 (后面为循环结果)
  00466288  |. |C1EA 08       |shr     edx, 8                          ;  结果 DIV $100
  0046628B  |. |32C2          |xor     aldl                          ;  对HEX和处理结果xor处理
  0046628D  |. |8845 F5       |mov     [ebp-B], al                     ;  处理结果
  00466290  |. |33C0          |xor     eaxeax
  00466292  |. |8A45 F5       |mov     al, [ebp-B]                     ;  处理结果数据
  00466295  |. |66:0345 EE    |add     ax, [ebp-12]                    ;  结果+4DE1(循环结果)
  00466299  |. |8B55 FC       |mov     edx, [ebp-4]                    ;  [0012F5EC]=00D7A8F0 查表
  0046629C  |. |66:F76A 04    |imul    word ptr [edx+4]                ;  取数据$CE6D   EAX*EDX 取低4位或者看作 MOD $10000
  004662A0  |. |8B55 FC       |mov     edx, [ebp-4]                    ;  [0012F5EC]=00D7A8F0 查表
  004662A3  |. |66:0342 06    |add     ax, [edx+6]                     ;  结果+$58BF
  004662A7  |. |66:8945 EE    |mov     [ebp-12], ax                    ;  结果MOD $10000  得到循环处理用到的数据
  004662AB  |. |8D4D E4       |lea     ecx, [ebp-1C]
  004662AE  |. |33C0          |xor     eaxeax
  004662B0  |. |8A45 F5       |mov     al, [ebp-B]                     ;  得到的XOR结果  
  004662B3  |. |BA 02000000   |mov     edx, 2
  004662B8  |. |E8 831CFAFF   |call    00407F40
  004662BD  |. |8B55 E4       |mov     edx, [ebp-1C]                   ;  转换HEX为字符连接为正确注册码
  004662C0  |. |8B45 08       |mov     eax, [ebp+8]
  004662C3  |. |E8 A0DFF9FF   |call    00404268
  004662C8  |. |8B45 08       |mov     eax, [ebp+8]
  004662CB  |. |FF45 F0       |inc     dword ptr [ebp-10]
  004662CE  |. |FF4D E8       |dec     dword ptr [ebp-18]
  004662D1  |.^\75 A7         \jnz     short 0046627A
  =======================================================
  
  var 
      a,b,c,l,i:Integer;
      name1,sn:String;
  begin
      name1:=Edit1.Text;
      l:=Length(edit1.text);
      if l=0 then exit;
      a:=$4de1;
      b:=0;
      c:=0;
      sn:='';
      for i:=1 to l do
      begin
        b:=ord(name1[i]);
        c:=(a div $100) xor b;
        a:=((((a+c)*$CE6D) mod $10000)+$58BF) mod $10000;
        sn:=sn+hextostr(c,2);
     end;
  
  edit2.Text:=sn;
  
  里面的数据处理 a shr 8 用了div实现
  
  计算后的eax结果用mod 处理实现取ax的值。
  
--------------------------------------------------------------------------------
【总结】
  比较简单,主要熟悉shr与div的转化,以及eax与ax之间的处理。
  
  刚学习delphi,一切都觉得困难,继续努力ing。
  
--------------------------------------------------------------------------------
【版权声明】: 转载请注明文章出自http://www.pediy.com

本代码的着色效果由xTiNt自动完成

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 7
打赏
分享
最新回复 (1)
雪    币: 370
活跃值: (78)
能力值: ( LV9,RANK:970 )
在线值:
发帖
回帖
粉丝
Ryosuke 24 2006-7-24 17:05
2
0
delphi的话可以用IDA载入,加上sig分析,这样的话,有很多的call都可以不用跟进的,难度会降低很多。
游客
登录 | 注册 方可回帖
返回