飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 3302|回复: 3

[原创] XXXX助理 Anti-KEYMAKE+SMC研究

[复制链接]

该用户从未签到

发表于 2007-8-12 01:08:18 | 显示全部楼层 |阅读模式
和sfl4800兄弟一起研究一下该软件反内存注册机的机制。国软,下载就不介绍了。大家了解到方法即可。

  1. 奇怪的入口点,脱之。
  2. ///////////////////////

  3. 004AF996 >  90              NOP
  4. 004AF997    75 00           JNZ SHORT spa.004AF999
  5. 004AF999  - E9 62561900     JMP spa.00645000

  6. ///////////////////////

  7. 00645000    60              PUSHAD
  8. 00645001    E8 00000000     CALL spa.00645006
  9. 00645006    5D              POP EBP
  10. 00645007    81ED EAA84300   SUB EBP,spa.0043A8EA
  11. 0064500D    B8 E4A84300     MOV EAX,spa.0043A8E4
  12. 00645012    03C5            ADD EAX,EBP
  13. 00645014    2B85 78AD4300   SUB EAX,DWORD PTR SS:[EBP+43AD78]
  14. 0064501A    8985 84AD4300   MOV DWORD PTR SS:[EBP+43AD84],EAX
  15. 00645020    80BD 6EAD4300 0>CMP BYTE PTR SS:[EBP+43AD6E],0
  16. 00645027    75 15           JNZ SHORT spa.0064503E
  17. 00645029    FE85 6EAD4300   INC BYTE PTR SS:[EBP+43AD6E]
  18. 0064502F    E8 1D000000     CALL spa.00645051
  19. 00645034    E8 73020000     CALL spa.006452AC
  20. 00645039    E8 0A030000     CALL spa.00645348
  21. 0064503E    8B85 70AD4300   MOV EAX,DWORD PTR SS:[EBP+43AD70]
  22. 00645044    0385 84AD4300   ADD EAX,DWORD PTR SS:[EBP+43AD84]
  23. 0064504A    894424 1C       MOV DWORD PTR SS:[ESP+1C],EAX
  24. 0064504E    61              POPAD
  25. 0064504F    FFE0            JMP EAX                                  ; 直接F4到这里即可 EAX即OEP

  26. ///////////////////////

  27. 0059ECC8    55              PUSH EBP                                 ; OEP
  28. 0059ECC9    8BEC            MOV EBP,ESP
  29. 0059ECCB    B9 0B000000     MOV ECX,0B
  30. 0059ECD0    6A 00           PUSH 0
  31. 0059ECD2    6A 00           PUSH 0
  32. 0059ECD4    49              DEC ECX
  33. 0059ECD5  ^ 75 F9           JNZ SHORT spa.0059ECD0

  34. 软件的注册信息是放到保存到这里的:
  35. HKEY_LOCAL_MACHINE\SOFTWARE\lsjsoft\spa  
复制代码


当我们输入用户名和名后,软件才调用算法部分。这一手不错 :24ab:

我们点软件“关于”,从这里可以顺藤摸瓜找到软件的算法,明码比较,奇怪的是软件反内存注册机,呵呵。我们来研究一下他反内存注册机的机制。我们看到这一幅图片,可疑吧:

001.gif

