首页
社区
课程
招聘
[分享]Asprotect2.X辅助修复stolen code的一个小脚本
发表于: 2006-4-29 09:16 8844

[分享]Asprotect2.X辅助修复stolen code的一个小脚本

2006-4-29 09:16
8844

引用shoooo的一句话:"找到了这些点,写脚本也好,写代码恢复也好,修复就不难了.",既然wak给我们找出来了那些点了,那我就做点容易的事,写个脚本吧!

初学写脚本,功力有限啊,好些命令是边看帮助边写的,大家?合着看吧,抛块砖头,希望能引出玉来。
准备工作:
一、找几个点,设断:

A:跳转类型断点(记为he1):这个点判断wak所讲的
        0:call变形
        1:jmp变形
        2: jXX变形
        3:cmp x,y jxx z 变形
B:跳转地址断点(记为he2):
        这个点判断执行CALL XXXXXXX后,跳往的地址,按wak的方法是不同的类型有不同的断点,我找了一个共同跳往的点jmp [esp-4],这个点四种类型最后都到这里,其中[esp-4]是跳去的地址。

二、运行Volx脚本,到达stloen OEP之后,申请一块内存或找空白的地方写一PATCH,开始扫描代码段中Call xxxxxx的地址。

00EB0008    BA 0000E200     MOV EDX,0E20000              //stolen代码段开始地址         
00EB000D    803A E8         CMP BYTE PTR DS:[EDX],0E8
00EB0010    75 14           JNZ SHORT 00EB0026
00EB0012    8B42 01         MOV EAX,DWORD PTR DS:[EDX+1]
00EB0015    03C2            ADD EAX,EDX
00EB0017    05 05000000     ADD EAX,5
00EB001C    3D 0000E900     CMP EAX,0E90000             //判断是否是call xxxxxxx变形
00EB0021    75 03           JNZ SHORT 00EB0026
00EB0023  - EB FE           JMP SHORT 00EB0023          //是则中断,设为普通断点:cc1
00EB0025    90              NOP
00EB0026    42              INC EDX                     //跳回执行,设为:return
00EB0027    81FA 0050E200   CMP EDX,0E25000
00EB002D  ^ 72 DE           JB SHORT 00EB000D
00EB002F  - EB FE           JMP SHORT 00EB002F         //结束扫描,设为普通断点:cc3

00 00 00 00 00 00 00 00 BA 00 00 E2 00 80 3A E8 75 14 8B 42 01 03 C2 05 05 00 00 00 3D 00 00 E9
00 75 03 EB FE 90 42 81 FA 00 50 E2 00 72 DE EB FE 90

因为前两种类型的容易修复,就直接修复了,后两种类型的需要手动修复,所以在00eb0100处保存一下后两种类型跳转的地址.

三、在00EB0008处新建EIP,然后运行脚本:

var jmpcall
var temp
var temp1
var jmpadds
var eaxsave

//需要按实际修改的变量
var count
var cc1
var cc2
var he1
var he2
var return

mov count,0eb0100             //存放需要手动修复代码地址
mov cc1,00eb0023              //普通断点:cc1
mov cc2,00eb002f              //普通断点:cc2
mov he1,00c488da             //跳转类型断点(记为he1)
mov he2,0ea00ba              //跳转地址断点(记为he2)
mov return,00eb0026          //返回PATCH继续扫描的地址,记为return

start:
run

l1:
cmp eip,cc1            //是否是CALL  XXXXXXX变形代码地址,是则进入执行
jne l2
mov jmpcall,edx
mov eip,jmpcall
log jmpcall
jmp start

l2:
cmp eip,he1              //判断四种跳转类型的地址
jne r3
mov eaxsave,eax
jmp start

l3:
cmp eip,he2              //JMP [ESP-4]跳转地址
jne l5
mov jmpadds,[esp-4]
cmp eaxsave,0                 //比较四种代码变形类型
je r0
cmp eaxsave,1
je r1
cmp eaxsave,2
je r2
cmp eaxsave,3
je r3

