飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 3039|回复: 7

申请文章-通用数据格式转换工具dct v1.1算法分析

[复制链接]

该用户从未签到

发表于 2009-8-6 16:18:45 | 显示全部楼层 |阅读模式
软件:通用数据格式转换工具dct v1.1
语言:delphi

这个软件是明码字符串比较,就一个strcmp。不过目的不是破解,飘云老大说的找个软件实战分析算法。所以..
不过这个软件很恶心。验证很水。算法却很恶心。用了某个算法库的算法。所以逆了很久..

下面是注册按钮的响应函数:
  1. CODE:0055176C _TFrmRegPass_Button1Click proc near     ; CODE XREF: _TFrmRegPass_Edit1KeyPress+5p
  2. CODE:0055176C                                         ; DATA XREF: CODE:00551697o
  3. CODE:0055176C
  4. CODE:0055176C var_24          = dword ptr -24h
  5. CODE:0055176C pszInputKey     = dword ptr -20h
  6. CODE:0055176C pszMachineId    = dword ptr -1Ch
  7. CODE:0055176C pAryTempKey_1   = byte ptr -18h
  8. CODE:0055176C pszTempKey_2    = dword ptr -8
  9. CODE:0055176C pszRealKey      = dword ptr -4
  10. CODE:0055176C
  11. CODE:0055176C                 push    ebp
  12. CODE:0055176D                 mov     ebp, esp
  13. CODE:0055176F                 mov     ecx, 4
  14. CODE:00551774
  15. CODE:00551774 loc_551774:                             ; CODE XREF: _TFrmRegPass_Button1Click+Dj
  16. CODE:00551774                 push    0
  17. CODE:00551776                 push    0
  18. CODE:00551778                 dec     ecx
  19. CODE:00551779                 jnz     short loc_551774
  20. CODE:0055177B                 push    ecx
  21. CODE:0055177C                 push    ebx
  22. CODE:0055177D                 mov     ebx, eax
  23. CODE:0055177F                 xor     eax, eax
  24. CODE:00551781                 push    ebp
  25. CODE:00551782                 push    offset loc_551837 ; 异常处理
  26. CODE:00551787                 push    dword ptr fs:[eax]
  27. CODE:0055178A                 mov     fs:[eax], esp
  28. CODE:0055178D                 lea     eax, [ebp+pszMachineId]
  29. CODE:00551790                 call    __get_machine_id ; 获得文本框的硬件ID
  30. CODE:00551795                 mov     eax, [ebp+pszMachineId] ; 传入参数
  31. CODE:00551798                 lea     edx, [ebp+pAryTempKey_1] ; 传出参数
  32. CODE:0055179B                 call    __account_key_1 ; 第一次key计算
  33. CODE:005517A0                 lea     eax, [ebp+pAryTempKey_1] ; IN
  34. CODE:005517A3                 lea     edx, [ebp+pszTempKey_2] ; OUT
  35. CODE:005517A6                 call    __account_key_2 ; 第二次是把第一次计算得到的int n[4]数组转成字符串
  36. CODE:005517AB                 mov     eax, [ebp+pszTempKey_2] ; IN
  37. CODE:005517AE                 lea     edx, [ebp+pszRealKey] ; OUT
  38. CODE:005517B1                 call    __account_key_3 ; 最终注册码
  39. CODE:005517B6                 lea     edx, [ebp+pszInputKey]
  40. CODE:005517B9                 mov     eax, [ebx+304h]
  41. CODE:005517BF                 call    __get_user_input ; 获得用户输入
  42. CODE:005517C4                 mov     eax, [ebp+pszInputKey]
  43. CODE:005517C7                 mov     edx, [ebp+pszRealKey]
  44. CODE:005517CA                 call    __strcmp        ; 假码和真码比较
  45. CODE:005517CF                 jnz     short Jmp_To_False
  46. CODE:005517D1                 mov     eax, offset _str_________________4.Text
  47. CODE:005517D6                 call    __Dialogs_ShowMessage
  48. CODE:005517DB                 lea     edx, [ebp+var_24]
  49. CODE:005517DE                 mov     eax, [ebx+304h]
  50. CODE:005517E4                 call    __get_user_input
  51. CODE:005517E9                 mov     eax, [ebp+var_24]
  52. CODE:005517EC                 call    @TIdTCPConnection@GetInternalResponse_0 ; TIdTCPConnection::GetInternalResponse
  53. CODE:005517F1                 mov     dword ptr [ebx+24Ch], 1
  54. CODE:005517FB                 jmp     short loc_551807
  55. CODE:005517FD ; ---------------------------------------------------------------------------
  56. CODE:005517FD
  57. CODE:005517FD Jmp_To_False:                           ; CODE XREF: _TFrmRegPass_Button1Click+63j
  58. CODE:005517FD                 mov     eax, offset _str___________.Text
  59. CODE:00551802                 call    __Dialogs_ShowMessage
  60. CODE:00551807
  61. CODE:00551807 loc_551807:                             ; CODE XREF: _TFrmRegPass_Button1Click+8Fj
  62. CODE:00551807                 xor     eax, eax
  63. CODE:00551809                 pop     edx
  64. CODE:0055180A                 pop     ecx
  65. CODE:0055180B                 pop     ecx
  66. CODE:0055180C                 mov     fs:[eax], edx
  67. CODE:0055180F                 push    offset loc_55183E
  68. CODE:00551814
  69. CODE:00551814 loc_551814:                             ; CODE XREF: _TFrmRegPass_Button1Click+D0j
  70. CODE:00551814                 lea     eax, [ebp+var_24]
  71. CODE:00551817                 mov     edx, 2
  72. CODE:0055181C                 call    __LStrArrayClr
  73. CODE:00551821                 lea     eax, [ebp+pszMachineId]
  74. CODE:00551824                 call    __LStrClr
  75. CODE:00551829                 lea     eax, [ebp+pszTempKey_2]
  76. CODE:0055182C                 mov     edx, 2
  77. CODE:00551831                 call    __LStrArrayClr
  78. CODE:00551836                 retn
  79. CODE:00551837 ; ---------------------------------------------------------------------------
  80. CODE:00551837
  81. CODE:00551837 loc_551837:                             ; DATA XREF: _TFrmRegPass_Button1Click+16o
  82. CODE:00551837                 jmp     unknown_libname_75 ; BDS 2005-2006 and Delphi6-7 Visual Component Library
  83. CODE:0055183C ; ---------------------------------------------------------------------------
  84. CODE:0055183C                 jmp     short loc_551814
  85. CODE:0055183E ; ---------------------------------------------------------------------------
  86. CODE:0055183E
  87. CODE:0055183E loc_55183E:                             ; CODE XREF: _TFrmRegPass_Button1Click+CAj
  88. CODE:0055183E                                         ; DATA XREF: _TFrmRegPass_Button1Click+A3o
  89. CODE:0055183E                 pop     ebx
  90. CODE:0055183F                 mov     esp, ebp
  91. CODE:00551841                 pop     ebp
  92. CODE:00551842                 retn
  93. CODE:00551842 _TFrmRegPass_Button1Click endp
复制代码
逆向代码:
  1. void Account_Key(string sId,string& sRealKey)
  2. {
  3.         int nAry[16] = {0};
  4.         Account_Key_1(sId, nAry);
  5.         string si2a;
  6.         Account_Key_2(si2a,(char*)&nAry);
  7.         Account_Key_3(sRealKey,si2a);
  8. }
复制代码
__account_key_1函数怀疑是某算法库里的算法,可惜我算法太白菜。所以不知道是什么算法。
  1. CODE:0054C80C __account_key_1 proc near               ; CODE XREF: sub_54DE3C+39p
  2. CODE:0054C80C                                         ; _TFrmRegPass_Button1Click+2Fp
  3. CODE:0054C80C
  4. CODE:0054C80C stMachine       = byte ptr -5Ch
  5. CODE:0054C80C pszInStr        = dword ptr -4
  6. CODE:0054C80C
  7. CODE:0054C80C                 push    ebp
  8. CODE:0054C80D                 mov     ebp, esp
  9. CODE:0054C80F                 add     esp, 0FFFFFFA4h
  10. CODE:0054C812                 push    ebx
  11. CODE:0054C813                 mov     ebx, edx        ; pOut
  12. CODE:0054C815                 mov     [ebp+pszInStr], eax
  13. CODE:0054C818                 mov     eax, [ebp+pszInStr]
  14. CODE:0054C81B                 call    __LStrAddRef    ; 引用计数
  15. CODE:0054C820                 xor     eax, eax
  16. CODE:0054C822                 push    ebp
  17. CODE:0054C823                 push    offset loc_54C872 ; 注册异常函数
  18. CODE:0054C828                 push    dword ptr fs:[eax]
  19. CODE:0054C82B                 mov     fs:[eax], esp
  20. CODE:0054C82E                 lea     eax, [ebp+stMachine]
  21. CODE:0054C831                 call    __Struct_Init   ; st_machine结构体初始化 = {0x61234509,0xEFCD5B89,0x13BA7CFE,0x18325476,0,0,""}
  22. CODE:0054C836                 mov     eax, [ebp+pszInStr]
  23. CODE:0054C839                 call    __get_str_lenth ; delphi字符串格式是:字符串长度+字符串
  24. CODE:0054C83E                 push    eax             ; string lenth
  25. CODE:0054C83F                 mov     eax, [ebp+pszInStr]
  26. CODE:0054C842                 call    __LStrToPChar
  27. CODE:0054C847                 mov     edx, eax
  28. CODE:0054C849                 lea     eax, [ebp+stMachine]
  29. CODE:0054C84C                 pop     ecx             ; 字符串的长度
  30. CODE:0054C84D                 call    __Struct_Edit_1 ; 结构体中数据运算
  31. CODE:0054C852                 mov     edx, ebx
  32. CODE:0054C854                 lea     eax, [ebp+stMachine]
  33. CODE:0054C857                 call    __Matrix_Account ; 第一次返回的key的计算函数
  34. CODE:0054C85C                 xor     eax, eax
  35. CODE:0054C85E                 pop     edx
  36. CODE:0054C85F                 pop     ecx
  37. CODE:0054C860                 pop     ecx
  38. CODE:0054C861                 mov     fs:[eax], edx
  39. CODE:0054C864                 push    offset loc_54C879
  40. CODE:0054C869
  41. CODE:0054C869 loc_54C869:                             ; CODE XREF: __account_key_1+6Bj
  42. CODE:0054C869                 lea     eax, [ebp+pszInStr]
  43. CODE:0054C86C                 call    __LStrClr
  44. CODE:0054C871                 retn
  45. CODE:0054C872 ; ---------------------------------------------------------------------------
  46. CODE:0054C872
  47. CODE:0054C872 loc_54C872:                             ; DATA XREF: __account_key_1+17o
  48. CODE:0054C872                 jmp     unknown_libname_75 ; BDS 2005-2006 and Delphi6-7 Visual Component Library
  49. CODE:0054C877 ; ---------------------------------------------------------------------------
  50. CODE:0054C877                 jmp     short loc_54C869
  51. CODE:0054C879 ; ---------------------------------------------------------------------------
  52. CODE:0054C879
  53. CODE:0054C879 loc_54C879:                             ; CODE XREF: __account_key_1+65j
  54. CODE:0054C879                                         ; DATA XREF: __account_key_1+58o
  55. CODE:0054C879                 pop     ebx
  56. CODE:0054C87A                 mov     esp, ebp
  57. CODE:0054C87C                 pop     ebp
  58. CODE:0054C87D                 retn
  59. CODE:0054C87D __account_key_1 endp
