首页
社区
课程
招聘
3dsmax6-keygen脱壳
发表于: 2005-1-27 20:32 4813

3dsmax6-keygen脱壳

2005-1-27 20:32
4813
     日期:2005年1月27日   脱壳人:csjwaman[DFCG]
―――――――――――――――――――――――――――――――――――――――――――

【软件名称】:3dsmax6-keygen   
【下载地址】:http://bbs.pediy.com/showthread.php?s=&threadid=10336
【软件限制】:伪Telock
【破解声明】:初学Crack,只是感兴趣,没有其它目的。失误之处敬请诸位大侠赐教!
【操作系统】:win2k
【破解工具】:OD等传统工具

―――――――――――――――――――――――――――――――――――――――――――
 
【脱壳过程】:

一、查找入口:

用PEID检测不到。用OD载入,忽略所有异常。

00410C0D    FF6424 04       JMP NEAR DWORD PTR SS:[ESP+4]
00410C11    00F9            ADD CL,BH
00410C13 >^ E9 E8E3FFFF     JMP 3dsmax6-.0040F000/////停在这里。
00410C18    0000            ADD BYTE PTR DS:[EAX],AL
00410C1A    0000            ADD BYTE PTR DS:[EAX],AL

SHIFT+F9,运行程序后到0040F000处看看:

0040F000  - E9 9D45FFFF     JMP 3dsmax6-.004035A2/////004035A2就是OEP。
0040F005    0000            ADD BYTE PTR DS:[EAX],AL
0040F007    0000            ADD BYTE PTR DS:[EAX],AL
0040F009    0000            ADD BYTE PTR DS:[EAX],AL
0040F00B    0000            ADD BYTE PTR DS:[EAX],AL
0040F00D    0000            ADD BYTE PTR DS:[EAX],AL
0040F00F    0000            ADD BYTE PTR DS:[EAX],AL
0040F011    0000            ADD BYTE PTR DS:[EAX],AL

估计是Telock 修改版。

二、修复IAT:

重新载入程序,ALT+M打开内存镜像,在区段40E000处下内存访问断点,然后SHIFT+F9,断在:

004100BD    F3:A5           REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS>////断在这里。
004100BF    8BCB            MOV ECX,EBX
004100C1    F3:A4           REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[>
004100C3    8BF2            MOV ESI,EDX

取消内存断点,然后在区段401000处下内存访问断点,SHIFT+F9,直接断在入口处:

004035A2    6A 60           PUSH 60////断在这里。DUMP出来。
004035A4    68 20814000     PUSH 3dsmax6-.00408120
004035A9    E8 DA270000     CALL 3dsmax6-.00405D88
004035AE    BF 94000000     MOV EDI,94
004035B3    8BC7            MOV EAX,EDI
004035B5    E8 26280000     CALL 3dsmax6-.00405DE0
004035BA    8965 E8         MOV DWORD PTR SS:[EBP-18],ESP
004035BD    8BF4            MOV ESI,ESP
004035BF    893E            MOV DWORD PTR DS:[ESI],EDI
004035C1    56              PUSH ESI
004035C2    FF15 40804000   CALL NEAR DWORD PTR DS:[408040]////408040处应该是IAT地址。
004035C8    8B4E 10         MOV ECX,DWORD PTR DS:[ESI+10]
004035CB    890D F4BA4000   MOV DWORD PTR DS:[40BAF4],ECX
004035D1    8B46 04         MOV EAX,DWORD PTR DS:[ESI+4]
004035D4    A3 00BB4000     MOV DWORD PTR DS:[40BB00],EAX
004035D9    8B56 08         MOV EDX,DWORD PTR DS:[ESI+8]
004035DC    8915 04BB4000   MOV DWORD PTR DS:[40BB04],EDX
004035E2    8B76 0C         MOV ESI,DWORD PTR DS:[ESI+C]
004035E5    81E6 FF7F0000   AND ESI,7FFF
004035EB    8935 F8BA4000   MOV DWORD PTR DS:[40BAF8],ESI
004035F1    83F9 02         CMP ECX,2
004035F4    74 0C           JE SHORT 3dsmax6-.00403602

取消内存断点,到内存408040处看看:

00408040  74 01 8C 00 83 01 8C 00  t???

上下有许多8CXXXX之类的地址。先到8C0174处:

008C0174   /EB 01           JMP SHORT 008C0177////在这里下内存访问断点。
008C0176   |66:40           INC AX///有花指令。
008C0178    2BC7            SUB EAX,EDI
008C017A    B8 6A088C00     MOV EAX,8C086A
008C017F    40              INC EAX
008C0180    FF30            PUSH DWORD PTR DS:[EAX]
008C0182    C3              RETN

F9运行程序,断下后跟踪一下。F7后:

008C0177    40              INC EAX
008C0178    2BC7            SUB EAX,EDI
008C017A    B8 6A088C00     MOV EAX,8C086A
008C017F    40              INC EAX////EAX=8C086B
008C0180    FF30            PUSH DWORD PTR DS:[EAX]  ; kernel32.GetVersionExA////F7到这里后出现API名,[EAX]中就是API,可见00408040处就是跳转表。
008C0182    C3              RETN

再回到内存00408040处上下看看:

00408000  00 00 8C 00 0F 00 8C 00  ..?.?
00408008  1E 00 8C 00 2F 00 8C 00  .?/.?
。。。。。。
004080C8  7A 04 8C 00 8B 04 8C 00  z???
004080D0  00 00 8B 00 0F 00 8B 00  ..?.?
004080D8  1E 00 8B 00 2F 00 8B 00  .?/.?
004080E0  3E 00 8B 00 63 00 8B 00  >.?c.?
004080E8  71 00 8B 00 80 00 8B 00  q.???
004080F0  A5 00 8B 00 00 00 00 00  ??....

可知IAT大小为F4

再到内存8C086B处看看:

008C0823  00 00 00 00 00 00 00 00  ........
008C082B  C4 20 E6 77 43 3D E6 77  ?骥C=骥
008C0833  0E 8A E7 77 8B 6C F9 77  ?w??
008C083B  5A CC FC 77 AF 3A E6 77  Z厅w?骥
008C0843  3E 3F E6 77 71 3A E6 77  >?骥q:骥
008C084B  FA 48 E6 77 7B 3A E6 77  ?骥{:骥
008C0853  7D 0E E7 77 EF C0 FC 77  }琪锢?
008C085B  44 C6 FC 77 FC 3D E6 77  D泣w?骥
008C0863  DE FB E6 77 03 FB E6 77  摞骥?w
008C086B  C7 A5 E6 77 0C 4F E6 77  钎骥.O骥
008C0873  B1 4E E6 77 64 4E E6 77  蔽骥dN骥
008C087B  B9 4D E6 77 E3 5E F8 77  雇骥戕?
008C0883  CC C3 E7 77 2D 54 E6 77  堂琪-T骥
008C088B  7E 4C E6 77 9D 3A E6 77  ~L骥?骥
008C0893  C4 51 E6 77 BB D7 E7 77  难骥蛔琪
008C089B  FE 9B E6 77 CD 61 E6 77  ?骥歪骥
008C08A3  AB 3A E6 77 F3 37 E6 77  ?骥?骥
008C08AB  09 FB E6 77 D0 41 E6 77  .?w辛骥
008C08B3  18 AA E7 77 17 64 E6 77  ?wd骥
008C08BB  42 69 E7 77 17 64 E6 77  Bi琪d骥
008C08C3  9D 63 E6 77 D1 3E E6 77  ?骥?骥
008C08CB  43 87 E6 77 29 76 E6 77  C?w)v骥
008C08D3  C7 FA E6 77 53 A4 E6 77  曲骥Sゆw
008C08DB  5C 6A E6 77 A4 9B E6 77  \j骥?骥
008C08E3  FB 68 E6 77 E6 3E E6 77  ?骥?骥
008C08EB  82 6C E6 77 03 44 E6 77  ?骥D骥
008C08F3  18 86 E6 77 00 00 00 00  ?w....
008C08FB  00 00 00 00 00 00 00 00  ........

