Category Archives: Play IT

Nvidia GTX 560黑屏、闪屏,二了三天,解决了。

从公司同事处蹭得一块GTX 560,正好把跑了3年的GTS 250给换了。换完后发现机箱突然安静了,敢情这几年的轰轰声来自一块破显卡,一直错怪了那块绿盘。

装上后就发现经常黑屏、闪屏,表现就是一段时间不动键鼠,动一下后马上黑屏,运气不好还能给我来个死机。如果幸运没死机的话,错误就是Display Driver NVIDIA Windows Kernel Mode Driver, Version 320.57 stopped respondingand has successfully recovered,搞了好几天,愁煞老衲,解决过程也是上房揭瓦、钻地打洞,各种方法用尽。最后……用无招胜有招的方法搞定了。不过,有类似问题的人,倒是可以参考下过程,因为不见得是我最终碰到的问题导致。

首先果断怀疑驱动了,围绕那个错误关键字,咣咣一阵放狗,参考tomshardware上的文章,总的来说就是

  • ccleaner清空下注册表和垃圾文件,然后进入安全模式
  • 安全模式下,卸载驱动,删除所有的Nvidia相关的文件夹(windows目录和program files目录下找找)
  • 安装一个微软官方补丁,微软承认了自己有这个缺陷
  • 重新安装驱动。记得在NV的控制面板里,Physx、sound什么的都显性的设置为显卡。不要用系统默认
  • 再不行就禁止掉3D什么的。

一阵阵的重启,无果。然后看了一堆国外的论坛,发现退回到310.90版本的可以。又试了一圈,依然。反正你们试试吧,说不定到这里就问题解决了。

第一天,扑街。

—————–

痛定思痛,换个方向,重新狗,关键词换成idle这种,然后不知怎么地查到有个MSI的神器,叫做AfterBurner,有多神呢,可以设定电压、核心频率、显存频率、风扇速度,还可以像资源管理那样去检测各个数据,画曲线图。比如GPU温度、使用率、风扇速度、CPU使用率、电压什么的。哎哟我去,真牛逼。

Afterburner

监控着呗,然后就发现端倪了,卧槽GPU 99%啊,掐指一算,60秒妥妥的,时间一到就特么99% GPU。这是要多费电!

Afterburner_99

继续狗,关键字变成GPU 99%,好找多了,顺藤摸瓜,找到一个类似的问题在tomshardware上,歌词大意是去找一个东西,这个东西潜伏在你的电脑里被黑客用来挖比特币的。当你的键鼠闲置的时候,这个木马程序就调用100% GPU去挖矿。好吧我信了。还真有,来来来,曝光下,这个目录就是,用MalwareBytes(免费)可以扫出来:

C:\Users\Yao\AppData\Local\Temp\iswizard

iswizard

用这玩意杀了几下,发现杀不掉,60秒后还是熟悉的配方,熟悉的地址,还是熟悉的进程。找到了手动的方法:

Possibly corrupt registry keys:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings “CertificateRevocation” = 0
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System “DisableTaskMgr” = 1
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\system “DisableTaskMgr” = 1
Delete files:
Open then following folders or search for iswizard in My Computer and delete if found files associated with this bug.
C:\Users\USER\AppData\Local\Temp\iswizard
%AllUsersProfile%\Application Data\
iswizard wuaudit.exe
iswizard.7z
is wizard.exe

不管有用没用试试吧。反正各种折腾,各种重启,我是又,

扑街了。

————–

Day 3,不能再忍!

自己写个服务吧,反正这个木马的原因这几天算是摸清楚了,虽然依旧不知道什么时候感染上的这个恶习:

  • 木马一直挂着,在等你的键鼠idle
  • 一旦键鼠idle到60秒,在上面提到的那个地方新建iswizard目录,拷入iswizard.7z
  • 解压缩,执行里面的一些服务或者应用程序。最可耻的应该是替换了dwm.exe进程
  • GPU 99%