复制代码
逆向代码:
  1. void Account_Key_1(string sId, int* pAry)
  2. {
  3.         //初始化结构体
  4.         tagKey stKey = {0x61234509,0xEFCD5B89,0x13BA7CFE,0x18325476,0,0,""};
  5.         int nLenth = sId.length();
  6.        
  7.         Struct_Edit_1((char*)&stKey,(char*)sId.c_str(),nLenth);

  8.         Matrix_Account(stKey,pAry);

  9.         memcpy(pAry, &stKey, 16);

  10. }
复制代码
  1. CODE:0054C880 __account_key_2 proc near               ; CODE XREF: sub_54DE3C+44p
  2. CODE:0054C880                                         ; _TFrmRegPass_Button1Click+3Ap
  3. CODE:0054C880
  4. CODE:0054C880 var_18          = dword ptr -18h
  5. CODE:0054C880 var_14          = dword ptr -14h
  6. CODE:0054C880 pnAry           = byte ptr -10h
  7. CODE:0054C880
  8. CODE:0054C880                 push    ebp
  9. CODE:0054C881                 mov     ebp, esp
  10. CODE:0054C883                 add     esp, 0FFFFFFE8h
  11. CODE:0054C886                 push    ebx
  12. CODE:0054C887                 push    esi
  13. CODE:0054C888                 push    edi
  14. CODE:0054C889                 xor     ecx, ecx
  15. CODE:0054C88B                 mov     [ebp+var_14], ecx
  16. CODE:0054C88E                 mov     [ebp+var_18], ecx
  17. CODE:0054C891                 mov     esi, eax
  18. CODE:0054C893                 lea     edi, [ebp+pnAry]
  19. CODE:0054C896                 movsd                   ; 数组拷贝
  20. CODE:0054C897                 movsd                   ; dword ptr:[esi] -> dword ptr:[edi]
  21. CODE:0054C898                 movsd
  22. CODE:0054C899                 movsd
  23. CODE:0054C89A                 mov     edi, edx
  24. CODE:0054C89C                 xor     eax, eax
  25. CODE:0054C89E                 push    ebp
  26. CODE:0054C89F                 push    offset loc_54C91B ; int
  27. CODE:0054C8A4                 push    dword ptr fs:[eax] ; int
  28. CODE:0054C8A7                 mov     fs:[eax], esp
  29. CODE:0054C8AA                 mov     eax, edi
  30. CODE:0054C8AC                 call    __LStrClr
  31. CODE:0054C8B1                 mov     bl, 10h
  32. CODE:0054C8B3                 lea     esi, [ebp+pnAry] ;
  33. CODE:0054C8B3                                         ; do
  34. CODE:0054C8B3                                         ; {
  35. CODE:0054C8B3                                         ; }while(--16)
  36. CODE:0054C8B6
  37. CODE:0054C8B6 loc_54C8B6:                             ; CODE XREF: __account_key_2+7Ej
  38. CODE:0054C8B6                 push    dword ptr [edi] ; int to string; int数组转成字符串
  39. CODE:0054C8B8                 lea     eax, [ebp+var_14]
  40. CODE:0054C8BB                 xor     edx, edx
  41. CODE:0054C8BD                 mov     dl, [esi]
  42. CODE:0054C8BF                 shr     edx, 4
  43. CODE:0054C8C2                 and     edx, 0Fh
  44. CODE:0054C8C5                 mov     dl, ds:byte_557F54[edx]
  45. CODE:0054C8CB                 call    __itoa          ; BDS 2005-2006 and Delphi6-7 Visual Component Library
  46. CODE:0054C8D0                 push    [ebp+var_14]    ; int
  47. CODE:0054C8D3                 lea     eax, [ebp+var_18]
  48. CODE:0054C8D6                 mov     dl, [esi]
  49. CODE:0054C8D8                 and     dl, 0Fh
  50. CODE:0054C8DB                 and     edx, 0FFh
  51. CODE:0054C8E1                 mov     dl, ds:byte_557F54[edx]
  52. CODE:0054C8E7                 call    __itoa          ; BDS 2005-2006 and Delphi6-7 Visual Component Library
  53. CODE:0054C8EC                 push    [ebp+var_18]
  54. CODE:0054C8EF                 mov     eax, edi
  55. CODE:0054C8F1                 mov     edx, 3
  56. CODE:0054C8F6                 call    __strcat     ;字符串连接
  57. CODE:0054C8FB                 inc     esi
  58. CODE:0054C8FC                 dec     bl
  59. CODE:0054C8FE                 jnz     short loc_54C8B6
  60. CODE:0054C900                 xor     eax, eax
  61. CODE:0054C902                 pop     edx
  62. CODE:0054C903                 pop     ecx
  63. CODE:0054C904                 pop     ecx
  64. CODE:0054C905                 mov     fs:[eax], edx
  65. CODE:0054C908                 push    offset loc_54C922
  66. CODE:0054C90D
  67. CODE:0054C90D loc_54C90D:                             ; CODE XREF: __account_key_2+A0j
  68. CODE:0054C90D                 lea     eax, [ebp+var_18]
  69. CODE:0054C910                 mov     edx, 2
  70. CODE:0054C915                 call    __LStrArrayClr
  71. CODE:0054C91A                 retn
  72. CODE:0054C91B ; ---------------------------------------------------------------------------
  73. CODE:0054C91B
  74. CODE:0054C91B loc_54C91B:                             ; DATA XREF: __account_key_2+1Fo
  75. CODE:0054C91B                 jmp     unknown_libname_75 ; BDS 2005-2006 and Delphi6-7 Visual Component Library
  76. CODE:0054C920 ; ---------------------------------------------------------------------------
  77. CODE:0054C920                 jmp     short loc_54C90D
  78. CODE:0054C922 ; ---------------------------------------------------------------------------
  79. CODE:0054C922
  80. CODE:0054C922 loc_54C922:                             ; CODE XREF: __account_key_2+9Aj
  81. CODE:0054C922                                         ; DATA XREF: __account_key_2+88o
  82. CODE:0054C922                 pop     edi
  83. CODE:0054C923                 pop     esi
  84. CODE:0054C924                 pop     ebx
  85. CODE:0054C925                 mov     esp, ebp
  86. CODE:0054C927                 pop     ebp
  87. CODE:0054C928                 retn
  88. CODE:0054C928 __account_key_2 endp
复制代码
第二次只是把第一次算key得到的一个4个int的数组转成字符串,所以我自己写了个功能一样的
逆向代码:
  1. void Account_Key_2(string& sKey, char* pAry)
  2. {
  3.        
  4.         for (int n = 0; n < 16; n++)
  5.         {
  6.                 char buffer[5] = {0};
  7.                 //itoa(unsigned char(pAry[n]),buffer,16);
  8.                 sprintf_s(buffer,"%02x",unsigned char(pAry[n]));
  9.                 sKey += buffer;
  10.         }
  11. }
