Tuesday 18 October 2016

recurcat - 循环高亮

Bash  代码:
#recursvie which access subdir/*, use {,**/}*, rf: http://stackoverflow.com/questions/1690809/what-expands-to-all-files-in-current-directory-recursively
#shift, rf: http://askubuntu.com/questions/521192/how-to-pass-wildcard-to-path-parameter-of-find-command-via-a-variable-in-scr
function recurcat () { 
    [ -z "$2" ] && echo "Missing 1st arg [Usage: recurcat extension (don't use single quotes bcoz nid expand)path] e.g. recurcat java **/*.java " && return 1;
    shopt -q globstar && : || {                                                                                                                                                                                    
        echo "globstar not enabled. Simply run again it will works or put it in ~/.bashrc for permanent change." && shopt -s globstar && return 1
    };
    lang="$1";
    shift;
    find "$@" -type f -exec bash -c 'echo; echo -e "\e[41m Filename: \e[40m\e[93m {}"; tput sgr0; echo' \; -exec bash -c "highlight -O xterm256 -S "$lang" {}" \;
}


使用方法

C 例子:


Python 例子:


Java 例子:


注:

[0] 安装方式:把那个 bash 代码放在 ~/.bashrc 文件, source ~/.bashrc 后即可享用,比煮杯面还快哟~

[1]  recurcat python *.py, python 是程序语言名字, py 是文件后缀。代码没有处理自动检测, 毕竟有些文件如 ~/.bashrc 也不是 .sh 后缀, 所以我觉得不重要。不局限于代码,如果是普通文件也是可以用的(高亮数字好看很多),只要程序语言放 sh 即可。

[2] recurcat python *.py 只搜索当下目录, recurcat python **/*.py 则搜索循环目录。

[3] 确保你有安装 highlight utility 先。

[4] 使用这个命令(或任何命令)的时候,不需要重新输入,只要你 bash history size 够大(我的是 unlimited),只需输入 recu 再按 Page Up 很轻易就可以重新使用命令。

[5] 当然,也要调整 Terminal scrollback,我本人是调 100000 行。

[6] 用 Shift+Page Up/Down 在 terminal 快速上下浏览。

[7] 如果你要把文件名的红色改成其它颜色,如青色,就把最后一行那个 41m 换成 42m。

[8] 不局限于当前目录和全部目录, 你完全可以发挥你的 regex 想象力,比如说用 recurcat c ./*m*.c 只找当前目录含有字眼的文件, 如 ./myls.c , 或 recurcat c **/*m*.c 搜索全部目录含有 m 字眼的文件。这也是为什么我不打算把这个代码改成接受 parameter 的原因,regex 应该是用户自己输入的。

[9] 如果想改代码的输出颜色, 用 `touch /tmp/dummy.c; strace -ff -e open highlight -O xterm256 -S c /tmp/dummy.c` 命令即可找出相关 config 文件。

[10] 如果代码能改进,欢迎留言哟~


zombie symlink

无端发现很好玩的 symlink 举止。



这个有点关系,`sudo sysctl -w fs.protected_symlinks=0` 就可以避免这个问题,但我仍然认为很好玩 hor。

Sunday 16 October 2016

root 文件小检验

