首页
社区
课程
招聘
脱ASProtect 2.1x SKE 到最后的难题,大家快进来帮小弟一把
发表于: 2006-5-13 14:01 6362

脱ASProtect 2.1x SKE 到最后的难题,大家快进来帮小弟一把

2006-5-13 14:01
6362
PEid检查 ASProtect 2.1x SKE -> Alexey Solodovnikov
目标:Icon Searcher 3.0.1(下载 )

小弟在脱时到了最后一步时出了问题:
1.大侠们都是到到达OEP后,才搜索89,45,F0,B8,00,07,00,00 可是小弟找不到,
  后来发现在OEP-1步可以找到,什么原因???
2.下面是 machenglin 的ASProtect 2.1x SKE脱壳一文代码,有两点不懂,希望各位帮小弟这个菜鸟一把。
00B4000A    BA 00108700      mov edx,871000                               ; code段头④ 这个如何得知,不懂
  00B4000F    803A E8          cmp byte ptr ds:[edx],0E8
  00B40012    75 14            jnz short 00B40028
  00B40014    8B42 01          mov eax,dword ptr ds:[edx+1]
  00B40017    03C2             add eax,edx
  00B40019    05 05000000      add eax,5
  00B4001E    3D 0000B600      cmp eax,0B60000                              ; call xxxxxxxx① 偶跟踪的是Call 1450000 但不知对不对,错的话希望指正一下
  00B40023    75 03            jnz short 00B40028
  00B40025    EB 0C            jmp short 00B40033
  00B40027    90               nop
  00B40028    42               inc edx
  00B40029    81FA 00008C00    cmp edx,8C0000                               ; data段头⑤  ????同样不懂如何得到
  00B4002F  ^ 72 DE            jb short 00B4000F
  00B40031  - EB FE            jmp short 00B40031
  00B40033    8915 0001B400    mov dword ptr ds:[B40100],edx
  00B40039    60               pushad
  00B4003A    FFE2             jmp edx
  00B4003C    90               nop
  00B4003D    90               nop
  00B4003E    90               nop
  00B4003F    90               nop
  00B40040    90               nop
  00B40041    90               nop
  00B40042    90               nop
  00B40043    60               pushad
  00B40044    B8 08318C00      mov eax,8C3108                               ; IAT开始②
  00B40049    90               nop
  00B4004A    3910             cmp dword ptr ds:[eax],edx
  00B4004C    75 23            jnz short 00B40071
  00B4004E    8B0D 0001B400    mov ecx,dword ptr ds:[B40100]
  00B40054    C701 FF250000    mov dword ptr ds:[ecx],25FF
  00B4005A    8941 02          mov dword ptr ds:[ecx+2],eax
  00B4005D    61               popad
  00B4005E    90               nop
  00B4005F    8B15 0001B400    mov edx,dword ptr ds:[B40100]
  00B40065    90               nop
  00B40066    90               nop
  00B40067    90               nop
  00B40068  ^ EB BE            jmp short 00B40028
  00B4006A    90               nop
  00B4006B    90               nop
  00B4006C    90               nop
  00B4006D    90               nop
  00B4006E    90               nop
  00B4006F    90               nop
  00B40070    90               nop
  00B40071    83C0 04          add eax,4
  00B40074    3D FC368C00      cmp eax,8C36FC                               ; IAT结束③
  00B40079  ^ 7E CF            jle short 00B4004A
  00B4007B  ^ EB E0            jmp short 00B4005D