复制代码
第三次传入第二次返回的字符串,传出的是最后的key
  1. CODE:0054D3FC __account_key_3 proc near               ; CODE XREF: sub_54DE3C+4Fp
  2. CODE:0054D3FC                                         ; _TFrmRegPass_Button1Click+45p
  3. CODE:0054D3FC
  4. CODE:0054D3FC var_C           = dword ptr -0Ch
  5. CODE:0054D3FC pszTempBuffer   = dword ptr -8
  6. CODE:0054D3FC pszInStr        = dword ptr -4
  7. CODE:0054D3FC
  8. CODE:0054D3FC                 push    ebp
  9. CODE:0054D3FD                 mov     ebp, esp
  10. CODE:0054D3FF                 push    0
  11. CODE:0054D401                 push    0
  12. CODE:0054D403                 push    0
  13. CODE:0054D405                 push    ebx
  14. CODE:0054D406                 push    esi
  15. CODE:0054D407                 push    edi
  16. CODE:0054D408                 mov     edi, edx
  17. CODE:0054D40A                 mov     [ebp+pszInStr], eax
  18. CODE:0054D40D                 mov     eax, [ebp+pszInStr]
  19. CODE:0054D410                 call    __LStrAddRef
  20. CODE:0054D415                 xor     eax, eax
  21. CODE:0054D417                 push    ebp             ; int
  22. CODE:0054D418                 push    offset loc_54D4AF ; char *
  23. CODE:0054D41D                 push    dword ptr fs:[eax] ; int
  24. CODE:0054D420                 mov     fs:[eax], esp
  25. CODE:0054D423                 lea     edx, [ebp+pszTempBuffer]
  26. CODE:0054D426                 mov     eax, [ebp+pszInStr]
  27. CODE:0054D429                 call    __clean_letter_from_str ; 去除字符串中的字母(a b c d e f)
  28. CODE:0054D42E                 mov     edx, [ebp+pszTempBuffer]
  29. CODE:0054D431                 lea     eax, [ebp+pszInStr]
  30. CODE:0054D434                 call    __LStrLAsg      ; eax中字符串和edx做交换
  31. CODE:0054D439                 mov     eax, edi
  32. CODE:0054D43B                 call    __LStrClr
  33. CODE:0054D440                 mov     eax, [ebp+pszInStr]
  34. CODE:0054D443                 call    __get_str_lenth
  35. CODE:0054D448                 mov     esi, eax
  36. CODE:0054D44A                 test    esi, esi
  37. CODE:0054D44C                 jle     short loc_54D482
  38. CODE:0054D44E                 mov     ebx, 1          ;
  39. CODE:0054D44E                                         ; do
  40. CODE:0054D44E                                         ; {
  41. CODE:0054D44E                                         ;     //key算法
  42. CODE:0054D44E                                         ; }while(--string_lenth)
  43. CODE:0054D453
  44. CODE:0054D453 loc_54D453:                             ; CODE XREF: __account_key_3+84j
  45. CODE:0054D453                 mov     eax, ebx
  46. CODE:0054D455                 and     eax, 80000001h  ; % 2
  47. CODE:0054D45A                 jns     short loc_54D461
  48. CODE:0054D45C                 dec     eax
  49. CODE:0054D45D                 or      eax, 0FFFFFFFEh
  50. CODE:0054D460                 inc     eax
  51. CODE:0054D461
  52. CODE:0054D461 loc_54D461:                             ; CODE XREF: __account_key_3+5Ej
  53. CODE:0054D461                 test    eax, eax
  54. CODE:0054D463                 jnz     short loc_54D47E ; % 2不等于0则跳
  55. CODE:0054D465                 lea     eax, [ebp+var_C]
  56. CODE:0054D468                 mov     edx, [ebp+pszInStr]
  57. CODE:0054D46B                 mov     dl, [edx+ebx-1]
  58. CODE:0054D46F                 call    __itoa          ; BDS 2005-2006 and Delphi6-7 Visual Component Library
  59. CODE:0054D474                 mov     edx, [ebp+var_C]
  60. CODE:0054D477                 mov     eax, edi
  61. CODE:0054D479                 call    __LStrCat
  62. CODE:0054D47E
  63. CODE:0054D47E loc_54D47E:                             ; CODE XREF: __account_key_3+67j
  64. CODE:0054D47E                 inc     ebx
  65. CODE:0054D47F                 dec     esi
  66. CODE:0054D480                 jnz     short loc_54D453
  67. CODE:0054D482
  68. CODE:0054D482 loc_54D482:                             ; CODE XREF: __account_key_3+50j
  69. CODE:0054D482                 push    edi
  70. CODE:0054D483                 mov     eax, [edi]
  71. CODE:0054D485                 mov     ecx, 0Ch
  72. CODE:0054D48A                 mov     edx, 1
  73. CODE:0054D48F                 call    __LStrCopy
  74. CODE:0054D494                 xor     eax, eax
  75. CODE:0054D496                 pop     edx
  76. CODE:0054D497                 pop     ecx
  77. CODE:0054D498                 pop     ecx
  78. CODE:0054D499                 mov     fs:[eax], edx
  79. CODE:0054D49C                 push    offset loc_54D4B6
  80. CODE:0054D4A1
  81. CODE:0054D4A1 loc_54D4A1:                             ; CODE XREF: __account_key_3+B8j
  82. CODE:0054D4A1                 lea     eax, [ebp+var_C]
  83. CODE:0054D4A4                 mov     edx, 3
  84. CODE:0054D4A9                 call    __LStrArrayClr
  85. CODE:0054D4AE                 retn
  86. CODE:0054D4AF ; ---------------------------------------------------------------------------
  87. CODE:0054D4AF
  88. CODE:0054D4AF ; char loc_54D4AF
  89. CODE:0054D4AF loc_54D4AF:                             ; DATA XREF: __account_key_3+1Co
  90. CODE:0054D4AF                 jmp     unknown_libname_75 ; BDS 2005-2006 and Delphi6-7 Visual Component Library
  91. CODE:0054D4B4 ; ---------------------------------------------------------------------------
  92. CODE:0054D4B4                 jmp     short loc_54D4A1
  93. CODE:0054D4B6 ; ---------------------------------------------------------------------------
  94. CODE:0054D4B6
  95. CODE:0054D4B6 loc_54D4B6:                             ; CODE XREF: __account_key_3+B2j
  96. CODE:0054D4B6                                         ; DATA XREF: __account_key_3+A0o
  97. CODE:0054D4B6                 pop     edi
  98. CODE:0054D4B7                 pop     esi
  99. CODE:0054D4B8                 pop     ebx
  100. CODE:0054D4B9                 mov     esp, ebp
  101. CODE:0054D4BB                 pop     ebp
  102. CODE:0054D4BC                 retn
  103. CODE:0054D4BC __account_key_3 endp
复制代码
逆向代码:
//第三次key运算
  1. void Account_Key_3(string& sRealKey, string sKey)
  2. {
  3.         string sTempKey;
  4.         int nLenth = sKey.length();
  5.         int n;
  6.         for ( n = 0; n < nLenth; n++)
  7.         {
  8.                 switch (sKey[n])
  9.                 {
  10.                 case '0':
  11.                 case '1':
  12.                 case '2':
  13.                 case '3':
  14.                 case '4':
  15.                 case '5':
  16.                 case '6':
  17.                 case '7':
  18.                 case '8':
  19.                 case '9':
  20.                         sTempKey += sKey[n];
  21.                         break;
  22.                 default:
  23.                         break;
  24.                 }
  25.         }

  26.         nLenth = sTempKey.length();
  27.         if ( nLenth > 0)
  28.         {
  29.                 int nTemp = 1;
  30.                 char* pTempKey = (char*)sTempKey.c_str();
  31.                 do
  32.                 {
  33.                         if ( (nTemp % 2) == 0 )
  34.                         {
  35.                                 char c = *(char*)(pTempKey + nTemp - 1);
  36.                                 sRealKey += c;
  37.                         }
  38.                         nTemp++;
  39.                         nLenth--;
  40.                 } while (nLenth);
  41.         }
  42. }
复制代码
//////////////////////////////////////////////////////////////////////////
//__account_key_1中调用的函数:
  1. CODE:0054C718 __Struct_Edit_1 proc near               ; CODE XREF: __Matrix_Account+42p
  2. CODE:0054C718                                         ; __Matrix_Account+50p ...
  3. CODE:0054C718                 push    ebx
  4. CODE:0054C719                 push    esi
  5. CODE:0054C71A                 push    edi
  6. CODE:0054C71B                 push    ebp
  7. CODE:0054C71C                 mov     edi, ecx        ; 参数,长度
  8. CODE:0054C71E                 mov     ebp, edx        ; 参数
  9. CODE:0054C720                 mov     esi, eax        ; 参数,p
  10. CODE:0054C722                 mov     eax, [esi+st_machine.nUnknow_5]
  11. CODE:0054C725                 shr     eax, 3
  12. CODE:0054C728                 and     eax, 3Fh
  13. CODE:0054C72B                 mov     edx, edi
  14. CODE:0054C72D                 shl     edx, 3          ; * 8
  15. CODE:0054C730                 add     [esi+st_machine.nUnknow_5], edx
  16. CODE:0054C733                 cmp     edx, [esi+st_machine.nUnknow_5]
  17. CODE:0054C736                 jbe     short loc_54C73B
  18. CODE:0054C738                 inc     dword ptr [esi+14h]
  19. CODE:0054C73B
  20. CODE:0054C73B loc_54C73B:                             ; CODE XREF: __Struct_Edit_1+1Ej
  21. CODE:0054C73B                 mov     edx, edi
  22. CODE:0054C73D                 shr     edx, 1Dh        ;  >> 29
  23. CODE:0054C740                 add     [esi+14h], edx
  24. CODE:0054C743                 mov     ebx, 40h
  25. CODE:0054C748                 sub     ebx, eax
  26. CODE:0054C74A                 cmp     ebx, edi
  27. CODE:0054C74C                 ja      short loc_54C780 ; >
  28. CODE:0054C74E                 lea     eax, [esi+eax+18h]
  29. CODE:0054C752                 mov     ecx, ebx
  30. CODE:0054C754                 mov     edx, ebp
  31. CODE:0054C756                 call    __memcpy
  32. CODE:0054C75B                 mov     edx, esi
  33. CODE:0054C75D                 lea     eax, [esi+18h]
  34. CODE:0054C760                 call    struct_account
  35. CODE:0054C765                 jmp     short loc_54C775
  36. CODE:0054C767 ; ---------------------------------------------------------------------------
  37. CODE:0054C767
  38. CODE:0054C767 loc_54C767:                             ; CODE XREF: __Struct_Edit_1+62j
  39. CODE:0054C767                 mov     edx, esi
  40. CODE:0054C769                 lea     eax, [ebp+ebx+0]
  41. CODE:0054C76D                 call    struct_account
  42. CODE:0054C772                 add     ebx, 40h
  43. CODE:0054C775
  44. CODE:0054C775 loc_54C775:                             ; CODE XREF: __Struct_Edit_1+4Dj
  45. CODE:0054C775                 lea     eax, [ebx+3Fh]
  46. CODE:0054C778                 cmp     edi, eax
  47. CODE:0054C77A                 ja      short loc_54C767
  48. CODE:0054C77C                 xor     eax, eax
  49. CODE:0054C77E                 jmp     short loc_54C782
  50. CODE:0054C780 ; ---------------------------------------------------------------------------
  51. CODE:0054C780
  52. CODE:0054C780 loc_54C780:                             ; CODE XREF: __Struct_Edit_1+34j
  53. CODE:0054C780                 xor     ebx, ebx
  54. CODE:0054C782
  55. CODE:0054C782 loc_54C782:                             ; CODE XREF: __Struct_Edit_1+66j
  56. CODE:0054C782                 lea     eax, [esi+eax+st_machine.szMachineId]
  57. CODE:0054C786                 mov     ecx, edi
  58. CODE:0054C788                 sub     ecx, ebx
  59. CODE:0054C78A                 lea     edx, [ebp+ebx+0] ; user input string
  60. CODE:0054C78E                 call    __memcpy
  61. CODE:0054C793                 pop     ebp
  62. CODE:0054C794                 pop     edi
  63. CODE:0054C795                 pop     esi
  64. CODE:0054C796                 pop     ebx
  65. CODE:0054C797                 retn
  66. CODE:0054C797 __Struct_Edit_1 endp
复制代码
逆向代码:
  1. //pv1 = eax, pv2 = edx, nLenth = ecx
  2. void Struct_Edit_1(char* pv1, char* pv2,int nLenth)
  3. {
  4.         int v2 = (*(DWORD*)(pv1 + 16) >> 3) & 0x3F;
  5.         *(DWORD*)(pv1 + 16) += 8 * nLenth;
  6.         if ( 8 * nLenth > *(DWORD*)(pv1 + 16) )
  7.                 ++*(DWORD*)(pv1 + 20);
  8.         *(DWORD*)(pv1 + 20) += nLenth >> 29;
  9.         int v5 = 64 - v2;
  10.         if ( v5 <= nLenth )
  11.         {
  12.                 memcpy((void*)(pv1 + v2 + 0x18),pv2,v5);
  13.                 Struct_Account(pv1, pv1+0x18);
  14.                 //_memcpy();
  15.                 //ary_account();
  16.                 while ( nLenth > v5 + 63 )
  17.                 {
  18.                         Struct_Account(pv1, pv2 + v5);
  19.                         //ary_account();
  20.                         v5 += 64;
  21.                 }
  22.                 v2 = 0;
  23.         }
  24.         else
  25.         {
  26.                 v5 = 0;
  27.         }
  28.         memcpy(pv1+v2+0x18, pv2+v5, nLenth - v5);

  29. }