这就是IAT。把8C082B-8C08F6处大小为CC的数据DUMP下来粘贴到DUMP出来的文件408000处。但这样还差F4-CC=28大小的数据(也就是还有10个API)没找到。再回到跳转表处看看,可以发现这10个API正是从4080D0开始调用的。那么我们就在4080D-4080F3处下内存访问断点。F9运行后断在:

00401033    FF15 EC804000   CALL NEAR DWORD PTR DS:[4080EC]///第一次断在这里。F7进入。
00401039    6A 01           PUSH 1
0040103B    FF15 28804000   CALL NEAR DWORD PTR DS:[408028]
00401041    8BE5            MOV ESP,EBP
00401043    5D              POP EBP
00401044    C2 1000         RETN 10
00401047    55              PUSH EBP

进入后F7几次后来到:

008B009A    40              INC EAX
008B009B    40              INC EAX
008B009C    B8 63018B00     MOV EAX,8B0163
008B00A1    40              INC EAX
008B00A2    FF30            PUSH DWORD PTR DS:[EAX]   ; user32.DialogBoxParamA////出现API名了。此时EAX=8B0164。
008B00A4    C3              RETN

到内存8B0164处看看:

008B0148  3B 47 E0 77 19 47 E0 77  ;G圜G圜
008B0150  8A 58 DF 77 47 3C DF 77  ?喵G<喵
008B0158  C1 95 DF 77 DA 5F DF 77  ?喵谶喵
008B0160  5D 7E E0 77 3C 85 E0 77  ]~圜<?w

呵呵,这里有8个API呢!把这8个地址粘贴到DUMP文件的4080D0处,还有2个没找可能是垃圾。

现在用LORDPE打开DUMP文件,看到输入表在10C22处。

重新载入程序,来到入口后,运行ImportRECv1.42+,设置选项“建立新输入表”,找到进程,OEP处填入35A2,RVA处填入4C082B,大小CC,然后搜索。搜索完成后,再搜索一次,RVA处填入4B0148,大小20。两次搜索完成后,把“增加新块”前的钩去掉,新输入表信息的RVA填入10C22,最后修复DUMP文件。

至此,可以正常运行。还可以优化一下大小。

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 242
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
壳之高手,谢过
2005-1-28 11:51
0
雪    币: 319
活跃值: (2404)
能力值: ( LV12,RANK:980 )
在线值:
发帖
回帖
粉丝
3
晕!fly才是壳之高手。这个只是高手们不屑看它,才轮到我这个菜鸟来研究。
2005-1-28 22:02
0
雪    币: 319
活跃值: (2404)
能力值: ( LV12,RANK:980 )
在线值:
发帖
回帖
粉丝
4
最近参考了FLY大侠的脱文,终于找到了完美脱壳的方法:
00410360    895424 1C       MOV DWORD PTR SS:[ESP+1C],EDX
00410364    61              POPAD
00410365    C685 34CD4000 0>MOV BYTE PTR SS:[EBP+40CD34],0
0041036C    74 24           JE SHORT 3dsmax6-.00410392////只要这里改成JMP就可以得到完整的IAT,并不需要用ImportREC修复。
0041036E    80EC 08         SUB AH,8
00410371    B0 01           MOV AL,1
00410373    FECC            DEC AH
00410375    74 04           JE SHORT 3dsmax6-.0041037B
00410377    D0E0            SHL AL,1
00410379  ^ EB F8           JMP SHORT 3dsmax6-.00410373
2005-1-29 09:33
0
雪    币: 242
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
能否说详细一点,如何改跳转直接修复IAT!
2005-2-2 23:07
0
游客
登录 | 注册 方可回帖
返回
//