l4:
mov edx,jmpcall
mov eip,return               //跳回继续执行扫描
jmp start

r0:
mov [jmpcall],0E8
mov temp,jmpadds
sub temp,jmpcall
sub temp,5
mov temp1,jmpcall
inc temp1
mov [temp1],temp
eval "类型0:{jmpadds}"
cmt jmpcall,$RESULT
jmp l4
r1:
mov [jmpcall],0E9
mov temp,jmpadds
sub temp,jmpcall
sub temp,5
mov temp1,jmpcall
inc temp1
mov [temp1],temp
eval "类型1:{jmpadds}"
cmt jmpcall,$RESULT
jmp l4
r2:
mov [count],jmpcall
add count,4
eval "类型2:{jmpadds}"
cmt jmpcall,$RESULT
jmp l4
r3:
mov [count],jmpcall
add count,4
eval "类型3:{jmpadds}"
cmt jmpcall,$RESULT
jmp l4

l5:
cmp eip,cc2              //是否结束?
jne error
msg "代码修复完成"
ret

error:
log count
log jmpcall
log temp
log jmpadds
log eaxsave

msg "错误中止!"
ret

运行脚本后,从eb0100 处存放着类型3和类型4的跳转,可以写代码进行二次修复,我就不再献丑了。

菜鸟文章,高手略过。

thanks:
  shoooo,syscom,wak,Volx,.........
升级了一下,Ver:1.02
这回不用PATCH了,直接修改脚本里的几个值直接运行就行了


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

上传的附件:
收藏
免费 7
支持
分享
最新回复 (13)
雪    币: 239
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
DING!!!
2006-4-29 10:03
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
好文章,学习ING
2006-4-29 10:20
0
雪    币: 319
活跃值: (2439)
能力值: ( LV12,RANK:980 )
在线值:
发帖
回帖
粉丝
4
支持 :)
2006-4-29 10:26
0
雪    币: 208
活跃值: (41)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
哎呀,终于有高手开始写修复stolen code的脚本啦
2006-4-29 12:07
0
雪    币: 50
活跃值: (145)
能力值: ( LV12,RANK:290 )
在线值:
发帖
回帖
粉丝
6
收藏高人的东西
2006-4-30 00:40
0
雪    币: 333
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wan
7
最初由 zhaoocn 发布
收藏高人的东西


同意
2006-4-30 10:17
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
楼主能结合http://bbs.pediy.com//showthread.php?s=&threadid=24007这个帖子讲解下吗?我用脚本试了几次都不行。
2006-4-30 10:37
0
雪    币: 333
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wan
9
同意!要是配合一个例子来讲解就更好了
2006-5-5 01:24
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
学习~~~~~~~~~~
2006-5-6 23:02
0
雪    币: 223
活跃值: (70)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
11
stolen code虽然修复了,但是有个问题还是存在。stolen code下面的地址并不是返回地址,这个还是需要修复的,例如
000 call 50000000  //此处被修复为call call 401000
005 test eax,eax

当修复上面为call 401000后,下面一句test eax,eax并非实际要执行的地址,这样会导致出错,望楼主再修复下
2006-5-7 16:18
0
雪    币: 200
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
强人
这是个好东西
谢谢楼主了
2006-5-7 21:36
0
雪    币: 279
活跃值: (145)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
13
最初由 aki 发布
stolen code虽然修复了,但是有个问题还是存在。stolen code下面的地址并不是返回地址,这个还是需要修复的,例如
000 call 50000000 //此处被修复为call call 401000
005 test eax,eax

当修复上面为call 401000后,下面一句test eax,eax并非实际要执行的地址,这样会导致出错,望楼主再修复下


000 call 50000000 上面不是应该还有一个push XXXXX么?
那个就是返回地址呀!
2006-5-8 07:44
0
雪    币: 277
活跃值: (312)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
14
我想问一下:jmp [esp-4],怎么找到?在哪里?
2006-5-13 22:14
0
游客
登录 | 注册 方可回帖
返回
//