Squall's profile同一片天空PhotosBlogLists Tools Help

Blog


    周末
    青岛这几年没有下过这样的雪了
    气温也骤降了不少
     
    地球拿个天气配合我干什么?

    待从头,收拾旧山河

     
    商场、战场
    错综复杂,瞬息万变
    一切似乎在冥冥中蕴含着规律。
    一块市场从无到有,从有到无。
    自从去年美国公司直接冲击我们那块市场到今天他们终于成功了。
    从投入这个圈子便算是投入到这个没有硝烟的战场。
    虽然我们实力不如跨国公司,但也不能轻易放弃
    一年的短兵相接,一年的博弈
    在即将看到胜利的时候,看到的却是失守
    就是这么富有戏剧性(就像当年诸葛亮烧不死司马懿)
    周旋于错综复杂的关系中已让人身心疲惫
    怎会料到最后的失守会来自自己的同盟
    信用、利益
    千古的话题,谁能分的清
     
    回头看看一切都是那么的有戏剧性
    也许以后可以写成剧本或者小说,哈哈(自嘲)
     
    也罢,趁机休息下
    也好沉淀沉淀
    毕竟其他区域还要继续
    韬光养晦吧
    一切皆有规律
    一切皆有可能
    待从头,收拾旧山河

    收藏2007

     
    我们总是步履匆匆,正如这匆匆的青春,走过了又一个365天,而时光依然在流逝着。
    回首往昔,那一幕幕仿佛刚刚发生在眼前,那么的清晰,那么的真实,让人倍感惆怅。
     
    2007对我来说是丰富多彩的,让我品尝着生活的各种味道,有些让我刻骨铭心。
    无论伤感、喜悦,其中各种滋味将它在此收藏。
    事业,经过一路坎坎坷坷,跌跌撞撞走到今天,虽然说不上成功,但也起色不少。
    目标的实现曾经让我一度迷茫,还好我知道还有好多事等着自己去做。
    事业的起色让我欣慰也让我明白了什么叫商场如战场,在博弈中只要你稍不小心就有可能功败垂成。
    2008继续为之奋斗,我的梦。
     
    2007我最大的悲痛莫过于送走我的姥爷,您对我的教诲与期盼我会永远记在心上,永远的怀念您!
    这件事也让我知道了,最值得珍惜的是现在所拥有的,家人、朋友、同学、同事、对手······

    2007最大的收获莫过于朋友,感谢你们,感谢你们在我低谷、悲伤、迷茫时给我的鼓励、安慰。
    你们所说的话和你们的情意我会好好的珍藏。
    祝福你们有个灿烂的2008!
    ··················
    2007得到着,失去着,错过了一些人一些事。
    不过一切都已经过去,2008更值得期待!
    写于2007-12-31 上午9时
     
    写了一部分被电话打断了,只好如此。其他的在日记上就不打上来了,懒^_^
    元旦休息了三天,却没有一天是安稳的休息。

    江湖告急

    由于业绩增长
    给资金造成了不少的压力
    在此情况下
    居然把自己的卡丢了
    银行冻结个人账户要一个礼拜
    现在倒好,什么都成了一堆数字
    怎么过啊
    典当行 高利贷
    不要把鸡蛋放在一个篮子里
    至理名言

    体验

     
    商场即战场 商道亦王道
     
    2007
    颇为不平静的一年
    让我体味到了各种滋味
    是啊,有些事情只有亲身体味才知其中滋味

    走出哀伤

     
    就此阴阳两隔
    就此永别
    从此您永远在我心里
     
    我会振作起来的
    亦不会让您失望

    中秋·偶得

     
    以前从未感觉到中秋节是个节,而今年不知道怎么了,突然觉得中秋节算得上一个不小的节日,大概是参与到其中的缘故。
     
    佳节已至,凭栏远望
    又生苍茫之感!
    人生幸事,莫过邀三五知己小酌。
    然人生漂泊,知己多散于江湖。
    有心相见,无力相逢。
    遥寄诸君,盼君安康,
    勿忘衷肠!
     
    看后颇有感触的一段文字。

    混乱

     
    查了下公司的财务,都什么乱七八糟的,一塌糊涂!!!!! 

    人生多变·恍如梦中

    昨天凌晨一点多被手机吵醒
    迷迷糊糊听着电话
    听完后
    不由得清醒
    不由得迷茫
    没有了主意
    本该是高兴的事而今却变成了这样
    躺下 反反复复睡不着 而又迷迷糊糊
    早晨起来依旧迷迷糊糊
    给所有熟悉的人打电话 无果
    到现在依旧不愿相信事情是真的发生
    感觉就像 在梦里
    真希望这是一个梦
    朋友,帮不了你了
    为你祈祷吧
    希望一切都会和以前一样

    行路难·现实

                 行 路 难
     
    金樽清酒斗十千,玉盘珍馐直万钱。

    停杯投箸不能食,拔剑四顾心茫然。

    欲渡黄河冰塞川,将登太行雪暗天。

    闲来垂钓坐溪上,忽复乘舟梦日边。

    行路难,行路难,多歧路,今安在。

    长风破浪会有时,直挂云帆济沧海。

     

    生活的现实总是这样让人难以控制,要脱离现实又是一件不可能的事,怎样才能将命运紧握在自己手中?!


     

    征程

      
    终于熬过来了
    新的征程开始了!
     
    面对敌人,不要害怕!
    勇往直前,上帝便会爱你!
                 ——天朝王国

    卧薪尝胆

    卧薪尝胆,这个成语很小的时候就知道了,而对这段历史并没有什么了解。
    《卧薪尝胆》电视剧今天刚刚结束,在断断续续的看完之后,对这段历史和历史人物有更多的认识。
    勾践、夫差、伍子胥、范蠡、文种······一个个鲜活的人物。
    卧薪尝胆,四个字写起来何等的容易。要做到·······
     
    一直受着资金不足的困扰,还有两个月的时间一定要想办法坚持下去。
     
    卧薪尝胆,励精图治。

    计划之外

    生活总是有意想不到的变化
    使我们不停为之奔波着
     
    资金的投入远远大于原来的计划
    整整少了三个月的
     
    终于尝到资金短缺是啥滋味了
    吾之奈何

    生命中

    生命中,不断地有人离开或进入。于是,看见的,看不见的;记住的,遗忘了。
    生命中,不断地有得到和失落。于是,看不见的,看见了;遗忘的,记住了。然而,看不见的,是不是就等于不存在?记住的,是不是永远不会消失?

    醉江南(四)

    寒食后,酒醒却咨嗟。休对故人思故国,且将新火试新茶,诗酒趁年华。

    API函数简介

    醉江南(三)
    春未老,风细柳斜斜。试上超然台上看,半壕春水一城花,烟雨暗千家。
     
      现在很多讲Windows程序设计的书都是讲基于MFC库和OWL库的Windows设计,对Windows实现的细节都鲜有讨论,而调试程序都是和系统底层打交道,所以有必要掌握一些Win32 API函数的知识,这样我们可快捷地找出程序调用错在哪?是哪个参数出了问题。
      Windows程序模块包括KERNEL、USER和GDI,其中KERNEL完成内存管理、程序的装人与执行和任务调度等功能,它需要调用原MS―DOS中的文件管理、磁盘输入输出和程序执行等功能;USER是一个程序库,它用来对声音、时钟、鼠标器及键盘输入等操作进行管理;GDI是一功能十分丰富的子程序库,它提供了图形与文字输出、图象操作和窗口管理等各种与显示和打印有关的功能。上述KERNEL、USER和GDI模块中的库函数可被应用程序调用,也可被其他程序模块调用。把包含库函数的模块称为输出者(export)。你应明白为什么跟踪软件时经常在KERNEL32!.text和USER32.text等系统领空转的问题吧。
      这里列出几个经常碰到的Win 32 API函数,它们都是存在Windows系统核心文件KERNEL32.DLL中和视窗管理文件USER32.DLL中。
    Windows函数是区分字符集的:A表示ANSI,W表示Wide,即Unicode (Wide character-set),前者就是通常使用的单字节方式,但这种方式处理象中文这样的双字节字符不方便,容易出现半个汉字的情况。而后者是双字节方式,方便处理双字节字符。Windows的所有与字符有关的函数都提供两种方式的版本。尽管你编程时使用GetWindowText,但实际上编译程序会根据设置自动调用GetWindowTextA或GetWindowTextW。函数的最后一个字母告诉我们函数是使用单字节还是双字节字符串。
    1、 Hmemcpy函数
    void hmemcpy(hpvDest, hpvSource, cbCopy)
    void _huge* hpvDest; // 目的数据地址
    const void _huge* hpvSource; // 源数据地址
    long cbCopy; // 数据大小 (Bytes)
    这个函数在KERNEL32.DLL中,它很常用,俗称万能断点,但一般的编程书籍上很少提到,原因它是底层的东西,没有特殊需要,一般不直接调用。但的确它是很有用的!有意思的是它执行的操作很简单,只是将内存中的一块数据拷贝到另一个地方。
    注意:此函数只在Windows 9x系统上有效,在Win NT/2K系统上相关的函数是memcpy,但在Win NT/2K上不同于Windows 9x上,很少再调用memcpy来处理数据了,用此函数设断基本上什么也拦不住。
    2、 GetWindowText函数
    此函数在USER32.DLL用户模块中,它的作用是复制指定窗口中的字符到缓冲区。函数原型:
    int GetWindowText(
    HWND hWnd//欲获取文字的那个窗口的句柄
    LPTSTR lpString //预定义的一个缓冲区,至少有cch+1个字符大小;随同窗口文字载入
    int nMaxCount//lpString缓冲区的长度
    );
    16位:GetWindowText
    32位:GetWindowTextA,GetWindowTextW
    3、 GetDlgItemText
    此函数在USER32.DLL用户模块中,它的作用是返回对话框中某一个窗口的标题或文字。函数原型:
    UINT GetDlgItemText(
    HWND hDlg, // 对话框句柄
    int nIDDlgItem, //控制标识符
    LPTSTR lpString, / 预定义的一个字符缓冲区
    int nMaxCount// 字符缓冲区的长度
    );
    16位:GetDlgItemText
    32位:GetDlgItemTextA,GetDlgItemTextW
    4、 MessageBox函数
    此函数是在USER32.DLL用户模块中,它的作用创建、显示和操作信息框。函数原型:
    int MessageBox(
    HWND hWnd, //窗口句柄
    LPCTSTR lpText, // 信息框中文字的地址
    LPCTSTR lpCaption, // 信息框标题地址
    UINT uType // 信息框类型
    );
    16位:MessageBox
    32位:MessageBoxA,MessageBoxW

    分析技术

    醉江南(二)
    春去也!多谢洛城人。弱柳从风疑举袂,丛兰裛露似沾巾,独笑亦含颦。
     

      在进行软件的破解、解密以及计算机病毒分析工作中,一个首要的问题是对软件及病毒进行分析。这些软件都是机器代码程序,对于它们分析必须使用静态或动态调试工具,分析跟踪其汇编代码。

    一、从软件使用说明和操作中分析软件

      欲破解一软件,首先应该先用用这软件,了解一下功能是否有限制,最好阅读一下软件的说明或手册,特别是自己所关心的关键部分的使用说明,这样也许能够找点线索。

    二、静态反汇编

     所谓静态分析即从反汇编出来的程序清单上分析,从提示信息入手进行分析。目前,大多数软件在设计时,都采用了人机对话方式。所谓人机对话,即在软件运行过程中,需要由用户选择的地方,软件即显示相应的提示信息,并等待用户按键选择。而在执行完某一段程序之后,便显示一串提示信息,以反映该段程序运行后的状态,是正常运行,还是出现错误,或者提示用户进行下一步工作的帮助信息。为此,如果我们对静态反汇编出来的程序清单进行阅读,可了解软件的编程思路,以便顺利破解。 常用的静态分析工具是W32DASM、IDA和HIEW等。

    三、动态跟踪分析

     虽然从静态上可以了解程序的思路,但是并不可能真正了解地了解软件的细节,如静态分析找不出线索,就要动态分析程序,另外,碰到压缩程序,静态分析也无能为力了,只能动态分析了。所谓动态分析是利用SOFTICE或TRW2000一步一步地单步执行软件。为什么要对软件进行动态分析呢?这主要是因为:

    1、许多软件在整体上完成的功能,一般要分解成若干模块来完成,而且后一模块在执行时,往往需要使用其前一模块处理的结果,这一结果我们把它叫中间结果。如果我们只对软件本身进行静态地分析,一般是很难分析出这些中间结果的。而只有通过跟踪执行前一模块,才能看到这些结果。另外,在程序的运行过程中,往往会在某一地方出现许多分支和转移,不同的分支和转移往往需要不同的条件,而这些条件一般是由运行该分支之前的程序来产生的。如果想知道程序运行到该分支的地方时,去底走向哪一分支,不进行动态地跟踪和分析是不得而知的。

    2、有许多软件在运行时,其最初执行的一段程序往往需要对该软件的后面各个模块进行一些初始始化工作,而没有依赖系统的重定位。

    3、有许多加密程序为了阻止非法跟踪和阅读,对执行代码的大部分内容进行了加密变换,而只有很短的一段程序是明文。加密程序运行时,采用了逐块解密,逐块执行和方法,首先运行最初的一段明文程序,该程序在运行过程中,不仅要完成阻止跟踪的任务,而且还要负责对下一块密码进行解密。显然仅对该软件的密码部分进行反汇编,不对该软件动态跟踪分析,是根本不可能进行解密的。

    由于上述原因,在对软件静态分析不行的条件下,就要进行动态分析了。哪么如何有效地进行动态跟踪分析呢?一般来说有如下几点:

    1、对软件进行粗跟踪
    所谓粗跟踪,即在跟踪时要大块大块地跟踪,也就是说每次遇到调用CALL指令、重复操作指令REP.循环操作LOOP指令以及中断调用INT指令等,一般不要跟踪进去,而是根据执行结果分析该段程序的功能。

    2、对关键部分进行细跟踪

     对软件进行了一定程度的粗跟踪之后,便可以获取软件中我们所关心的模块或程序段,这样就可以针对性地对该模块进行具体而详细地跟踪分析。一般情况下,对关键代码的跟踪可能要反复进行若干次才能读懂该程序,每次要把比较关键的中间结果或指令地址记录下来,这样会对下一次分析有很大的帮助。软件分析是一种比较复杂和艰苦的工作,上面的几点分析方法,只是提供了一种基本的分析方法。要积累软件分析的经验需要在实践中不断地探索和总结。

    浮点指令

    醉江南  
    汴水流,泗水流,流到瓜洲古渡头,吴山点点愁。思悠悠,恨悠悠,恨到归时方始休,月明人倚楼。 
     

    对下面的指令先做一些说明:
    st(i):代表浮点寄存器,所说的出栈、入栈操作都是对st(i)的影响
    src,dst,dest,op等都是指指令的操作数,src表示源操作数,dst/dest表示目的操作数
    mem8,mem16,mem32,mem64,mem80等表示是内存操作数,后面的数值表示该操作数的内存位数(8位为一字节)
    x <- y 表示将y的值放入x,例st(0) <- st(0) - st(1)表示将st(0)-st(1)的值放入浮点寄存器st(0)

    1.  数据传递和对常量的操作指令

    指令格式

    指令含义

    执行的操作

    FLD src

    装入实数到st(0)

    st(0) <- src (mem32/mem64/mem80)

    FILD src

    装入整数到st(0)

    st(0) <- src (mem16/mem32/mem64)

    FBLD src 

    装入BCD数到st(0)

    st(0) <- src (mem80)

     

    FLDZ

    0.0装入st(0)

    st(0) <- 0.0

    FLD1

    1.0装入st(0)

    st(0) <- 1.0

    FLDPI

    pi装入st(0)

    st(0) <- ?(ie, pi)

    FLDL2T

    log2(10)装入st(0)

    st(0) <- log2(10)

    FLDL2E

    log2(e)装入st(0)

    st(0) <- log2(e)

    FLDLG2

    log10(2)装入st(0)

    st(0) <- log10(2)

    FLDLN2

    loge(2)装入st(0)

    st(0) <- loge(2)

     

    FST dest

    保存实数st(0)dest

    dest <- st(0) (mem32/mem64)

    FSTP dest

     

    dest <- st(0) (mem32/mem64/mem80);然后再执行一次出栈操作

    FIST dest

    st(0)以整数保存到dest

    dest <- st(0) (mem32/mem64)

    FISTP dest

     

    dest <- st(0) (mem16/mem32/mem64);然后再执行一次出栈操作

    FBST dest

    st(0)BCD保存到dest

    dest <- st(0) (mem80)

    FBSTP dest 

     

    dest<- st(0) (mem80);然后再执行一次出栈操作

    2.比较指令

    指令格式

    指令含义

    执行的操作

    FCOM

    实数比较

    将标志位设置为 st(0) - st(1) 的结果标志位

    FCOM op

    实数比较

    将标志位设置为 st(0) - op (mem32/mem64)的结果标志位

     

    FICOM op

    和整数比较

    Flags值设置为st(0)-op 的结果op (mem16/mem32)

    FICOMP op

    和整数比较

    st(0)op比较 op(mem16/mem32)后;再执行一次出栈操作

     

    FTST 

    零检测 

    st(0)0.0比较

    FUCOM st(i) 

     

    比较st(0) st(i)                  [486]

    FUCOMP st(i)      

     

    比较st(0) st(i),并且执行一次出栈操作

    FUCOMPP st(i)    

     

    比较st(0) st(i),并且执行两次出栈操作

    FXAM  

     

    Examine: Eyeball st(0) (set condition codes)