复制代码
函数太长,省略一部分。
  1. CODE:0054BFB4 struct_account  proc near               ; CODE XREF: __Struct_Edit_1+48p
  2. CODE:0054BFB4                                         ; __Struct_Edit_1+55p
  3. CODE:0054BFB4
  4. CODE:0054BFB4                 push    ebx
  5. CODE:0054BFB5                 push    esi
  6. CODE:0054BFB6                 push    edi
  7. CODE:0054BFB7                 push    ebp
  8. CODE:0054BFB8                 add     esp, 0FFFFFFA8h
  9. CODE:0054BFBB                 mov     [esp+4], edx
  10. CODE:0054BFBF                 mov     [esp], eax
  11. CODE:0054BFC2                 lea     ebx, [esp+8]
  12. CODE:0054BFC6                 lea     esi, [esp+0Ch]
  13. CODE:0054BFCA                 lea     edi, [esp+10h]
  14. CODE:0054BFCE                 lea     ebp, [esp+14h]
  15. CODE:0054BFD2                 lea     edx, [esp+18h]
  16. CODE:0054BFD6                 mov     ecx, 40h
  17. CODE:0054BFDB                 mov     eax, [esp]
  18. CODE:0054BFDE                 call    Account_Func_1
  19. CODE:0054BFE3                 mov     eax, [esp+4]
  20. CODE:0054BFE7                 mov     eax, [eax]
  21. CODE:0054BFE9                 mov     [ebx], eax
  22. CODE:0054BFEB                 mov     eax, [esp+4]
  23. CODE:0054BFEF                 mov     eax, [eax+4]
  24. CODE:0054BFF2                 mov     [esi], eax
  25. CODE:0054BFF4                 mov     eax, [esp+4]
  26. CODE:0054BFF8                 mov     eax, [eax+8]
  27. CODE:0054BFFB                 mov     [edi], eax
  28. CODE:0054BFFD                 mov     eax, [esp+4]
  29. CODE:0054C001                 mov     eax, [eax+0Ch]
  30. CODE:0054C004                 mov     [ebp+0], eax
  31. CODE:0054C007                 mov     eax, [ebp+0]
  32. CODE:0054C00A                 push    eax
  33. CODE:0054C00B                 mov     eax, [esp+1Ch]
  34. CODE:0054C00F                 push    eax
  35. CODE:0054C010                 push    7
  36. CODE:0054C012                 push    0D76AA478h
  37. CODE:0054C017                 mov     eax, ebx
  38. CODE:0054C019                 mov     ecx, [edi]
  39. CODE:0054C01B                 mov     edx, [esi]
  40. CODE:0054C01D                 call    Account_Func_2
  41. ……(省略)
  42. CODE:0054C1B3                 mov     eax, [ebp+0]
  43. CODE:0054C1B6                 push    eax
  44. CODE:0054C1B7                 mov     eax, [esp+20h]
  45. CODE:0054C1BB                 push    eax
  46. CODE:0054C1BC                 push    5
  47. CODE:0054C1BE                 push    0F61E2562h
  48. CODE:0054C1C3                 mov     eax, ebx
  49. CODE:0054C1C5                 mov     ecx, [edi]
  50. CODE:0054C1C7                 mov     edx, [esi]
  51. CODE:0054C1C9                 call    Account_Func_5
  52. ……(省略)
  53. CODE:0054C35F                 mov     eax, [ebp+0]
  54. CODE:0054C362                 push    eax
  55. CODE:0054C363                 mov     eax, [esp+30h]
  56. CODE:0054C367                 push    eax
  57. CODE:0054C368                 push    4
  58. CODE:0054C36A                 push    0FFFA3942h
  59. CODE:0054C36F                 mov     eax, ebx
  60. CODE:0054C371                 mov     ecx, [edi]
  61. CODE:0054C373                 mov     edx, [esi]
  62. CODE:0054C375                 call    Account_Func_7
  63. ……(省略)
  64. CODE:0054C50B                 mov     eax, [ebp+0]
  65. CODE:0054C50E                 push    eax
  66. CODE:0054C50F                 mov     eax, [esp+1Ch]
  67. CODE:0054C513                 push    eax
  68. CODE:0054C514                 push    6
  69. CODE:0054C516                 push    0F4292244h
  70. CODE:0054C51B                 mov     eax, ebx
  71. CODE:0054C51D                 mov     ecx, [edi]
  72. CODE:0054C51F                 mov     edx, [esi]
  73. CODE:0054C521                 call    Account_Func_9
  74. ……(省略)
  75. CODE:0054C6B7                 mov     eax, [esp+4]
  76. CODE:0054C6BB                 mov     edx, [ebx]
  77. CODE:0054C6BD                 add     [eax], edx
  78. CODE:0054C6BF                 mov     eax, [esp+4]
  79. CODE:0054C6C3                 mov     edx, [esi]
  80. CODE:0054C6C5                 add     [eax+4], edx
  81. CODE:0054C6C8                 mov     eax, [esp+4]
  82. CODE:0054C6CC                 mov     edx, [edi]
  83. CODE:0054C6CE                 add     [eax+8], edx
  84. CODE:0054C6D1                 mov     eax, [esp+4]
  85. CODE:0054C6D5                 mov     edx, [ebp+0]
  86. CODE:0054C6D8                 add     [eax+0Ch], edx
  87. CODE:0054C6DB                 add     esp, 58h
  88. CODE:0054C6DE                 pop     ebp
  89. CODE:0054C6DF                 pop     edi
  90. CODE:0054C6E0                 pop     esi
  91. CODE:0054C6E1                 pop     ebx
  92. CODE:0054C6E2                 retn
  93. CODE:0054C6E2 struct_account  endp
复制代码
逆向代码:
  1. void Struct_Account(char* pEdx, char* pEax)
  2. {
  3.         int nAry[22] = {0};
  4.         nAry[1] = (int)pEdx;
  5.         nAry[0] = (int)pEax;
  6.         Account_Func_1((int*)nAry[0], (int*)&nAry[6],0x40);

  7.         nAry[2] = *(int*)pEdx;
  8.         nAry[3] = *(int*)(pEdx + 4);
  9.         nAry[4] = *(int*)(pEdx + 8);
  10.         nAry[5] = *(int*)(pEdx + 0xC);

  11.         Account_Func_2( 0x0D76AA478, 7, nAry[6], nAry[5], &nAry[2], nAry[4], nAry[3]);
  12.         ……(省略)

  13.         Account_Func_5( 0xF61E2562, 5, nAry[7], nAry[5], &nAry[2], nAry[4], nAry[3]);
  14.         ……(省略)

  15.         Account_Func_7( 0xFFFA3942, 4, nAry[11], nAry[5], &nAry[2], nAry[4], nAry[3]);
  16.         ……(省略)

  17.         Account_Func_9( 0xF4292244, 6, nAry[6], nAry[5], &nAry[2], nAry[4], nAry[3]);
  18.         ……(省略)

  19.         *(DWORD*)pEdx += nAry[2];
  20.         *(DWORD*)(pEdx + 4) += nAry[3];
  21.         *(DWORD*)(pEdx + 8) += nAry[4];
  22.         *(DWORD*)(pEdx + 0xC) += nAry[5];
  23. }
复制代码
  1. CODE:0054BF40 Account_Func_1  proc near               ; CODE XREF: struct_account+2Ap
  2. CODE:0054BF40                 push    ebx
  3. CODE:0054BF41                 shr     ecx, 2
  4. CODE:0054BF44                 test    ecx, ecx
  5. CODE:0054BF46                 jbe     short loc_54BF73
  6. CODE:0054BF48 loc_54BF48:                             ; CODE XREF: Account_Func_1+31j
  7. CODE:0054BF48                 xor     ebx, ebx
  8. CODE:0054BF4A                 mov     bl, [eax]
  9. CODE:0054BF4C                 mov     [edx], ebx
  10. CODE:0054BF4E                 inc     eax
  11. CODE:0054BF4F                 xor     ebx, ebx
  12. CODE:0054BF51                 mov     bl, [eax]
  13. CODE:0054BF53                 shl     ebx, 8
  14. CODE:0054BF56                 or      [edx], ebx
  15. CODE:0054BF58                 inc     eax
  16. CODE:0054BF59                 xor     ebx, ebx
  17. CODE:0054BF5B                 mov     bl, [eax]
  18. CODE:0054BF5D                 shl     ebx, 10h
  19. CODE:0054BF60                 or      [edx], ebx
  20. CODE:0054BF62                 inc     eax
  21. CODE:0054BF63                 xor     ebx, ebx
  22. CODE:0054BF65                 mov     bl, [eax]
  23. CODE:0054BF67                 shl     ebx, 18h
  24. CODE:0054BF6A                 or      [edx], ebx
  25. CODE:0054BF6C                 inc     eax
  26. CODE:0054BF6D                 add     edx, 4
  27. CODE:0054BF70                 dec     ecx
  28. CODE:0054BF71                 jnz     short loc_54BF48
  29. CODE:0054BF73 loc_54BF73:                             ; CODE XREF: Account_Func_1+6j
  30. CODE:0054BF73                 pop     ebx
  31. CODE:0054BF74                 retn
  32. CODE:0054BF74 Account_Func_1  endp
复制代码
逆向代码:
  1. void Account_Func_1(int* pEax, int* pEdx, int nEcx)
  2. {
  3.         int i, v4;
  4.         for ( i = nEcx >> 2; i; --i )
  5.         {
  6.                 *(DWORD*)pEdx = *(unsigned char*)pEax;
  7.                 v4 = (int)pEax + 1;
  8.                 *(DWORD*)pEdx |= *(unsigned char*)v4 << 8;
  9.                 v4++;
  10.                 *(DWORD*)pEdx |= *(unsigned char*)v4 << 16;
  11.                 v4++;
  12.                 *(DWORD*)pEdx |= *(unsigned char*)v4 << 24;
  13.                 pEax = (int*)(v4 + 1);
  14.                 //edx += 4;
  15.                 pEdx++;
  16.         }
  17. }
