首页
社区
课程
招聘
[原创]ASProtect 2.11外壳分析
发表于: 2011-11-6 01:27 6573

[原创]ASProtect 2.11外壳分析

2011-11-6 01:27
6573

这是一个SMC补丁的里面的实例,他的方法有一步我完成不了,就自己分析了。大家感兴趣的可以看下。
以下完全自己的看法,如果和大家的看法不同,帮忙指出来一下,谢谢。
SMC补丁:在外壳中就是动态修改代码,由我们把我们的SMC代码写进磁盘文件,然后我们动态引导外壳处理。
先说下第一步:ASProtect外壳有4个解密代码的地址.我们要引导这4个地址,这几个地址都是JMP的形式存在。
jnz Decode
jmp xxxxxx2 修改为我们的地址。因为是动态解码,我们修改下面的地址,就会解码错误
jnz Decode1
jmp xxxxxx3这样依次修改到最后一个解码的地址,就是静态代码了

00468037    50              PUSH EAX
00468038    53              PUSH EBX
00468039    FFB5 ED090000   PUSH DWORD PTR SS:[EBP+9ED]
0046803F    8D45 35         LEA EAX,DWORD PTR SS:[EBP+35]
00468042    50              PUSH EAX
00468043    E9 82000000     JMP InlineMe.004680CA                    ; 跳到解码地址一
0046816F    81E8 01000000   SUB EAX,1
00468175    0F85 19000000   JNZ InlineMe.00468194                    ; 判断解码代码的大小,是否继续解码
0046817B    E9 2E000000     JMP InlineMe.004681AE                    ; 跳到解码地址二
00468246    4B              DEC EBX
00468247    81FB 34F9FFFF   CMP EBX,-6CC                             ; 以负数形式比较大小
0046824D    0F85 0C000000   JNZ InlineMe.0046825F                    ; 判断是否继续解码
00468253    8BD1            MOV EDX,ECX
00468255    E9 27000000     JMP InlineMe.00468281                    ; 跳向解码地址三
00468354    81EE 01000000   SUB ESI,1                                ; 解码大小
0046835A    0F85 0B000000   JNZ InlineMe.0046836B                    ; 判断解码大小
00468360    E9 23000000     JMP InlineMe.00468388                    ; 跳向解码地址4
00468419    83EE 01         SUB ESI,1                                ; 解码大小
0046841C  ^ 0F85 9DFFFFFF   JNZ InlineMe.004683BF                    ; 判断解码大小
00468422    B4 02           MOV AH,2                                                 ; 断点
004684CB    6A 40           PUSH 40
004684CD    68 00100000     PUSH 1000
004684D2    FFB5 08040000   PUSH DWORD PTR SS:[EBP+408]              ; 大小
004684D8    6A 00           PUSH 0
004684DA    FF95 F0030000   CALL DWORD PTR SS:[EBP+3F0]              ; VirtualAlloc分配内存
004684E0    8985 CC010000   MOV DWORD PTR SS:[EBP+1CC],EAX           ; EAX=00970000
004684E6    8B9D 00040000   MOV EBX,DWORD PTR SS:[EBP+400]
004684EC    039D 0D040000   ADD EBX,DWORD PTR SS:[EBP+40D]
004684F2    50              PUSH EAX
004684F3    53              PUSH EBX
004684F4    E8 04010000     CALL InlineMe.004685FD                   ; 解码函数
004684F9    6A 40           PUSH 40
004684FB    68 00100000     PUSH 1000
00468500    FFB5 08040000   PUSH DWORD PTR SS:[EBP+408]              ; 大小
00468506    6A 00           PUSH 0
00468508    FF95 F0030000   CALL DWORD PTR SS:[EBP+3F0]              ; VirtualAlloc分配内存
0046850E    8985 31040000   MOV DWORD PTR SS:[EBP+431],EAX           ; EAX=009C0000
00468562    8B7C1A 0C       MOV EDI,DWORD PTR DS:[EDX+EBX+C]
00468566    0BFF            OR EDI,EDI
00468568    74 1E           JE SHORT InlineMe.00468588
0046856A    8B4C1A 10       MOV ECX,DWORD PTR DS:[EDX+EBX+10]
0046856E    0BC9            OR ECX,ECX
00468570    74 11           JE SHORT InlineMe.00468583
00468572    03BD D0010000   ADD EDI,DWORD PTR SS:[EBP+1D0]
00468578    8B741A 14       MOV ESI,DWORD PTR DS:[EDX+EBX+14]
0046857C    03F2            ADD ESI,EDX
0046857E    C1F9 02         SAR ECX,2
00468581    F3:A5           REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS>
00468583    83C3 28         ADD EBX,28
00468586  ^ EB DA           JMP SHORT InlineMe.00468562
004685E0    53              PUSH EBX
004685E1    68 00800000     PUSH 8000
004685E6    6A 00           PUSH 0
004685E8    56              PUSH ESI                                 ; 第一次的VirtualAlloc的地址
004685E9    FF95 F4030000   CALL DWORD PTR SS:[EBP+3F4]              ; VirtualFree
004685EF    68 0010A000     PUSH 0A01000     ;返回到这个虚拟空间地址
004685F4    C3              RETN
00A010B6    6A 04           PUSH 4
00A010B8    68 00100000     PUSH 1000
00A010BD    68 46050000     PUSH 546                                     ; 大小
00A010C2    6A 00           PUSH 0
00A010C4    FF95 79294400   CALL DWORD PTR SS:[EBP+442979]               ; VirtualAlloc
00A010CA    8985 75294400   MOV DWORD PTR SS:[EBP+442975],EAX            ; EAX=00970000
00A010D0    8D9D 452A4400   LEA EBX,DWORD PTR SS:[EBP+442A45]
00A010D6    50              PUSH EAX
00A010D7    53              PUSH EBX
00A010D8    E8 74050000     CALL 00A01651                                ; 再次解码,第2次中的压缩代码到第3次的VirtualAlloc
00A010DD    8BC8            MOV ECX,EAX
00A010DF    8DBD 452A4400   LEA EDI,DWORD PTR SS:[EBP+442A45]
00A010E5    8BB5 75294400   MOV ESI,DWORD PTR SS:[EBP+442975]
00A010EB    F3:A4           REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI] ; 解压出来的代码重新复制到第2次VirtualAlloc的空间
00A010ED    8B85 75294400   MOV EAX,DWORD PTR SS:[EBP+442975]
00A010F3    68 00800000     PUSH 8000
00A010F8    6A 00           PUSH 0
00A010FA    50              PUSH EAX                                     ; 第3次的地址
00A010FB    FF95 7D294400   CALL DWORD PTR SS:[EBP+44297D]               ; VirtualFree
00A01101    8D85 512C4400   LEA EAX,DWORD PTR SS:[EBP+442C51]
00A01107    50              PUSH EAX                                     ; jmp 0xA0130D
00A01108    C3              RETN
00A01339    6A 04           PUSH 4
00A0133B    68 00100000     PUSH 1000
00A01340    50              PUSH EAX
00A01341    6A 00           PUSH 0
00A01343    FF95 79294400   CALL DWORD PTR SS:[EBP+442979]               ; VirtualAlloc
00A01349    8985 75294400   MOV DWORD PTR SS:[EBP+442975],EAX            ; EAX=00970000
00A0134F    56              PUSH ESI
00A01350    8B1E            MOV EBX,DWORD PTR DS:[ESI]
00A01352    039D D8304400   ADD EBX,DWORD PTR SS:[EBP+4430D8]
00A01358    50              PUSH EAX
00A01359    53              PUSH EBX
00A0135A    E8 F2020000     CALL 00A01651                                ; 再次解码

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 6
支持
分享
最新回复 (3)
雪    币: 65
活跃值: (118)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
2
前来膜拜 韬哥
2011-11-6 08:45
0
雪    币: 102
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
只能看看高手的讲解,这是我学不来的
2011-11-6 16:06
0
雪    币: 1489
活跃值: (1093)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
4
膜拜韬哥。。
2011-11-6 20:21
0
游客
登录 | 注册 方可回帖
返回
//