--------------------------------------------------------------------------------------
等待大家的帮忙中,,,,,,,,,,

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (13)
雪    币: 141
活跃值: (162)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
我也卡在最后一步,有哪位大侠再详细说明一下
1-5的取得情况,谢谢了
2006-5-14 15:48
0
雪    币: 417
活跃值: (475)
能力值: ( LV9,RANK:1250 )
在线值:
发帖
回帖
粉丝
3
012D0000     BA 00104000         mov edx,401000                       ; code的起始位置开始
012D0005     803A E8             cmp byte ptr ds:[edx],0E8            ; 是不是call?
012D0008     75 12               jnz short 012D001C                   ; 不是就跳走继续
012D000A     8B42 01             mov eax,dword ptr ds:[edx+1]
012D000D     03C2                add eax,edx
012D000F     83C0 05             add eax,5
012D0012     3D 00009B01         cmp eax,19B0000                      ; call后的地址是不是19B0000?
012D0017     75 03               jnz short 012D001C
012D0019     EB 0C               jmp short 012D0027                   ; 是的话进行下面处理
012D001B     90                  nop
012D001C     42                  inc edx
012D001D     81FA 00505A00       cmp edx,5A5000                       ; code处理到最后了吗?
012D0023   ^ 72 E0               jb short 012D0005                    ; 没完就继续
012D0025   - EB FE               jmp short 012D0025                   ; 完了就在这里循环
012D0027     8915 00011A01       mov dword ptr ds:[11A0100],edx
012D002D     60                  pushad
012D002E     FFE2                jmp edx                              ; 跳到call xxxxxxxx执行
012D0030     90                  nop
012D0031     90                  nop
012D0032     90                  nop
012D0033     90                  nop
012D0034     90                  nop
012D0035     90                  nop
012D0036     90                  nop
012D0037     60                  pushad                               ; call xxxxxxxx返回处
012D0038     B8 A4625C00         mov eax,5C62A4                       ; IAT的起始地址
012D003D     90                  nop
012D003E     3910                cmp dword ptr ds:[eax],edx           ; 函数一样吗?
012D0040     75 20               jnz short 012D0062                   ; 不一样就再取下一个函数比较
012D0042     8B0D 00011A01       mov ecx,dword ptr ds:[11A0100]       ; 一样的话就改为jmp
012D0048     C701 FF250000       mov dword ptr ds:[ecx],25FF
012D004E     8941 02             mov dword ptr ds:[ecx+2],eax
012D0051     61                  popad
012D0052     90                  nop
012D0053     8B15 00011A01       mov edx,dword ptr ds:[11A0100]
012D0059     90                  nop
012D005A     90                  nop
012D005B     90                  nop
012D005C   ^ EB BE               jmp short 012D001C
012D005E     90                  nop
012D005F     90                  nop
012D0060     90                  nop
012D0061     90                  nop
012D0062     83C0 04             add eax,4                            ; 下一个函数
012D0065     3D 2C6D5C00         cmp eax,5C6D2C                       ; IAT结束的位置
012D006A   ^ 7E D2               jle short 012D003E                   ; IAT找完了吗?
012D006C   ^ EB E3               jmp short 012D0051
012D006E     90                  nop
012D006F     90                  nop
2006-5-14 15:58
0
雪    币: 199
活跃值: (272)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
012D001D     81FA 00505A00       cmp edx,5A5000                       ; code处理到最后了吗?
-----这个如何得到呢,偶尝试了N种方法,运行就就终止了
不知原因出在哪,这个软件没stolen code的
2006-5-14 20:55
0
雪    币: 417
活跃值: (475)
能力值: ( LV9,RANK:1250 )
在线值:
发帖
回帖
粉丝
5
最初由 Jecelyin 发布
012D001D 81FA 00505A00 cmp edx,5A5000 ; code处理到最后了吗?
-----这个如何得到呢,偶尝试了N种方法,运行就就终止了
不知原因出在哪,这个软件没stolen code的


Alt+M可以看到code的大小。一般起始401000,就是第一行提到的401000,然后就是这个了,终止的地方。