复制代码
  1. CODE:0054BE70 Account_Func_2  proc near               ; CODE XREF: struct_account+69p
  2. CODE:0054BE70                                         ; struct_account+83p ...
  3. CODE:0054BE70
  4. CODE:0054BE70 arg_0           = dword ptr  8
  5. CODE:0054BE70 arg_4           = byte ptr  0Ch
  6. CODE:0054BE70 arg_8           = dword ptr  10h
  7. CODE:0054BE70 arg_C           = dword ptr  14h
  8. CODE:0054BE70
  9. CODE:0054BE70                 push    ebp
  10. CODE:0054BE71                 mov     ebp, esp
  11. CODE:0054BE73                 push    ebx
  12. CODE:0054BE74                 push    esi
  13. CODE:0054BE75                 push    edi
  14. CODE:0054BE76                 mov     edi, ecx
  15. CODE:0054BE78                 mov     esi, edx
  16. CODE:0054BE7A                 mov     ebx, eax
  17. CODE:0054BE7C                 mov     ecx, [ebp+arg_C]
  18. CODE:0054BE7F                 mov     edx, edi
  19. CODE:0054BE81                 mov     eax, esi
  20. CODE:0054BE83                 call    Account_Func_3
  21. CODE:0054BE88                 add     eax, [ebp+arg_8]
  22. CODE:0054BE8B                 add     eax, [ebp+arg_0]
  23. CODE:0054BE8E                 add     [ebx], eax
  24. CODE:0054BE90                 mov     eax, ebx
  25. CODE:0054BE92                 mov     dl, [ebp+arg_4]
  26. CODE:0054BE95                 call    Account_Func_4
  27. CODE:0054BE9A                 add     [ebx], esi
  28. CODE:0054BE9C                 pop     edi
  29. CODE:0054BE9D                 pop     esi
  30. CODE:0054BE9E                 pop     ebx
  31. CODE:0054BE9F                 pop     ebp
  32. CODE:0054BEA0                 retn    10h
  33. CODE:0054BEA0 Account_Func_2  endp
复制代码
逆向代码:
  1. void Account_Func_2(unsigned int n, char m, unsigned int i, unsigned int j, int* nEax, int nEcx, int nEdx)
  2. {
  3.         //*(_DWORD *)v9 += a3 + a5 + Account_Func_3(a2, ecx0, a6);
  4.         *nEax += i + n + Account_Func_3( nEdx, nEcx, j);
  5.         Account_Func_4( (int)nEax, m);
  6.         *nEax += nEdx;
  7. }
复制代码
  1. CODE:0054BE24 Account_Func_3  proc near               ; CODE XREF: Account_Func_2+13p
  2. CODE:0054BE24                 and     edx, eax
  3. CODE:0054BE26                 not     eax
  4. CODE:0054BE28                 and     ecx, eax
  5. CODE:0054BE2A                 or      edx, ecx
  6. CODE:0054BE2C                 mov     eax, edx
  7. CODE:0054BE2E                 retn
  8. CODE:0054BE2E Account_Func_3  endp
复制代码
逆向代码:
  1. int Account_Func_3(int nEax, int nEdx, int nEcx)
  2. {
  3.         return ~nEax & nEcx | nEax & nEdx;
  4. }
复制代码
  1. CODE:0054BE50 Account_Func_4  proc near               ; CODE XREF: Account_Func_2+25p
  2. CODE:0054BE50                                         ; Account_Func_5+25p ...
  3. CODE:0054BE50                 push    ebx
  4. CODE:0054BE51                 xor     ecx, ecx
  5. CODE:0054BE53                 mov     cl, dl
  6. CODE:0054BE55                 push    ecx
  7. CODE:0054BE56                 mov     ecx, 20h
  8. CODE:0054BE5B                 pop     ebx
  9. CODE:0054BE5C                 sub     ecx, ebx
  10. CODE:0054BE5E                 mov     ebx, [eax]
  11. CODE:0054BE60                 shr     ebx, cl
  12. CODE:0054BE62                 mov     ecx, edx
  13. CODE:0054BE64                 mov     edx, [eax]
  14. CODE:0054BE66                 shl     edx, cl
  15. CODE:0054BE68                 or      ebx, edx
  16. CODE:0054BE6A                 mov     [eax], ebx
  17. CODE:0054BE6C                 pop     ebx
  18. CODE:0054BE6D                 retn
  19. CODE:0054BE6D Account_Func_4  endp
复制代码
逆向代码:
  1. void Account_Func_4(int nEax, char cEdx)
  2. {
  3.         *(DWORD*)nEax = (*(DWORD*)nEax << cEdx) | (*(DWORD*)nEax >> (32 - cEdx));
  4. }
复制代码
  1. CODE:0054BEA4 Account_Func_5  proc near               ; CODE XREF: struct_account+215p
  2. CODE:0054BEA4                                         ; struct_account+22Fp ...
  3. CODE:0054BEA4
  4. CODE:0054BEA4 arg_0           = dword ptr  8
  5. CODE:0054BEA4 arg_4           = byte ptr  0Ch
  6. CODE:0054BEA4 arg_8           = dword ptr  10h
  7. CODE:0054BEA4 arg_C           = dword ptr  14h
  8. CODE:0054BEA4
  9. CODE:0054BEA4                 push    ebp
  10. CODE:0054BEA5                 mov     ebp, esp
  11. CODE:0054BEA7                 push    ebx
  12. CODE:0054BEA8                 push    esi
  13. CODE:0054BEA9                 push    edi
  14. CODE:0054BEAA                 mov     edi, ecx
  15. CODE:0054BEAC                 mov     esi, edx
  16. CODE:0054BEAE                 mov     ebx, eax
  17. CODE:0054BEB0                 mov     ecx, [ebp+arg_C]
  18. CODE:0054BEB3                 mov     edx, edi
  19. CODE:0054BEB5                 mov     eax, esi
  20. CODE:0054BEB7                 call    Account_Func_6
  21. CODE:0054BEBC                 add     eax, [ebp+arg_8]
  22. CODE:0054BEBF                 add     eax, [ebp+arg_0]
  23. CODE:0054BEC2                 add     [ebx], eax
  24. CODE:0054BEC4                 mov     eax, ebx
  25. CODE:0054BEC6                 mov     dl, [ebp+arg_4]
  26. CODE:0054BEC9                 call    Account_Func_4
  27. CODE:0054BECE                 add     [ebx], esi
  28. CODE:0054BED0                 pop     edi
  29. CODE:0054BED1                 pop     esi
  30. CODE:0054BED2                 pop     ebx
  31. CODE:0054BED3                 pop     ebp
  32. CODE:0054BED4                 retn    10h
  33. CODE:0054BED4 Account_Func_5  endp
复制代码
逆向代码:
  1. void Account_Func_5(unsigned int n, char m, unsigned int i, unsigned int j, int* nEax, int nEcx, int nEdx)
  2. {
  3.         *(DWORD*)nEax += n + i + Account_Func_6(nEdx, nEcx, j);
  4.         Account_Func_4( (int)nEax, m);
  5.         *nEax += nEdx;
  6. }
复制代码
  1. CODE:0054BE30 Account_Func_6  proc near               ; CODE XREF: Account_Func_5+13p
  2. CODE:0054BE30                 and     eax, ecx
  3. CODE:0054BE32                 not     ecx
  4. CODE:0054BE34                 and     edx, ecx
  5. CODE:0054BE36                 or      eax, edx
  6. CODE:0054BE38                 retn
  7. CODE:0054BE38 Account_Func_6  endp
复制代码
逆向代码:
  1. int Account_Func_6(int nEax, int nEdx, int nEcx)
  2. {
  3.         return ~nEcx & nEdx | nEcx & nEax;
  4. }
复制代码
  1. CODE:0054BED8 Account_Func_7  proc near               ; CODE XREF: struct_account+3C1p
  2. CODE:0054BED8                                         ; struct_account+3DBp ...
  3. CODE:0054BED8
  4. CODE:0054BED8 arg_0           = dword ptr  8
  5. CODE:0054BED8 arg_4           = byte ptr  0Ch
  6. CODE:0054BED8 arg_8           = dword ptr  10h
  7. CODE:0054BED8 arg_C           = dword ptr  14h
  8. CODE:0054BED8
  9. CODE:0054BED8                 push    ebp
  10. CODE:0054BED9                 mov     ebp, esp
  11. CODE:0054BEDB                 push    ebx
  12. CODE:0054BEDC                 push    esi
  13. CODE:0054BEDD                 push    edi
  14. CODE:0054BEDE                 mov     edi, ecx
  15. CODE:0054BEE0                 mov     esi, edx
  16. CODE:0054BEE2                 mov     ebx, eax
  17. CODE:0054BEE4                 mov     ecx, [ebp+arg_C]
  18. CODE:0054BEE7                 mov     edx, edi
  19. CODE:0054BEE9                 mov     eax, esi
  20. CODE:0054BEEB                 call    Account_Func_8
  21. CODE:0054BEF0                 add     eax, [ebp+arg_8]
  22. CODE:0054BEF3                 add     eax, [ebp+arg_0]
  23. CODE:0054BEF6                 add     [ebx], eax
  24. CODE:0054BEF8                 mov     eax, ebx
  25. CODE:0054BEFA                 mov     dl, [ebp+arg_4]
  26. CODE:0054BEFD                 call    Account_Func_4
  27. CODE:0054BF02                 add     [ebx], esi
  28. CODE:0054BF04                 pop     edi
  29. CODE:0054BF05                 pop     esi
  30. CODE:0054BF06                 pop     ebx
  31. CODE:0054BF07                 pop     ebp
  32. CODE:0054BF08                 retn    10h
  33. CODE:0054BF08 Account_Func_7  endp
复制代码
逆向代码:
  1. void Account_Func_7(unsigned int n, char m, unsigned int i, unsigned int j, int* nEax, int nEcx, int nEdx)
  2. {
  3.         *(DWORD*)nEax += n + i + Account_Func_8(nEdx, nEcx, j);
  4.         Account_Func_4( (int)nEax, m);
  5.         *nEax += nEdx;
  6. }
复制代码
  1. CODE:0054BE3C Account_Func_8  proc near               ; CODE XREF: Account_Func_7+13p
  2. CODE:0054BE3C                 xor     eax, edx
  3. CODE:0054BE3E                 xor     ecx, eax
  4. CODE:0054BE40                 mov     eax, ecx
  5. CODE:0054BE42                 retn
  6. CODE:0054BE42 Account_Func_8  endp
复制代码
逆向代码:
  1. int Account_Func_8(int nEax, int nEdx, int nEcx)
  2. {
  3.         return nEdx ^ nEax ^ nEcx;
  4. }
