能力值:
( LV2,RANK:10 )
|
-
-
2 楼
支持,不管怎么样你已经开始了。
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
谢谢,写了一周,
纯汇编写的
写壳还是非常累人的,很不好调试
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
能写壳的都是牛人或以后是
|
能力值:
( LV13,RANK:220 )
|
-
-
5 楼
哎,顶下,我的汇编还是学的很烂。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
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
|
能力值:
( LV4,RANK:50 )
|
-
-
7 楼
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
|
能力值:
( LV3,RANK:30 )
|
-
-
8 楼
看了一下,还不错啊
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
呵呵顶楼主.学习下,
|
能力值:
( LV3,RANK:20 )
|
-
-
10 楼
wzjok
正解哈,的确是加密了那两个API,
谢谢yingyue 的表扬
下一步我的打算是:
1、加花,还是要加点花出来,混淆一下,虽然起的作用不会很大
2、全手工加密API,还分多处地址,每处方法不一样,要解也要累死解密的人,
3、ANTI 调试就不反了,有StrongOD在,作用不大,反断点才是正道,反硬件断点和INT 3断点
4、这个不知道我能不能做出来,就是做自己的VM。
|
能力值:
( LV3,RANK:30 )
|
-
-
11 楼
第一次做成这样很好了,值得表扬的,
比那些什么自主开发什么最新什么技术的人好多了 (不是说强度 )
,期待猛壳出炉
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
学习的东西总是太多了。谢谢
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
我測試過 IAT加密 只要修改 1 處
00910261 |74 39 je short 0091029C je 改 jmp
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
hcg的也是正解,原因是这样的,
HCG跳的是主程序中选择的是否需要IAT重定向的标志,不过以后这个标志是用另一种方式来判断的,或者说用动态shellcode来完成。
wzjok是跳的两处加密API的地方,
其实我的目的,不是说让增加找到API加密点的难度,而是让解密者花费大量的精力去做这些事,所以,我还是会支持人工加密API,同时会加上大量的随机垃圾代码
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
我写的都是小壳,实在不能和牛牛们写的强壳相比,不过可以学习牛牛壳的技术,
Noobyprotect就是我心中的强壳,VM的东西,自己感觉技术还差得远,暂时不搞
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
像楼主写壳的精神致敬!
|
能力值:
( LV9,RANK:220 )
|
-
-
17 楼
http://bbs.pediy.com/showthread.php?p=682184
破文~~
有两个问题想请教作者
1. 为什么要修改kernel32的e_lfanew指针?
2. 在判断是否在GetModuleAddress和IsIconic函数时为什么要先 test eax, 1 ??
谢谢~~
|
能力值:
( LV2,RANK:10 )
|
-
-
18 楼
呵呵,你肯定是以前下的了,现在这个都换成第二版了,不过你有第一版的基础,破解第二版应该不难了,试试看
回答:
1.主要是为了向kernel32写入重定位的基址信息,暂时没什么用,以后的话,可以方便自由定位,让壳代码无论在哪都不会迷路,我是我的想法。
2.第一版的时候,因为是第一次写,误将判断是否加密IAT的信息写进去了,那本是主程序上的事,所以就有一个大BUG,就是你看到的 test eax,1,直接跳,API加密就过了。
就是这样的,解释还满意吧
|
能力值:
( LV6,RANK:90 )
|
-
-
19 楼
我咋感觉,代码相似度跟mkfpack就那么像呢。。。我眼花,路过。
|
能力值:
( LV3,RANK:20 )
|
-
-
20 楼
楼主在有一个帖子里说过是用mkfpack来修改的,感谢LLY**大侠共享原码,不是你眼花,这是事实。
原帖好像在:http://bbs.pediy.com/showthread.php?t=97216
在回帖的时候,有说明
|
能力值:
( LV2,RANK:10 )
|
-
-
21 楼
哎,我连壳都不会脱
|
能力值:
( LV9,RANK:410 )
|
-
-
22 楼
首先对写壳的朋友说声:辛苦了,保重身体!现在大环境不好,需要大家一起努力。
申请到的内存A00000
A0038C kernel32.dll 整个
A003EB user32.IsIconic
A00433 user32.DestroyWindow
A00464 user32.MessageBeep
A00490 user32.LoadImageW
参照相关跳转。否定加密。
OEP走完即可。
修复即可运行,不传了。
再次像写壳的朋友致敬!
|
能力值:
( LV2,RANK:10 )
|
-
-
23 楼
楼上正解,大环境不好指的是什么意思?
不好找工作?
|
能力值:
( LV2,RANK:10 )
|
-
-
24 楼
大环境不好应该是指
现在新手写壳的氛围不太好,大家都比较浮躁,很多都是简单的求脱文;
现在壳的技术起点比较高,如果一步一步来需要学习的东西比较多;
很多大牛讲解现在的壳,不是我等菜鸟轻易能搞明白的,而且现在壳内容多,一篇脱文往往不能详细清晰的理解这个壳的原理和精髓。
推荐一篇文章,为写壳而苦苦挣扎的我,心里多了点慰藉
http://unpack.cn/viewthread.php?tid=40529&extra=page%3D1
|
能力值:
( LV2,RANK:10 )
|
-
-
25 楼
内容多归多,总是会学会的,关键在于坚持,
学会操作步骤还是不如学会原理的好
|
|
|