首页
社区
课程
招聘
一个国产新壳,附加壳后的计算器
发表于: 2004-11-10 17:24 4841

一个国产新壳,附加壳后的计算器

2004-11-10 17:24
4841
附件:calc.zip
一个国产新壳,大家可以试脱这个加壳后的系统自带的计算器。
;)

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 1
支持
分享
最新回复 (11)
雪    币: 255
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
Win2000+Sp4 下运行,
提示缺少运行库,名字是乱码:(
2004-11-10 17:28
0
雪    币: 116
活跃值: (220)
能力值: ( LV12,RANK:370 )
在线值:
发帖
回帖
粉丝
3
运行不了
2004-11-10 17:30
0
雪    币: 212
活跃值: (55)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
我是在98下给98下自带的计算器加的壳。
干脆附上 加壳程序,兄弟门可自己加了脱。
附件:ShellProtect.rar
2004-11-10 17:35
0
雪    币: 212
活跃值: (55)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
再附上壳的源代码。资源共享啦!以下是外壳汇编源代码,注意使用本工具加壳的软件可能被Norton认为是病毒

include win32.inc
.586
.model flat,stdcall
locals

extrn _wsprintfA:proc,MessageBoxA:proc,ExitProcess:proc,IsDebuggerPresent:proc
extrn ReleaseDC:proc,GetDC:proc,TextOutA:proc,GetTickCount:proc

OLD_TICK_COUNT    equ 072h
GET_TICK_COUNT    equ 0c1h
IS_DBG_PRESENT    equ 034h
EXIT_PROCESS    equ 0a7h

XX        equ 12345678h

.data

PCStart:
    nop
@@PCStartRVA:
    pushad
    call    GetRVAOffset,offset @@KillIDA
    jmp    eax
@@KillIDA:   
    ;//定位GetProcAddress函数
    ;db    0ebh,001h,0e8h;//乱码样版
    sub    esp,100h
    mov    ebp,esp
    db    0ebh,001h,0e8h;//乱码样版
    mov    ebx,[ebp+100h+8*4]
@@RepScanGPA:
    dec    ebx
    db    0ebh,001h,0e8h;//乱码样版
    call    GetPEOffset,ebx
    mov    ebx,eax
    xor    esi,esi
    db    0ebh,001h,0e8h;//乱码样版
@@RepScanGPAName:
    inc    esi
    call    GetGPANameByIndex,ebx,esi
    or    eax,eax
    db    0ebh,001h,0e8h;//乱码样版
    jz    short @@RepScanGPA
    mov    edi,eax
    call    GetGPAString
    db    0ebh,001h,0e8h;//乱码样版
    mov    edx,eax
    call    CompareMemory,edi,edx,15
    or    eax,eax
    jnz    short @@RepScanGPAName
    db    0ebh,001h,0e8h;//乱码样版
    call    GetGPARVAByIndex,ebx,esi
    mov    esi,eax
    ;//ebx=Kernel32 Base;esi=GetProcAddress
   
    ;//定位其他API函数
    db    0ebh,001h,0e8h;//乱码样版
    call    GetGTCString
    call    esi,ebx,eax
    mov    [ebp+GET_TICK_COUNT],eax
    db    0ebh,001h,0e8h;//乱码样版   
    call    GetIDPString
    call    esi,ebx,eax
    mov    [ebp+IS_DBG_PRESENT],eax
    db    0ebh,001h,0e8h;//乱码样版
    call    GetEXPString
    call    esi,ebx,eax
    mov    [ebp+EXIT_PROCESS],eax
   
    ;//Save Old TickCount
    call    [ebp+GET_TICK_COUNT]
    mov    [ebp+OLD_TICK_COUNT],eax
    db    0ebh,001h,0e8h;//乱码样版

    ;//Seh  Check
    call    SetSehFrame,offset @@SehCheckContinue
    xor    eax,eax
    db    0ebh,001h,0e8h;//乱码样版
    div    eax
    ret
@@SehCheckContinue:
    call    ClsSehFrame

    ;//Calc Old Entry RVA
    db    0ebh,001h,0e8h;//乱码样版
    call    GetRVAOffset,offset PCStart
    mov    ebx,eax
    call    GetRVAOffset,offset RRVAEIP
    db    0ebh,001h,0e8h;//乱码样版
    add    ebx,[eax]
    call    GetRVAOffset,offset JRVAEIP
    mov    [eax],ebx
    db    0ebh,001h,0e8h;//乱码样版

    ;//Time Limit Check And Debug Check
    call    [ebp+GET_TICK_COUNT]
    cmp    [ebp+OLD_TICK_COUNT],eax
    db    0ebh,001h,0e8h;//乱码样版
    ja    @@ExitProcess;
    sub    eax,1000
    cmp    [ebp+OLD_TICK_COUNT],eax
    db    0ebh,001h,0e8h;//乱码样版
    jb    @@ExitProcess;
    call    [ebp+IS_DBG_PRESENT]
    or    eax,eax
    jnz    @@ExitProcess;
    db    0ebh,001h,0e8h;//乱码样版

    ;//恢复堆栈执行原始程序
    add    esp,100h
    popad   
    db    0ebh,001h,0e8h;//乱码样版
    jmp    JmpOldEIP
@@ExitProcess:
    call    [ebp+EXIT_PROCESS],0

;//得到相对地址
GetRVAOffset proc Address:DWORD
    db    0ebh,001h,0e8h;//乱码样版
    call    @@PushRVAOffset
@@PushRVAOffset:
    pop    eax
    sub    eax,offset @@PushRVAOffset
    db    0ebh,001h,0e8h;//乱码样版
    add    eax,Address
    ret
GetRVAOffset endp

;//建立SEH过滤
SetSehFrame:    ;SafeEip Change eax ecx edx
    pop    edx
    pop    ecx;//Pop Param Safe Eip
    call    GetRVAOffset,ecx
    db    0ebh,001h,0e8h;//乱码样版
    mov    ecx,eax
    call    GetRVAOffset,offset Exception
    push    eax
    db    0ebh,001h,0e8h;//乱码样版
    push    fs:dword ptr[0];//Push Old Seh Frame
    mov    fs:dword ptr[0],esp
    call    GetRVAOffset,offset SafeEIP
    db    0ebh,001h,0e8h;//乱码样版
    push    dword ptr[eax];//Push Old Safe Eip
    mov    dword ptr[eax],ecx;//Set Safe Eip
    call    GetRVAOffset,offset SafeESP
    db    0ebh,001h,0e8h;//乱码样版
    push    dword ptr[eax];//Push Old Safe Esp
    sub    esp,100h;//Sub Safe Stack Space Size
    mov    dword ptr[eax],esp;//Set Safe Esp
    db    0ebh,001h,0e8h;//乱码样版
    jmp    edx

;//清除SEH过滤
ClsSehFrame:    ;Change ecx edx,Not change eax
    pop    edx
    mov    ecx,eax
    db    0ebh,001h,0e8h;//乱码样版
    call    GetRVAOffset,offset SafeESP
    mov    esp,[eax];//Get Safe Esp
    add    esp,100h;//Add Safe Stack Sapce Size
    db    0ebh,001h,0e8h;//乱码样版
    pop    dword ptr[eax];//Pop Old Safe Esp
    call    GetRVAOffset,offset SafeEIP
    pop    dword ptr[eax];//Pop Old Safe Eip
    pop    fs:dword ptr[0];//Pop Old Seh Frame
    db    0ebh,001h,0e8h;//乱码样版
    pop    eax;//Pop Exception
    mov    eax,ecx
    db    0ebh,001h,0e8h;//乱码样版
    jmp    edx

;//SEH意外处理,记录错误
Exception proc  uses ebx esi edi,Record:DWORD,Frame:DWORD,Context:DWORD,Dispatch:DWORD
    mov    edx,Context
    call    GetRVAOffset,offset SafeESP
    db    0ebh,001h,0e8h;//乱码样版
    mov    eax,[eax]
    mov    dword ptr[edx.cx_Esp],eax
    call    GetRVAOffset,offset SafeEIP
    db    0ebh,001h,0e8h;//乱码样版
    mov    eax,[eax]
    mov    dword ptr[edx.cx_Eip],eax
    xor    eax,eax;忽略错误继续执行
    db    0ebh,001h,0e8h;//乱码样版
    ret
Exception endp

;//比较字符串
CompareMemory proc uses ebx esi edi,Src:DWORD,Des:DWORD,Size:DWORD
    db    0ebh,001h,0e8h;//乱码样版
    call    SetSehFrame,offset @@NotSame
    mov    esi,Src
    mov    edi,Des
    db    0ebh,001h,0e8h;//乱码样版
    mov    ecx,Size
    cld
    rep    cmpsb
    db    0ebh,001h,0e8h;//乱码样版
    mov    ebx,ecx
    call    ClsSehFrame
    mov    eax,ebx
    db    0ebh,001h,0e8h;//乱码样版
    ret
@@NotSame:
    call    ClsSehFrame
    mov    eax,-1
    ret
CompareMemory endp

;//字符解密
EncodeString proc uses ebx esi edi,PChar:DWORD,Size:DWORD
    db    0ebh,001h,0e8h;//乱码样版
    mov    ecx,Size
    mov    esi,PChar
    db    0ebh,001h,0e8h;//乱码样版
@@ContEncode:
    xor    [esi],dword ptr XX
    add    esi,4
    db    0ebh,001h,0e8h;//乱码样版
    loop    short @@ContEncode
    db    0ebh,001h,0e8h;//乱码样版
    ret
EncodeString endp

;//得到GetProcAddress字符串指针
GetGPAString proc uses ebx
    db    0ebh,001h,0e8h;//乱码样版
    call    @@PushGetProcAddressStr
    dd    'PteG' xor XX,'Acor' xor XX,'erdd' xor XX,'ss' xor XX
@@PushGetProcAddressStr:
    pop    ebx
    cmp    [ebx],word ptr 'eG'
    jz    short @@HasEncode
    db    0ebh,001h,0e8h;//乱码样版
    call    EncodeString,ebx,4
@@HasEncode:
    mov    eax,ebx
    db    0ebh,001h,0e8h;//乱码样版
    ret
GetGPAString endp

GetGTCString proc uses ebx
    db    0ebh,001h,0e8h;//乱码样版
    call    @@PushGetTickCountStr
    dd    'TteG' xor XX,'Ckci' xor XX,'tnuo' xor XX,0
@@PushGetTickCountStr:
    pop    ebx
    db    0ebh,001h,0e8h;//乱码样版
    cmp    [ebx],word ptr'eG'
    jz    short @@HasEncode
    call    EncodeString,ebx,3
@@HasEncode:
    mov    eax,ebx
    db    0ebh,001h,0e8h;//乱码样版
    ret   
GetGTCString endp

GetIDPString proc uses ebx
    db    0ebh,001h,0e8h;//乱码样版
    call    @@PushIsDebugPresent
    dd    'eDsI' xor XX,'ggub' xor XX,'rPre' xor XX,'nese' xor XX,'t' xor XX
@@PushIsDebugPresent:
    pop    ebx
    cmp    [ebx],word ptr 'sI'
    jz    short @@HasEncode
    db    0ebh,001h,0e8h;//乱码样版
    call    EncodeString,ebx,5
@@HasEncode:
    mov    eax,ebx
    db    0ebh,001h,0e8h;//乱码样版
    ret
GetIDPString endp

GetEXPString proc uses ebx
    db    0ebh,001h,0e8h;//乱码样版
    call    @@PushExitProcessString
    dd    'tixE' xor XX,'corP' xor XX,'sse' xor XX
@@PushExitProcessString:
    pop    ebx
    cmp    [ebx],word ptr 'xE'
    jz    short @@HasEncode
    db    0ebh,001h,0e8h;//乱码样版
    call    EncodeString,ebx,3
@@HasEncode:
    mov    eax,ebx
    db    0ebh,001h,0e8h;//乱码样版
    ret
GetEXPString endp

;//搜索PE头
GetPEOffset proc uses ebx esi edi,MZOffset:DWORD   
    db    0ebh,001h,0e8h;//乱码样版
    call    SetSehFrame,offset @@RepScanPEOffset
    mov    ebx,MZOffset
@@RepScanPEOffset:
    dec    ebx
    and    bx,0f000h   
    db    0ebh,001h,0e8h;//乱码样版
    movzx    eax,word ptr[ebx]
    xor    eax,XX
    cmp    eax,dword ptr 'ZM' xor XX
    db    0ebh,001h,0e8h;//乱码样版   
    jnz    short @@RepScanPEOffset
    movzx    esi,[ebx+PeHeadOffset]
    add    esi,ebx
    db    0ebh,001h,0e8h;//乱码样版
    movzx    eax,word ptr[esi]
    xor    eax,XX
    cmp    eax,dword ptr 'EP' xor XX
    db    0ebh,001h,0e8h;//乱码样版   
    jnz    short @@RepScanPEOffset
    call    ClsSehFrame
    mov    eax,ebx
    db    0ebh,001h,0e8h;//乱码样版
    ret
GetPEOffset endp

;//从MZ/PE文件中得到GPA名字
GetGPANameByIndex proc uses ebx esi edi,MZOffset:DWORD,Index:DWORD
    db    0ebh,001h,0e8h;//乱码样版
    call    SetSehFrame,offset @@NotFound
    mov    ebx,MZOffset
    movzx    ecx,[ebx+PeHeadOffset]
    add    ecx,ebx   
    db    0ebh,001h,0e8h;//乱码样版
    mov    esi,[ecx.peExportsRVA]
    add    esi,ebx
    mov    edi,[esi.etExportNameList]
    db    0ebh,001h,0e8h;//乱码样版
    add    edi,ebx
    mov    ecx,Index
    cmp    ecx,[esi.etExportNameSum]
    db    0ebh,001h,0e8h;//乱码样版
    jae    short @@NotFound
    mov    edi,[edi+ecx*4]
    add    edi,ebx
    db    0ebh,001h,0e8h;//乱码样版
    or    eax,[edi];//Test
    or    eax,[edi+15];//Test
    call    ClsSehFrame
    db    0ebh,001h,0e8h;//乱码样版
    mov    eax,edi
    db    0ebh,001h,0e8h;//乱码样版
    ret
@@NotFound:
    call    ClsSehFrame
    xor    eax,eax
    db    0ebh,001h,0e8h;//乱码样版
    ret
GetGPANameByIndex endp

;//得到GPA地址
GetGPARVAByIndex proc uses ebx esi edi,MZOffset:DWORD,Index:DWORD
    db    0ebh,001h,0e8h;//乱码样版
    call    GetRVAOffset,offset @@NotFound
    call    SetSehFrame,eax
    db    0ebh,001h,0e8h;//乱码样版
    mov    ebx,MZOffset
    movzx    ecx,[ebx+PeHeadOffset]
    db    0ebh,001h,0e8h;//乱码样版
    add    ecx,ebx   
    mov    esi,[ecx.peExportsRVA]
    add    esi,ebx
    db    0ebh,001h,0e8h;//乱码样版
    mov    ecx,Index
    cmp    ecx,[esi.etExportAddrSum]
    jae    short @@NotFound
    db    0ebh,001h,0e8h;//乱码样版
    mov    edi,[esi.etExportOrdlList]
    add    edi,ebx
    db    0ebh,001h,0e8h;//乱码样版
    movzx    ecx,word ptr[edi+ecx*2]
    cmp    ecx,[esi.etExportAddrSum]
    jae    short @@NotFound
    db    0ebh,001h,0e8h;//乱码样版
    mov    edi,[esi.etExportAddrList]
    add    edi,ebx
    db    0ebh,001h,0e8h;//乱码样版
    mov    edi,[edi+ecx*4]
    db    0ebh,001h,0e8h;//乱码样版
    add    edi,ebx
    or    eax,[edi];//Test
    call    ClsSehFrame
    db    0ebh,001h,0e8h;//乱码样版
    mov    eax,edi
    ret
@@NotFound:
    call    ClsSehFrame
    xor    eax,eax
    db    0ebh,001h,0e8h;//乱码样版
    ret
GetGPARVAByIndex endp

JmpOldEIP:
    db    068h
JRVAEIP    dd    ?
    db    0c3h
RRVAEIP dd    -1000h
SafeESP    dd    ?
SafeEIP    dd    ?

PCEnd:
    MsgFmt    db 'RRVAIP:%X,Size:%x',0
    MsgBuf    db 256 dup(?);

.code

Exit:   
    call    ShowMsg
    call    ExitProcess,0   

Start:   
    jmp    PCStart

ShowMsg proc
    pushad
    mov    ebp,esp
    call    _wsprintfA,offset MsgBuf,offset MsgFmt,offset RRVAEIP,offset PCEnd-offset PCStart
    call    MessageBoxA,0,offset MsgBuf,offset MsgBuf,0
    mov    esp,ebp
    popad
    ret
ShowMsg endp

end Start
2004-11-10 17:36
0
雪    币: 255
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
谢谢先~!:)
2004-11-10 17:38
0
雪    币: 212
活跃值: (55)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
老兄别客气啦~
2004-11-10 17:39
0
雪    币: 319
活跃值: (2459)
能力值: ( LV12,RANK:980 )
在线值:
发帖
回帖
粉丝
8
加壳系统自带的注册编辑器时提示不是PE格式。
脱壳很简单。
2004-11-10 18:08
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
9
CALC.EXE
WinXP下无法运行
2004-11-10 19:24
0
雪    币: 229
活跃值: (143)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
谢谢,看看源码先~!
2004-11-10 19:31
0
雪    币: 117
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
唉!~
已经不错了,可以写出来,但还差得远啦。。。
2004-11-11 12:51
0
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
好兄弟,正需要这些!!将来我也写!:D
2004-11-11 15:43
0
游客
登录 | 注册 方可回帖
返回
//