黑客风云——风云网络
设为首页 加入收藏 我要投稿 网站地图
您现在的位置: 黑客风云 >> 黑客文章 >> 黑客进阶 >> 软件破解 >> 文章正文
[图文]破解利器Olldbg脚本教学(二)-ODbgScript的脚本命令(2)
        ★★★★★
破解利器Olldbg脚本教学(二)-ODbgScript的脚本命令(2)
文章整理发布:黑客风云 文章来源:www.05112.com 更新时间:2006-11-1

6.字符串操作类

LEN            :获得字符串长度
FIND           :从指定地址开始在内存中查找指定的内容
FINDOP         :从指定地址开始查找指定一个指令,这个指令是以指定内容为开始的
FINDMEM        :全内存中查找指定的内容
ATOI           :转换一个字符到整数,返回结果保存到保留变量$RESULT中
ITOA           :字符串进制转换
EVAL           :计算含义变量的表达式
EXEC/ENDE      :对当前调试进程,执行在EXEC和ENDE之间的指令
FILL           :从指定地址处,填充指定长度的值
REPL           :在指定地址开始,在指定长度字节内,用“替换字符串”替换“查找字符串”
SCMP           :比较字符串,目的和源比
SCMPI          :比较字符串,只不过是源和目的比
PREOP          :获得当前地址的汇编指令
REF            :交叉参考
OPCODE         :反汇编当前指令
    这里是一个很强技术概念类的类,为什么这样说呢?因为完全靠系统信息来定位断点是远远不够的,那么我们必须寻找程序内的"特征代码串",这个和杀病毒软件是一个概念,杀病毒软件是怎么干活的??就是搜索内存,找各个程序的可疑的"特征字符串或者特征码".和人的DNA一样,各个程序的DNA是不同的但又有相同的地方这就是亲子鉴定中心赚钱的秘方 :).

    从逆向角度来说,某个系列的加壳,加密软件它有它的一贯性,因为它的开发架构已经定死了,除非它大规模推倒从来.这里我就自己创造一个叫法叫"程序的DNA"吧,这个不是我提出来的,很多大侠早就提出了这个概念,比如FLY的"特定码",OPcode其实就那么多,但是就是这些,简简单单的OPcode就组成了千千万万的程序,但有些东西是具有一贯性的,这个和生物学上的遗传概念一模一样.药剂学上有一个东西叫生物试剂,就是利用生物的特定DNA来检测的.

    一旦我们找到某个"程序的DNA",那么很多东西就简单多了,大侠级别的就是"程序DNA试剂工厂",他们能够通过他们长年累月的积累总结出了大量的"程序DNA特征"检测手段,并且能够敏感的捕捉到新的"程序DNA特征",这些才是逆向水平高低的所在. 为什么呢会这样呢?因为程序必须某时某刻要干某件事,这就注定了它的死结,大侠们能一眼就看明白这段OPcode它是在干什么(这需要长年累月的积累),你要动态解码,那么你解码的一小节就是你的命门,你要ANTi,你anti前必须做准备工作,这个准备工作就是命门等等诸如此类.你要干什么,我就在你要干什么前定位你的"特征码",在你干什么前把你的手段给残废了(大侠们够残忍了吧?呜~~~我的ANTI,我的解码)  这就是矛和盾永远可以斗争的地方,我anti你,你定位我的ANTI,好,那么我要动态解码后才ANTI,大侠就盯上你的动态解码的回写内存,我把我动态解码一段花了,那么,我用花特征分离出你的花.......
..逆向反ANTI的手段就是在你动手前我先动手!!!!这叫先发制人,一招快,招招快!!!!可怜程序它必须按照列车时刻表来跑,最搞笑的是脱壳领域,有的大侠懒得理哪些大规模的ANTi了不费哪个劲脱你了,就干脆写个小东西Loader带跑.穿透壳后用特征码一步步定位后patch掉,何必处处脱呢........

    这里,我说了一通,大家可以看图一,第20行命令find eip,#fe??0f84#, 这个句话的含义就是寻找特征字符串fe??0f84,而这个特征字符串是什么含义呢,??代表的是可以是Hex任何数, 说明被2.0版FSG保护程序在第一次运行系统函数LoadlibraryA后,从这里取出ESP指针所指的内存地址,下断点后,就会出现了这个特征字符.这个是2.0版特有的.大侠们发现了它的这个特征码.它出一定会出现在被FSG2.0保护程序经过上面运行步骤后的某个内存地址中.

    大家是不是有点豁然开朗的感觉??
    
    我们来分析一下轰动一时的特征串:
    00B2C27C    68 A78FC31F     PUSH 1FC38FA7
    f9,改eip
    00B7266A   CALL 00B7267C
    
    68A78FC31F就是在程序还没有启动运行的时候,就存在的一个特征字符串,它存在于加载到内存后的地址00b2c27c上,大侠发现了它的这个BUG,就是在00b2c27c处,直接将列车扳道岔到00b7266a上,火车一下子变轨到b7266a处,从而跳过了themida的验证.
    我们用脚本来实现这个思想是什么样的?
    
    var   bugaddress1
    var   bugaddress2
    find eip,#68A78FC31F#             //查找<特征字符串>
    mov bugadr1,$RESULT               //保存查找到的地址
    bphws bugaddress1,"x"             //给bugaddress1处信号灯传感器系统下命令(断点)
    run                               //列车放行,会被bugaddress1处的信号系统命令停下来
    bchwc bugaddress1                 //信号灯系统复位,但列车还是停在原位等待放行 :)
    mov bugaddress2,b7266a            //将b7266a的地址给变量
    mov eip,bugaddress2              //扳轨改变列车时刻表,从bugaddress1-bugaddress2处的
                                     //所有站点都不过了,直接走近道到bugaddress2.
                                     //这下这些站点的"乘客"们傻眼了,被脚本指挥的列车拒载了.
    esto                             //列车放行
    
   这个特征字符串仅仅存在于themida的1.3.3.0中,而不是全系列的themida的特征字符串,但是这个思想只要有了就容易了,可你是否具备了一眼就能从全系列themida中利用它的这个思想来定位它的<特征字符串>的能力,那就需要你不断的加强你的功力了.其实1.3.3.0爆出这个BUG,各路大侠马上行动,先从1.3.3.0版本中定位b2c27c和00b7266a地址处上下文中有什么可以进行再定位的地方,其实这就是这个系列的DNA指纹.从而一代枭雄轰然倒地!而上面的脚本的bugaddress1,和bugaddress2就是大侠们利用ODbgScript来进行反复搜索的利器.

上一页  [1] [2] 

文章录入:cainiaowang    责任编辑:cainiaowang 
【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
VIP 专 区
Copyright @2006 黑客风云 ●业务联系:QQ 联系怪人 联系奇人 Email:给怪人发邮件 给奇人发邮件
ICP备案:冀06009886