好友
阅读权限40
听众
最后登录1970-1-1
|
mycsy
发表于 2008-12-21 20:57
主程序到达OEP其实很简单。
只要在401000上下个内存写入断点,过几个异常后,再取消内存断点,直接在401000处来个F2就行了
NPSE 1.01 反API 保护脚本
这个脚本的作用就是能把加壳时得到的list文件还原出来,并还原出各个list的原来的API
使用方法:到达OEP后使用
目前只测试了最小保护
脚本再完善一下,最小保护的API就能完全自动解开了
关键是我不知道怎么在脚本里得到内存中的字符串。。汗……要是这个能搞定,单机修复就没问题了
想跨机还得补上LOADLIB和GETPROC……
希望能喜欢,花了我俩小时才搞出来……
(效果对比)
###############################
list文件(加壳后自动生成的文件)
0 01001931
0 01001984
0 010019ef
0 01001a19
0 01001a64
0 01001a74
###############################
log文件:
CALL地址: 01001931
实际dll: 010235A5 | ASCII "kernel32.dll"
实际function: 010235B2 | ASCII "GlobalFree"
=============================
CALL地址: 01001984
实际dll: 01023749 | ASCII "kernel32.dll"
实际function: 01023756 | ASCII "GetLocaleInfoW"
=============================
CALL地址: 010019EF
实际dll: 010238CE | ASCII "user32.dll"
实际function: 010238D9 | ASCII "InvalIDAteRect"
=============================
CALL地址: 01001A19
实际dll: 01023A46 | ASCII "user32.dll"
实际function: 01023A51 | ASCII "MoveWindow"
=============================
CALL地址: 01001A64
实际dll: 01023BBA | ASCII "user32.dll"
实际function: 01023BC5 | ASCII "SendDlgItemMessageW"
=============================
CALL地址: 01001A74
实际dll: 01023D37 | ASCII "user32.dll"
实际function: 01023D42 | ASCII "SendDlgItemMessageW"
###############################
var a,b,c,eecx
var CALL地址,实际dll,实际function
mov eecx,ecx
gmi eip,MODULEBASE
mov a,$RESULT
cmp a,0
jne nexxt
gmi eip,CODEBASE
nexxt:
msgyn "脚本可能长时间运行,继续?"
cmp $RESULT,0
je over
start:
findop a,#E8????????#
cmp $RESULT,0
je over
mov b,[$RESULT+1]
add b,$RESULT
add b,5
mov c,$RESULT
cmp ,e89c60
jne next
mov CALL地址,$RESULT
log CALL地址
//xor数据
var xorbyte,xorlen,xorstart,temp1,temp2
findop b,#8033??#
mov temp1,$RESULT
add temp1,2
mov xorbyte,[temp1]
mov ecx,xorbyte
mov xorbyte,cl
// and xorbyte,ff
mov xorstart,b
add xorstart,2a
add xorstart,1b
mov temp1,[xorstart+1]
mov temp2,[xorstart+8]
xor temp1,xorbyte
xor temp2,xorbyte
shl xorbyte,8
xor temp1,xorbyte
xor temp2,xorbyte
shl xorbyte,8
xor temp1,xorbyte
xor temp2,xorbyte
shl xorbyte,8
xor temp1,xorbyte
xor temp2,xorbyte
add temp1,temp2
mov 实际dll,temp1
log 实际dll
find temp1,#2e646c6c#
add $RESULT,5
mov 实际function,$RESULT
log 实际function
log "============================="
// gpa temp1,$RESULT
// mov xorlen,xorstart
// sub xorlen,4
// mov xorlen,[xorlen]
// shl xorlen,18
// shr xorlen,18
// mov temp1,xorstart
// add temp1,xorlen
// rexor:
// xor [xorstart],xorbyte
// inc xorstart
//如果改成dec xorstart的方式会导致插件内存泄露
// cmp temp1,xorstart
// jne rexor
next:
mov a,c
add a,5
jmp start
over:
mov ecx,eecx
msg "请到 查看-》记录中 查看结果"
ret
//......到此一游......
[ 本帖最后由 mycsy 于 2008-12-21 20:59 编辑 ] |
-
-
npse.rar
122.94 KB, 下载次数: 3, 下载积分: 吾爱币 -1 CB
|