复制代码
  1. CODE:0054BF0C Account_Func_9  proc near               ; CODE XREF: struct_account+56Dp
  2. CODE:0054BF0C                                         ; struct_account+587p ...
  3. CODE:0054BF0C
  4. CODE:0054BF0C arg_0           = dword ptr  8
  5. CODE:0054BF0C arg_4           = byte ptr  0Ch
  6. CODE:0054BF0C arg_8           = dword ptr  10h
  7. CODE:0054BF0C arg_C           = dword ptr  14h
  8. CODE:0054BF0C
  9. CODE:0054BF0C                 push    ebp
  10. CODE:0054BF0D                 mov     ebp, esp
  11. CODE:0054BF0F                 push    ebx
  12. CODE:0054BF10                 push    esi
  13. CODE:0054BF11                 push    edi
  14. CODE:0054BF12                 mov     edi, ecx
  15. CODE:0054BF14                 mov     esi, edx
  16. CODE:0054BF16                 mov     ebx, eax
  17. CODE:0054BF18                 mov     ecx, [ebp+arg_C]
  18. CODE:0054BF1B                 mov     edx, edi
  19. CODE:0054BF1D                 mov     eax, esi
  20. CODE:0054BF1F                 call    Account_Func_10
  21. CODE:0054BF24                 add     eax, [ebp+arg_8]
  22. CODE:0054BF27                 add     eax, [ebp+arg_0]
  23. CODE:0054BF2A                 add     [ebx], eax
  24. CODE:0054BF2C                 mov     eax, ebx
  25. CODE:0054BF2E                 mov     dl, [ebp+arg_4]
  26. CODE:0054BF31                 call    Account_Func_4
  27. CODE:0054BF36                 add     [ebx], esi
  28. CODE:0054BF38                 pop     edi
  29. CODE:0054BF39                 pop     esi
  30. CODE:0054BF3A                 pop     ebx
  31. CODE:0054BF3B                 pop     ebp
  32. CODE:0054BF3C                 retn    10h
  33. CODE:0054BF3C Account_Func_9  endp
复制代码
逆向代码:
  1. void Account_Func_9(unsigned int n, char m, unsigned int i, unsigned int j, int* nEax, int nEcx, int nEdx)
  2. {
  3.         *(DWORD*)nEax += n + i + Account_Func_10(nEdx, nEcx, j);
  4.         Account_Func_4( (int)nEax, m);
  5.         *nEax += nEdx;
  6. }
复制代码
  1. CODE:0054BE44 Account_Func_10 proc near               ; CODE XREF: Account_Func_9+13p
  2. CODE:0054BE44                 not     ecx
  3. CODE:0054BE46                 or      eax, ecx
  4. CODE:0054BE48                 xor     edx, eax
  5. CODE:0054BE4A                 mov     eax, edx
  6. CODE:0054BE4C                 retn
  7. CODE:0054BE4C Account_Func_10 endp
复制代码
逆向代码:
  1. int Account_Func_10(int nEax, int nEdx, int nEcx)
  2. {
  3.         return (~nEcx | nEax) ^ nEdx;
  4. }
复制代码
  1. CODE:0054C798 __Matrix_Account proc near              ; CODE XREF: __account_key_1+4Bp
  2. CODE:0054C798                 push    ebx
  3. CODE:0054C799                 push    esi
  4. CODE:0054C79A                 add     esp, 0FFFFFFF8h ; sub esp, 8  开辟栈空间
  5. CODE:0054C79D                 mov     esi, edx        ; OUT参数
  6. CODE:0054C79F                 mov     ebx, eax        ; IN参数,st_mechine结构体
  7. CODE:0054C7A1                 mov     edx, esp
  8. CODE:0054C7A3                 lea     eax, [ebx+st_machine.nUnknow_5]
  9. CODE:0054C7A6                 mov     ecx, 2          ; 循环次数
  10. CODE:0054C7AB                 call    __Struct_Edit_2 ; 结构体数据运算
  11. CODE:0054C7B0                 mov     eax, [ebx+st_machine.nUnknow_5]
  12. CODE:0054C7B3                 shr     eax, 3          ; >> 3
  13. CODE:0054C7B6                 and     eax, 3Fh        ; % 64
  14. CODE:0054C7B9                 cmp     eax, 38h
  15. CODE:0054C7BC                 jnb     short loc_54C7C9 ; >=
  16. CODE:0054C7BE                 mov     edx, 38h
  17. CODE:0054C7C3                 sub     edx, eax
  18. CODE:0054C7C5                 mov     eax, edx
  19. CODE:0054C7C7                 jmp     short loc_54C7D2
  20. CODE:0054C7C9 ; ---------------------------------------------------------------------------
  21. CODE:0054C7C9
  22. CODE:0054C7C9 loc_54C7C9:                             ; CODE XREF: __Matrix_Account+24j
  23. CODE:0054C7C9                 mov     edx, 78h
  24. CODE:0054C7CE                 sub     edx, eax
  25. CODE:0054C7D0                 mov     eax, edx
  26. CODE:0054C7D2
  27. CODE:0054C7D2 loc_54C7D2:                             ; CODE XREF: __Matrix_Account+2Fj
  28. CODE:0054C7D2                 mov     edx, offset unk_557F14
  29. CODE:0054C7D7                 mov     ecx, ebx
  30. CODE:0054C7D9                 xchg    eax, ecx
  31. CODE:0054C7DA                 call    __Struct_Edit_1 ; 结构体中值做运算
  32. CODE:0054C7DF                 mov     edx, esp
  33. CODE:0054C7E1                 mov     eax, ebx
  34. CODE:0054C7E3                 mov     ecx, 8
  35. CODE:0054C7E8                 call    __Struct_Edit_1
  36. CODE:0054C7ED                 mov     edx, esi
  37. CODE:0054C7EF                 mov     eax, ebx
  38. CODE:0054C7F1                 mov     ecx, 4
  39. CODE:0054C7F6                 call    __Struct_Edit_2
  40. CODE:0054C7FB                 mov     eax, ebx
  41. CODE:0054C7FD                 mov     edx, 58h
  42. CODE:0054C802                 call    __ZeroMemory
  43. CODE:0054C807                 pop     ecx
  44. CODE:0054C808                 pop     edx
  45. CODE:0054C809                 pop     esi
  46. CODE:0054C80A                 pop     ebx
  47. CODE:0054C80B                 retn
  48. CODE:0054C80B __Matrix_Account endp
复制代码
逆向代码:
  1. void Matrix_Account(tagKey& pSt,int* pAry)
  2. {
  3.         int v7[2] = {0};

  4.         int v4 = (int)pAry;
  5.         int v3 = (int)&pSt;
  6.         Struct_Edit_2((int)&pSt.nUnknow_5, (int)&v7, 2);
  7.         int v2 = (*(DWORD*)(&pSt.nUnknow_5) >> 3) & 0x3F;
  8.         unsigned int v5;
  9.         if ( (unsigned int)v2 >= 0x38 )
  10.                 v5 = 120 - v2;
  11.         else
  12.                 v5 = 56 - v2;
  13.         Struct_Edit_1((char*)v3, (char*)&g_nAry, v5);
  14.         Struct_Edit_1((char*)v3, (char*)&v7, 8u);
  15.         Struct_Edit_2(v3, v4, 4);
  16. }
复制代码
  1. CODE:0054BF78 __Struct_Edit_2 proc near               ; CODE XREF: __Matrix_Account+13p
  2. CODE:0054BF78                                         ; __Matrix_Account+5Ep
  3. CODE:0054BF78                 push    esi
  4. CODE:0054BF79                 mov     esi, eax        ; 参数
  5. CODE:0054BF7B                 mov     eax, edx        ; 参数
  6. CODE:0054BF7D                 mov     edx, ecx        ; 参数
  7. CODE:0054BF7F                 test    edx, edx        ; for (int i = ecx; i != 0; i--)
  8. CODE:0054BF81                 jbe     short loc_54BFB2 ; <=
  9. CODE:0054BF83
  10. CODE:0054BF83 loc_54BF83:                             ; CODE XREF: __Struct_Edit_2+38j
  11. CODE:0054BF83                 mov     cl, [esi]       ; *(_BYTE *)param_edx = *(_BYTE *)param_eax
  12. CODE:0054BF85                 and     cl, 0FFh
  13. CODE:0054BF88                 mov     [eax], cl
  14. CODE:0054BF8A                 inc     eax             ; param_edx + 1
  15. CODE:0054BF8B                 mov     ecx, [esi]
  16. CODE:0054BF8D                 shr     ecx, 8          ; >> 8
  17. CODE:0054BF90                 and     cl, 0FFh
  18. CODE:0054BF93                 mov     [eax], cl
  19. CODE:0054BF95                 inc     eax             ; param_edx + 1
  20. CODE:0054BF96                 mov     ecx, [esi]
  21. CODE:0054BF98                 shr     ecx, 10h        ; >> 10
  22. CODE:0054BF9B                 and     cl, 0FFh
  23. CODE:0054BF9E                 mov     [eax], cl
  24. CODE:0054BFA0                 inc     eax             ; param_edx + 1
  25. CODE:0054BFA1                 mov     ecx, [esi]
  26. CODE:0054BFA3                 shr     ecx, 18h        ; >> 18
  27. CODE:0054BFA6                 and     cl, 0FFh
  28. CODE:0054BFA9                 mov     [eax], cl
  29. CODE:0054BFAB                 inc     eax             ; param_edx + 1
  30. CODE:0054BFAC                 add     esi, 4
  31. CODE:0054BFAF                 dec     edx
  32. CODE:0054BFB0                 jnz     short loc_54BF83
  33. CODE:0054BFB2
  34. CODE:0054BFB2 loc_54BFB2:                             ; CODE XREF: __Struct_Edit_2+9j
  35. CODE:0054BFB2                 pop     esi
  36. CODE:0054BFB3                 retn
  37. CODE:0054BFB3 __Struct_Edit_2 endp
复制代码
逆向代码:
  1. void Struct_Edit_2(int nEax, int nEdx, int nEcx)
  2. {
  3.         int i;
  4.         DWORD dwTemp;
  5.         for ( i = nEcx; i != 0; --i )
  6.         {
  7.                 *(char*)nEdx = *(char*)nEax;

  8.                 nEdx += 1;
  9.                 dwTemp = *(DWORD*)nEax;
  10.                 dwTemp >>= 8;
  11.                 *(char*)nEdx = char(dwTemp);

  12.                 nEdx += 1;
  13.                 dwTemp = *(DWORD*)nEax;
  14.                 dwTemp >>= 16;
  15.                 *(char*)nEdx = char(dwTemp);

  16.                 nEdx += 1;
  17.                 dwTemp = *(DWORD*)nEax;
  18.                 dwTemp >>= 24;
  19.                 *(char*)nEdx = char(dwTemp);

  20.                 nEax += 4;

  21.         }
  22. }
