首页
社区
课程
招聘
跟踪aspr壳的pre-dip,解除使用限制
2004-6-28 13:40 7755

跟踪aspr壳的pre-dip,解除使用限制

2004-6-28 13:40
7755
解除aspr壳的使用限制有多种方法,方法之一就是追踪pre-dip

用od加载程序后按Shift+F9跳过异常,直到出现硬盘指纹

0012FF2C   0012FF34  指针到下一个 SEH 记录
0012FF30   00CFA898  SE 句柄
0012FF34   0012FF40  指针到下一个 SEH 记录
0012FF38   00CFB236  SE 句柄
0012FF3C   0012FF90
0012FF40   0012FFE0  指针到下一个 SEH 记录
0012FF44   00CFB25B  SE 句柄
0012FF48   0012FF90
0012FF4C   00CE0000
0012FF50   00B60000
0012FF54   00CFA684
0012FF58   00000000
0012FF5C   00D823DC  ASCII "mIjMiACQQJ8="     <<==硬盘指纹
0012FF60   00CE0000
0012FF64   00B60000


以硬盘指纹为第一部分,相对位置如下。
按Shift+F9  注册名                       (第二部分)
按Shift+F9  使用限制                     (第三部分)
按Shift+F9  生死转折                     (第四部分)


以下为第三部分
000CFAEBD   58               POP EAX                                  
00CFAEBE   8B15 ECC5CF00    MOV EDX,DWORD PTR DS:[CFC5EC]
00CFAEC4   A1 54C6CF00      MOV EAX,DWORD PTR DS:[CFC654]
00CFAEC9   E8 8A06FFFF      CALL 00CEB558                 <<==检测是否过期,对内存00CFC5EC区域设置标志
00CFAECE   A1 1CC7CF00      MOV EAX,DWORD PTR DS:[CFC71C]
00CFAED3   8378 10 00       CMP DWORD PTR DS:[EAX+10],0   <<==是否有时间限制
00CFAED7   74 2D            JE SHORT 00CFAF06
00CFAED9   A1 ECC5CF00      MOV EAX,DWORD PTR DS:[CFC5EC]
00CFAEDE   8078 31 00       CMP BYTE PTR DS:[EAX+31],0
00CFAEE2   74 04            JE SHORT 00CFAEE8
00CFAEE4   33C0             XOR EAX,EAX
00CFAEE6   EB 09            JMP SHORT 00CFAEF1
00CFAEE8   A1 ECC5CF00      MOV EAX,DWORD PTR DS:[CFC5EC]
00CFAEED   0FB740 0C        MOVZX EAX,WORD PTR DS:[EAX+C] <<==取限制的时间
00CFAEF1   50               PUSH EAX                      <<==入栈
00CFAEF2   A1 ECC5CF00      MOV EAX,DWORD PTR DS:[CFC5EC]
00CFAEF7   0FB740 08        MOVZX EAX,WORD PTR DS:[EAX+8] <<==取剩余的时间
00CFAEFB   50               PUSH EAX                      <<==剩余时间入栈
00CFAEFC   A1 1CC7CF00      MOV EAX,DWORD PTR DS:[CFC71C]
00CFAF01   8B40 10          MOV EAX,DWORD PTR DS:[EAX+10]
00CFAF04   FFD0             CALL EAX                      <<==pre-dip时间限制
00CFAF06   A1 1CC7CF00      MOV EAX,DWORD PTR DS:[CFC71C]
00CFAF0B   8378 14 00       CMP DWORD PTR DS:[EAX+14],0   <<==是否有次数限制
00CFAF0F   74 1E            JE SHORT 00CFAF2F
00CFAF11   A1 ECC5CF00      MOV EAX,DWORD PTR DS:[CFC5EC]
00CFAF16   0FB740 12        MOVZX EAX,WORD PTR DS:[EAX+12]
00CFAF1A   50               PUSH EAX
00CFAF1B   A1 ECC5CF00      MOV EAX,DWORD PTR DS:[CFC5EC]
00CFAF20   0FB740 0E        MOVZX EAX,WORD PTR DS:[EAX+E]
00CFAF24   50               PUSH EAX
00CFAF25   A1 1CC7CF00      MOV EAX,DWORD PTR DS:[CFC71C]
00CFAF2A   8B40 14          MOV EAX,DWORD PTR DS:[EAX+14]
00CFAF2D   FFD0             CALL EAX                     <<==pre-dip次数限制
00CFAF2F   A1 1CC7CF00      MOV EAX,DWORD PTR DS:[CFC71C]
00CFAF34   8378 18 00       CMP DWORD PTR DS:[EAX+18],0
00CFAF38   74 57            JE SHORT 00CFAF91