那服务应该好想,C#即可,写一个service,挂在后台监控这个目录,一旦有文件新建,则触发事件直接被服务删掉这个iswizard目录,让你丫整不了。windows service不知道怎么debug,写完注册进服务居然一次成功了。但是删除却不行,打log调试了好几个小时,摸明白了:这个木马动作比系统文件系统的监视+反馈的机制快,我刚开始删,那里的dll就已经注册在案了,如果直接kill掉dwm的进程再删,倒是可以的,但是我总不能60s就看着屏幕自己闪一下帮我清理木马吧。一点儿都不友好。

冥想。

为什么不进安全模式再跑一遍MalwareBytes呢?然后,就没有然后了,药到病除。

我去你大爷。

—————-

问题是解决了,不过自己写服务去遏制木马这个事情,我觉得方向是对的,但是很多细节还要兼顾到。源码放出来好了,就放一页。

using System;
using System.Diagnostics;
using System.IO;
using System.ServiceProcess;
using System.Threading;

namespace IswizardRemover
{
    public partial class IswizardRemoverService : ServiceBase
    {
        private string LogFile = @"C:\IswizardRemover.log";
        private string IswizardDirectory = string.Empty;

        public enum LogType
        {
            Null = 0,
            Info = 1,
            Warning = 2,
            Error = 3,
            Bingo = 4,
            Debug = 5
        }

        public IswizardRemoverService()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {
            # region Deal with the log

            FileInfo log = null;

            if (File.Exists(LogFile))
            {
                log = new FileInfo(LogFile);
                if (log.Length > 1024 * 1024)
                {
                    log.Delete();
                }
            }
            else
            {
                AppendLog(
                    LogType.Info,
                    string.Format(
                        "Log file created at {0} {1}",
                        DateTime.Now.ToShortDateString(),
                        DateTime.Now.ToShortTimeString()));

                log = new FileInfo(LogFile);
            }

            AppendLog(
                LogType.Info,
                string.Format(
                        "Service starting at {0} {1}",
                        DateTime.Now.ToShortDateString(),
                        DateTime.Now.ToShortTimeString()));

            #endregion

            #region Deal with iswizard

            IswizardDirectory = @"C:\Users\Yao\AppData\Local\Temp\iswizard";
            if (!new DirectoryInfo(IswizardDirectory).Exists)
            {
                Directory.CreateDirectory(IswizardDirectory);
            }

            RemoveIswizard();

            FileSystemWatcher watcher = new FileSystemWatcher();
            AppendLog(LogType.Debug, "Current IswizardDirectory" + IswizardDirectory);
            watcher.Path = IswizardDirectory;
            watcher.Filter = "*.7z";
            watcher.NotifyFilter = NotifyFilters.FileName;
            watcher.Created += new FileSystemEventHandler(IswizardTriggered);
            watcher.EnableRaisingEvents = true;

            #endregion
        }

        protected override void OnStop()
        {
            AppendLog(
                LogType.Info,
                string.Format(
                        "Service stopped at {0} {1}",
                        DateTime.Now.ToShortDateString(),
                        DateTime.Now.ToShortTimeString()));
        }

        private void AppendLog(LogType logType, string singleLog)
        {
            using (StreamWriter sw = File.AppendText(this.LogFile))
            {
                sw.WriteLine(string.Format(
                    "[{0}] {1}", logType.ToString(), singleLog));
            }
        }

        private void IswizardTriggered(object sender, FileSystemEventArgs e)
        {
            AppendLog(LogType.Info, "Iswizard detected, cleaning.");
            RemoveIswizard();
        }

        private void RemoveIswizard()
        {
            try
            {
                Thread.Sleep(500);
                DirectoryInfo iswizard = new DirectoryInfo(IswizardDirectory);
                foreach (FileInfo file in iswizard.GetFiles())
                {
                    Process [] proc = Process.GetProcessesByName("dwm");
	                proc[0].Kill();
                    file.Delete();
                }

                AppendLog(
                    LogType.Bingo,
                    string.Format(
                        "{0} {1} - Removed iswizard",
                        DateTime.Now.ToShortDateString(),
                        DateTime.Now.ToShortTimeString()));
            }
            catch (IOException ex)
            {
                AppendLog(LogType.Error, ex.Message);
            }
        }
    }
}