还有参考 machenglin 记得修改那几处地方。
我也是随便拷的,没改,误导你了。
2006-5-15 06:40
0
雪    币: 199
活跃值: (272)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
1.申请内存得到地址015c0000
2.来到OEP后Ctrl+G来到
01206E68    8945 F0         mov dword ptr ss:[ebp-10],eax
01206E6B    B8 00070000     mov eax,700
01206E70    E8 CFB6FDFF     call 011E2544------改成jmp 015c0043
3.在此之前跟踪得到的Call XXXXXXXX
006E46C8    55              push ebp                            ; 这里是OEP
006E46C9    8BEC            mov ebp,esp
006E46CB    83C4 F0         add esp,-10
006E46CE    B8 003F6E00     mov eax,IconSear.006E3F00
006E46D3    E8 802ED2FF     call IconSear.00407558              ; 跟踪进入
006E46D8    57              push edi
006E46D9    55              push ebp
006E46DA    56              push esi
006E46DB    8D7C4B 2F       lea edi,dword ptr ds:[ebx+ecx*2+2F]
------------------------------------------------------------------------------
00407557    90              nop
00407558    53              push ebx                            ; 来到这里
00407559    8BD8            mov ebx,eax
0040755B    33C0            xor eax,eax
0040755D    A3 10177000     mov dword ptr ds:[701710],eax
00407562    6A 00           push 0
00407564    E8 2BFFFFFF     call IconSear.00407494              ; 这里进入
--------------------------------------------------------------------------------
00407493    90              nop
00407494    E8 678B0401     call 01450000                       ; 这就是所谓的Call XXXXXXXX ???,搜索有N多,没进行最后Patch得到的修复程序来到这里就OVER了。
00407499  ^ E0 8B           loopdne short IconSear.00407426
0040749B    C0FF 25         sar bh,25
0040749E    64:1371 00      adc esi,dword ptr fs:[ecx]
004074A2    8BC0            mov eax,eax
004074A4  - FF25 60137100   jmp dword ptr ds:[711360]           ; kernel32.TlsGetValue
004074AA    8BC0            mov eax,eax
004074AC  - FF25 5C137100   jmp dword ptr ds:[71135C]           ; kernel32.TlsSetValue
004074B2    8BC0            mov eax,eax

4.Patch代码:
015C0000    0000            add byte ptr ds:[eax],al
015C0002    0000            add byte ptr ds:[eax],al
015C0004    0000            add byte ptr ds:[eax],al
015C0006    0000            add byte ptr ds:[eax],al
015C0008    0000            add byte ptr ds:[eax],al
015C000A    BA 00104000     mov edx,IconSear.<ModuleEntryPoint> ; Code段头
015C000F    803A E8         cmp byte ptr ds:[edx],0E8
015C0012    75 14           jnz short 015C0028
015C0014    8B42 01         mov eax,dword ptr ds:[edx+1]
015C0017    03C2            add eax,edx
015C0019    05 05000000     add eax,5
015C001E    3D 00004501     cmp eax,1450000                     ; 跟踪得到N多Call 1450000 ???
015C0023    75 03           jnz short 015C0028
015C0025    EB 0C           jmp short 015C0033
015C0027    90              nop
015C0028    42              inc edx
015C0029    81FA 00108000   cmp edx,801000                      ; data段头???
015C002F  ^ 72 DE           jb short 015C000F
015C0031  - EB FE           jmp short 015C0031
015C0033    8915 00015C01   mov dword ptr ds:[15C0100],edx      ; 这里注意改了
015C0039    60              pushad
015C003A    FFE2            jmp edx
015C003C    90              nop
015C003D    90              nop
015C003E    90              nop
015C003F    90              nop
015C0040    90              nop
015C0041    90              nop
015C0042    90              nop
015C0043    60              pushad
015C0044    B8 68127100     mov eax,711268                      ; IAT 开始
015C0049    90              nop
015C004A    3910            cmp dword ptr ds:[eax],edx
015C004C    75 23           jnz short 015C0071
015C004E    8B0D 00015C01   mov ecx,dword ptr ds:[15C0100]      ; 改了
015C0054    C701 FF250000   mov dword ptr ds:[ecx],25FF         ; 程序是Delphi的
015C005A    8941 02         mov dword ptr ds:[ecx+2],eax
015C005D    61              popad
015C005E    90              nop
015C005F    8B15 00015C01   mov edx,dword ptr ds:[15C0100]      ; 改了
015C0065    90              nop
015C0066    90              nop
015C0067    90              nop
015C0068  ^ EB BE           jmp short 015C0028
015C006A    90              nop
015C006B    90              nop
015C006C    90              nop
015C006D    90              nop
015C006E    90              nop
015C006F    90              nop
015C0070    90              nop
015C0071    83C0 04         add eax,4
015C0074    3D E01C7100     cmp eax,711CE0                      ; ASCII "kernel32.dll"
015C0079  ^ 7E CF           jle short 015C004A
015C007B  ^ EB E0           jmp short 015C005D
015C007D    90              nop
015C007E    90              nop
015C007F    90              nop
内存窗口图:
上传的附件:
2006-5-15 10:53
0
雪    币: 141
活跃值: (162)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
最初由 machenglin 发布
call xxxxxxxx一般形式是在OEP后面,在IAT附近,能找到几个相同的call xxxxxxxx,既XXXXXXXX是一样的。
一般都跳到壳里去了。