/////////////////////

  1. 0059ED99    FF52 14         CALL DWORD PTR DS:[EDX+14]
  2. 0059ED9C    8BD8            MOV EBX,EAX
  3. 0059ED9E    4B              DEC EBX
  4. 0059ED9F    85DB            TEST EBX,EBX
  5. 0059EDA1    7C 7C           JL SHORT spa.0059EE1F                         ; 这里一开始是实现跳转的,当软件监控到有以下内容的时候,这就不跳转了。(只要监控到一次,以后就永久不跳了)
  6. 0059EDA3    43              INC EBX
  7. 0059EDA4    33F6            XOR ESI,ESI
  8. 0059EDA6    8D4D E4         LEA ECX,DWORD PTR SS:[EBP-1C]
  9. 0059EDA9    8BD6            MOV EDX,ESI
  10. 0059EDAB    A1 D4605A00     MOV EAX,DWORD PTR DS:[5A60D4]
  11. 0059EDB0    8B38            MOV EDI,DWORD PTR DS:[EAX]
  12. 0059EDB2    FF57 0C         CALL DWORD PTR DS:[EDI+C]
  13. 0059EDB5    8B55 E4         MOV EDX,DWORD PTR SS:[EBP-1C]
  14. 0059EDB8    B8 DC605A00     MOV EAX,spa.005A60DC
  15. 0059EDBD    E8 F256E6FF     CALL spa.004044B4
  16. 0059EDC2    BA E0605A00     MOV EDX,spa.005A60E0
  17. 0059EDC7    33C9            XOR ECX,ECX
  18. 0059EDC9    A1 DC605A00     MOV EAX,DWORD PTR DS:[5A60DC]
  19. 0059EDCE    E8 D9E3EFFF     CALL spa.0049D1AC
  20. 0059EDD3    A1 FC605A00     MOV EAX,DWORD PTR DS:[5A60FC]
  21. 0059EDD8    BA D4F15900     MOV EDX,spa.0059F1D4                     ; 注册器
  22. 0059EDDD    E8 8A5AE6FF     CALL spa.0040486C
  23. 0059EDE2    74 2D           JE SHORT spa.0059EE11
  24. 0059EDE4    8D55 E0         LEA EDX,DWORD PTR SS:[EBP-20]
  25. 0059EDE7    A1 F8605A00     MOV EAX,DWORD PTR DS:[5A60F8]
  26. 0059EDEC    E8 77A1E6FF     CALL spa.00408F68
  27. 0059EDF1    8B45 E0         MOV EAX,DWORD PTR SS:[EBP-20]
  28. 0059EDF4    BA E4F15900     MOV EDX,spa.0059F1E4                     ; KEYMAKE.EXE
  29. 0059EDF9    E8 6E5AE6FF     CALL spa.0040486C
  30. 0059EDFE    74 11           JE SHORT spa.0059EE11
  31. 0059EE00    A1 E0605A00     MOV EAX,DWORD PTR DS:[5A60E0]
  32. 0059EE05    BA F8F15900     MOV EDX,spa.0059F1F8                     ; 张湘平
  33. 0059EE0A    E8 5D5AE6FF     CALL spa.0040486C
  34. 0059EE0F    75 0A           JNZ SHORT spa.0059EE1B
  35. 0059EE11    A1 303A5A00     MOV EAX,DWORD PTR DS:[5A3A30]            ; [5A3A30]就在这里
  36. 0059EE16    C600 01         MOV BYTE PTR DS:[EAX],1                  ; 这里向[5A3A30]赋值为1
  37. 0059EE19    EB 04           JMP SHORT spa.0059EE1F
  38. 0059EE1B    46              INC ESI
  39. 0059EE1C    4B              DEC EBX
  40. 0059EE1D  ^ 75 87           JNZ SHORT spa.0059EDA6
  41. 0059EE1F    33C0            XOR EAX,EAX
  42. 0059EE21    5A              POP EDX

  43. ////////////////////////////////

  44. 004F733A    E8 5D000000     CALL spa.004F739C                        ; 这个CALL就是算法CALL,我们F7跟进
  45. 004F733F    84C0            TEST AL,AL

  46. /////////////////////////////

  47. 004F739C    55              PUSH EBP
  48. 004F739D    8BEC            MOV EBP,ESP
  49. 004F739F    51              PUSH ECX
  50. 004F73A0    B9 05000000     MOV ECX,5
  51. 004F73A5    6A 00           PUSH 0
  52. 004F73A7    6A 00           PUSH 0
  53. 004F73A9    49              DEC ECX
  54. 004F73AA  ^ 75 F9           JNZ SHORT spa.004F73A5
  55. 004F73AC    51              PUSH ECX
  56. 004F73AD    874D FC         XCHG DWORD PTR SS:[EBP-4],ECX
  57. 004F73B0    53              PUSH EBX
  58. 004F73B1    56              PUSH ESI
  59. 004F73B2    894D F8         MOV DWORD PTR SS:[EBP-8],ECX
  60. 004F73B5    8BF2            MOV ESI,EDX
  61. 004F73B7    8945 FC         MOV DWORD PTR SS:[EBP-4],EAX
  62. 004F73BA    8B45 F8         MOV EAX,DWORD PTR SS:[EBP-8]
  63. 004F73BD    E8 4ED5F0FF     CALL spa.00404910
  64. 004F73C2    8B45 0C         MOV EAX,DWORD PTR SS:[EBP+C]
  65. 004F73C5    E8 46D5F0FF     CALL spa.00404910
  66. 004F73CA    33C0            XOR EAX,EAX
  67. 004F73CC    55              PUSH EBP
  68. 004F73CD    68 8A764F00     PUSH spa.004F768A
  69. 004F73D2    64:FF30         PUSH DWORD PTR FS:[EAX]
  70. 004F73D5    64:8920         MOV DWORD PTR FS:[EAX],ESP
  71. 004F73D8    33DB            XOR EBX,EBX
  72. 004F73DA    A1 303A5A00     MOV EAX,DWORD PTR DS:[5A3A30]
  73. 004F73DF    8038 00         CMP BYTE PTR DS:[EAX],0
  74. 004F73E2    0F85 7F020000   JNZ spa.004F7667                         ; 这里判断[5A3A30]的数值,如果为1则不进行算法的计算,这里可不能让他跳转。跳走之后下放的算法部分的代码可就不执行了。
  75. 004F73E8    8D55 F4         LEA EDX,DWORD PTR SS:[EBP-C]
  76. 004F73EB    B8 A4764F00     MOV EAX,spa.004F76A4                     ; SOFTAA
  77. 004F73F0    E8 FB63FAFF     CALL spa.0049D7F0

  78. /////////////////////////////

  79. 004F7574    E8 BB87FDFF     CALL spa.004CFD34
  80. 004F7579    8D45 EC         LEA EAX,DWORD PTR SS:[EBP-14]
  81. 004F757C    BA B4764F00     MOV EDX,spa.004F76B4                     ; tH4gI8fsU0
  82. 004F7581    E8 72CFF0FF     CALL spa.004044F8
  83. 004F7586    8B45 0C         MOV EAX,DWORD PTR SS:[EBP+C]
  84. 004F7589    E8 92D1F0FF     CALL spa.00404720
  85. 004F758E    8BF0            MOV ESI,EAX
  86. 004F7590    8B45 F0         MOV EAX,DWORD PTR SS:[EBP-10]
  87. 004F7593    E8 88D1F0FF     CALL spa.00404720                        ; 这里EAX中出现真码
  88. 004F7598    3BF0            CMP ESI,EAX
  89. 004F759A    74 07           JE SHORT spa.004F75A3
