首页
论坛
课程
招聘
[原创]新写的壳,给新手练手用
2009-9-2 19:15 19226

[原创]新写的壳,给新手练手用

2009-9-2 19:15
19226


学习着写了一款小壳,还没有写完,所以主程序暂时不上传了,
上传一个加壳后的记事本,
给新手学习用,

不知道兼容性如何,

压缩用的aplib,API只加密了两个,无花指令,无ANTI(没有写完壳嘛),

第一次写壳,写得不行,大家不要笑话。

另外,将kernel32.dll的内存中(不是文件),写了点东西进去,
微点可能会报可疑,不过没问题的,不是病毒。

大家不要笑话我啊,水平实在不行。

另外,感谢一下xcloud的支持。

wzjok  
正解哈,的确是加密了那两个API,

谢谢yingyue  的表扬

下一步我的打算是:

1、加花,还是要加点花出来,混淆一下,虽然起的作用不会很大
2、全手工加密API,还分多处地址,每处方法不一样,要解也要累死解密的人,
3、ANTI 调试就不反了,有StrongOD在,作用不大,反断点才是正道,反硬件断点和INT 3断点
4、这个不知道我能不能做出来,就是做自己的VM。
5、将原EXE进行分拆,分成很多段,中间使用JMP来连接,将原EXE部分代码搬入壳中,不是stole oep,那没用,我指的是代码段的代码,运行一会原EXE,JMP原代码,再JMP壳,这样反复,感觉这样应该有用。呵呵。。。。。

hcg的也是正解,原因是这样的,
HCG跳的是主程序中选择的是否需要IAT重定向的标志,不过以后这个标志是用另一种方式来判断的,或者说用动态shellcode来完成。
wzjok是跳的两处加密API的地方,
其实我的目的,不是说让增加找到API加密点的难度,而是让解密者花费大量的精力去做这些事,所以,我还是会支持人工加密API,同时会加上大量的随机垃圾代码

本程序是依据LLY大侠共享的源码来改写的,所以只能算半个原创,感谢大侠共享源码,受启发颇丰

[2022冬季班]《安卓高级研修班(网课)》月薪两万班招生中~

上传的附件:
收藏
点赞0
打赏
分享
最新回复 (31)
雪    币: 202
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
leaf_9 活跃值 2009-9-2 20:09
2
0
支持,不管怎么样你已经开始了。
雪    币: 211
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
th666 活跃值 2009-9-2 20:51
3
0
谢谢,写了一周,
纯汇编写的
写壳还是非常累人的,很不好调试
雪    币: 291
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
leking 活跃值 2009-9-2 21:29
4
0
能写壳的都是牛人或以后是
雪    币: 83
活跃值: 活跃值 (27)
能力值: ( LV13,RANK:220 )
在线值:
发帖
回帖
粉丝
instruder 活跃值 4 2009-9-2 21:31
5
0
哎,顶下,我的汇编还是学的很烂。。。
雪    币: 75
活跃值: 活跃值 (478)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
luzhmu 活跃值 2009-9-2 22:53
6
0
0100739D    6A 70           PUSH 70------------OEP
0100739F    68 98180001     PUSH NOTEPAD.01001898
010073A4    E8 BF010000     CALL NOTEPAD.01007568
010073A9    33DB            XOR EBX,EBX
010073AB    53              PUSH EBX
010073AC    8B3D CC100001   MOV EDI,DWORD PTR DS:[10010CC]-------kernel32.GetModuleHandleA加密了
010073B2    FFD7            CALL EDI
010073B4    66:8138 4D5A    CMP WORD PTR DS:[EAX],5A4D
010073B9    75 1F           JNZ SHORT NOTEPAD.010073DA
010073BB    8B48 3C         MOV ECX,DWORD PTR DS:[EAX+3C]
010073BE    03C8            ADD ECX,EAX
010073C0    8139 50450000   CMP DWORD PTR DS:[ECX],4550
010073C6    75 12           JNZ SHORT NOTEPAD.010073DA
010073C8    0FB741 18       MOVZX EAX,WORD PTR DS:[ECX+18]
010073CC    3D 0B010000     CMP EAX,10B
雪    币: 390
活跃值: 活跃值 (24)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
wzjok 活跃值 1 2009-9-2 22:58
7
0
Yes!我搞定了

