- UID
- 2198
注册时间2005-6-29
阅读权限255
最后登录1970-1-1
副坛主
该用户从未签到
|
和sfl4800兄弟一起研究一下该软件反内存注册机的机制。国软,下载就不介绍了。大家了解到方法即可。
- 奇怪的入口点,脱之。
- ///////////////////////
- 004AF996 > 90 NOP
- 004AF997 75 00 JNZ SHORT spa.004AF999
- 004AF999 - E9 62561900 JMP spa.00645000
- ///////////////////////
- 00645000 60 PUSHAD
- 00645001 E8 00000000 CALL spa.00645006
- 00645006 5D POP EBP
- 00645007 81ED EAA84300 SUB EBP,spa.0043A8EA
- 0064500D B8 E4A84300 MOV EAX,spa.0043A8E4
- 00645012 03C5 ADD EAX,EBP
- 00645014 2B85 78AD4300 SUB EAX,DWORD PTR SS:[EBP+43AD78]
- 0064501A 8985 84AD4300 MOV DWORD PTR SS:[EBP+43AD84],EAX
- 00645020 80BD 6EAD4300 0>CMP BYTE PTR SS:[EBP+43AD6E],0
- 00645027 75 15 JNZ SHORT spa.0064503E
- 00645029 FE85 6EAD4300 INC BYTE PTR SS:[EBP+43AD6E]
- 0064502F E8 1D000000 CALL spa.00645051
- 00645034 E8 73020000 CALL spa.006452AC
- 00645039 E8 0A030000 CALL spa.00645348
- 0064503E 8B85 70AD4300 MOV EAX,DWORD PTR SS:[EBP+43AD70]
- 00645044 0385 84AD4300 ADD EAX,DWORD PTR SS:[EBP+43AD84]
- 0064504A 894424 1C MOV DWORD PTR SS:[ESP+1C],EAX
- 0064504E 61 POPAD
- 0064504F FFE0 JMP EAX ; 直接F4到这里即可 EAX即OEP
- ///////////////////////
- 0059ECC8 55 PUSH EBP ; OEP
- 0059ECC9 8BEC MOV EBP,ESP
- 0059ECCB B9 0B000000 MOV ECX,0B
- 0059ECD0 6A 00 PUSH 0
- 0059ECD2 6A 00 PUSH 0
- 0059ECD4 49 DEC ECX
- 0059ECD5 ^ 75 F9 JNZ SHORT spa.0059ECD0
- 软件的注册信息是放到保存到这里的:
- HKEY_LOCAL_MACHINE\SOFTWARE\lsjsoft\spa
复制代码
当我们输入用户名和名后,软件才调用算法部分。这一手不错 :24ab:
我们点软件“关于”,从这里可以顺藤摸瓜找到软件的算法,明码比较,奇怪的是软件反内存注册机,呵呵。我们来研究一下他反内存注册机的机制。我们看到这一幅图片,可疑吧:
/////////////////////
- 0059ED99 FF52 14 CALL DWORD PTR DS:[EDX+14]
- 0059ED9C 8BD8 MOV EBX,EAX
- 0059ED9E 4B DEC EBX
- 0059ED9F 85DB TEST EBX,EBX
- 0059EDA1 7C 7C JL SHORT spa.0059EE1F ; 这里一开始是实现跳转的,当软件监控到有以下内容的时候,这就不跳转了。(只要监控到一次,以后就永久不跳了)
- 0059EDA3 43 INC EBX
- 0059EDA4 33F6 XOR ESI,ESI
- 0059EDA6 8D4D E4 LEA ECX,DWORD PTR SS:[EBP-1C]
- 0059EDA9 8BD6 MOV EDX,ESI
- 0059EDAB A1 D4605A00 MOV EAX,DWORD PTR DS:[5A60D4]
- 0059EDB0 8B38 MOV EDI,DWORD PTR DS:[EAX]
- 0059EDB2 FF57 0C CALL DWORD PTR DS:[EDI+C]
- 0059EDB5 8B55 E4 MOV EDX,DWORD PTR SS:[EBP-1C]
- 0059EDB8 B8 DC605A00 MOV EAX,spa.005A60DC
- 0059EDBD E8 F256E6FF CALL spa.004044B4
- 0059EDC2 BA E0605A00 MOV EDX,spa.005A60E0
- 0059EDC7 33C9 XOR ECX,ECX
- 0059EDC9 A1 DC605A00 MOV EAX,DWORD PTR DS:[5A60DC]
- 0059EDCE E8 D9E3EFFF CALL spa.0049D1AC
- 0059EDD3 A1 FC605A00 MOV EAX,DWORD PTR DS:[5A60FC]
- 0059EDD8 BA D4F15900 MOV EDX,spa.0059F1D4 ; 注册器
- 0059EDDD E8 8A5AE6FF CALL spa.0040486C
- 0059EDE2 74 2D JE SHORT spa.0059EE11
- 0059EDE4 8D55 E0 LEA EDX,DWORD PTR SS:[EBP-20]
- 0059EDE7 A1 F8605A00 MOV EAX,DWORD PTR DS:[5A60F8]
- 0059EDEC E8 77A1E6FF CALL spa.00408F68
- 0059EDF1 8B45 E0 MOV EAX,DWORD PTR SS:[EBP-20]
- 0059EDF4 BA E4F15900 MOV EDX,spa.0059F1E4 ; KEYMAKE.EXE
- 0059EDF9 E8 6E5AE6FF CALL spa.0040486C
- 0059EDFE 74 11 JE SHORT spa.0059EE11
- 0059EE00 A1 E0605A00 MOV EAX,DWORD PTR DS:[5A60E0]
- 0059EE05 BA F8F15900 MOV EDX,spa.0059F1F8 ; 张湘平
- 0059EE0A E8 5D5AE6FF CALL spa.0040486C
- 0059EE0F 75 0A JNZ SHORT spa.0059EE1B
- 0059EE11 A1 303A5A00 MOV EAX,DWORD PTR DS:[5A3A30] ; [5A3A30]就在这里
- 0059EE16 C600 01 MOV BYTE PTR DS:[EAX],1 ; 这里向[5A3A30]赋值为1
- 0059EE19 EB 04 JMP SHORT spa.0059EE1F
- 0059EE1B 46 INC ESI
- 0059EE1C 4B DEC EBX
- 0059EE1D ^ 75 87 JNZ SHORT spa.0059EDA6
- 0059EE1F 33C0 XOR EAX,EAX
- 0059EE21 5A POP EDX
- ////////////////////////////////
- 004F733A E8 5D000000 CALL spa.004F739C ; 这个CALL就是算法CALL,我们F7跟进
- 004F733F 84C0 TEST AL,AL
- /////////////////////////////
- 004F739C 55 PUSH EBP
- 004F739D 8BEC MOV EBP,ESP
- 004F739F 51 PUSH ECX
- 004F73A0 B9 05000000 MOV ECX,5
- 004F73A5 6A 00 PUSH 0
- 004F73A7 6A 00 PUSH 0
- 004F73A9 49 DEC ECX
- 004F73AA ^ 75 F9 JNZ SHORT spa.004F73A5
- 004F73AC 51 PUSH ECX
- 004F73AD 874D FC XCHG DWORD PTR SS:[EBP-4],ECX
- 004F73B0 53 PUSH EBX
- 004F73B1 56 PUSH ESI
- 004F73B2 894D F8 MOV DWORD PTR SS:[EBP-8],ECX
- 004F73B5 8BF2 MOV ESI,EDX
- 004F73B7 8945 FC MOV DWORD PTR SS:[EBP-4],EAX
- 004F73BA 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8]
- 004F73BD E8 4ED5F0FF CALL spa.00404910
- 004F73C2 8B45 0C MOV EAX,DWORD PTR SS:[EBP+C]
- 004F73C5 E8 46D5F0FF CALL spa.00404910
- 004F73CA 33C0 XOR EAX,EAX
- 004F73CC 55 PUSH EBP
- 004F73CD 68 8A764F00 PUSH spa.004F768A
- 004F73D2 64:FF30 PUSH DWORD PTR FS:[EAX]
- 004F73D5 64:8920 MOV DWORD PTR FS:[EAX],ESP
- 004F73D8 33DB XOR EBX,EBX
- 004F73DA A1 303A5A00 MOV EAX,DWORD PTR DS:[5A3A30]
- 004F73DF 8038 00 CMP BYTE PTR DS:[EAX],0
- 004F73E2 0F85 7F020000 JNZ spa.004F7667 ; 这里判断[5A3A30]的数值,如果为1则不进行算法的计算,这里可不能让他跳转。跳走之后下放的算法部分的代码可就不执行了。
- 004F73E8 8D55 F4 LEA EDX,DWORD PTR SS:[EBP-C]
- 004F73EB B8 A4764F00 MOV EAX,spa.004F76A4 ; SOFTAA
- 004F73F0 E8 FB63FAFF CALL spa.0049D7F0
- /////////////////////////////
- 004F7574 E8 BB87FDFF CALL spa.004CFD34
- 004F7579 8D45 EC LEA EAX,DWORD PTR SS:[EBP-14]
- 004F757C BA B4764F00 MOV EDX,spa.004F76B4 ; tH4gI8fsU0
- 004F7581 E8 72CFF0FF CALL spa.004044F8
- 004F7586 8B45 0C MOV EAX,DWORD PTR SS:[EBP+C]
- 004F7589 E8 92D1F0FF CALL spa.00404720
- 004F758E 8BF0 MOV ESI,EAX
- 004F7590 8B45 F0 MOV EAX,DWORD PTR SS:[EBP-10]
- 004F7593 E8 88D1F0FF CALL spa.00404720 ; 这里EAX中出现真码
- 004F7598 3BF0 CMP ESI,EAX
- 004F759A 74 07 JE SHORT spa.004F75A3
复制代码
//////////////////////////////
于是搞清楚了反KG机制,我们的内存注册机自然也就出生了。软件呢只要见到一次出现“张湘平/KEYMAKE.EXE/” 它就再也不执行算法部分了,所以我们修改一下地址中的数据(注意哦,一修改这里,内存注册机卡吧可就报毒了),设置如图,我们看一下胜利截图。
软件的算法不难,有兴趣的朋友自己研究下吧。
- ////////////
- SMC暴破研究
- 00645000 60 pushad
- 00645001 E8 00000000 call 00645006
- 00645006 5D pop ebp
- 00645007 81ED EAA84300 sub ebp, 0043A8EA
- 0064500D B8 E4A84300 mov eax, 0043A8E4
- 00645012 03C5 add eax, ebp
- 00645014 2B85 78AD4300 sub eax, dword ptr [ebp+43AD78]
- 0064501A 8985 84AD4300 mov dword ptr [ebp+43AD84], eax
- 00645020 80BD 6EAD4300 0>cmp byte ptr [ebp+43AD6E], 0
- 00645027 75 15 jnz short 0064503E
- 00645029 FE85 6EAD4300 inc byte ptr [ebp+43AD6E]
- 0064502F E8 1D000000 call 00645051 ; 我们看这里 645051即是JMP EAX的下一行代码,当我们SMC的时候,我们还需要修补这里的代码。
- 00645034 E8 73020000 call 006452AC
- 00645039 E8 0A030000 call 00645348
- 0064503E 8B85 70AD4300 mov eax, dword ptr [ebp+43AD70]
- 00645044 0385 84AD4300 add eax, dword ptr [ebp+43AD84]
- 0064504A 894424 1C mov dword ptr [esp+1C], eax
- 0064504E 61 popad
- 0064504F FFE0 jmp eax ; 这里的JMP EAX 让他跳到到SMC地址//修改为JMP 646747
- 00645051 80BD A2AE4300 0>cmp byte ptr [ebp+43AEA2], 0 ; 当我们修改JMP EAX后以下两行数据将被覆盖
- 00645058 74 1D je short 00645077
- 0064505A 8DB5 A3AE4300 lea esi, dword ptr [ebp+43AEA3]
- /////////////////////////////
- 00646747 66:C705 17844F0>mov word ptr [4F8417], 45C6 ; 以下三行//软件启动时的检测
- 00646750 C705 1A844F00 0>mov dword ptr [4F841A], 8B909001
- 0064675A C605 2A844F00 E>mov byte ptr [4F842A], 0EB
- 00646761 66:C705 DFCD590>mov word ptr [59CDDF], 45C6 ; 以下三行//软件注册部分
- 0064676A C705 E2CD5900 0>mov dword ptr [59CDE2], 8B909001
- 00646774 C605 F2CD5900 E>mov byte ptr [59CDF2], 0EB
- 0064677B C605 CDFF5800 0>mov byte ptr [58FFCD], 1 ; 以下两行//软件关于部分
- 00646782 66:C705 C8FF580>mov word ptr [58FFC8], 9090
- 0064678B 66:C705 76CE590>mov word ptr [59CE76], 45C6 ; 以下三行//功能设置
- 00646794 C705 79CE5900 0>mov dword ptr [59CE79], 8B909001
- 0064679E C605 89CE5900 E>mov byte ptr [59CE89], 0EB
- 006467A5 C605 94EB5800 E>mov byte ptr [58EB94], 0EB ; 以下修改解决掉功能限制//文件彻底删除助手
- 006467AC C605 5CD75800 E>mov byte ptr [58D75C], 0EB ; 文件分割助手
- 006467B3 - E9 1085F5FF jmp 0059ECC8 ; 返回到OEP // 如有功能限制继续添加
- 二进制代码如下:
- 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
- 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
- 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
- 94 EB 58 00 EB C6 05 5C D7 58 00 EB E9 10 85 F5 FF
- ///////////////////////////
- 打上SMC补丁数据后,发现程序无法运行,重载发现端倪:
- 00645000 60 pushad
- 00645001 E8 00000000 call 00645006
- 00645006 5D pop ebp
- 00645007 81ED EAA84300 sub ebp, 0043A8EA
- 0064500D B8 E4A84300 mov eax, 0043A8E4
- 00645012 03C5 add eax, ebp
- 00645014 2B85 78AD4300 sub eax, dword ptr [ebp+43AD78]
- 0064501A 8985 84AD4300 mov dword ptr [ebp+43AD84], eax
- 00645020 80BD 6EAD4300 0>cmp byte ptr [ebp+43AD6E], 0
- 00645027 75 15 jnz short 0064503E
- 00645029 FE85 6EAD4300 inc byte ptr [ebp+43AD6E]
- 0064502F E8 8B170000 call 00645051 ; 该CALL指向JMP的下一行代码,所以我们还需要修补这里的代码。修改为Call 006467BF
- ////////////////
- 006467BF 80BD A2AE4300 0>cmp byte ptr [ebp+43AEA2], 0 ; 我们在这里写入数据,需要写两行。
- 006467C6 ^ 0F84 ABE8FFFF je 00645077
- 006467CC ^ E9 89E8FFFF jmp 0064505A ; 返回
- ////////////////
- 再次保存,软件就OK了。我们再翻回头来看一下软件对功能使用时的条件判断:
- 当程序返回软件算法CALL 004F72B0时候,出现以下汇编语句:
- call 004F72B0
- cmp byte ptr [ebp-5], 0 //都在比较[ebp-5]的数值是否为0
- je //如果是0则挂掉
- 遗憾的是我没在算法CALL找到对[ebp-5]赋值的语句,有兴趣的朋友可以找一下,所以我全部做了这样的修改:
- 0059CDDA E8 D1A4F5FF call 004F72B0 ; 注册
- 0059CDDF C645 FB 01 mov byte ptr [ebp-5], 1
- 0059CE71 E8 3AA4F5FF call 004F72B0 ; 功能设置
- 0059CE76 C645 FB 01 mov byte ptr [ebp-5], 1
- 0058D753 E8 589BF6FF call 004F72B0
- 0058D758 C645 FB 00 mov byte ptr [ebp-5], 1 ; 文件分割助手
- 0058EB8B E8 2087F6FF call 004F72B0
- 0058EB90 C645 FB 00 mov byte ptr [ebp-5], 1 ; 文件彻底删除助手
- 我们设置特征码:
- call 004F72B0
- cmp byte ptr [ebp-5], 0
- Ctrl+S搜索该特征码,找到这样一些数据,猜测这些可以还是对一些功能使用上的判断,修改方法和上文相同,这里就不继续研究了。
- 0056B567 E8 44BDF8FF call 004F72B0
- 0056B56C 807D FB 00 cmp byte ptr [ebp-5], 0
- 0056B570 74 0F je short 0056B581
- 0056B572 8B45 FC mov eax, dword ptr [ebp-4]
- 0056B575 BA ACB65600 mov edx, 0056B6AC ; ASCII "YesIKnow"
- 0056B57A E8 ED92E9FF call 0040486C
- 0056B57F 74 12 je short 0056B593
- 0056B581 8D83 50030000 lea eax, dword ptr [ebx+350]
- 0056B587 BA C0B65600 mov edx, 0056B6C0 ; ASCII " Top 5 "
- 0056B58C E8 238FE9FF call 004044B4
- 0056B591 EB 0B jmp short 0056B59E
- 0056D394 E8 179FF8FF call 004F72B0
- 0056D399 807D FB 00 cmp byte ptr [ebp-5], 0
- 0056D39D 74 0F je short 0056D3AE
- 0056D39F 8B45 FC mov eax, dword ptr [ebp-4]
- 0056D3A2 BA E0D45600 mov edx, 0056D4E0 ; ASCII "YesIKnow"
- 0056D3A7 E8 C074E9FF call 0040486C
- 0056D3AC 74 12 je short 0056D3C0
- 0056D3AE 8D83 34030000 lea eax, dword ptr [ebx+334]
- 0056D3B4 BA F4D45600 mov edx, 0056D4F4 ; ASCII " Top 5 "
- 0056D3B9 E8 F670E9FF call 004044B4
- 0056D3BE EB 0B jmp short 0056D3CB
- 00570DA7 E8 0465F8FF call 004F72B0
- 00570DAC 807D FB 00 cmp byte ptr [ebp-5], 0
- 00570DB0 74 0F je short 00570DC1
- 00570DB2 8B45 FC mov eax, dword ptr [ebp-4]
- 00570DB5 BA 7C0E5700 mov edx, 00570E7C ; ASCII "YesIKnow"
- 00570DBA E8 AD3AE9FF call 0040486C
- 00570DBF 74 12 je short 00570DD3
- 00570DC1 8D83 20030000 lea eax, dword ptr [ebx+320]
- 00570DC7 BA 900E5700 mov edx, 00570E90 ; ASCII " Top 1 "
- 00570DCC E8 E336E9FF call 004044B4
- 00570DD1 EB 0B jmp short 00570DDE
- 00570F9D E8 0E63F8FF call 004F72B0
- 00570FA2 807D FB 00 cmp byte ptr [ebp-5], 0
- 00570FA6 74 0F je short 00570FB7
- 00570FA8 8B45 FC mov eax, dword ptr [ebp-4]
- 00570FAB BA 34105700 mov edx, 00571034 ; ASCII "YesIKnow"
- 00570FB0 E8 B738E9FF call 0040486C
- 00570FB5 74 19 je short 00570FD0
复制代码
|
评分
-
查看全部评分
|