iPhone蠕虫病毒的处理和防治

其实iPhone上面的那个蠕虫病毒已经是去年的事情了,主要症状就是会作为一个Daemon程序驻守在iphone里面,然后定期去搜索同网络中的其他iPhone手机,利用其越狱后ssh密码后门散布自己。所以会干扰你的wifi网络和偷走你的GPRS流量。之前俺确实中过,并且干掉了,殊不知前两天为了玩Spirit的完美越狱,将机器升级到3.1.3,然后不是是因为越狱之后忘记了修改密码结果在公司网络里面感染了其他同事的iPhone(在twitter上面我说过,开会的时候左右后都是iphone),还是恢复了之前的设置,所以居然又中了(因为发现这两天机子耗电了,另外用一些需要上网的软件,例如TwitBird和开心网的时候会无缘无故退出,这个不知道是3.1.3兼容性问题还是真的因为蠕虫干扰网络害的,于是查了一下机器上面的文件,结果就发现了)。所以还是在自己的blog上面留个备份吧。

先是处理的问题:

删除以下路径的文件(有些不一定有):

(1). /var/mobile/Library/LockBackground.jpg (先检查这个是你自定义的背景还是已经被病毒感染的,如果还是自己的就不用删除了)
(2). /System/Library/LaunchDaemons/com.ikey.bbot.plist
(3). /bin/poc-bbot
(4). /bin/sshpass
(5). /var/log/youcanbeclosertogod.jpg
(6). /var/lock/bbot.lock

记得删除文件之后要重启一下iphone

然后就是预防的办法,就是把缺省的用户密码(alpine)修改掉,封住蠕虫散播的后门。

修改root和mobile用户的密码

另外我还发现,在/var/logs/CrashReporter目录下面还会含有不少*bbot*.plist的文件,估计是poc-bbot程序crash掉的日志记录,可以一并删除。反正到最后用root在根目录开始find一下有没有*bbot*的残余就好了。

iPhone封闭是为了自己稳定,你硬是要越狱干更多的事情,就预着要对付病毒和蠕虫的骚扰,出来行是要还的。

iPhone白苹果的小自救办法

今天去拜山回来,在家里稍微上了一下网,发现Cydia上面说LockInfo又更新了,确实最近那个作者似乎比较勤快,遂更新之。结果发现第一次锁屏之后LockInfo能在LockScreen上面显示,之后的话就完全不见踪影了。估计是作者更新的太心急,这些beta的东西让大家变成了测试员了。

晚上出差,在酒店看到twitter上面作者说要“rolling back 2 official release”,这个就知道出事了。但是之前作者又说了“I know the latest LockInfo beta is messed up. It’s only an issue if you don’t have cydget installed.”,这样看来似乎是要装个LockInfo和Cydget的整合版本。于是上Cydia上面装了,结果在安装完以后Cydia刷新之时,屏幕定住了,很明显,死机了……只好让Home和Power一起按着来重启,结果进入启动时的白苹果画面,提心吊胆了若干分钟之后,iPhone来了一声凄厉的惨叫,但是依然是白苹果,只不过同时多了点白菊花。杯具啊~~想起今年年三十晚上因为软件冲突导致不得不重装3.1.2固件的痛苦。

让iPhone连上Laptop上面,发现有反应,用i-FunBox居然能连上iPhone!这样就好办了,既然机器还能正常连着,证明基本的服务是正常的。但是熟悉的SpringBoard不能出现,机器短暂一段时间会有一声惨叫,证明就是某些随SpringBoard的启动项有问题,导致SpringBoard起不来。基本问题应该就是刚才装的LockInfo Cydget在安装的时候出错导致的。既然如此,也就是说某些第三方启动项导致SpringBoard起不来,方向定好了以后,下一步就进入调研阶段了。

