阳光网驿-企业信息化交流平台【DTC零售连锁全渠道解决方案】

 找回密码
 注册

QQ登录

只需一步,快速开始

扫描二维码登录本站

手机号码,快捷登录

老司机
查看: 1839|回复: 3

[转帖] 【转帖赚币】菜鸟PJ软件手记(三)

[复制链接]
  • TA的每日心情
    慵懒
    2017-10-6 11:28
  • 签到天数: 296 天

    [LV.8]以坛为家I

    发表于 2010-8-25 19:25:16 | 显示全部楼层 |阅读模式
        什么是爆破?先简单举一个例子。

        给出这样一个软件的注册验证算法:
    1、输入自己获得的注册码(简称输入码)。
    2、调用储存在软件中的真正注册码(简称真码),与输入码比较。如果二者相同,即输入的是正确的码,则继续进行下一步。如果二者不同,则跳转到步骤4。
    3、显示“注册成功”。结束。
    4、显示“注册失败”。结束。

        显然,这里的第二步的判断是一个关键。在软件已经写好,我们不能改动各个步骤的顺序的情况下,怎么才能绕过注册验证呢?考虑一下,如果将第二步改为“调用储存在软件中的真正注册码(简称真码),与输入码比较。如果二者不同,即输入的是错误的码,则继续进行下一步。如果二者相同,则跳转到步骤4。”会出现怎样的情况呢?对了,当我们随便输入一个数字时,软件都会提示注册成功。这不就是PJ了吗?而像这样通过修改判断的方法就是爆破。简单直接,但是需要你找到关键的跳转判断。


        以《数字五笔2009》为例,具体过程如下。


    一、安装后用PEiD查壳。

    以前的帖子介绍了壳的相关概念,所以不多讲。软件的路径是C:\WINDOWS\system32\szwbConfig.exe,查壳发现没有加壳,由Microsoft Visual C++ 6.0编写。这倒很方便。
    (图1)


    1.jpg



    二、尝试注册找到关键信息。

    随便输入0—0—0,点击激活,提示激活码不正确。关闭软件。
    (图2)


    2.jpg


    三、OllyICE载入,寻找突破口。

    1、载入。在OllyICE界面中依次展开文件——打开,选择刚才的路径C:\WINDOWS\system32\szwbConfig.exe,确定。
    (图3)


    3.jpg


    2、查找字符串。依次展开插件—ultra string reference—find ASCII。

    (图4)


    4.jpg

    看到了刚才的提示。
    (图5)

    5.jpg


    双击来到该地址0040C0AE。
    (图6)

    6.jpg



    3、寻找关键跳。
    向上数三行,来到0040C0A1看见了一个类似于大于号的标志,而且当你点击这个地址时,从大于号处出现了一条红线,引导你向更上边探寻。
    (图7)

    7.jpg


    用鼠标滑轮沿着红线向上一直追到0040BE9A。

    (图8)

    8.jpg


    这说明,程序是从0040BE9A直接跳到了0040C0AE,也就提示了注册失败。那么,红线越过的部分,就不会显示,其中的0040C02D是我们最为关心的“恭喜!数字五笔激活成功”。
    (图9)

    9.jpg


    换句话说,在0040BE9A这个地址发生了某种判断,如果输入码不符合真码,就会越过注册成功,而来到注册失败。所以,0040BE9A是关键跳。


    4、修改判断,尝试运行。

    再来复习一下,判断语句的意义。
    cmp a,b   比较a与b
    mov a,b   把b的值送给a
    ret   返回主程序
    nop   无作用,英文“no operation”的简写,意思是“do nothing”(机器码90)
    call   调用子程序
    je 或jz   若相等则跳(机器码74 或0F84)
    jne或jnz   若不相等则跳(机器码75或0F85)
    jmp   无条件跳(机器码EB)
    Jb   若小于则跳
    ja   若大于则跳
    jg   若大于则跳
    jge   若大于等于则跳
    jl   若小于则跳
    jle   若小于等于则跳
    pop   出栈
    push   压栈

    机器码是判断语句的代表,我们在修改判断语句时,往往不能直接对字母改动,而是修改机器码,这个稍后介绍。

    从上表可以看出,在地址0040BE9A,发生了如下的过程:

    1、输入自己获得的注册码(简称输入码)。

    2、调用储存在软件中的真正注册码(简称真码),与输入码比较。判断二者不相同,即输入的是错误的码。如果的确错误,则跳转到步骤4(je的含义);否则,继续进行下一步。
    3、显示“注册成功”。结束。
    4、显示“注册失败”。结束。

    那么,我们将je改为相反的jne如何?在该行地址上右键,选择汇编。
    (图10)

    10.jpg


    出现了一个对话框。
    (图11)

    11.jpg


    直接把je改为jne,点击“汇编”确定,然后点击取消退出。这时候,原来地址的je变成了jnz,而且红色加亮。
    (图12)

    12.jpg


    有朋友问,不是jne吗?他们是等价的。

    接着,我们按下F9,运行程序。注册的窗口弹出,我们还输入0—0—0,点击激活。这时奇迹发生了,竟然提示恭喜,注册成功!这说明修改关键跳的方法奏效。
    (图13)

    13.jpg



    四、修改关键跳,让软件随便注册都通过。

    但是,OllyICE只是一个调试工具,供我们找思路,真正要修改代码,需要另一个工具——hiew。这是一款编辑工具,支持修改机器码,只是须在dos界面工作。不过熟悉基本操作还是很容易的。


    打开hiew,F1提供帮助说明,大家自己研究。我只说最基本的操作。按下Insert键,可以选择要打开的文件。不过,你得耐心的输入文件的路径C:\WINDOWS\system32\szwbConfig.exe,一个字都不能差。

    (图14)

    14.jpg



    回车以后,界面很乱,不用管。
    (图15)

    15.jpg

    按下F4,选择Decode模式。

    (图16)

    16.jpg


    回车,这时候,界面很熟悉了吧。
    (图17)

    17.jpg


    按下F5,可以选择跳到某一个地址。我们想去0040BE9A,就省去所有地址共有的0040,直接在工具中输入BE9A。
    (图18)



    回车,就跳到了这个地址0040BE9A。其中的0F84正是je的机器码。
    (图19)



    按下F3,这时,在机器码下边有光标闪动,用左右方向键把光标移动到4下边,输入5,这样,机器码改成了85,je变成了jne。
    (图20)



    或者按下Tab键,直接修改字母。
    (图21)



    修改完毕,按下F9保存。F10退出。



    五、打开软件重新测试。

    结果如图。
    (图22)




    最后总结一下
    常见修改(机器码)
    74=>75 74=>90 74=>EB
    75=>74 75=>90 75=>EB
    jnz->nop
    75->90(相应的机器码修改)
    jnz -> jmp
    75 -> EB(相应的机器码修改)
    jnz -> jz
    75->74 (正常) 0F 85 -> 0F 84


    两种不同情况的不同修改方法
    1.修改为jmp
    je(jne,jz,jnz) =>jmp相应的机器码EB (出错信息向上找到的第一个跳转)jmp的作用是绝对跳,无条件跳,从而跳过下面的出错信息
    出错信息,例如:注册码不对,sorry,未注册版不能...,"Function Not Avaible in Demo" 或 "Command Not Avaible" 或 "Can't save in Shareware/Demo"等 (我们希望把它跳过,不让它出现)

    2.修改为nop
    je(jne,jz,jnz) =>nop相应的机器码90 (正确信息向上找到的第一个跳转) nop的作用是抹掉这个跳转,使这个跳转无效,失去作用,从而使程序顺利来到紧跟其后的正确信息处
    正确信息,例如:注册成功,谢谢您的支持等(我们希望它不被跳过,让它出现,程序一定要顺利来到这里)
    出错信息(我们希望不要跳到这里,不让它出现)

    爆破口诀
    一条(跳)就死,九筒(90)就胡 (对应上面的2.修改为nop)
    一条(跳)就胡,一饼(EB)伺候 (对应上面的1.修改为jmp)
    妻死(74)变妻无(75)
    爸死(84)变爸无(85)

    希望能为大家扩展一条新思路。




    评分

    参与人数 1阳光币 +2 收起 理由
    幽人清事 + 2 转帖有功奖励

    查看全部评分

    楼主热帖
    启用邀请码注册,提高发帖质量,建设交流社区
  • TA的每日心情
    开心
    3 天前
  • 签到天数: 3512 天

    [LV.Master]伴坛终老

    发表于 2010-8-25 22:40:19 | 显示全部楼层
    第一次对PJ的初步原理有了个明白,谢谢楼主的转贴。
    启用邀请码注册,提高发帖质量,建设交流社区
  • TA的每日心情
    慵懒
    2017-10-6 11:28
  • 签到天数: 296 天

    [LV.8]以坛为家I

     楼主| 发表于 2010-8-26 19:51:40 | 显示全部楼层
    本帖最后由 struggle 于 2010-8-26 20:14 编辑

    因为超过时间限制了,不能编辑帖子,补上18-22的图片。对大家早成的不便,深感歉意。

    18.jpg (图18)

    19.jpg (图19)

    20.jpg (图20)

    21.jpg (图21)

    22.jpg (图22)
    启用邀请码注册,提高发帖质量,建设交流社区
  • TA的每日心情

    2012-5-3 15:33
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    发表于 2011-11-9 20:22:59 | 显示全部楼层
    嘻嘻。又看了一次。复习一下

    本文来自:阳光网驿_企业信息化专家 详细出处请参考:http://bbs.sunwy.org/thread-95552-1-1.html复习一下

    启用邀请码注册,提高发帖质量,建设交流社区
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    快速回复 返回顶部 返回列表