0091023C /EB 63 jmp short 009102A1
0091023E |8B06 mov eax, dword ptr ds:[esi] ; ds:[esi]加了密的函数名称地址
00910240 |83C0 02 add eax, 2
00910243 |53 push ebx ; 910000,IAT备份地址
00910244 |52 push edx
00910245 |56 push esi
00910246 |57 push edi
00910247 |0383 7E050000 add eax, dword ptr ds:[ebx+57E] ; ds:[ebx+57e]原始程序的MoudleHandle
0091024D |50 push eax ; eax=原始文件中的IAT函数名称存放地址
0091024E |52 push edx
0091024F |FF93 6A050000 call dword ptr ds:[ebx+56A] ; Kernel32.GetProcAddress
00910255 |5F pop edi
00910256 |8B93 66050000 mov edx, dword ptr ds:[ebx+566] ; ds:[ebx+566]=3
0091025C |A9 01000000 test eax, 1
00910261 |74 39 je short 0091029C
00910263 |3B83 22050000 cmp eax, dword ptr ds:[ebx+522] ; ds:[ebx+522]=7C80B741=addr of GetModuleHandleA
00910269 |75 21 jnz short 0091028C ; 为了防止壳将IAT加密,我们得将 jnz 改为 jmp,
0091026B |8983 18060000 mov dword ptr ds:[ebx+618], eax
00910271 |8D93 3B060000 lea edx, dword ptr ds:[ebx+63B]
00910277 |C602 A1 mov byte ptr ds:[edx], 0A1
0091027A |B8 18060000 mov eax, 618
0091027F |03C3 add eax, ebx
00910281 |8942 01 mov dword ptr ds:[edx+1], eax
00910284 |66:C742 05 FFE0 mov word ptr ds:[edx+5], 0E0FF
0091028A |8BC2 mov eax, edx
0091028C |3B83 5A050000 cmp eax, dword ptr ds:[ebx+55A] ; ds:[ebx+55A]=77D297FF=addr of user32.IsIconic
00910292 |75 08 jnz short 0091029C ; 为了防止壳将IAT加密,我们得将 jnz 改为 jmp
00910294 |8D93 47060000 lea edx, dword ptr ds:[ebx+647]
0091029A |8BC2 mov eax, edx
0091029C |8907 mov dword ptr ds:[edi], eax ; 保存刚刚获取的IAT函数地址
0091029E |5E pop esi
0091029F |5A pop edx
009102A0 |5B pop ebx
009102A1 \83C6 04 add esi, 4
009102A4 83C7 04 add edi, 4
009102A7 833E 00 cmp dword ptr ds:[esi], 0
009102AA ^ 0F85 6BFFFFFF jnz 0091021B
009102B0 5E pop esi
009102B1 83C6 14 add esi, 14
009102B4 837E 0C 00 cmp dword ptr ds:[esi+C], 0
009102B8 ^ 0F85 0FFFFFFF jnz 009101CD
009102BE 8B83 04060000 mov eax, dword ptr ds:[ebx+604]
009102C4 0383 7E050000 add eax, dword ptr ds:[ebx+57E]
009102CA 50 push eax
009102CB C3 retn ; 返回到 OEP=0100739D


上传的附件:
雪    币: 1834
活跃值: 活跃值 (20)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
yingyue 活跃值 2009-9-2 23:14
8
0
看了一下,还不错啊
雪    币: 157
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ackk 活跃值 2009-9-2 23:26
9
0
呵呵顶楼主.学习下,
雪    币: 141
活跃值: 活跃值 (11)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
xflin 活跃值 2009-9-3 00:07
10
0
wzjok  
正解哈,的确是加密了那两个API,

谢谢yingyue  的表扬

下一步我的打算是:

1、加花,还是要加点花出来,混淆一下,虽然起的作用不会很大
2、全手工加密API,还分多处地址,每处方法不一样,要解也要累死解密的人,
3、ANTI 调试就不反了,有StrongOD在,作用不大,反断点才是正道,反硬件断点和INT 3断点
4、这个不知道我能不能做出来,就是做自己的VM。
雪    币: 1834
活跃值: 活跃值 (20)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
yingyue 活跃值 2009-9-3 00:28
11
0
第一次做成这样很好了,值得表扬的,
比那些什么自主开发什么最新什么技术的人好多了 (不是说强度 )

