NoobyProtect 1.0.0.1 最小保护 完全修复 手记
第一句:膜拜Nooby,hc版主
第二句:感谢yangjt的热心解答测试,感谢sessiondiy的大力支持
天哪,这玩意太变态了。这个壳拖拖拉拉搞了近半年,终于完成了1个脱壳……汗……还是1001的最小保护……
不过不管怎么说终于修复成功了。第一次觉得notepad的界面如此亲切……:lol
进入正题,这个手记将会分5部分写出
1 NoobyProtect 1.0.0.1最小保护 加密技术概貌
2 脚本实现分析
3 脚本使用方法
4 脚本插件出现的BUG
5 展望未来的np
==========================================================================
1 NoobyProtect 1.0.0.1最小保护 IAT加密技术概貌
最小保护没有加密代码段。
但是处理IAT极为猥琐
比如说开头这段
正常的程序为
0100739D > $ 6A 70 PUSH 70
0100739F . 68 98180001 PUSH NOTEPAD.01001898
010073A4 . E8 BF010000 CALL NOTEPAD.01007568
010073A9 . 33DB XOR EBX,EBX
010073AB . 53 PUSH EBX ; /pModule => NULL
010073AC . 8B3D CC100001 MOV EDI,DWORD PTR DS:[<&KERNEL32.GetModu>; |kernel32.GetModuleHandleA
010073B2 . FFD7 CALL EDI ; \GetModuleHandleA
0100739D 6A 70 PUSH 70
0100739F 68 98180001 PUSH NOTEPAD_.01001898
010073A4 E8 BF010000 CALL NOTEPAD_.01007568
010073A9 33DB XOR EBX,EBX
010073AB 53 PUSH EBX
010073AC E8 638D0400 CALL NOTEPAD_.01050114 //这句被和谐了
010073B1 2F DAS
010073B2 FFD7 CALL EDI
01007411 POP ECX
01007412 OR DWORD PTR DS:[100AB9C],FFFFFFFF
01007419 OR DWORD PTR DS:[100ABA0],FFFFFFFF
01007420 CALL DWORD PTR DS:[<&msvcrt.__p__fmode>] ; msvcrt.__p__fmode
01007411 POP ECX
01007412 OR DWORD PTR DS:[100AB9C],FFFFFFFF
01007419 OR DWORD PTR DS:[100ABA0],FFFFFFFF
01007420 CALL NOTEPAD_.0105042E
0105042E PUSHAD
0105042F PUSHFD
01050430 CALL NOTEPAD_.01050435
01050435 MOV EBX,DWORD PTR SS:[ESP]
01050438 ADD EBX,23
0105043B XOR EAX,EAX
0105043D XCHG DWORD PTR DS:[EBX-4],EAX
01050440 CMP EAX,0
01050443 JE SHORT NOTEPAD_.0105044C
01050445 XOR BYTE PTR DS:[EBX],0D0
01050448 INC EBX
01050449 DEC EAX
0105044A JNZ SHORT NOTEPAD_.01050445
0105044C POP EAX
0105044D POPFD
0105044E POPAD
0105044F JMP NOTEPAD_.01050458
gmi eip,CODEBASE
mov findtemp,$RESULT
alloc 2000
add $RESULT,100 //做IAT用
mov newiat,$RESULT
mov nnewiat,newiat
startfind:
findop findtemp,#E8????????# //查找所有call
cmp $RESULT,0 //找不到就大功告成啦
je overfind
mov savelast,$RESULT //存一下找到的地址
mov temp,[$RESULT+1]
add temp,$RESULT
add temp,5
mov myeip,temp
mov temp,[temp]
cmp temp,e89c60 //对该CALL的头3字节判断,以达到判断是否为np加密的call
jnz next //不是去死
mov b,myeip
mov calleip,myeip
findop b,#8033??# //找到关键一句
mov temp1,$RESULT
add temp1,2
mov xorbyte,[temp1] //得到xor的常数
mov ecx,xorbyte
mov xorbyte,cl //将xor的常数赋到xorbyte中
0105042E 60 PUSHAD
0105042F 9C PUSHFD
01050430 E8 00000000 CALL NOTEPAD_.01050435
01050435 8B1C24 MOV EBX,DWORD PTR SS:[ESP]
01050438 83C3 23 ADD EBX,23
0105043B 33C0 XOR EAX,EAX
0105043D 8743 FC XCHG DWORD PTR DS:[EBX-4],EAX
01050440 83F8 00 CMP EAX,0
01050443 74 07 JE SHORT NOTEPAD_.0105044C
01050445 8033 D0 XOR BYTE PTR DS:[EBX],0D0 //******
01050448 43 INC EBX
01050449 48 DEC EAX
0105044A ^ 75 F9 JNZ SHORT NOTEPAD_.01050445
0105044C 58 POP EAX
0105044D 9D POPFD
0105044E 61 POPAD
0105044F E9 04000000 JMP NOTEPAD_.01050458
mov xorstart,b
add xorstart,2a
add xorstart,1b
mov temp1,[xorstart+1]
mov eax,[xorstart+8]
01050170 68 75133576 PUSH 76351375
01050175 810424 8EEDCF8A ADD DWORD PTR SS:[ESP],8ACFED8E
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!