复制代码
第一次写算法分析。写的很罗嗦。希望对和我一样的新人有帮助。
分析到此结束,文末附上注册机代码。不过希望有经济实力的还是支持正版。程序员写个软件也不容易。
注册机代码:
  1. #include <iOStream>

  2. using namespace std;

  3. typedef unsigned long DWORD;
  4. typedef unsigned short WORD;

  5. #pragma warning( disable : 4267 4018 4312 4311 4996)

  6. typedef struct
  7. {
  8.         int nUnknow_1;
  9.         int nUnknow_2;
  10.         int nUnknow_3;
  11.         int nUnknow_4;
  12.         int nUnknow_5;
  13.         int nUnknow_6;
  14.         char szBuffer[64];
  15. }tagKey;

  16. int Account_Func_10(int nEax, int nEdx, int nEcx)
  17. {
  18.         return (~nEcx | nEax) ^ nEdx;
  19. }

  20. int Account_Func_8(int nEax, int nEdx, int nEcx)
  21. {
  22.         return nEdx ^ nEax ^ nEcx;
  23. }

  24. int Account_Func_6(int nEax, int nEdx, int nEcx)
  25. {
  26.         return ~nEcx & nEdx | nEcx & nEax;
  27. }

  28. void Account_Func_4(int nEax, char cEdx)
  29. {
  30.         *(DWORD*)nEax = (*(DWORD*)nEax << cEdx) | (*(DWORD*)nEax >> (32 - cEdx));
  31. }

  32. int Account_Func_3(int nEax, int nEdx, int nEcx)
  33. {
  34.         return ~nEax & nEcx | nEax & nEdx;
  35. }

  36. void Account_Func_9(unsigned int n, char m, unsigned int i, unsigned int j, int* nEax, int nEcx, int nEdx)
  37. {
  38.         *(DWORD*)nEax += n + i + Account_Func_10(nEdx, nEcx, j);
  39.         Account_Func_4( (int)nEax, m);
  40.         *nEax += nEdx;
  41. }

  42. void Account_Func_7(unsigned int n, char m, unsigned int i, unsigned int j, int* nEax, int nEcx, int nEdx)
  43. {
  44.         *(DWORD*)nEax += n + i + Account_Func_8(nEdx, nEcx, j);
  45.         Account_Func_4( (int)nEax, m);
  46.         *nEax += nEdx;
  47. }

  48. void Account_Func_5(unsigned int n, char m, unsigned int i, unsigned int j, int* nEax, int nEcx, int nEdx)
  49. {
  50.         *(DWORD*)nEax += n + i + Account_Func_6(nEdx, nEcx, j);
  51.         Account_Func_4( (int)nEax, m);
  52.         *nEax += nEdx;
  53. }

  54. void Account_Func_2(unsigned int n, char m, unsigned int i, unsigned int j, int* nEax, int nEcx, int nEdx)
  55. {
  56.         *nEax += i + n + Account_Func_3( nEdx, nEcx, j);
  57.         Account_Func_4( (int)nEax, m);
  58.         *nEax += nEdx;
  59. }

  60. void Account_Func_1(int* pEax, int* pEdx, int nEcx)
  61. {
  62.         int i, v4;
  63.         for ( i = nEcx >> 2; i; --i )
  64.         {
  65.                 *(DWORD*)pEdx = *(unsigned char*)pEax;
  66.                 v4 = (int)pEax + 1;
  67.                 *(DWORD*)pEdx |= *(unsigned char*)v4 << 8;
  68.                 v4++;
  69.                 *(DWORD*)pEdx |= *(unsigned char*)v4 << 16;
  70.                 v4++;
  71.                 *(DWORD*)pEdx |= *(unsigned char*)v4 << 24;
  72.                 pEax = (int*)(v4 + 1);
  73.                 //edx += 4;
  74.                 pEdx++;
  75.         }

  76. }

  77. void Struct_Account(char* pEdx, char* pEax)
  78. {
  79.         int nAry[22] = {0};
  80.         nAry[1] = (int)pEdx;
  81.         nAry[0] = (int)pEax;
  82.         Account_Func_1((int*)nAry[0], (int*)&nAry[6],0x40);

  83.         nAry[2] = *(int*)pEdx;
  84.         nAry[3] = *(int*)(pEdx + 4);
  85.         nAry[4] = *(int*)(pEdx + 8);
  86.         nAry[5] = *(int*)(pEdx + 0xC);

  87.         Account_Func_2( 0x0D76AA478, 7, nAry[6], nAry[5], &nAry[2], nAry[4], nAry[3]);

  88.         Account_Func_2( 0x0E8C7B756, 0xC, nAry[7], nAry[4], &nAry[5], nAry[3], nAry[2]);

  89.         Account_Func_2( 0x242070DB, 0x11, nAry[8], nAry[3], &nAry[4], nAry[2], nAry[5]);

  90.         Account_Func_2( 0xC1BDCEEE, 0x16, nAry[9], nAry[2], &nAry[3], nAry[5], nAry[4]);

  91.         Account_Func_2( 0xF57C0FAF, 7, nAry[10], nAry[5], &nAry[2], nAry[4], nAry[3]);

  92.         Account_Func_2( 0x4787C62A, 0xC, nAry[11], nAry[4], &nAry[5], nAry[3], nAry[2]);

  93.         Account_Func_2( 0xA8304613, 0x11, nAry[12], nAry[3], &nAry[4], nAry[2], nAry[5]);

  94.         Account_Func_2( 0xFD469501, 0x16, nAry[13], nAry[2], &nAry[3], nAry[5], nAry[4]);

  95.         Account_Func_2( 0x698098D8, 7, nAry[14], nAry[5], &nAry[2], nAry[4], nAry[3]);

  96.         Account_Func_2( 0x8B44F7AF, 0xC, nAry[15], nAry[4], &nAry[5], nAry[3], nAry[2]);

  97.         Account_Func_2( 0xFFFF5BB1, 0x11, nAry[16], nAry[3], &nAry[4], nAry[2], nAry[5]);

  98.         Account_Func_2( 0x895CD7BE, 0x16, nAry[17], nAry[2], &nAry[3], nAry[5], nAry[4]);

  99.         Account_Func_2( 0x6B901122, 7, nAry[18], nAry[5], &nAry[2], nAry[4], nAry[3]);

  100.         Account_Func_2( 0xFD987193, 0xC, nAry[19], nAry[4], &nAry[5], nAry[3], nAry[2]);

  101.         Account_Func_2( 0xA679438E, 0x11, nAry[20], nAry[3], &nAry[4], nAry[2], nAry[5]);

  102.         Account_Func_2( 0x49B40821, 0x16, nAry[21], nAry[2], &nAry[3], nAry[5], nAry[4]);

  103.         //////////////////////////////////////////////////////////////////////////

  104.         Account_Func_5( 0xF61E2562, 5, nAry[7], nAry[5], &nAry[2], nAry[4], nAry[3]);

  105.         Account_Func_5( 0xC040B340, 9, nAry[12], nAry[4], &nAry[5], nAry[3], nAry[2]);

  106.         Account_Func_5( 0x265E5A51, 0xE, nAry[17], nAry[3], &nAry[4], nAry[2], nAry[5]);

  107.         Account_Func_5( 0xE9B6C7AA, 0x14, nAry[6], nAry[2], &nAry[3], nAry[5], nAry[4]);

  108.         Account_Func_5( 0xD62F105D, 5, nAry[11], nAry[5], &nAry[2], nAry[4], nAry[3]);

  109.         Account_Func_5( 0x2441453, 9, nAry[16], nAry[4], &nAry[5], nAry[3], nAry[2]);

  110.         Account_Func_5( 0xD8A1E681, 0xE, nAry[21], nAry[3], &nAry[4], nAry[2], nAry[5]);

  111.         Account_Func_5( 0xE7D3FBC8, 0x14, nAry[10], nAry[2], &nAry[3], nAry[5], nAry[4]);

  112.         Account_Func_5( 0x21E1CDE6, 5, nAry[15], nAry[5], &nAry[2], nAry[4], nAry[3]);

  113.         Account_Func_5( 0xC33707D6, 9, nAry[20], nAry[4], &nAry[5], nAry[3], nAry[2]);

  114.         Account_Func_5( 0xF4D50D87, 0xE, nAry[9], nAry[3], &nAry[4], nAry[2], nAry[5]);

  115.         Account_Func_5( 0x455A14ED, 0x14, nAry[14], nAry[2], &nAry[3], nAry[5], nAry[4]);

  116.         Account_Func_5( 0xA9E3E905, 5, nAry[19], nAry[5], &nAry[2], nAry[4], nAry[3]);

  117.         Account_Func_5( 0xFCEFA3F8, 9, nAry[8], nAry[4], &nAry[5], nAry[3], nAry[2]);

  118.         Account_Func_5( 0x676F02D9, 0xE, nAry[13], nAry[3], &nAry[4], nAry[2], nAry[5]);

  119.         Account_Func_5( 0x8D2A4C8A, 0x14, nAry[18], nAry[2], &nAry[3], nAry[5], nAry[4]);

  120.         //////////////////////////////////////////////////////////////////////////

  121.         Account_Func_7( 0xFFFA3942, 4, nAry[11], nAry[5], &nAry[2], nAry[4], nAry[3]);

  122.         Account_Func_7( 0x8771F681, 0xB, nAry[14], nAry[4], &nAry[5], nAry[3], nAry[2]);

  123.         Account_Func_7( 0x6D9D6122, 0x10, nAry[17], nAry[3], &nAry[4], nAry[2], nAry[5]);

  124.         Account_Func_7( 0xFDE5380C, 0x17, nAry[20], nAry[2], &nAry[3], nAry[5], nAry[4]);

  125.         Account_Func_7( 0xA4BEEA44, 4, nAry[7], nAry[5], &nAry[2], nAry[4], nAry[3]);

  126.         Account_Func_7( 0x4BDECFA9, 0xB, nAry[10], nAry[4], &nAry[5], nAry[3], nAry[2]);

  127.         Account_Func_7( 0xF6BB4B60, 0x10, nAry[13], nAry[3], &nAry[4], nAry[2], nAry[5]);

  128.         Account_Func_7( 0xBEBFBC70, 0x17, nAry[16], nAry[2], &nAry[3], nAry[5], nAry[4]);

  129.         Account_Func_7( 0x289B7EC6, 4, nAry[19], nAry[5], &nAry[2], nAry[4], nAry[3]);

  130.         Account_Func_7( 0xEAA127FA, 0xB, nAry[6], nAry[4], &nAry[5], nAry[3], nAry[2]);

  131.         Account_Func_7( 0xD4EF3085, 0x10, nAry[9], nAry[3], &nAry[4], nAry[2], nAry[5]);

  132.         Account_Func_7( 0x4881D05, 0x17, nAry[12], nAry[2], &nAry[3], nAry[5], nAry[4]);

  133.         Account_Func_7( 0xD9D4D039, 4, nAry[15], nAry[5], &nAry[2], nAry[4], nAry[3]);

  134.         Account_Func_7( 0xE6DB99E5, 0xB, nAry[18], nAry[4], &nAry[5], nAry[3], nAry[2]);

  135.         Account_Func_7( 0x1FA27CF8, 0x10, nAry[21], nAry[3], &nAry[4], nAry[2], nAry[5]);

  136.         Account_Func_7( 0xC4AC5665, 0x17, nAry[8], nAry[2], &nAry[3], nAry[5], nAry[4]);

  137.         //////////////////////////////////////////////////////////////////////////

  138.         Account_Func_9( 0xF4292244, 6, nAry[6], nAry[5], &nAry[2], nAry[4], nAry[3]);

  139.         Account_Func_9( 0x432AFF97, 0xA, nAry[13], nAry[4], &nAry[5], nAry[3], nAry[2]);

  140.         Account_Func_9( 0xAB9423A7, 0xF, nAry[20], nAry[3], &nAry[4], nAry[2], nAry[5]);

  141.         Account_Func_9( 0xFC93A039, 0x15, nAry[11], nAry[2], &nAry[3], nAry[5], nAry[4]);

  142.         Account_Func_9( 0x655B59C3, 6, nAry[18], nAry[5], &nAry[2], nAry[4], nAry[3]);

  143.         Account_Func_9( 0x8F0CCC92, 0xA, nAry[9], nAry[4], &nAry[5], nAry[3], nAry[2]);

  144.         Account_Func_9( 0xFFEFF47D, 0xF, nAry[16], nAry[3], &nAry[4], nAry[2], nAry[5]);

  145.         Account_Func_9( 0x85845DD1, 0x15, nAry[7], nAry[2], &nAry[3], nAry[5], nAry[4]);

  146.         Account_Func_9( 0x6FA87E4F, 6, nAry[14],  nAry[5], &nAry[2], nAry[4], nAry[3]);

  147.         Account_Func_9( 0xFE2CE6E0, 0xA, nAry[21], nAry[4], &nAry[5], nAry[3], nAry[2]);

  148.         Account_Func_9( 0xA3014314, 0xF, nAry[12], nAry[3], &nAry[4], nAry[2], nAry[5]);

  149.         Account_Func_9( 0x4E0811A1, 0x15, nAry[19], nAry[2], &nAry[3], nAry[5], nAry[4]);

  150.         Account_Func_9( 0xF7537E82, 6, nAry[10], nAry[5], &nAry[2], nAry[4], nAry[3]);

  151.         Account_Func_9( 0xBD3AF235, 0xA, nAry[17], nAry[4], &nAry[5], nAry[3], nAry[2]);

  152.         Account_Func_9( 0x2AD7D2BB, 0xF, nAry[8], nAry[3], &nAry[4], nAry[2], nAry[5]);

  153.         Account_Func_9( 0xEB86D391, 0x15, nAry[15], nAry[2], &nAry[3], nAry[5], nAry[4]);

  154.         //////////////////////////////////////////////////////////////////////////

  155.         *(DWORD*)pEdx += nAry[2];
  156.         *(DWORD*)(pEdx + 4) += nAry[3];
  157.         *(DWORD*)(pEdx + 8) += nAry[4];
  158.         *(DWORD*)(pEdx + 0xC) += nAry[5];
  159. }

  160. void Struct_Edit_2(int nEax, int nEdx, int nEcx)
  161. {
  162.         int i;
  163.         DWORD dwTemp;
  164.         for ( i = nEcx; i != 0; --i )
  165.         {
  166.                 *(char*)nEdx = *(char*)nEax;

  167.                 nEdx += 1;
  168.                 dwTemp = *(DWORD*)nEax;
  169.                 dwTemp >>= 8;
  170.                 *(char*)nEdx = char(dwTemp);

  171.                 nEdx += 1;
  172.                 dwTemp = *(DWORD*)nEax;
  173.                 dwTemp >>= 16;
  174.                 *(char*)nEdx = char(dwTemp);

  175.                 nEdx += 1;
  176.                 dwTemp = *(DWORD*)nEax;
  177.                 dwTemp >>= 24;
  178.                 *(char*)nEdx = char(dwTemp);

  179.                 nEax += 4;

  180.         }
  181. }

  182. //pv1 = eax, pv2 = edx, nLenth = ecx
  183. void Struct_Edit_1(char* pv1, char* pv2,int nLenth)
  184. {
  185.         int v2 = (*(DWORD*)(pv1 + 16) >> 3) & 0x3F;
  186.         *(DWORD*)(pv1 + 16) += 8 * nLenth;
  187.         if ( 8 * nLenth > *(DWORD*)(pv1 + 16) )
  188.                 ++*(DWORD*)(pv1 + 20);
  189.         *(DWORD*)(pv1 + 20) += nLenth >> 29;
  190.         int v5 = 64 - v2;
  191.         if ( v5 <= nLenth )
  192.         {
  193.                 memcpy((void*)(pv1 + v2 + 0x18),pv2,v5);
  194.                 Struct_Account(pv1, pv1+0x18);
  195.                 while ( nLenth > v5 + 63 )
  196.                 {
  197.                         Struct_Account(pv1, pv2 + v5);
  198.                         //ary_account();
  199.                         v5 += 64;
  200.                 }
  201.                 v2 = 0;
  202.         }
  203.         else
  204.         {
  205.                 v5 = 0;
  206.         }
  207.         memcpy(pv1+v2+0x18, pv2+v5, nLenth - v5);

  208. }

  209. int g_nAry[64] = {0x80};

  210. void Matrix_Account(tagKey& pSt,int* pAry)
  211. {
  212.         int v7[2] = {0};

  213.         int v4 = (int)pAry;
  214.         int v3 = (int)&pSt;
  215.         Struct_Edit_2((int)&pSt.nUnknow_5, (int)&v7, 2);
  216.         int v2 = (*(DWORD*)(&pSt.nUnknow_5) >> 3) & 0x3F;
  217.         unsigned int v5;
  218.         if ( (unsigned int)v2 >= 0x38 )
  219.                 v5 = 120 - v2;
  220.         else
  221.                 v5 = 56 - v2;
  222.         Struct_Edit_1((char*)v3, (char*)&g_nAry, v5);
  223.         Struct_Edit_1((char*)v3, (char*)&v7, 8u);
  224.         Struct_Edit_2(v3, v4, 4);
  225. }

  226. //第三次key运算
  227. void Account_Key_3(string& sRealKey, string sKey)
  228. {
  229.         string sTempKey;
  230.         int nLenth = sKey.length();
  231.         int n;
  232.         for ( n = 0; n < nLenth; n++)
  233.         {
  234.                 switch (sKey[n])
  235.                 {
  236.                 case '0':
  237.                 case '1':
  238.                 case '2':
  239.                 case '3':
  240.                 case '4':
  241.                 case '5':
  242.                 case '6':
  243.                 case '7':
  244.                 case '8':
  245.                 case '9':
  246.                         sTempKey += sKey[n];
  247.                         break;
  248.                 default:
  249.                         break;
  250.                 }
  251.         }

  252.         nLenth = sTempKey.length();
  253.         if ( nLenth > 0)
  254.         {
  255.                 int nTemp = 1;
  256.                 char* pTempKey = (char*)sTempKey.c_str();
  257.                 do
  258.                 {
  259.                         if ( (nTemp % 2) == 0 )
  260.                         {
  261.                                 char c = *(char*)(pTempKey + nTemp - 1);
  262.                                 sRealKey += c;
  263.                         }
  264.                         nTemp++;
  265.                         nLenth--;
  266.                 } while (nLenth);
  267.         }
  268. }

  269. void Account_Key_2(string& sKey, char* pAry)
  270. {
  271.        
  272.         for (int n = 0; n < 16; n++)
  273.         {
  274.                 char buffer[5] = {0};
  275.                 sprintf_s(buffer,"%02x",unsigned char(pAry[n]));
  276.                 sKey += buffer;
  277.         }
  278. }

  279. //第一次key运算
  280. void Account_Key_1(string sId, int* pAry)
  281. {
  282.         //初始化结构体
  283.         tagKey stKey = {0x61234509,0xEFCD5B89,0x13BA7CFE,0x18325476,0,0,""};
  284.         int nLenth = sId.length();
  285.         Struct_Edit_1((char*)&stKey,(char*)sId.c_str(),nLenth);
  286.         Matrix_Account(stKey,pAry);
  287.         memcpy(pAry, &stKey, 16);

  288. }

  289. void Account_Key(string sId,string& sRealKey)
  290. {
  291.         int nAry[16] = {0};
  292.         Account_Key_1(sId, nAry);
  293.         string si2a;
  294.         Account_Key_2(si2a,(char*)&nAry);
  295.         Account_Key_3(sRealKey,si2a);
  296. }

  297. int _tmain(int argc, _TCHAR* argv[])
  298. {
  299.         cout << "please enter machine id:";

  300.         char szId[40] ={0};
  301.         cin >> szId;
  302.         string sId = szId;
  303.         string sRealKey;
  304.         try
  305.         {
  306.                 Account_Key(sId,sRealKey);
  307.                 cout << '\n' << "SN:" << sRealKey.c_str() << '\n';
  308.         }
  309.         catch(...)
  310.         {
  311.                 cout << "error" << endl;
  312.         }
  313.         return 0;
  314. }
