linux使用tfn2k攻击之修改tfn2k错误使之正常运行

(菜鸟记录)
学习了tfn2k的工具使用方法,这里把自己遇到的google了很久才找到答案的问题记录一下,这里的所有操作都是在超级用户模式下进行的

先到网上下载tfn2k.tgz的压缩包,然后选择一个目录解压:
tar -zxvf 相对路径/tfn2k.tgz
解压之后先不要编译,修改完错误之后再编译
进入解压后的文件夹src,查看目录下的文件

错误1
aes.c文件
aes_setkey函数中,使用key变量前,先对其置零;
u4byte keylen = strlen (password) * 8;
u4byte key[strlen (password) / 4];

添加一行代码: memset(key, 0, sizeof(key));
memcpy (key, password, strlen (password));

错误2
aes.h文件
在64位的系统下,gcc会认为unsigned long是8个字节,而tfn2k把它当4个字节使用,从而导致在aes_setkey函数中误用。 最终导致的问题就是,在使用./tfn攻击时时,输入正确密码也会一直提示“Sorry, passwords do not match.”,tfn2k不兼容64位。
typedef unsigned long u4byte; /* a 32 bit unsigned integer type */
中的long改为int,变成这样:
typedef unsigned int u4byte; /* a 32 bit unsigned integer type */

错误3
disc.c文件
编译时,会提示open with O_CREAT in second argument needs 3 arguments时,open加上第三个参数0777;
close (open ("agreed", O_WRONLY | O_CREAT | O_TRUNC));
open函数加上第三个参数0777,变成这样:
close (open ("agreed", O_WRONLY | O_CREAT | O_TRUNC, 0777));

错误4
mkpass.c文件
和错误3一样,给open函数加上第三个参数0777
fd = open ("pass.c", O_WRONLY | O_TRUNC | O_CREAT);
变成这样:
fd = open ("pass.c", O_WRONLY | O_TRUNC | O_CREAT, 0777);

错误5
ip.h文件
避免重定义
注释掉一些内容:

#ifndef in_addr
/*
struct in_addr
{
unsigned long int s_addr;
};
*/
#endif

修改完成后就可以make编译
编译之后可以使用./tfn攻击了

注意所有的修改内容都要在编译(make)之前修改,在编译之后修改要将之前编译产生的内容全部删除再编译,不然修改会无效!

参考:http://blog.chinaunix.net/uid-16728139-id-4411623.html
./tfn攻击的具体方法参考:http://foreverzpk.blog.51cto.com/683356/1573940
http://www.cnetnews.com.cn/2008/0922/1143024.shtml
tfn2k.tgz下载:http://www.xfocus.net/tools/200405/697.html

你可能感兴趣的:(信息安全)