复制代码


//////////////////////////////

于是搞清楚了反KG机制,我们的内存注册机自然也就出生了。软件呢只要见到一次出现“张湘平/KEYMAKE.EXE/” 它就再也不执行算法部分了,所以我们修改一下地址中的数据(注意哦,一修改这里,内存注册机卡吧可就报毒了),设置如图,我们看一下胜利截图。

软件的算法不难,有兴趣的朋友自己研究下吧。


02.gif
03.gif
04.gif


  1. ////////////
  2. SMC暴破研究

  3. 00645000    60              pushad
  4. 00645001    E8 00000000     call    00645006
  5. 00645006    5D              pop     ebp
  6. 00645007    81ED EAA84300   sub     ebp, 0043A8EA
  7. 0064500D    B8 E4A84300     mov     eax, 0043A8E4
  8. 00645012    03C5            add     eax, ebp
  9. 00645014    2B85 78AD4300   sub     eax, dword ptr [ebp+43AD78]
  10. 0064501A    8985 84AD4300   mov     dword ptr [ebp+43AD84], eax
  11. 00645020    80BD 6EAD4300 0>cmp     byte ptr [ebp+43AD6E], 0
  12. 00645027    75 15           jnz     short 0064503E
  13. 00645029    FE85 6EAD4300   inc     byte ptr [ebp+43AD6E]
  14. 0064502F    E8 1D000000     call    00645051                         ; 我们看这里 645051即是JMP EAX的下一行代码,当我们SMC的时候,我们还需要修补这里的代码。
  15. 00645034    E8 73020000     call    006452AC
  16. 00645039    E8 0A030000     call    00645348
  17. 0064503E    8B85 70AD4300   mov     eax, dword ptr [ebp+43AD70]
  18. 00645044    0385 84AD4300   add     eax, dword ptr [ebp+43AD84]
  19. 0064504A    894424 1C       mov     dword ptr [esp+1C], eax
  20. 0064504E    61              popad
  21. 0064504F    FFE0            jmp     eax                              ; 这里的JMP EAX 让他跳到到SMC地址//修改为JMP 646747
  22. 00645051    80BD A2AE4300 0>cmp     byte ptr [ebp+43AEA2], 0         ; 当我们修改JMP EAX后以下两行数据将被覆盖
  23. 00645058    74 1D           je      short 00645077
  24. 0064505A    8DB5 A3AE4300   lea     esi, dword ptr [ebp+43AEA3]

  25. /////////////////////////////

  26. 00646747    66:C705 17844F0>mov     word ptr [4F8417], 45C6          ; 以下三行//软件启动时的检测
  27. 00646750    C705 1A844F00 0>mov     dword ptr [4F841A], 8B909001
  28. 0064675A    C605 2A844F00 E>mov     byte ptr [4F842A], 0EB
  29. 00646761    66:C705 DFCD590>mov     word ptr [59CDDF], 45C6          ; 以下三行//软件注册部分
  30. 0064676A    C705 E2CD5900 0>mov     dword ptr [59CDE2], 8B909001
  31. 00646774    C605 F2CD5900 E>mov     byte ptr [59CDF2], 0EB
  32. 0064677B    C605 CDFF5800 0>mov     byte ptr [58FFCD], 1             ; 以下两行//软件关于部分
  33. 00646782    66:C705 C8FF580>mov     word ptr [58FFC8], 9090
  34. 0064678B    66:C705 76CE590>mov     word ptr [59CE76], 45C6          ; 以下三行//功能设置
  35. 00646794    C705 79CE5900 0>mov     dword ptr [59CE79], 8B909001
  36. 0064679E    C605 89CE5900 E>mov     byte ptr [59CE89], 0EB
  37. 006467A5    C605 94EB5800 E>mov     byte ptr [58EB94], 0EB           ; 以下修改解决掉功能限制//文件彻底删除助手
  38. 006467AC    C605 5CD75800 E>mov     byte ptr [58D75C], 0EB           ; 文件分割助手
  39. 006467B3  - E9 1085F5FF     jmp     0059ECC8                         ; 返回到OEP // 如有功能限制继续添加

  40. 二进制代码如下:

  41. 66 C7 05 17 84 4F 00 C6 45 C7 05 1A 84 4F 00 01 90 90 8B C6 05 2A 84 4F 00 EB 66 C7 05 DF CD 59
  42. 00 C6 45 C7 05 E2 CD 59 00 01 90 90 8B C6 05 F2 CD 59 00 EB C6 05 CD FF 58 00 01 66 C7 05 C8 FF
  43. 58 00 90 90 66 C7 05 76 CE 59 00 C6 45 C7 05 79 CE 59 00 01 90 90 8B C6 05 89 CE 59 00 EB C6 05
  44. 94 EB 58 00 EB C6 05 5C D7 58 00 EB E9 10 85 F5 FF

  45. ///////////////////////////

  46. 打上SMC补丁数据后,发现程序无法运行,重载发现端倪:

  47. 00645000    60              pushad
  48. 00645001    E8 00000000     call    00645006
  49. 00645006    5D              pop     ebp
  50. 00645007    81ED EAA84300   sub     ebp, 0043A8EA
  51. 0064500D    B8 E4A84300     mov     eax, 0043A8E4
  52. 00645012    03C5            add     eax, ebp
  53. 00645014    2B85 78AD4300   sub     eax, dword ptr [ebp+43AD78]
  54. 0064501A    8985 84AD4300   mov     dword ptr [ebp+43AD84], eax
  55. 00645020    80BD 6EAD4300 0>cmp     byte ptr [ebp+43AD6E], 0
  56. 00645027    75 15           jnz     short 0064503E
  57. 00645029    FE85 6EAD4300   inc     byte ptr [ebp+43AD6E]
  58. 0064502F    E8 8B170000     call    00645051                         ; 该CALL指向JMP的下一行代码,所以我们还需要修补这里的代码。修改为Call 006467BF

  59. ////////////////

  60. 006467BF    80BD A2AE4300 0>cmp     byte ptr [ebp+43AEA2], 0         ; 我们在这里写入数据,需要写两行。   
  61. 006467C6  ^ 0F84 ABE8FFFF   je      00645077
  62. 006467CC  ^ E9 89E8FFFF     jmp     0064505A                         ; 返回

  63. ////////////////

  64. 再次保存,软件就OK了。我们再翻回头来看一下软件对功能使用时的条件判断:

  65. 当程序返回软件算法CALL  004F72B0时候,出现以下汇编语句:

  66. call    004F72B0
  67. cmp     byte ptr [ebp-5], 0   //都在比较[ebp-5]的数值是否为0
  68. je                            //如果是0则挂掉

  69. 遗憾的是我没在算法CALL找到对[ebp-5]赋值的语句,有兴趣的朋友可以找一下,所以我全部做了这样的修改:

  70. 0059CDDA    E8 D1A4F5FF     call    004F72B0                         ; 注册
  71. 0059CDDF    C645 FB 01      mov     byte ptr [ebp-5], 1

  72. 0059CE71    E8 3AA4F5FF     call    004F72B0                         ; 功能设置
  73. 0059CE76    C645 FB 01      mov     byte ptr [ebp-5], 1

  74. 0058D753    E8 589BF6FF     call    004F72B0
  75. 0058D758    C645 FB 00      mov     byte ptr [ebp-5], 1              ; 文件分割助手

  76. 0058EB8B    E8 2087F6FF     call    004F72B0
  77. 0058EB90    C645 FB 00      mov     byte ptr [ebp-5], 1              ; 文件彻底删除助手

  78. 我们设置特征码:
  79. call    004F72B0
  80. cmp     byte ptr [ebp-5], 0

  81. Ctrl+S搜索该特征码,找到这样一些数据,猜测这些可以还是对一些功能使用上的判断,修改方法和上文相同,这里就不继续研究了。

  82. 0056B567    E8 44BDF8FF     call    004F72B0
  83. 0056B56C    807D FB 00      cmp     byte ptr [ebp-5], 0
  84. 0056B570    74 0F           je      short 0056B581
  85. 0056B572    8B45 FC         mov     eax, dword ptr [ebp-4]
  86. 0056B575    BA ACB65600     mov     edx, 0056B6AC                    ; ASCII "YesIKnow"
  87. 0056B57A    E8 ED92E9FF     call    0040486C
  88. 0056B57F    74 12           je      short 0056B593
  89. 0056B581    8D83 50030000   lea     eax, dword ptr [ebx+350]
  90. 0056B587    BA C0B65600     mov     edx, 0056B6C0                    ; ASCII " Top 5 "
  91. 0056B58C    E8 238FE9FF     call    004044B4
  92. 0056B591    EB 0B           jmp     short 0056B59E

  93. 0056D394    E8 179FF8FF     call    004F72B0
  94. 0056D399    807D FB 00      cmp     byte ptr [ebp-5], 0
  95. 0056D39D    74 0F           je      short 0056D3AE
  96. 0056D39F    8B45 FC         mov     eax, dword ptr [ebp-4]
  97. 0056D3A2    BA E0D45600     mov     edx, 0056D4E0                    ; ASCII "YesIKnow"
  98. 0056D3A7    E8 C074E9FF     call    0040486C
  99. 0056D3AC    74 12           je      short 0056D3C0
  100. 0056D3AE    8D83 34030000   lea     eax, dword ptr [ebx+334]
  101. 0056D3B4    BA F4D45600     mov     edx, 0056D4F4                    ; ASCII " Top 5 "
  102. 0056D3B9    E8 F670E9FF     call    004044B4
  103. 0056D3BE    EB 0B           jmp     short 0056D3CB

  104. 00570DA7    E8 0465F8FF     call    004F72B0
  105. 00570DAC    807D FB 00      cmp     byte ptr [ebp-5], 0
  106. 00570DB0    74 0F           je      short 00570DC1
  107. 00570DB2    8B45 FC         mov     eax, dword ptr [ebp-4]
  108. 00570DB5    BA 7C0E5700     mov     edx, 00570E7C                    ; ASCII "YesIKnow"
  109. 00570DBA    E8 AD3AE9FF     call    0040486C
  110. 00570DBF    74 12           je      short 00570DD3
  111. 00570DC1    8D83 20030000   lea     eax, dword ptr [ebx+320]
  112. 00570DC7    BA 900E5700     mov     edx, 00570E90                    ; ASCII " Top 1 "
  113. 00570DCC    E8 E336E9FF     call    004044B4
  114. 00570DD1    EB 0B           jmp     short 00570DDE

  115. 00570F9D    E8 0E63F8FF     call    004F72B0
  116. 00570FA2    807D FB 00      cmp     byte ptr [ebp-5], 0
  117. 00570FA6    74 0F           je      short 00570FB7
  118. 00570FA8    8B45 FC         mov     eax, dword ptr [ebp-4]
  119. 00570FAB    BA 34105700     mov     edx, 00571034                    ; ASCII "YesIKnow"
  120. 00570FB0    E8 B738E9FF     call    0040486C
  121. 00570FB5    74 19           je      short 00570FD0
复制代码


05.gif

评分

参与人数 1威望 +20 飘云币 +20 收起 理由
tigerisme + 20 + 20 精彩

查看全部评分

PYG19周年生日快乐!

该用户从未签到

发表于 2007-8-17 01:42:39 | 显示全部楼层
向高手学习了。 下来慢慢研究
PYG19周年生日快乐!
  • TA的每日心情
    难过
    2024-4-22 14:49
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    发表于 2007-8-17 09:02:21 | 显示全部楼层
    学习... 谢谢好文
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2007-8-18 00:52:28 | 显示全部楼层
    前天碰到一个软件 也是会反内存注册机的,不知道该怎么办 ,现在终于知道思路了 ,谢谢LZ了。
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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