执行00CFAEC9   CALL 00CEB558  执行后00CFDDDC处的内存数据
00CFDDDC  00 00 00 00 00 00 00 00 1E 00 37 00 1E 00 00 00  .........7....
00CFDDEC  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00CFDDFC  3C 08 8A 16 0D 9C E2 40 1A 6A 8A 54 CE A2 E2 40  <?.?@j?微饫
00CFDE0C  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................


00CFDDE4  试用的天数(1E = 30 天)
00CFDDE8  已经使用的天数,如过期改这里00CFDDE8 = 00CFDDE4
00CFDE0C  是否过期标志,(00 = 没有过期,01 = 过期),设置00CFDE0C = 00 00

跟进 00CFAF04 CALL EAX      <<==EAX = 0048C6AC
0048C6AC   55               PUSH EBP                      <<==程序领空
0048C6AD   8BEC             MOV EBP,ESP
0048C6AF   A1 1C734E00      MOV EAX,DWORD PTR DS:[4E731C] <<==取标志,这里是FFFFFFFE
0048C6B4   A3 18734E00      MOV DWORD PTR DS:[4E7318],EAX <<==放入标志,如没有壳为0,这两句较少见。
0048C6B9   8B45 08          MOV EAX,DWORD PTR SS:[EBP+8]  <<==取时间限制天数
0048C6BC   A3 1C734E00      MOV DWORD PTR DS:[4E731C],EAX
0048C6C1   8B45 0C          MOV EAX,DWORD PTR SS:[EBP+C]  <<==取剩余天数
0048C6C4   A3 20734E00      MOV DWORD PTR DS:[4E7320],EAX
0048C6C9   5D               POP EBP
0048C6CA   C2 0800          RETN 8                        <<==返回壳

返回壳后按F9到达下一个异常。(第四部分)
00CFAFDF   3100             XOR DWORD PTR DS:[EAX],EAX  <<==异常
00CFAFE1   EB 01            JMP SHORT 00CFAFE4          <<==F2设断点,按Shift+F9断在此处。