复制代码

评分

参与人数 1威望 +200 飘云币 +200 收起 理由
飘云 + 200 + 200 恭喜!通过审核!

查看全部评分

PYG19周年生日快乐!

该用户从未签到

 楼主| 发表于 2009-8-6 16:29:45 | 显示全部楼层
软件忘记上传了。见附件。
前天下的是1.1.今天再去找软件时候发现到2.0了...
新版软件下载地址:http://www.skycn.com/soft/56552.html

本帖子中包含更多资源

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

x
PYG19周年生日快乐!

该用户从未签到

 楼主| 发表于 2009-8-6 16:57:33 | 显示全部楼层
2.0在00554b30下断。输入用户名和假码。断下后EDX内容就是真码
PYG19周年生日快乐!
  • TA的每日心情
    开心
    2024-12-1 11:04
  • 签到天数: 12 天

    [LV.3]偶尔看看II

    发表于 2009-8-6 19:50:21 | 显示全部楼层
    通过!
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2017-10-25 13:07
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2009-8-7 09:42:06 | 显示全部楼层
    强大  大哥/:002
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2009-8-7 17:46:10 | 显示全部楼层
    猛 那天晚上才说分析了一部分 这么快就搞定了 回头可以庆贺下 哈哈
    PYG19周年生日快乐!

    该用户从未签到

     楼主| 发表于 2009-8-8 19:44:48 | 显示全部楼层
    Nisy是不是被打击久了...跑来挖苦我了/:L
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2018-5-6 16:27
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    发表于 2009-9-28 16:24:04 | 显示全部楼层
    原帖由 boy 于 2009-8-8 19:44 发表
    Nisy是不是被打击久了...跑来挖苦我了/:L


    算法真棒。。。向兄弟学习!
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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