,期待猛壳出炉
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
guoruiqi 活跃值 2009-9-3 10:13
12
0
学习的东西总是太多了。谢谢
雪    币: 350
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
hcg 活跃值 2009-9-3 11:44
13
0
我測試過 IAT加密 只要修改 1 處
00910261   |74 39           je      short 0091029C    je 改 jmp
雪    币: 211
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
th666 活跃值 2009-9-3 12:31
14
0
hcg的也是正解,原因是这样的,
HCG跳的是主程序中选择的是否需要IAT重定向的标志,不过以后这个标志是用另一种方式来判断的,或者说用动态shellcode来完成。
wzjok是跳的两处加密API的地方,
其实我的目的,不是说让增加找到API加密点的难度,而是让解密者花费大量的精力去做这些事,所以,我还是会支持人工加密API,同时会加上大量的随机垃圾代码
雪    币: 211
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
th666 活跃值 2009-9-3 12:32
15
0
我写的都是小壳,实在不能和牛牛们写的强壳相比,不过可以学习牛牛壳的技术,
Noobyprotect就是我心中的强壳,VM的东西,自己感觉技术还差得远,暂时不搞
雪    币: 220
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
cqyxyxyx 活跃值 2009-9-3 22:56
16
0
像楼主写壳的精神致敬!
雪    币: 278
活跃值: 活跃值 (38)
能力值: ( LV9,RANK:220 )
在线值:
发帖
回帖
粉丝
cradiator 活跃值 4 2009-9-5 21:42
17
0
http://bbs.pediy.com/showthread.php?p=682184
破文~~

有两个问题想请教作者
1. 为什么要修改kernel32的e_lfanew指针?
2. 在判断是否在GetModuleAddress和IsIconic函数时为什么要先 test eax, 1 ??

谢谢~~
雪    币: 211
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
th666 活跃值 2009-9-5 22:36
18
0
呵呵,你肯定是以前下的了,现在这个都换成第二版了,不过你有第一版的基础,破解第二版应该不难了,试试看

回答:
1.主要是为了向kernel32写入重定位的基址信息,暂时没什么用,以后的话,可以方便自由定位,让壳代码无论在哪都不会迷路,我是我的想法。

2.第一版的时候,因为是第一次写,误将判断是否加密IAT的信息写进去了,那本是主程序上的事,所以就有一个大BUG,就是你看到的 test eax,1,直接跳,API加密就过了。

就是这样的,解释还满意吧
雪    币: 1228
活跃值: 活跃值 (310)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
zhujian 活跃值 2 2009-9-13 02:01
19
0
我咋感觉,代码相似度跟mkfpack就那么像呢。。。我眼花,路过。
雪    币: 141
活跃值: 活跃值 (11)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
xflin 活跃值 2009-9-13 14:24
20
0
楼主在有一个帖子里说过是用mkfpack来修改的,感谢LLY**大侠共享原码,不是你眼花,这是事实。

原帖好像在:http://bbs.pediy.com/showthread.php?t=97216
在回帖的时候,有说明
雪    币: 435
活跃值: 活跃值 (43)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ucantseeme 活跃值 2009-9-13 17:25
21
0
哎,我连壳都不会脱
雪    币: 217
活跃值: 活跃值 (11)
能力值: ( LV9,RANK:410 )
在线值:
发帖
回帖
粉丝
深海游侠 活跃值 10 2009-9-17 23:12
22
0
首先对写壳的朋友说声:辛苦了,保重身体!现在大环境不好,需要大家一起努力。

申请到的内存A00000
A0038C kernel32.dll 整个
A003EB user32.IsIconic
A00433 user32.DestroyWindow
A00464 user32.MessageBeep
A00490 user32.LoadImageW
参照相关跳转。否定加密。
OEP走完即可。
修复即可运行,不传了。

再次像写壳的朋友致敬!
雪    币: 211
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
th666 活跃值 2009-9-18 12:55
23
0
楼上正解,大环境不好指的是什么意思?
不好找工作?
雪    币: 444
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
怀特迈恩 活跃值 2009-9-18 16:21
24
0
大环境不好应该是指
现在新手写壳的氛围不太好,大家都比较浮躁,很多都是简单的求脱文;
现在壳的技术起点比较高,如果一步一步来需要学习的东西比较多;
很多大牛讲解现在的壳,不是我等菜鸟轻易能搞明白的,而且现在壳内容多,一篇脱文往往不能详细清晰的理解这个壳的原理和精髓。

推荐一篇文章,为写壳而苦苦挣扎的我,心里多了点慰藉
http://unpack.cn/viewthread.php?tid=40529&extra=page%3D1
雪    币: 211
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
th666 活跃值 2009-9-18 19:49
25
0
内容多归多,总是会学会的,关键在于坚持,

学会操作步骤还是不如学会原理的好
游客
登录 | 注册 方可回帖
返回