改造你的FOXMAIL

原创 2004年08月07日 14:46:00

 

前言

这不是一篇技术文章,因为事情是在一周前做的,现在我已经忘得差不多了,并且我也在一点也不想打开调试器,看着满屏的汇编代码,时间长了就觉得特别累——因为看不懂 :(

现在只大概讲一下思路和修改过程——跟别人讲自己的收获总是心情很好——让我们先看一幅图:

如果你用惯了FOXMAIL,马上就发现不同的地方,就是选项菜单下多了3个TOP x,这就是我改出来的。

可能你不屑一顾:这有什么难的,用ResHacker一分钟搞定!

你说对了,我就是用ResHacker改的,不过这不是关键,因为ResHacker改的只是资源,这些菜单怎么去响应事件才是我们要面对的难题!

我先来说说为什么要加这几个TOP x。

我自己没装杀毒软件,我用的FOXMAIL4.2也没有过滤垃圾邮件的功能,所以收邮件之前我要先打开远程管理,看信头,人工确认是不是垃圾信(我才不相信机器过滤呢)。FOXMAIL的默认值是1,即只能看邮件头一行,我曾经改为5过,不过这是静态的,就是固定死了,如果能从菜单里选择就“自由”多了,这是我开始之前的想法。

改这个我花了两天多时间,其中菜单花了一天多,改完后还想再加一个功能:突破帐号密码限制。做这件事件花了将近一天。改造后的FOXMAIL如果账号加了锁,如果忘了密码输入我的手机号也能打开,我的手机号是多少?嘿嘿。还是改菜单麻烦,因为这要响应事件。

 

工具

没有源码啊,有源码只用DELPHI就行了:)

调试器少不了的啦,我用:

OllyDgb

静态反汇编,没办法汇编看不懂啊,要汇编+注释才勉强能看懂,所以要用:

DEDE

此外还用到了LordPE,用来改区段属性为可写。用Topo增加区段(LordPE也能加,不过我不会用)。还有16位编辑器UltraEdit32。我后来发现用OD就能直接改,这些工具真是越用越有收获啊~~

 

思路

如果你写过POP3的程序,一定知道查看邮件头用的是TOP XXX,XX命令,第1 个参数是邮件ID,第2个就是行数,我们要改的就是第2个参数。整个命令是一个字符串,FOXMAIL把它发到POP3服务器,服务器就把信件内容发回来。

这个值在程序中是固定的,我们只要在菜单事件里改这个值就可以了。另外菜单点击之后要打上勾。如果程序是DELPHI 7写的,这个事件很好办,改资源就可以了,D7的菜单项设了单选和AutoCheck之后自己会改变打勾项。FOXMAIL是用D5写的,这件事件只能自己来做了。

 

过程

思路好简单呀,关键是怎么做,对不对?

很抱歉,我不打算把代码都贴出来,因为我不想再重复这一过程,凭记忆说一下——

添加菜单事件

DELPHI的事件如果是由编辑器生成的,直接找xxxClick这些字符串就能找到,同样的添加了新菜单,把它指到新事件,这些新事件这样命名就可以了。菜单和事件的关联在DELPHI生成的EXE里是放在一个事件地址表里,不过这个表通常排得满满的,插不进新的事件,所以要把它移到别的地址空间。

怎么移?

这里有一篇文章,专门讲这个,我参考了这篇文章:

http://bbs.pediy.com/showthread.php?s=&threadid=1872&highlight=Delphi

把原来的事件表移到新的位置后更改事件表项数,在原来的数值上加3——也就是新增的TOP 1,TOP5, TOP 10这3个项,在表最后加上3个事件,它们指针指到一个新的代码空间。

(很抱歉这里讲得很笼统)

定位TOP值

处理菜单事件的关联以后接下来要写事件处理的代码,也就是改那个TOP命令的值,TOP1改为1,TOP5 改为5……如何得到TOP值?

比较“正规”的方法是用调试器跟踪得到,简单一点是在OD里搜索字符串“TOP ”。记得TOP后面有个空格,如果没有的话你就惨啦,TOP是DELPHI可视控件的保留字,有得你仔细分辨的了。

找到TOP后往下看几行,很快就能看到字符的“1”,得到这个字符的地址后就可以很方便的用MOV命令改成别的值。

插入代码

如果空间不够那就要增加区段,并且设为可读写,可执行。这方面的知识请看有关PEDIY的文章。
代码大致如此吧:

xxxxxx1x mov byte ptr[xxxx], 31         //字符1,TOP1的事件指向这里
xxxxxxxx mov byte ptr[xxxx + 1], 20     //后面放空格
xxxxxxxx ret                            //先不考虑改变菜单打勾的问题,所以先返回
xxxxxx2x mov byte ptr[xxxx], 35         //字符5,TOP5的事件指向这里
xxxxxxxx mov byte ptr[xxxx + 1], 20    
xxxxxxxx ret                           
xxxxxx3x mov byte ptr[xxxx], 31         //字符1,TOP10的事件指向这里
xxxxxxxx mov byte ptr[xxxx + 1], 30     //字符0,
xxxxxxxx ret                           


给菜单打勾

写好上面的代码,菜单的功能其实已经有了,但了点了菜单之后还是不会打上勾,这样看起来很不舒服呀。
先用ResHacker把这3个菜单项设为同一组并且是单选类型,最后我们的代码只要设某一个为Checked,其它两个就自动把勾去掉。
关键还是代码,我们说代码吧。