无端醒觉 ln -s /root/.bash_aliases /home/xiaobai/.bash_aliases 方便备份的安全隐患,这种举动基本是破坏掉 sudo 的安全政策。所以就写了一个 bash function 为 Kali 和 Fedora 做个小检验,看下以前的我犯了多少错误。同时也发现我常用的 exsudo (exsudo is aliased to `sudo ') 其实是蛮危险的,减少危险性的方法是把预载的 ~/.bashrc, ~/.bash_aliases 等文件全部 symlink 去  root,只让 root 改预载的 alias/function/PATH。

代码(我刚吃饱更新了一下,su log 现在包括 fork 之前):

function nonroot_checker  () ( 
    w=$(whoami);
    tmpf="/tmp/su.log_by_$w.sh";
    echo -e "\e[40m\e[97m\n[Basic non-root file checker]\nUsage: Press Ctrl+D to quit right after loggedin to su session\n";
    script -qc 'su -c "strace -ff -e open su"' "$tmpf" && echo -e "\e[40m\e[93m\n\n[Checking su preload PATH]:\n\e[97m" && \grep -a --color=never -E -e '^\[pid[ ]+[0-9]+\] open\("' -e '^open\("' "$tmpf" | awk -F '"' '{print $2}' | while read -r f; do
        \ls -larthiFL --context --color=always "$f" 2> /dev/null | \grep -av --color=never -E " root[ ]+root |^total ";
    done;
    tput sgr0;
    echo -e "\n";
    target_PATH="/root:$PATH:$(sudo printenv PATH)";
    uniq_target_PATH=$(echo "$target_PATH" | awk -v RS=':' -v ORS=":" '!a[$1]++');
    export IFS=":";
    for p in $uniq_target_PATH;
    do
        tput sgr0;
        echo -e "\e[40m\e[93m[Checking PATH $p ]:\e[97m";
        sudo ls -RlarthiFL --context --color=always "$p" 2> /dev/null | \grep -av --color=never -E " root[ ]+root |^total |^$p:";
    done;
    tput sgr0;
    export GREP_COLORS='mt=01;36';
    echo -e "\n[User id reference]:";
    getent passwd | cut -d: -f1,3 | sort -t: -k2n | sed ':a;N;$!ba;s/\n/ /g' | \grep -a --color -E '[0-9]+ |[0-9]+$';
    echo -e "\n[Group id reference]:";
    getent group | cut -d: -f1,3 | sort -t: -k2n | sed ':a;N;$!ba;s/\n/ /g' | \grep -a --color -E '[0-9]+ |[0-9]+$';
    echo;
    tput sgr0 )

<<"pitfall"
[1] ls -L is the key to see the symlink target is normal user which will normally hide the fact if not use -L
[2] \grep, \ls(if no sudo infront) to avoid unintent alias, lazy do for echo though. `sudo ls` no nid \
[3] ls+grep http://stackoverflow.com/questions/867877/preserve-ls-colouring-after-greping
[4] use subshell () to reduce use of export IFS (got problem though), GREP_COLORS, ... etc
[5] keep in mind paste latest code to vim for ~/.bash_aliases might failed and revert back to orig func (my personal problem)
[6] use sudo ls to get more files when ls, except for su preload PATH then no nid
[7] cp symlink will resolve to target, so no nid worry put ~/.bash_aliases at root dir but forgot cp backup root punya version
[8] Ensure saved inside /tmp file for su's log instead of default is curr directory to avoid  this file created by root user and not able to access by normal user when run the code again //you might say can use sudo, i prefer avoid mass use of sudo
[9]  don't be fool,  0 below is not gid, but it's --context outcome
root@dnxb:/tmp# sudo ls -RlarthiFL --context --color=always "/root/.config/pulse" 2> /dev/null
/root/.config/pulse:
total 8.0K
     ? l?????????  ? ?    ?    0    ?            ? d7329d76e555dca6868c6000fed5c033-runtime
134628 drwxr-xr-x 14 root root ? 4.0K Oct 14 02:16 ../

[9.1]
but still, don't know why it will show this broken link, while other will simply throws to 2>/dev/null [onhold:0]

[10] grep, [0-9]\+ when no -E, [0-9]+ when -E

[11] If failed to strip newline for bottom uid/gid list, might nid do `IFS=' '` bcoz already corrupted, happen even when running `typea echo`(my advanced version of `type -a`), but still not stable even i already put infront, better use `sed ':a;N;$!ba;s/\n/ /g'`

[12] always use "" for echo easier to extends if want to add $var

pitfall


例子:

用法很简单,先把上述代码 paste 在你的 ~/.bashrc (Fedora) 或 ~/.bash_aliases (Kali 普通用户, 想讲,install kali 不表示你需要用 root 裸奔)。然后在 source 那个那个 file 或开新的 terminal tab 加载 `nonroot_checker` function, 然后在 terminal 输入 nonroot_checker:



然后要输入 su 密码,那个 strace 大量的 log 停顿后(我没加入 `clear` 那个 log 是因为避免用户看不见输入密码失败的信息 ),用 Ctrl+D 或  exit 出去 su session (有更好的方法拿 su log 欢迎指正)。然后要输入 sudo (如果之前已经输入过 sudo,短时间内就不需要)。然后黄色下面开始的就是检测结果 (strace log 下面,如果太多 PATH, 黄色就可能 scroll 在很上面, 你可能要提升 terminal Scrollback,本人是设置 100000 行 ):

如上图,我检测到 /root/.vimrc 是属于我的 xiaobai 普通用户和用户组,是我不懂事犯下的失误,ls -l 可以更清楚,别只看 /root/.vimrc 显示是 root 的, symlink target 才是重点。

我也在 Fedora 检测了一下。发现 sopcast 的那个 sp-sc-auth 文件,好像有点亮眼...


本人 linux 小白用用下会开始质疑 sudo 重要性,可是 alias/function 是用户 level 的文件负责的,sudo 可以避免直接运行那些 alias/function。不过不该用 sudo 的时候就别用,不然你分不清输入密码给 root 是运行正常程序还是恶意程序 (酱想,当你运行 hello_world.c 的 a.out 却要求你输入密码时,你就知道  something wrong 了,可是如果你用 sudo ./a.out, sudo 要输入密码不是很正常吗 ? 你就不懂 something wrong 了 ) 。

[更新]
[1] 为什么不用 find,其实我也是过后才想到 "是 hor",但是 find 如果没有我想要的 output 过后也是要 exec ls,倒不如省下一个步骤。这个 parsing 不严谨,因为文件名如果叫 "root root" 也算上去了, 我也没有 expect 这是严谨的检验,做到很完美干啥,达到目的才是重点。








Monday 18 July 2016

android - 手机振动这件小事


stay tuned: 我发现还有两点要补充,近期本文会更新。


用 android 的人应该都看过这个画面 (链接例子,在 android 开才有效果):


按 OK 后就会开始不停振动:


如果按 back 出去前一页... 哎哟,按不出去叻,而且振到更厉害,除非直接关掉整个 tab, 但是之前的 history 就要重新找过, 如果是 incognito tab 就没有 history 可找:



有些小白会选择关机甚至 format。所以这篇文是想澄清这种误导。

真相是,这种网站只要略懂 html (navigator.vibrate) 皮毛的人都做得出的,拿这是我的 sample, http://limkokhole.github.com :


赶时间编写的(都是靠 stackoverflow),做得不是很好,opera 浏览器好像不 work, 按非常快有机会逃脱回上一页,timer 字也小,哈哈...

源代码:

<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script type='text/javascript' src="//wurfl.io/wurfl.js"></script>
<script type="text/javascript">

    jQuery(document).ready(function($) {

      if (window.history && window.history.pushState) {

        $(window).on('popstate', function() {
          var hashLocation = location.hash;
          var hashSplit = hashLocation.split("#!/");
          var hashName = hashSplit[1];

          if (hashName !== '') {
            var hash = window.location.hash;
            if (hash === '') {
              //alert('Back button was pressed.');
              location.reload(false);
            }
          }
        });

        window.history.pushState('forward', null, null);
      }

    });


    function lala() {
        document.body.innerHTML = "<button width=\x22150%\x22 type=\x22submit\x22 onclick=\x22javascript:location.href='https://play.google.com/store/apps/details?id=com.nianticlabs.pokemongo&hl=en'\x22><img src=\x22http://s35.podbean.com/pb/89d7273bc6ae276b8927b6cad83ab32e/578cfa0c/data2/blogs60/771188/uploads/googlePlay-logo.png\x22 style=\x22height:200px;width:200px\x22 alt=\x22Submit\x22></button><div><span id=\x22time\x22></span></div>";

        isVibrate = navigator.vibrate || navigator.webkitVibrate || navigator.mozVibrate || navigator.msVibrate;
        if (isVibrate) {
            navigator.vibrate([1000, 500, 1000, 500, 1000, 500, 1000, 500, 1000]);
        }

        function startTimer(duration, display) {
            var start = Date.now(),
                diff,
                minutes,
                seconds;
            function timer() {
                // get the number of seconds that have elapsed since 
                // startTimer() was called
                diff = duration - (((Date.now() - start) / 1000) | 0);

                // does the same job as parseInt truncates the float
                minutes = (diff / 60) | 0;
                seconds = (diff % 60) | 0;

                minutes = minutes < 10 ? "0" + minutes : minutes;
                seconds = seconds < 10 ? "0" + seconds : seconds;

                display.textContent = "剩余: " + minutes + ":" + seconds + " 分钟!"; 

                if (diff <= 0) {
                    // add one second so that the count down starts at the full duration
                    // example 05:00 not 04:59
                    start = Date.now() + 1000;
                }
            };
            // we don''t want to wait a full second before the timer starts
            timer();
            setInterval(timer, 1000);
        }

        var threeMinutes = 60 * 3,
        display = document.querySelector('#time');
        startTimer(threeMinutes, display);

        var deviceModel = WURFL.complete_device_name;

        var onl = "警告!\n\n你的 " + deviceModel + " 感染了病毒并且电池已经损坏!\n\n请关闭此对话框, 3 分钟内下载 repair app 修复 。\n\n**如不修复,请自行承担风险**" 
        setTimeout(function(){ 
            alert(onl);
            }, 1000);
    }
    window.onload = lala;
</script>
</head>
<body>
    <div><span id="time"></span></div>
</body>
</html>


那么,这些网站的目的是什么 ? 我观察了一下,大概主要是:

1. 让你下载没有验证的 apk 病毒。不是从 Google play 下载。或者假网站弄到很像 Google Play 也有可能的哦。
2. 让你 subscribe 很难 unsubscribe 的 SMS 付费服务。
3. 让你下载有合作关系的 Google play app 然后赚广告收入。

其实这种 html api 广泛的滥用,很多人投诉 liao de,比如说:
1. google chromium project,https://bugs.chromium.org/p/chromium/issues/list?q=navigator.vibrate, 但是不懂几时会完全 fix:  。
2. 至于 firefox, 已经是 fixed liao 的: https://bugzilla.mozilla.org/show_bug.cgi?id=124343 。如果现在测试,还是没有问 permission 的,


解决振动方法:
1. 用 firefox 的话,首先在地址栏输入 about:config ,在 search 那里输入 vibrat 字眼就能找到 dom.vibrator.enabled。默认是 true 的。按它会有 Toggle 按扭出现,再按就能改成 false。如果没有  dom.vibrator.enabled 的话,请确保你 update 你的 firefox app。


2. 使用 opera mini 。去 Google play 下载要看清楚哦,是 opera mini,不是 opera 哦, opera 那个还是会振动的哦。

3. 如果你手机已经 root, 取决于手机牌子,可能可以轻易地 disable vibrate, 比如 chmod 000 /sys/class/timed_output/vibrator/enable, 我手机没 root 无法去试验。

4. 珍爱生命,暂时远离 chrome。

5. fb 也是中。别忘了改 fb App Settings 设定那里改 Links open externally,然后把默认浏览器改成 firefox 或 opera mini:


去 Settings -> Apps -> Advanced -> Default app settings  -> Browser -> 点选 Opera mini 或 Firefox (The four classic 纯粹乱入):



这样一来,以后那些网站最多只能 pop up 吓唬人的信息, 起码不会振动振到你手麻哟~

Wednesday 6 July 2016

登入不到 Windows 这件小事

最近收到一个任务, 某某小白突然登入不到 Ultrabook 的 Windows, 之前能,就是突然间不能。

Keyboard encoding 问题 ? check 了不关事。

当下连 laptop model 是什么 (看贴纸只懂是 acer ultrabook), Windows 几也不懂。

我久没碰 Windows, 也不懂为什么没有 Switch User 这类的 option。看到网上有贴讲 plug in 滑鼠就会出现 Switch User 酱神奇,那个骗小孩的。

有用过 linux dual boot 的同鞋, 应该都懂 nautilus 可以直接 mount Windows files。可能不需要密码,但是就算要密码也是 linux sudo 的密码, 不需要懂 Windows 密码。

所以就往这个方向走,burn 个 live usb,然后 access Windows 备份重要的资料先,其它以后再说。

我最近刚好计划安装 Fedora 24, 所以就决定用 F24。计划在现有的 Dell Fedora 21 准备这个 live usb。

先去这里下载 F24 workstation, 拿到两个 files:

, 跟着它的步骤 verify :


先用 unetbootin burn 那个 F24 live usb。

然后在 login screen 那里一边按住 Shift键, 一边碰触 Restart。

然后选 Troubleshoot :


再选 Advanced options:


UEFI Firmware Settings:


先确保插入 live usb, 然后点击 Restart 按钮:


确保 USB 的 priority 在 Windows 上面:



Exit 那里选 Exit Saving Changes:


*【以后】 有时电脑 short short 地, live usb 不会自动 load。要重复上面的 Shift+RestartExit Saving Changes 步骤 。

看似很顺利,可是来到这边发现一个问题,grub menu 好像不能 touch screen 的 hor:


 也理所当然没 virtual keyboard, 然后才想到.... walau, 这台 Ultrabook 只有一个 port 要怎样同时插 live usb 还有  keyboard ?

如果不管直接给它自动 60 秒 timeout 跑  Test this media ? 一堆 error。

这个不该有的 error:


还有这个不该有的 Warning: Could not boot:



至于这个一直 hang 的 message,  其实是要等很久,如果是没问题的 live usb 也是有这个 message,不过只需等一下子。按 'e' 可以 edit 并删除 quite 看更多 log 就不会感觉 hang。


试过在 Windows/Linux 用 unetbootin, 并且用不同 usb, 还是一样。囧。



所以就改用 dd (先用 mountblkid commands 检查是否 /dev/sdb, 可能是 sdc 的哦,要小心, 也可能没在 mount 着, 这时候要用 ls /dev/sdb*sudo fdisk -l 检查):


我试过 `dd` 到一半 ctrl+c 关掉他。结果那个 pendrive 变成 read-only:


找出正确的 sdX, 然后用这个 command:

$ sudo dosfsck -a /dev/sdb1

replug 再 remount 就好回了。


结果 dd 出来的还是不能。 就想拔掉 usb, 按 'e'



, 然后:
[1] 删除 'quite' 没意思因为按 'Escape' 或从 grub command prompt 出去就会 reset。
[2] Ctrl+x start ? 我按 Ctrl+x 键的时候,live usb 都没 port 插进去。我又没有 usb hub splitter 之类的东西可以试。
[3] Ctrl+c command prompt ? 我发现 exit 出去时会有没看过的 Boot 选项, 就试下 输入完这条  command 后,马上 unplug 键盘,plug live usb 进去:


,酱 exit 出去就会看到, 然并卵,没奇迹发生, 跟重新选过 boot 选项没区别:


[3.1] set root=(hd0) 那些 ? 好像不关事的, liveusb 应该不包括在 hdX。(更新: 现在想起原因应该是键盘进 'e'再插 usb detect 不到。)
*【注】 Ultrabook  external keyboard 有问题, 我要用自己的 external keyboard 才在 grub menu 有反应。

我怕 test 多 usb  导致之后的 tests 也有问题, 所以我用 Dell 的 Fedora test 确认一下可以跑米有。 才发现 grub menu 的 Test Media 也是 failed, 可是直接跑第一个没问题 (Dell 的 Fedora 没不够 port 选 grub menu item 这个烦恼)。

*【当时】 没有截屏 Test Media failed,现在这张截屏是我重新 `dd` 补上去的,虽然等很久 (0.1% 要一秒,粗略 1000 秒), 而且同样有红色 error。但是它最终却成功 boot 到。区别只是不同 usb OR 忘记 umount 就 `dd` OR 好像没有等 1000 秒酱久的,实际原因就无从考究了。



所以我就有一个 idea,如果能丢掉 grub test 的那个 menu item,timeout 跑第一个 ?

我稍微检查了一下那个live usb,很明显要先试下 edit grub.cfg。可是 grub.cfg 是 read-only 的。

找到一个 thread, 长篇大论只有最后一个 comment 看到我要的答案:


意思是说 `dd` 是不能 writeable 的。去看它的官方文档,有一个内建的 Fedora Media Writer 可以拿来 burn。可是只有 cp 和 dd 两种好像不对叻。



所以就听刚才那个 comment 的话, 用也是内建的 livecd-iso-to-disk。暂时不得空去理 data persistent ( dnf 下载可以 persistent ?)。 做这个先用上面提过的 `mount, blkid, ls /dev/sdb* , sudo fdisk -l ` make sure 已经 umount 先。:



burned 好后,在 Ultrabook/Dell 检查一轮可以好像之前那样跑先。然后才开始 mkdir,mount,vi。

跟先前的 idea 不同,不需要丢 menu item,直接把 default index "1" 改成 "0",把 60 秒 timeout 改成 21 (21 是我生日)。顺便把 quite 删除掉。截屏的蓝色 //comment 是截屏说明吧了,别真的照抄。要 writeable 就要用 -o rw,umask=0000

如果你 google 你会发现那些人 讲什么 update-grub, 别照跟,我们不是要 update 现在这台 Dell 电脑, 我们纯粹是要 update live usb 罢了。

在 Ultrabook 试那个 live usb, 等 21 秒 timeout,完美进入 Fedora 24 :p


F24 支持 touch screen 的呵~ 按 "Try Fedora"->"Close" 或 'x' 关掉窗口。

打开 nautilus -> "Other Locations" 可以直接 mount Windows 的文件了。Acer 那个 icon 就是了。


预防万一,先想办法 backup。先找 Utilities -> Terminal:


然后帮 root 设置密码, su 后 passwd 即可(少过 8 个字母或太容易的密码不 accept, 揸到)。还有别忘了右上角调低很亮的灯光, 还有 connect wifi:

然后在 su 之下,就可以用 systemctl start sshd 开启 ssh server。ifconfig 看 ip。然后在 Dell 电脑用上面那个密码 `ssh root@ip` 连接 。

如果 ssh connect 时遇到类似 error 信息,那边已经讲是 33 line key 不对了,所以删除那行就搞掂了:


Fedora 内建 screen keyboard 有问题,ssh 删除打错密码时很容易弄到它 short 掉, space 键不能用, 要 restart 过。奇怪的是我不需要去 Settings -> All SettingsUniversal Access 那里开启 Screen Keyboard 就能用。没去理酱多。

有想过用 RAM live usb, 酱就可以拔掉 live usb 插键盘 usb。不得空理酱多。

ok, 总之酱就可以 backup 了。不过如果要检查文件 size, 不要用 nautilus, 最好是 `dnf install ncdu` 然后 cd 去 Windows path(用  `mount` 就查得到这个 path),cd 去 Users home 那里, 在 terminal 执行 ncdu . 来汇总什么 file 吃位但是没用途或可以 redownload 过的,就不需要 backup, 因为 sftp 真的很慢

copy  不要 command line, 直接在 nautilus 的 top panel icon 那里选 "Connect to Server..." , 填上 "sftp://root@10.0.5.21/root"。

 不过那个是 root 的 home path。还要 <Ctrl+L> 丢掉 path 的 "root" 字眼, 再 <Enter> 去 / 根目录。(其实 Alt+Up 上去也可以的...)

也要去 Settings ->  All Settings Power 那里把五分钟会 Blank screen 改去 Never, 不想 copy 到一半 short 掉吧。

好了,搞掂 backup 后就可以大展拳脚了。

$  dmidecode //(ssh 已经是 su), 就可以懂它电脑牌子 , 间接懂 Windows 版本等等。应该是 Windows 8.1 来的。




懂了 Windows 版本(其实也不是很重要拉),随便 google 就懂可以用这招 sethc 大法 reset windows password。

ssh root@10.0.5.21     //Dell fedora ssh live usb F24

cp /run/media/liveuser/Acer/Windows/System32/sethc.exe /run/media/liveuser/Acer/     //备份,预防万一,也 copy 去 Acer/Windows/ 之类的地方, 备份多多益善吗。

cp /run/media/liveuser/Acer/Windows/System32/cmd.exe /run/media/liveuser/Acer/Windows/System32/sethc.exe     //ganti cmd.exe 去 sethc,exe //回应 cp: overwrite '/run/media/liveuser/Acer/Windows/System32/sethc.exe'? 是输入 y

可能你会问,做么不要直接在 Shift+Restart 的 option menu 那里 command prompt copy:


别管酱多,在 Windows 登入页面连续按 Shift 键 5 次, 然后有点 delay 就会出 command prompt, 输入 net user admin dadada 改成 dadada 密码:


终于进到了, 开香槟 :p:



不小心找到一个 bug, 就是当你改 touch keyboard 的右下角 template, 换成手画 template 时,是无法 Enable Standard Keyboard 的(gray out), 搞到我在烦做么 Standard Keyboard 突然间不能用了。最重要的大 bug 是,为什么 Standard Keyboard 不是默认 enable 的。

然后发现 Administrator 权限也不能直接 copy 原本的 sethc.exe 回去 System32/, 可能 sethc.exe 还在跑的 pasal ?

不得空鸟它,进去 live usb 才 cp 回去:
cp /run/media/liveuser/Acer/sethc.exe /run/media/liveuser/Acer/Windows/System32/


然后我 google 下感觉 chntpw 大法好像也不错下 hor ? 起码不用 copy 来 copy 去 sethc。

就试下在 live usb, `dnf install chntpwd` 安装:

奇怪的是 Dell 的 Windows 8 要用小写 sam 才能跑, 而 Ultrabook 的 Windows 8.1 不需要:


Ultrabook 的 Windows 8.1 改密码:


结果不期待的杯具画面终于又出现了:


而且 sethc 大法也改不到密码, error 1359:


... 是不是 SAM file corrupt liao ? 可是 hor 我没 backup SAM 叻... 囧

看到这个什么 dsmod,  不是 windows 8.1 也不关事。

病急乱投医, 先改 Administrator 密码, 然后 activate 他:


不过没有 switch user 选项怎样进 Administrator ? Username field 又不能 edit。

到处逛逛,神奇的是这个,之前只有 admin 的现在变成只有 Administrator (又不见登入页面那里有改 (我有 restart 拉当然)):


然后重新 add 或加 group 什么的都然并卵 (顺便吐槽一下那个 's'):


Google 一下看到这个:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon and changed DefaultDomainName and DefaultUserName values to the desired string data.
从 Administrator command prompt 那里跑 regedit,然后加了也没用(讲真 DefaultDomainName 好像不应该放 Administrator, 不懂, tikam 吧了):


试下用 sethc 的 command prompt, 跑 regedit,忘了这时有没有放 Domain(应该没有放),把 DefaultUserName 改去 Administrator, 不小心看到 AutoAdminLogon, 也顺便改买, 从 0 变 1:



结果一 restart, 自动 login:



结果它 short liao, 有 edit 的 field 了:




哦,酱我就懂 liao, AutoAdminLogon 但是又 failed 的时候,就会  short 到有 Switch  User 选项 liao。DefaultUserName 改去 Administrator 有没有贡献就不懂 la。

不管那么多, login Administrator 看下:




看到这个 thread, 5 hours,我赶时间叻,吓到把 keyboard 拔掉。( 更新: 其实是 "other than mouse and keyboard", 我久没睡眼花 )



也要解决登入 admin 的问题, 不然 desktop files 怎样弄回去...

接下来 3 个步骤不懂哪一个步骤关事, 也可能上面就弄好了(我忘记有没有 test admin 先),不过还是列举出来我做过的东西:

[1] 把那个登入不到的 admin 换去 Standard User(之前是 under Administrator)


[2] 改一下名字:


[3] 改一下密码:


yeah, 终于登入到了。


然后在 Administrator 的情况下打开  regedit, 把之前乱入的 DefaultDomainName 等于 Administrator 的整个 key 丢掉:


现在要解决那个自动登入错误的问题。先想办法设置在 login 页面的默认 username

在 Administrator 登入的情况下,win+r 运行 netplwiz 。先选 admin 用户, 用同一个密码 Reset Password 。然后换回去不久前改去 Standard User  的 Administrator group


然后登入 admin 用户,regedit 把上面 sethc 的 DefaultUserName 从 Administrator 换回去 admin, 很奇怪的是 DefaultDomainName 来到这里似乎是自动更新的, 因为没看过这个 value :


不过其实还不能,我又发现坑人的说法,要 highlight 才可以, 以下这个 netplwiz 是在 admin 用户的 desktop 开的:


在 highlight admin 用户的情况下 uncheck 再 recheck 上面那个才有 effect, 不然 纯粹 highlight 无法按 "Apply"。其实那个 checkbox 会直接 affect 上面在 regedit 试过的 AutoAdminLogon 的 0/1。

那个 reset password 要不要顺便按 ? 由于 admin 是当前用户, 所以不能按 "Reset Password" 按钮,而是 Ctrl+Alt+Del 那里 "Change a password":



最后,终于有正常登入的页面 la。


后话:
[1] 本 blog 对闭源软件的使用可免则免,整个过程完全没有用第三方闭源软件。别随便用 google 的破解 tool。
[2] 虽然 sethc 还是有缺点, encrypted files 会不见,但你不是真的吃饱了撑的想 rainbow brute force 它吧。
[3] 如果在 Windows 没有 Fedora 要怎样做 livecd-iso-to-disk 的 writeable  ? 可以先在 Windows 用普通方法做 live usb, 然后在 live session 使用 livecd-iso-to-disk,这时电脑的两个 port 可以同时插 live 和 burn 的 usb,理论上可以 la 我没试验过。
[4] 至于常常听到的 windows pe,不懂能不能 bypass Shift+Restart 那个 command prompt 密码,我忙到鬼样不得空去试验。

[更新: PE 初体验]

我要还电脑给人时觉得不应该不解开这个谜 (PE 能不能 skip Ultrabook Windows 8.1 的 cmd password ?),所以在剩下 2 小时左右的时间要在 0 knowledge 的情况下,完成测试。首先,下载完 Windows 8.1 (因为目标是 8.1)的 adksetup, Windows 8(不是 8.1 一样用的啦~) 之下运行 adksetup 却要下载 5GB , 这里已经花了近一小时了(顺便吃下饭)。

跟着官网去制作 PE usb:


MakeWinPEMedia /UFD C:\WinPE_x86 D: (我的 pendrive 是 D:)的时候有 error,找到这个方法,手动去:
diskpart
select disk 1
clean
create partition primary size=10240
select partition 1
active
format fs=fat32
assign
exit

*小心*,记得先 list disk 然后  unplug/replug pendrive 来找到正确的 disk。我的例子是 disk 1。
 
我走到 format fs=fat32这个步骤时,似乎要1小时多,可是现在已剩下半小时左右,跑了 25% 就果断关掉它,把所有筹码都赌注在这个评论,


也就是去 c:\program files (x86)\Windows Kit\8.1\Assessment and Deployment Kit\Windows Preinstallation Environment folder 的 MakeWinPEMedia file, 
,把 echo format fs=fat32 label="WinPE quick >> "%DISKPARTSCRIPT%" 的 
fs=fat32 改成 fs=ntfs

重新 plug usb,会问你 format,这次比之前右键 format 不一样,之前只是 capacity 是 5.18 MB 左右,所以无法成功是正常的,现在却是 10.0 GB,多亏上面的 
create partition primary size=10240 命令, 选 ntfs (配合等下 MakeWinPEMedia file 要改成 fs=ntfs), 然后打勾 Quick Format,大概一分钟搞掂。(更新: 回头想想, diskpart format 应该也有 quick format 之类的命令,去这里看就懂其实... 理论上可以使用 format fs=fat32 QUICK 解决)
 

我改成 fs=ntfs 后 save 却要求 administrator 权限,所以只好 Ctrl+Alt+Delete 选择打开 Task Manager (更新: 其实 win+r 也可以,我赶时间没想这么多), File -> Run new task, 输入 notepad, 打勾 admin 权限, OK,打开 notepad。
 

然后把刚才的失败储存的内容 copy 去这个 notepad,确保改成 fs=ntfs, Save as type 选择 All Files,ganti 掉那个 MakeWinPEMedia file。



重新跑过 MakeWinPEMedia /UFD C:\WinPE_x86 D: 就 burn 好 PE usb 了。



然后就测试,折腾了一下,发现要换 legacy mode 才可以, 看到 command prompt,终于证明可以 skip password 了,但是高兴得太早了,touch keyboard~~~~~ no touch keyboard,竟然重复那个不够 port 用的死胡同。囧 (... 所以我昨天订购了 usb hub splitter)


最后,又发现 boot 不回去 Windows,折腾了一下才发现要 UEFI 才能。最后的最后,折腾了一下不小心开到的 narrator,终于 last minute 可以拿电脑还给人了 :p 蛮刺激一下的