写一个 注册服务的bat,和编译出来的服务exe、dll放一起,使用系统管理员运行:

%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe %~dp0\IswizardRemover.exe 
sc config IswizardRemover start= auto
net start IswizardRemover

卸载服务的bat:

%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe /u %~dp0\IswizardRemover.exe

最后,为啥老的显卡没这问题呢?档次太低?

树莓派无线网络+监控摄像头

差不多好几个月前,弄了个树莓派(Raspberry Pi),折腾了几天,弄了两个SD卡,刷了两个系统,一个是Raspibian,一个是XMBC。弄了一堆服务,然后,就没有然后了,被我闲置了。

最近这不弄了只高贵优雅纯种高帅富小折耳回来,黏人腻味的很,关小黑屋就不乐意了。各种哀叫。于是想弄整个监控看看他平时都在干嘛,雪藏的树莓派终于可以派上用场。

但是突然发现以前配置的很多东西,很多命令我都给忘了,结果又得搜一遍。还是得弄个地方记记东西。

先配置网络,下述命令可以看树莓派上所有的usb设备列表,确认无线网卡可以让系统识别。

sudo lsusb

效果如下,看到Device 004就是无线网卡了。

pi@pi ~ $ lsusb
Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.
Bus 001 Device 004: ID 0cf3:7015 Atheros Communications, Inc. TP-Link TL-WN821N v3 802.11n [Atheros AR7010+AR9287]

确认了无线网卡后,可以用下面的命令来搜索看看能否看到所需的无线信号

sudo iwlist wlan0 scan

确认无线信号OK后,修改网络配置文件

sudo vi /etc/network/interfaces

在interfaces文件中,修改或者增加下述几行,具体信息具体填写:

auto wlan0
allow-hotplug wlan0
iface wlan0 inet static
address 192.168.1.111
netmask 255.255.255.0
gateway 192.168.1.2
wpa-ssid "GFW"
wpa-psk "Can't Tell Ya"

最后,重启网络使其生效。

sudo /etc/init.d/networking restart

搞定网络之后,就是弄摄像头啦。

摄像头的购买地址点击这里。价格RMB 140左右,不算贵,可以拍到1080P像素的照片或者视频。样子如下

插好摄像头,用的是CSI CONNECTOR接口,在HDMI接口的旁边。

RPi-B-CN-set-up

准备试用。我刷的Raspibian系统中默认没有摄像头的命令,update下就有了。

sudo apt-get update
sudo apt-get upgrade

记得在Raspibian中的系统配置UI里,enable camera:

sudo raspi-config

然后就可以测试下摄像头了。一切木有问题后即可准备通过网络远程监控,其他参数直接看命令自带的帮助即可。

# 这个是测试静态图片
raspistill -o image.jpg
# 这个是测试10秒短片
raspivid -o video.h264

简单说一下原理,你的windows电脑作为接收器,通过nc和mplayer软件持续监听接收缓存来自网络上的视频信号(流);而树莓派作为发送者,只要持续的将视频信号发送到某个ip上即可。这个方案也有不好的地方,就是必须在树莓派上通过命令行来指定接受者。

首先windows上下载这两个东西,建议把两个软件的内容都解压缩到一个文件夹下面。

前往下载页面: mplayer-svn-36251.7z

前往下载页面: nc111nt.zip

然后在这个文件夹里整一个.bat文件,随便叫啥好了,内容如下,啥都不用改:

nc.exe -L -p 5001 | mplayer.exe -fps 31 -cache 2048 -

双击执行这个文件,然后在树莓派上执行:

raspivid -t 999999 -o - | nc [你的IP] 5001

搞定!就是这么简单。这样你就能在windows上局域网里看到监控画面了。对于linux或者osx上的监视方法,参考

最后附上无码工作照一张。

RaspberryPiCamera_working