如果是在DELPHI里写的话我们把3个事件指向同一个函数,然后一条语句就可以了,如:
procedure Top1Click(Sender: TObject);
begin
  (Sender as TMenuItem).Checked := True;
end;

在汇编里可以用这个思路,但是代码怎么写呢?Sender好象很好得到,EAX还是ECX就是,as TMenuItem这个却是很麻烦,我的做法是用D7写一个简单的PROJECT,后反汇编得到调这个函数的地址,打开后得到这个函数的代码,但是D7和D5的汇编码有点不同,所以要取特征码,拿这个特征码去FOXMAIL里边搜,搜到之后好象还要反朔3次才能拿到真正的入口地址,这样就可以用汇编写出上面的功能来了。


改写EXE

在OD调试,如果代码有错可能导致程序终止,所以记得先把代码COPY下来,一旦需要重启,恢复也是很容易的。
调试后好就把改变的地方写到EXE文件里,我第一次的时候是记下机器码,复制到记事本,然后用UE打开EXE,一个个输入。真痛苦啊,还报错!后来我看到OD直接就有COPY TO EXECUTE FILE的功能。在代码区右键菜单能够找到。


后记

到这里就算写完了,不过感觉根本没有讲清楚。算了,还是看我改过的EXE吧:
http://bbs.pediy.com/upload/files/Foxmail.part1.rar_31574.rar
http://bbs.pediy.com/upload/files/Foxmail.part2.rar_31619.rar
这不是完整的软件包,可以直接运行,不过看到的界面是英文的.
我用的是4.2版,直接替换应该没有问题,如果你用的是高版本最好先做备份.

 

foxmail新建联系人保存时邮件地址自动改变(保存后不是自己填写的邮件地址)的问题

foxmail客户端目前的使用率很高,也比较方便,但是我曾碰到一个奇怪的问题。有个用户反应,她的邮箱使用的foxmail客户端,在保存某一个联系人的地址时,点保存后却不是自己之前输入的邮箱地址,明明写...
  • trampwind
  • trampwind
  • 2016年01月20日 16:55
  • 38498

使用python发送邮件

最近在学习python,刚好需要写个数据库调用存储过程结果的邮件通知的小脚本,特地记录下来以免日后忘记。python能流行主要还是有很多的模块,而且这些模块的调用代码也很简洁,大大简化了工作。不过我是...
  • suzyu12345
  • suzyu12345
  • 2016年01月24日 11:26
  • 1347

不用VPN,通过Foxmail也可收发Gmail邮件

对于经常用VPN翻墙访问Gmail的国内用户群,Foxmail邮件客户端软件是必不可少的。foxmail可以说是一款非常老牌的邮件管理软件,也是一款非常优秀的国产软件,早期1997年公测到如今已经过去...
  • cmy0228
  • cmy0228
  • 2016年05月25日 13:49
  • 6683

Foxmail添加微软最新outlook.com邮箱解决方案

前言废话:        微软最近推出的outlook.com邮箱非常火爆,笔者也抢注了一个,当时大约是一个半月之前,微软公开注册的第二天,那时候我的名字就已经被注册了,可见是多么疯狂。。。。 ...
  • yangyuankp
  • yangyuankp
  • 2012年10月04日 18:35
  • 39213

foxmail登入密码忘记怎么办?

当我们在电脑上重新安装foxmail的时候,需要重新登入,这时候你忘记密码怎么办?我们知道foxmail的登入密码并不是绑定邮箱的登入密码,而是你的授权码。这个密码要是忘了想要找回密码就很麻烦了。我就...
  • f_kld
  • f_kld
  • 2017年07月27日 17:46
  • 2563

Foxmail新建文件夹失败

这几天一直在主抓时间管理,要让Email
  • u013034828
  • u013034828
  • 2014年09月08日 10:00
  • 4990

终于放弃了用了7.5年的FOXMAIL, 全面迁移到 Thunderbird

2004年6月16日 星期三 10:12 正式开始使用 Foxmail 5, 收到的第一封非正式邮件是Foxmail自动形成的邮件, 有兴趣的看后面的截图(我也挺无聊的,这种邮件还留着)。 2004...
  • mazhen2006
  • mazhen2006
  • 2011年12月04日 16:27
  • 4359

mcafee 8.5 允许foxmail 等工具发送邮件(新解)

转自:http://rainbird.blog.51cto.com/211214/115603 笔者遇到的环境mcafee8.5是基于网络来部属的.即本机是安装的macfee的客户端。这个时候本...
  • wyp19870608
  • wyp19870608
  • 2011年09月27日 09:44
  • 311

如何使用foxmail进行新建事务和发起会议

打开foxmail软件出现如下界面,然后点击界面左下角的日历一栏。 再点击界面左上方工具栏中的“周”,出现如下界面: 选择你需要新建事务或发起会议的日期及时间段。 可以点击界面左上角...
  • haha_mingg
  • haha_mingg
  • 2012年08月23日 09:26
  • 5275

Foxmail重复收取邮件解决方案

发生原因: 1.   客户端软件 Foxmail 异常,没有正常发出 quit 命令,造成服务端认为会话没有 结束,邮件没有被正常接收,就会导致邮件重复收取的问题。                  ...
  • ITRanen
  • ITRanen
  • 2015年12月19日 15:32
  • 5389
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:改造你的FOXMAIL
举报原因:
原因补充:

(最多只允许输入30个字)