理论上,对于大部分小白来说都希望能够用91猪手来修复白苹果,不过鉴于本人一向有研究解决问题的风格,而且91猪手名声实在不算好,我也不喜欢装这个东西还要给它硬生生的插一个Daemon程序在里面,于是还是自己动手丰衣足食吧。用Google研究了一把之后,终于找到解决的办法:

  1. 首先启动iPhone,在其能够连上电脑,用i-FunBox可以浏览到机器文件之时,浏览并下载这个文件到电脑本地:/System/Library/LaunchDaemons/com.apple.SpringBoard.plist (这个plist文件就是管SpringBoard启动时候的配置文件了,你可以认为它就是我们在Dos里面的那个config.sys或者autoexec.bat文件)
  2. 打开这个plist文件进行编辑,注意iPhone里面的plist文件虽然是一些XML格式的文件,但是存储方式可能是文本型的,也有可能是二进制型的,所以要上网找一个plist文件的编辑器,例如一个叫PropertyList Editor的东西。先把这个本地的plist文件作个备份,然后打开plist文件之后可以找到以下片段:

    <dict>
    <key>DYLD_INSERT_LIBRARIES</key>
    <string>/Library/MobileSubstrate/MobileSubstrate.dylib</string>
    </dict>

    将其改成一下形式

    <dict>
    <key>DYLD_INSERT_LIBRARIES</key>
    <string></string>
    </dict>

    也就是把MobileSubstrate这个给干掉了,这个库主要就是管不少第三方越狱工具的,没了它,很多第三方包都启动不起来的了。保存好文件之后,将本地修改好的文件重新上传的iPhone上面进行覆盖,然后重启iPhone。

  3. 接下来的重启应该会比以前快了很多,然后进入iPhone界面之后,就发现很多越狱后的东西都用不上了,例如WinterBoard的主题等等。接下来,就是进入Cydia里面,将之前弄错的东西干掉,例如我这里就是把之前装的LockInfo的beta版本和LockInfo Cydget给删除掉,另外如果Cydget不能卸载干净的话,可以自行上Cydia的Repository上面下载一个最新的Cydget安装deb文件,自己安装,然后再进入Cydia里面把它卸载掉,这样就可以了。最后将之前备份的com.apple.SpringBoard.plist文件重新上传回iPhone上面覆盖旧文件。也就是说把MobileSubstrate的启动项恢复过来。然后重启一下iPhone。
  4. 重启完了以后,你就发现又可以回答熟悉的SpringBoard界面了。总算不用重新刷固件了。

总结一下,iPhone里面的第三方越狱软件不要随便乱撞,毕竟都是程序员开发的,也没有经过苹果或者其他机构严格审核测试的,所以难免会有各种问题,最直接的影响就是造成死机然后白苹果的杯具。这个时候不能慌,反正最差的境地就是重现刷固件罢了,只是时间上面的开销会比较大。而且大不了iPhone用不了了换另外一台电话用用(我都几乎打算有什么万一的话,明天在去客户的路上去华强北买个山寨机器了)。之后如果iPhone还是能够连上电脑,被iTunes或者i-FunBox之类认到的话,不妨可以试试上面的办法,干掉第三方启动项然后卸载垃圾之后恢复过来看看(其实91猪手的所谓白苹果修复也是强行杀掉所有的MobileSubstrate项,只不过它不知道到底哪个有问题,就帮你一锅端了罢了,不够自己动手那么智能啊!)

以上这个办法可能是特事特办,不一定有普遍性,但是起码对我来说是一个解决问题的思路和解决这次问题的一个办法,故记录下来,以作备份用。唉,不成熟的deb程序也是会经常害死人的啊,亏我还贡献了钱个LockInfo的作者啊。

===========================华丽的分界线===================================

PS:被老婆投诉好久没有更新blog,因为确实比较忙,而且今晚因为这个事情导致iPhone关机而忘记接家里的电话,以此技术贴说明原因:老婆,我不是故意不接电话的啊,确实是我的机器出问题了,我没有在出差时去鬼混啊!

简单删除临时文件的批处理文件

虽然公司用的那台Laptop硬盘空间还够用,不过看到C盘空间越来越少就甚是不爽,所以找回尘封多年的一个简单批处理来删除临时文件。(万恶的Eclipse和基于Eclipse的一堆东西果然弄了很多tmp文件)

清除了一下,结果弄回了1个多G的空间。

放上来备个份,将下面的内容存到一个bat里面就好了。

@echo off

echo 清空IE临时文件目录…
del /f /s /q “%userprofile%\Local Settings\Temporary Internet Files\*.*”
del /f /s /q “%userprofile%\Local Settings\Temp\*.*”

echo 正在清除系统临时文件 *.tmp *._tmp *.log *.chk *.old ,请稍等…
del /f /s /q %systemdrive%\*.tmp
del /f /s /q %systemdrive%\*._mp
del /f /s /q %systemdrive%\*.log
del /f /s /q %systemdrive%\*.gid
del /f /s /q %systemdrive%\*.chk
del /f /s /q %systemdrive%\*.old

echo 清空垃圾箱,备份文件和预缓存脚本…
del /f /s /q %systemdrive%\recycled\*.*
del /f /s /q %windir%\*.bak
del /f /s /q %windir%\prefetch\*.*
rd /s /q %windir%\temp & md %windir%\temp

rem cooke和最近历史还是保留吧…
rem del /f /q %userprofile%\COOKIES s\*.*
rem del /f /q %userprofile%\recent\*.*

echo 清理系统盘无用文件…
%windir%\system32\sfc.exe /purgecache

