能力值:
( LV12,RANK:530 )
|
-
-
2 楼
感谢分享,之前我也研究过写壳
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
支持一下,顶起
|
能力值:
( LV5,RANK:70 )
|
-
-
4 楼
支持一下,顶起。
|
能力值:
( LV7,RANK:110 )
|
-
-
5 楼
非常感谢分享
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
不错,支持楼主,等放假回来再看看。
|
能力值:
( LV7,RANK:110 )
|
-
-
7 楼
方便传个vs2010版本的吗
|
能力值:
( LV8,RANK:130 )
|
-
-
8 楼
|
能力值:
( LV5,RANK:70 )
|
-
-
9 楼
good job
|
能力值:
( LV7,RANK:110 )
|
-
-
10 楼
非常感谢回复
要是以后加入虚拟机引擎就爽了
|
能力值:
( LV7,RANK:110 )
|
-
-
11 楼
感谢分享!挑战一下自己,明天开始研究如何破解
|
能力值:
( LV7,RANK:110 )
|
-
-
12 楼
看了一下你的加密程序,有思路了,嘿嘿代码加密的找到入口点,等你自己解密了之后,就行,至于IAT加密,嘿嘿,也不难啊!可以采用,已知明文破解的办法,就是用VC编写一个静态加载自己DLL的程序,编写之后,用PE编辑工具打开这个文件,打开之后,查看导出表在文件地址,根据对齐值,计算一下加载到内存时的位置,记下这个位置,接着用楼主的程序加壳,加壳之后用OD加载被加壳的程序,拿着刚刚已经计算好的IAT地址加上模块的加载地址,就可以知道IAT地址,然后在IAT地址上下内存断点,在LoadLibraryW GetProcAddress GetModuleHandleW等函数上下执行断点,接着就调试,嘿嘿,看是什么指令写入了IAT,什么位置调用了GetProcAddress 以及加载了什么模块,等加载自己的DLL的时候,就自己手动通过EAT获取自己DLL的函数的地址,然后填入刚刚加壳程序填入的IAT地址,看是否会直接调用你的程序,如果直接调用,而没有经过加壳程序的话,就说明你获取的IAT写入地址正确了,嘿嘿,用这个方法手工恢复吧!要是获取的IAT地址不正确,就继续调试,直到能获取正确的IAT地址为止!
|
能力值:
( LV8,RANK:130 )
|
-
-
13 楼
你这个思路实现了吗? 我获取到真正的函数地址以后,不是直接填到对应的IAT地址的啊。。而是直接填到一块new出来的堆空间中的啊,而这个堆空间中填的地址也不是直接就是函数地址,是一段ShellCode的地址,经过一些花指令以后才会call真正的函数地址。
你dump以后成功修复IAT了? (加壳的时候别忘了选择IAT加密 )
|
能力值:
( LV7,RANK:110 )
|
-
-
14 楼
部分实现,通过一个已知的DLL的API,我已经定位到了解码IAT的程序!已经找到了IAT原地址,你即使申请了new的地址,你也必须向原IAT地址填写一个HOOK,不是么?跟踪到后面的结果是,如果没有进行IAT加密的话,会发现惊喜,不过经过测试,加密之后也没事,你同样会发现惊喜!
|
能力值:
( LV7,RANK:110 )
|
-
-
15 楼
没有完全实现的原因,只是因为我跟踪到IAT之后,累了,就先休息了,嘿嘿,等过两天,我有空了,继续挑战,嘿嘿!不过表扬一下,花指令还是不错,不过,不是很强大,花了我多一点事件读取而已
|
能力值:
( LV8,RANK:130 )
|
-
-
16 楼
哇,多谢大牛赐教!
调试方面我还是太弱啊,回头研究研究你说的这种方法!
感谢感谢!
|
能力值:
( LV2,RANK:10 )
|
-
-
17 楼
1、本人环境为vs2010,附件中的源码存在问题,开始直接编译不通过。
需修改shell.cpp 245行279行添加等号。
2、修改完各种错误后静态编译出来的shell.dll只有38kb,而楼主所给的shell.dll为78kb不知是什么原因。(基本的环境配置我没有修改,只修改编译错误信息。)
3、使用楼主的shell.dll加壳在win7 x64系统可以正常运行,但是使用楼主源码编译出来的exe和dll加壳后运行弹出对话框后运行出错。第二次输出信息为:
runtime error R6009
- not enough space for environment
4、猜想附件中的源码是不是最终版本。
|
能力值:
( LV8,RANK:130 )
|
-
-
18 楼
我用的是VS2013开发的。
我给出的那个78kb的Shell.dll是我在VS2013下静态编译的( 运行库:多线程 MT )Release版。
你试一下你自己编译exe文件配上压缩包里自带的Shell.dll(78kb)看能不能正常加壳。如果能的话就说明是Shell编译的问题。
确定一下你的dll项目是否是Release(之前为了调试方便,我把shell项目Release的生成目录改成了Debug目录),再确定一下Shell项目是不是按照上图中的方式设置。
在我电脑上下载下来源码然后直接编译出来,加壳是没问题的。
看来VS低版本对高版本的兼容性不太好吧,你也可以看看这个迁移方案,希望能够帮到你:
http://blog.csdn.net/civilman/article/details/40109483
|
能力值:
( LV7,RANK:110 )
|
-
-
19 楼
已经可以破解了,嘿嘿,多谢你的加壳程序了,我已经弄好了,等我整理好了,吃了晚饭,我就上传破解办法以及资料,先上传截图,等我晚上弄好以后,再上传教程,嘿嘿,肚子饿了,晚上才弄
|
能力值:
( LV2,RANK:10 )
|
-
-
20 楼
留个记号,持续关注楼主的更新。
|
能力值:
( LV7,RANK:110 )
|
-
-
21 楼
楼主,你的加密程序,我已经破解好了,但是我现在在考虑是不是要公布做法,来教一教大家呢?等我公布了,我怕楼主又不高兴了!
|
能力值:
( LV8,RANK:130 )
|
-
-
22 楼
啊...暂时没有更新的打算了,我就是提供个框架,整点简单的加密而已,
主要是抛砖引玉哈哈...
|
能力值:
( LV8,RANK:130 )
|
-
-
23 楼
没啥不高兴的,我这壳本来就是供大家学习的,我自己水平也有限,有大牛来指点当然是极好的了!
|
能力值:
( LV7,RANK:110 )
|
-
-
24 楼
楼主犯了一个小错误,导致我可以直接在你的程序中,直接截取你的IAT填写以及复制过程,在这个过程中,可以在堆栈中记录到导出模块已经导出函数名,楼主在申请新的IAT地址前,使用了LoadLibrary和GetModuleHandle,这两个函数调用时,在堆栈上可以看到我们想要的模块,赶紧的,记录下来呗!,使用了GetProAddress,没有清空EAX寄存器的值,而是,将EAX与15151515h进行异或之后填写入局部变量中,然后就申请了新的内存,新内存地址就保存在EAX中,然后以EAX作为返回值,新的内存用来填写ShllCode,而ShllCode中对原函数的回调用的地址就直接写入SHELLCODE,同时把ShllCode地址存在一个变量中,这个变量,后来又被取出,用来填写真正的IAT地址!我只需截取 ShellCode,让ShellCode的地址指向原函数,并且取消对ShellCode的填写操作,然后用OD将对应的代码回填到可执行文件中,并且在你的程序回填IAT HOOK的时候,记录你的IAT地址就行,有了IAT地址,又有正确的模块加载列表,函数列表,以及IAT的函数地址的链表,恢复IAT不好办么?
|
能力值:
( LV7,RANK:110 )
|
-
-
25 楼
楼主,你想破解的话,先准备工具,需要的工具ollydbg
Cheat Engine和VS2010,以及楼主的加壳程序!
楼主,我先编辑资料,写上破解过程,等一下我发上来
|
|
|