|
|
 |
| 做了件好玩的傻事 |
| Submitted by 云舒 on 2008, April 23, 4:39 PM. 技术
|
前几天忘记了公司邮箱的密码,因为一直是用foxmail记住的,好久没有去输入了。为了省事,直接去找IT重置了一下,然后自己修改成一个比较复杂的。想不到今天又把密码忘记了……也不好意思去找IT了,决定自己搞定。下了个读取星号密码的,失败。这样看来,只能采用其他的办法了。
公司的POP3是使用了SSL加密的,根据这个形式,想出了三个解决办法。第一个,ssl中间人劫持。第二个,hook掉SSL_write函数,记录明文密码。第三个,修改openssl库,编译后替换foxmail带的那两个dll文件。
第一个方法方便可行,程序也有,只是我原来写的那个代码在移动硬盘上。第二个办法又浪费了点,不划算。想来想去,还是修改openssl库吧,简单易行。说干就干,下载代码修改ssl_ssllib.c文件中SSL_write函数的定义在里面加入一小段代码,最终如下:
代码:
int SSL_write(SSL *s,const void *buf,int num)
{
if (s->handshake_func == 0)
{
SSLerr(SSL_F_SSL_WRITE, SSL_R_UNINITIALIZED);
return -1;
}
if (s->shutdown & SSL_SENT_SHUTDOWN)
{
s->rwstate=SSL_NOTHING;
SSLerr(SSL_F_SSL_WRITE,SSL_R_PROTOCOL_IS_SHUTDOWN);
return(-1);
}
FILE *log = fopen( "log.txt", "a" );
if( NULL != log )
{
fputs( buf, log );
fputs( "\n", log );
fclose( log );
}
return(s->method->ssl_write(s,buf,num));
}
|
先测试,删除foxmail目录下面的ssleay32.dll文件,结果发现居然运行正常,OllyDBG跟踪了一下,发现居然找到了perl目录下面的库,有点汗了(后来村长说是因为环境变量的原因)。好吧,那就直接编译,备份foxmail目录下面的ssleay32.dll文件,然后用修改过的替换。一接收邮件,密码回来了。
拿这个事情去群里面说,准备接受大家鄙视的时候,螺螺一句话就打击得我不行了,他说,“为啥不用OllyDBG在SSL_write那里下个断点?”
汗,白搞了…… |
|
|
| 好像foxmail那里把ssl选项去掉后收邮件抓包就可以了吧??? |
Post by spark on 2008, April 23, 5:14 PM
|
| 去掉了就连接不上mail服务器,不会发送密码了。 |
Post by 云舒 on 2008, April 23, 5:26 PM
|
| 恩恩,同意luoluo |
Post by ayarei on 2008, April 23, 5:29 PM
|
下个FOXMAIL5.0替换
再用星号查看
就可以了! |
Post by crab on 2008, April 24, 1:26 AM
|
|