echo 优化预读信息…
%windir%\system32\defrag.exe %systemdrive% -b

echo 清除系统完成!

echo. & pause

注意:这个脚本是会删除系统盘上面的.log文件,如果你的系统盘上面正好装了Oracle,顺便把datafile也放到系统盘,那么就会干掉日志文件了,小心。

将WordPress升级到2.8

今天天气闷热,加上晚上让老婆开车回家,结果在中大停车场倒车入库的时候蹭了人家车头的车牌终于把小福给刮花了。大老婆争风吃醋,把二老婆的脸给刮花,脸上一道长长的伤痕,场面相当血腥。

郁闷地回家,无事上网,看看WordPress 2.8的中文版也出来,于是下载下来升级。

过程很简单,到WP的管理界面,将数据库备份出来,dump了SQL,然后上DH主机上面把旧版本目录整个tar zip起来,然后将WP 2.8的zip解开,然后将文件上传覆盖到旧版本上面(用SSH上传的漫长过程,当然也可以上zip到服务器上面解包),接下来很简单访问/wp-admin/upgrade.php,开始提示需要升级数据库,确认之后没多久就显示成功,然后就升完了。

新版本当然有新版本的好处,以天才演奏家Chet Baker命名,修正了790个Bug,增加了180个新特性,除此之外添加了一个CodePress 编辑器支持语法高亮,支持语法参考,详情见WordPress 2.8 更新列表

从WebSphere当中恢复密码

WebSphere会在配置文件(一堆的XML)当中存放各种密码(包括数据源、认证别名等等),例如在$WAS_Profile_HOME\config\cells\security.xml文件里面有类似”<authDataEntries xmi:id=”JAASAuthData_1238489272531″ alias=”myNode01/oracleDBA” userId=”oraadmin” password=”{xor}bm1sa2pp”/>”,就是存放认证别名为oracleDBA的用户名和密码。

可以看到在这里密码被重新编码(encode)了,编码的方式是XOR(eXclusive OR异或),很明显这种并不是一种强加密的算法,仅仅是一种编码而已,所以准确来说WebSphere为了避免密码被明文记录,只是很简单地“编码”(encode)而不是“加密”(encrypt)。

万一阁下一个不小心忘记了存放在WebSphere里面的密码,但是又想恢复过来的话,WebSphere这种只是编码而不是加密的存放密码形式,就帮助了你了。当然如果你想干坏事的话,WebSphere也算是给自己留下了一个“后门”了 -_-b。嘿嘿嘿,不要以为IBM那帮老爷子就是这么懒,如果阁下真的是要对存放在WebSphere配置文件里面的密码要加密的话(对于广大客户肯定是有这个诉求的),其实IBM也提供了一种自定义加密算法的插件形式去解决这个问题的,详情可以参考这个链接,在这里就不对这个问题进行展开讨论了。

好了,现在就对各个版本的WAS的密码编码和反编码进行讨论:

WAS 5.X的编码:

> cd $WAS_INSTALL_DIR/lib
> ../java/bin/java -cp securityimpl.jar:iwsorb.jar com.ibm.ws.security.util.PasswordEncoder 123456

WAS 5.X的反编码:

> cd $WAS_INSTALL_DIR/lib
> ../java/bin/java -cp securityimpl.jar:iwsorb.jar com.ibm.ws.security.util.PasswordDecoder {xor}bm1sa2pp

WAS 6.0的编码:

> cd $WAS_INSTALL_DIR/lib
> ../java/bin/java -cp securityimpl.jar:iwsorb.jar::ras.jar:wsexception.jar:bootstrap.jar:emf.jar:ffdc.jar com.ibm.ws.security.util.PasswordEncoder 123456

WAS 6.0的反编码:

> cd $WAS_INSTALL_DIR/lib
> ../java/bin/java -cp securityimpl.jar:iwsorb.jar::ras.jar:wsexception.jar:bootstrap.jar:emf.jar:ffdc.jar com.ibm.ws.security.util.PasswordDecoder {xor}bm1sa2pp

WAS 6.1的编码:

> cd $WAS_INSTALL_DIR/bin\ProfileManagement\plugins\com.ibm.websphere.v61_6.1.200
> java -cp ws_runtime.jar com.ibm.ws.security.util.PasswordEncoder 123456

WAS 6.1的反编码:

> cd $WAS_INSTALL_DIR/bin\ProfileManagement\plugins\com.ibm.websphere.v61_6.1.200
> java -cp ws_runtime.jar com.ibm.ws.security.util.PasswordDecoder  {xor}bm1sa2pp

以上内容参考转载自robertmaldon

当然,如果你觉得很麻烦的话,其实也有一个网站直接帮你解码:WebSphere Password Decoder