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

 找回密码
 注册

QQ登录

只需一步,快速开始

扫描二维码登录本站

手机号码,快捷登录

老司机
查看: 1745|回复: 1

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

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

    [LV.8]以坛为家I

    发表于 2010-8-25 19:12:25 | 显示全部楼层 |阅读模式
    废话少说,PJ的步骤如下。


    一、查壳。


    什么是壳呢?软件编写好以后,作者往往都会加上一个壳,编译成exe可执行文件,一方面可以起到保护作用,避免别人反汇编,随意改动软件的代码、功能、版权信息,以至于PJ。另外一方面,加壳也是一种压缩的过程,使得软件体积减小,从而方便使用。实现上述两个功能的这些软件称为加壳软件。它是压缩exe可执行文件的,压缩后的文件可以直接运行。最常见的加壳软件ASPACK ,UPX,PEcompact等。上一次我PJ的软件是一个很冷门的学术软件,所以作者比较随意,没有加壳,因此我也就没写这个内容。所以很多朋友PM我,说自己尝试PJ时,字符串里什么都没有,那就是加壳保护的原因。

    那么,在PJ以前,我们应该查壳。查壳的软件是PEID,很全面。启动后,依旧是选择软件安装的路径(图1)。


    图1

    1.jpg





    很快,查出来壳的种类ASPack 2.12,一款老牌的壳(图2)。


    图2



    2.jpg


    二、脱壳。



    然后我们要把它的壳脱去,还原它的本来面目。若它没有加壳,就省事不用脱壳了。



    脱壳就是一个难题,对于比较厉害的壳只能手动修改代码,是需要极高水准的,恕我无能为力。学习手动脱壳,大家最好到比较专业的几个PJ论坛研究。而对于这种非常常见的老牌壳,已经有软件来帮我们完成脱壳。针对ASPack的壳,使用AspackDie就行了(图3)。


    图3


    3.jpg



    选择路径(图4)。


    图4


    4.jpg


    自动脱壳(图5)。


    图5


    5.jpg


    脱壳后,在原来的安装文件夹下面多出了一个文件Unpacked.ExE(图6)。


    图6


    6.jpg


    我们的PJ将对它进行。


    三、尝试注册,获取注册信息,确定PJ思路。


    打开软件的主界面,点击注册,提示重新启动软件(图7)。


    图7


    7.jpg


    显然,上一次我用过的追踪字符串的办法不可行。需要换一种思路。



    通常PJ的思路又以下几种:


    1、根据提示注册失败的字符串,在反汇编软件中找到跳转地址,下断点,追踪注册明码。这个方法可以参考我的上一篇帖子的过程。



    2、找到注册成功或者失败的提示,修改跳转的判断,爆破。软件运行时,会有一个地方判断注册码是否符合算法,如果符合,跳转到注册成功,反之,调到注册失败。判断的条件通常是je或者jne。模式是jne+跳转到失败,意思是,如果用户输入的注册码不符合算法,则跳到失败的字样。我们可以将jne改成je,变成了,如果输入的注册码正确,则跳到失败字样,如果注册码错误,跳到注册成功。那么,我们随便输入一个数字就行了。爆破的方法我将改日再为大家介绍。



    3、根据编写软件的语言下通用的断点,通常针对VB。



    4、重启验证的软件,通过FileMon和RegShot等监视、查找注册码存放的注册表或者文件,下断点,追踪注册码。这个将是本文重点介绍的。

    提前介绍一下,在网上查到了高人总结的常见的存放注册码的地方。


    常见断点设置(后面带"*" 的为常用的)


    字符串
    bp GetDlgItemTextA(W) ****
    bp GetDlgItemInt
    bp GetWindowTextA(W) ****
    bp GetWindowWord
    bmsg XXXX wm_gettext

    对话框
    bp MessageBeep
    bp MessageBoxA(W) ****
    bp MessageBoxExA(W)
    bp DialogBoxParamA(W)
    bp GreateWindowExA(W)
    bp ShowWindow
    bp UpdateWindow
    bmsg XXXX wm_command

    对于VB的程序用bp MessageBoxA是无法断下来的,bp rtcMsgBox

    注册表相关
    bp RegCreateKeyA(W)
    bp RegDeleteKeyA(W)
    bp RegQueryValueA(W)
    bp RegCloseKey
    bp RegOpenKeyA(W) ****

    时间相关
    bp GetLocalTime
    bp GetFileTime
    bp GetSystemtime

    CD-ROM或磁盘相关
    bp GetFileAttributesA(W)
    bp GetFileSize
    bp GetDriveType
    bp GetLastError
    bp ReadFile
    bpio -h (CD-ROM端口地址) R

    软件狗
    bpio -h 278R
    bpio -h 378R

    INI初始化文件相关
    bp GetPrivateProfileStringA ****
    bp GetPrivateProfileInt
    bp WritePrivateProfileString
    bp WritePrivateProfileInt

    文件访问相关
    bp ReadFile
    bp WriteFile
    bp CreateFileA ****
    bp SetFilePointer
    bp GetSystemDirectory


    VB程序专用断点:

    bpx msvbvm60!rtcMsgBox
    bpx msvbvm60!__vbaStrCmp
    bpx msvbvm60!__vbaStrComp
    bpx msvbvm60!__vbaStrCompVar
    bpx msvbvm60!__vbaStrTextCmp
    bpx msvbvm60!__vbaFileOpen
    bpx msvbvm60!__vbaInputFile
    bpx msvbvm60!__vbaFileSeek
    bpx msvbvm60!__vbaWriteFile
    bpx msvbvm60!__vbaFileClose
    bpx msvbvm60!rtcFileAttributes
    bpx msvbvm60!rtcFileDateTime
    bpx msvbvm60!rtcFileLen
    bpx msvbvm60!rtcFileLength
    bpx msvbvm60!__vbaVarInt
    bpx msvbvm60!__vbaVarCmpGe
    bpx msvbvm60!__vbaVarCmpGt
    bpx msvbvm60!__vbaVarCmpLe
    bpx msvbvm60!__vbaVarCmpLt
    bpx msvbvm60!__vbaVarCmpNe
    bpx msvbvm60!__vbaVarTextCmpEq
    bpx msvbvm60!__vbaVarTextCmpGe
    bpx msvbvm60!__vbaVarTextCmpGt
    bpx msvbvm60!__vbaVarTextCmpLe
    bpx msvbvm60!__vbaVarTextCmpLt
    bpx msvbvm60!__vbaVarTextCmpNe
    bpx msvbvm60!__vbaVarTextTstEq
    bpx msvbvm60!__vbaVarTextTstGe
    bpx msvbvm60!__vbaVarTextTstGt
    bpx msvbvm60!__vbaVarTextTstLe
    bpx msvbvm60!__vbaVarTextTstLt
    bpx msvbvm60!__vbaVarTextTstNe
    bpx msvbvm60!__vbaVarTstEq
    bpx msvbvm60!__vbaVarTstGe
    bpx msvbvm60!__vbaVarTstGt
    bpx msvbvm60!__vbaVarTstLe
    bpx msvbvm60!__vbaVarTstLt
    bpx msvbvm60!__vbaVarTstNe


    注意:VB程序仍然可以使用普通API函数,只要函数“最终”CALL了这个函数。

    上面的断点对应VB6程序,如果是VB5程序则将msvbvm60改成msvbvm50即可。


    四、用软件下断点追踪或修改绕过注册判断。
    打开ollydbg,在OD的界面点击文件,打开,选择脱壳后软件的路径,确定(图8)。


    图8


    8.jpg


    右键,搜索,当前模块中的名称(图9)。


    图9


    9.jpg


    找到名为RegCreateKeyExA的模块(图10)。


    图10


    10.jpg


    这个地方请一定记住,可以对付很多重启验证的软件。在这一行上右键,在每个参考上设置断点(图11)。


    图11


    11.jpg


    这时注意右下角,显示设置两个断点(图12)。


    图12


    12.jpg



    回到界面,按下F9运行软件。右下角显示U盘搬运工的图标(图13)。


    图13


    13.jpg


    同时,软件运行到00428E9A;RegCreateKeyExA时被断下(图14)。


    图14


    14.jpg


    接下来,我们手动一步一步运行,观察右边的寄存器,随时会出现注册码。按下F8,软件就会运行一步,可以看最下面的空白处的注释信息,ASCII将可能由有注册码。这可是一个需要耐心的过程,我总共按了112下F8,终于出现了第一个ASCII,地址是004CD6E3,内容是堆栈 SS:[0012FB4C]=012CD108, (ASCII "945DC2E713")EAX=00000000

    这个是什么呢?注意看图7,945DC2E713是机器码。那么,注册码就在这附近了,继续F8。相继出现的ASCII有
    "OTQ1REMyRTcxMw",
    "T1RRMVJFTXlSVGN4TXc",
    "87c2b36455aa4f156882fbb15b8b2016",
    "5b8b2016",
    "87c2b36455",
    "4f156882fbb15b8b2016",
    "4f156882",
    "5b8b201687c2b364554f156882",
    "67B57B2225B65BC95302EE7C351FA2A295CFE43A4B2EFD3B609FBFBDEB3A2B3F",
    "97B1FF029E96CFCD16501BF478970A4F",

    这些字符中,有的是假注册码,欺骗耐心不够的PJ者。经过挨个试验,你就会找到真正的注册码,输入重启后,如果软件界面仍旧显示未注册,那就是假的码,若没有这三个字,就是真码,注册成功。经过我的测试,在地址004CD78B出现的5b8b201687c2b364554f156882是真正的注册码(图15)。


    图15


    15.jpg


    输入后重新启动(图16)。


    图16


    16.jpg


    显示界面注册成功(图17)。




    图17


    17.jpg






    这样,我就完成了对U盘搬运工的PJ。写这篇帖子,重点不但是帮朋友PJ软件,更是以它为例子,简单介绍了几种PJ的思路。希望对朋友们有所帮助。感兴趣的朋友,可以找几个简单的软件试试,太复杂的大软件不是我们菜鸟们能弄明白的。但尝试、思考、成功,是一件很有趣的事情。谢谢。

    评分

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

    查看全部评分

    楼主热帖
    启用邀请码注册,提高发帖质量,建设交流社区
  • TA的每日心情
    开心
    2010-12-28 17:42
  • 签到天数: 24 天

    [LV.4]偶尔看看III

    发表于 2010-11-19 00:08:20 | 显示全部楼层
    呵呵,都是一些比较专业的软件,了解一下
    启用邀请码注册,提高发帖质量,建设交流社区
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

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