单步跟踪到
00CFAFEF   58               POP EAX                                  
00CFAFF0   A1 ECC5CF00      MOV EAX,DWORD PTR DS:[CFC5EC]
00CFAFF5   8078 30 00       CMP BYTE PTR DS:[EAX+30],0   <<==是否超过时间限制
00CFAFF9   75 0B            JNZ SHORT 00CFB006           <<==跳则过期
00CFAFFB   A1 ECC5CF00      MOV EAX,DWORD PTR DS:[CFC5EC]
00CFB000   8078 31 00       CMP BYTE PTR DS:[EAX+31],0
00CFB004   74 3C            JE SHORT 00CFB042            <<==必须跳
00CFB006   A1 1CC7CF00      MOV EAX,DWORD PTR DS:[CFC71C]
00CFB00B   8378 24 00       CMP DWORD PTR DS:[EAX+24],0
00CFB00F   74 13            JE SHORT 00CFB024
00CFB011   A1 1CC7CF00      MOV EAX,DWORD PTR DS:[CFC71C]
00CFB016   8B40 20          MOV EAX,DWORD PTR DS:[EAX+20]
00CFB019   50               PUSH EAX
00CFB01A   A1 1CC7CF00      MOV EAX,DWORD PTR DS:[CFC71C]
00CFB01F   8B40 24          MOV EAX,DWORD PTR DS:[EAX+24]
00CFB022   FFD0             CALL EAX                     <<==过期pre-dip,使用工具脱壳,大部分会跳到这里
00CFB024   A1 1CC7CF00      MOV EAX,DWORD PTR DS:[CFC71C]
00CFB029   8378 34 00       CMP DWORD PTR DS:[EAX+34],0
00CFB02D   74 31            JE SHORT 00CFB060
00CFB02F   6A 01            PUSH 1
00CFB031   68 E654CE00      PUSH 0CE54E6
00CFB036   832C24 02        SUB DWORD PTR SS:[ESP],2
00CFB03A   FF25 7CDBCF00    JMP DWORD PTR DS:[CFDB7C]
00CFB040   EB 1E            JMP SHORT 00CFB060
00CFB042   A1 1CC7CF00      MOV EAX,DWORD PTR DS:[CFC71C]
00CFB047   8378 24 00       CMP DWORD PTR DS:[EAX+24],0
00CFB04B   74 13            JE SHORT 00CFB060
00CFB04D   A1 1CC7CF00      MOV EAX,DWORD PTR DS:[CFC71C]
00CFB052   8B40 1C          MOV EAX,DWORD PTR DS:[EAX+1C]
00CFB055   50               PUSH EAX
00CFB056   A1 1CC7CF00      MOV EAX,DWORD PTR DS:[CFC71C]
00CFB05B   8B40 24          MOV EAX,DWORD PTR DS:[EAX+24]
00CFB05E   FFD0             CALL EAX                   <<==没有超过限制,跳到此处。
00CFB060   33C9             XOR ECX,ECX
00CFB062   BA 78B2CF00      MOV EDX,0CFB278                          

跟进00CFB05E  CALL EAX

0048C5E0   55               PUSH EBP
0048C5E1   8BEC             MOV EBP,ESP
0048C5E3   8B45 08          MOV EAX,DWORD PTR SS:[EBP+8]
0048C5E6   A3 40AC4E00      MOV DWORD PTR DS:[4EAC40],EAX <<==如果工具脱壳或在之前Dump,需修补此处
0048C5EB   5D               POP EBP
0048C5EC   C2 0400          RETN 4


使用限制的方法相同,这里就不再重复
以上为跟踪pre-dip过程,望对新手有所帮助
感谢Volx的指点。


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

收藏
点赞8
打赏
分享
最新回复 (13)
雪    币: 896
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
fly 85 2004-6-28 14:21
2
0
GOOD   :D
雪    币: 513
活跃值: (2228)
能力值: ( LV9,RANK:2130 )
在线值:
发帖
回帖
粉丝
loveboom 53 2004-6-28 14:22
3
0
精华,谢谢,回家去对照对照,
雪    币: 426
活跃值: (21)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
kbs 2004-6-28 16:08
4
0
hao
雪    币: 255
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
kimmal 1 2004-6-28 17:03
5
0
好文
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ufospace 2004-6-29 07:01
6
0
牛人!
雪    币: 674
活跃值: (1684)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
daxia200N 6 2004-6-29 13:46
7
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
海楼 2004-6-29 15:37
8
0
好文!回家照样看能不能搞定一个。
雪    币: 203
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wuchy6222 2004-6-30 09:49
9
0
请问大侠们,硬盘指纹是指什么?
雪    币: 227
活跃值: (160)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
lipton 2 2004-6-30 12:06
10
0
看第一段堆栈代码,所指之处,aspr壳计算出的识别码,12字节以"="结束的字窜,每台机子不同,重装系统也会不同,在同一机子里,只要是aspr壳都有这个相同的字窜。
雪    币: 223
活跃值: (106)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
temerata 1 2004-6-30 13:52
11
0
先收藏再支持!:D
雪    币: 239
活跃值: (473)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
hmimys 2 2004-7-2 09:43
12
0
先DOWN下来,回头再看!
雪    币: 242
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xcs 2004-7-2 14:21
13
0
佩服!佩服!!!!
太牛了!!!
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
笑笑哥 2005-11-25 11:38
14
0
如何进行硬盘指纹加密之后的程序调试啊?我想换到另一台机器运行单位的正版软件。
游客
登录 | 注册 方可回帖
返回