这个我也是这么找的,一般有多个call xxxxxxxxx出现

015C0029    81FA 00108000   cmp edx,801000                      ; data段头???

是不是应该为006e5000   ???

我在脱时取的是date段的开始,不是.data开始,不知道对不对?

还有patch运行后,一般被调试的程序界面会不会出来,我不会出来,而且此时OD占cpu量会很大,此时dump后,再用im修复,程序不能运行,OD载入修复但不能运行的程序后,发生异常,地址是call XXXXXXX的XXXXXX地址,是不是上面的数据取错,比较代码段没有完成?

2006-5-15 12:56
0
雪    币: 199
活跃值: (272)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
是不是应该为006e5000   ???
这个偶试过了,不行,
Call XXXXXXXX最多的是Call 1450000这个了,
偶Patch后运行一次就到死胡同14300XX这个地方,再运行程序终止,代码的几个修改的地方尝试换过N次,只是不知正确性,是不是Patch要在到达OEP之前运行才能修复的?????
2006-5-15 14:09
0
雪    币: 279
活跃值: (145)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
9
如果没有code stolen,可以试试Volx的脚本.
2006-5-15 15:01
0
雪    币: 199
活跃值: (272)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
那个脚本用过了,无效。。。
---也许不会用吧。
2006-5-15 16:54
0
雪    币: 141
活跃值: (162)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
最初由 linex 发布
如果没有code stolen,可以试试Volx的脚本.


我用Volx的脚本运行后,再接两次shift+F09,代码段下断,再Shift+F9,中断到入口,在00XX7190处改call为jmp XXXXXXXX,再运行path,程序界面不会出来,但此时dump,im修复,软件正常运行!

我是想手动来实现,Volx的脚本运行过后,我复制ita, (start---end)
同样
自已手动一步步下来再复制ita,两者比较是相同的,运行同一个patch,但dump,im修复,程序却不能运行.

到现在我还是不明白date端起始如何找到,看了大大们的文章,这个值始终没办法确定,还请各位前辈指导!!
2006-5-15 21:20
0
雪    币: 199
活跃值: (272)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
谢谢,现在问题清楚多了,努力学习中,,,,
2006-5-16 10:07
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
最初由 machenglin 发布
没修复前:
============================================================================================
00407494 E8 678BFF00 call 01400000 //看这个!
00407499 ^ E0 8B loopdne short IconSear.00407426
0040749B C0FF 25 sar bh,25
........


00407494    E8 678BFF00      call 01400000      //看这个!我遇到的这个程序用最后一次下内存断点法到达的就是这句,,是否为OEP
2006-6-7 15:20
0
雪    币: 199
活跃值: (272)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
楼上的应该是OEP被偷了吧,这个不是OEP
2006-6-7 17:05
0
游客
登录 | 注册 方可回帖
返回
//