纯月部落

左手创新,右手敏捷,反过来可以么!

夏纯中ID:danny_xcz
847869次访问,排名41好友1人,关注者48
danny_xcz的文章
原创 298 篇
翻译 3 篇
转载 26 篇
评论 721 篇
纯月的公告
最近评论
sap99:http://www.sap99.com/
,SAP免费资料下载
SAP99资料多多

http://www.sap99.com

有很多的学习资料,推荐一下,
lovedoghero:真是一种不错的生活方式。
yctcsms:哈哈,言之有理!
hfgayy:tag
quzhoushijie:gby企业管理
网站推广
打折机票
收藏
    相册
    Blog用途
    我的相册
    Java Desktop
    Open Source
    友情链接
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 用Dede再次大战一个工资管理软件收藏

    新一篇: 项目经理需知的Java技术问题 | 旧一篇: 如何在Spring中使用JasperReport

    目标锁定: 某款工资软件

    分析:可以从两个地方入手:1 登陆菜单中判断时间过期处  2 填写注册信息的表单
    下面先从2入手

    1 文件脱壳,分析完毕
    2 进入“窗体”,看每一个窗体的标题,找到“公司信息及注册”TFrm_ComPany
    3 找到其中的一个按钮
        object BtnReg: TBitBtn
          Left = 144
          Top = 8
          Width = 89
          Height = 25
          Caption = '马上注册'
          Default = True
          Font.Charset = GB2312_CHARSET
          Font.Color = clRed
          Font.Height = -12
          Font.Name = '宋体'
          Font.Style = []
          ParentFont = False
          TabOrder = 0
          OnClick = BtnRegClick  <---
    4 在“过程”里面查找类名为TFrm_ComPany的类对应的单元名,为CompanyUnit
    或者 在“工程”里面创建文件,在生成dump目录的events.txt 里面查找TFrm_ComPany,知道该文件的名字是CompanyUnit.pas
    5 点击CompanyUnit,在右边“事件”中看到BtnRegClick等这几个方法调用,一个一个察看
    6 先双击BtnRegClick,察看该过程的代码
    * Reference to: forms.TApplication.MessageBox(TApplication;PChar;PChar;Longint):Integer;
    这里应该是弹出"填写公司名称"的窗口,继续往下走

    接下来执行了一个SQL,根据后面的分析,应该是验证完注册马之后,才保存用户单位信息,所以验证应该在此处前面
    * Possible String Reference to: 'Update Sys_Company  Set 企业名称=:Company,企业地址=:Address,联系电话=:tel,网址=:Web,'
    * Possible String Reference to: ' 电子邮件=:Email,硬盘号=:HardWareId,注册号=:SerialNo'
    * Possible String Reference to: ' where 编码=:DiskNo'

    从Try开始,操作数据库,所以Try往上
    从此处往上找jmp,
    005010B9   E955040000             jmp     00501513  <---这个00501513直接就是End了
    如果要不执行该句,往上只有
    00501097   7425                   jz      005010BE

    因此,思路有了
    从头开始看
    * Reference to control TFrm_ComPany.EdtComPany : TdxEdit
    * Reference to: controls.TControl.GetText(TControl):TCaption;
    * Reference to: forms.TApplication.MessageBox(TApplication;PChar;PChar;Longint):Integer;
    检查公司名不为空
    * Reference to control TFrm_ComPany.EdtSerialNo : TdxEdit
    * Reference to: controls.TControl.GetText(TControl):TCaption;
    取得序列号,不知道做了什么
    * Reference to control TFrm_ComPany.EdtSerialNo : TdxEdit
    * Reference to: controls.TControl.GetText(TControl):TCaption;
    又取了一遍
    然后又作了什么,就到了
    00501097   7425                   jz      005010BE  ,从005010BE继续顺利前进
    否则,不跳的话,Label1付值,应该就是显示“注册号不正确”
    * Reference to control TFrm_ComPany.Label1 : TLabel
    * Reference to: controls.TControl.SetText(TControl;TCaption);

    所以关键就是这里的jz要改成jmps

    在工具--> 地址偏移转换器中,RVA输入00501097,得到物理地址00101097
    用UltraEdit找到00101090,在第7 8 列有7524

    修改之后,重新登陆,发现仍然说试用期以过,看来还是只能从检查试用期着手

     

    看看MainFrm中,登陆窗体是如何载入的
    1 查找TMainFrm,单元名Main
    2 在生成的工程文件Main.pas中找到TFrm_ComPany,
    发现
    procedure TMainFrm.N8Click(Sender : TObject);
    begin
    (*

    * Reference to : TFrm_ComPany.Proc_00500C4C()
    |
    00729850   E8F773DDFF             call    00500C4C
    00729855   C3                     ret

    *)
    end;
    由此可知TFrm_ComPany.Proc_00500C4C是初始化函数

     

    上面没什么思路,从1开始入手
    1 找到TUserLoginFrm
    object BtOk: TFlatButton
    OnClick = FlatButton1Click
    2 找到从events.txt里面找到其对应的为LoginWinUnit(单元名)或直接在过程里面找TUserLoginFrm,注意过程中的类名不按照顺序排列的
    3 找到事件FlatButton1Click
    TUserLoginFrm.Proc_005085C8() 是Main里面调用登陆的启动函数

    4 启动的时候,先检查密码错误,然后弹出“试用期结束”,然后弹出注册框
    所以,直接找到
     Possible String Reference to: '密码输入错误!!!' 这行
    00508D3D   685C8F5000             push    $00508F5C

    之后的函数每一个都很重要了,一个个的看
    * Reference to: Unit_00409424.Proc_0040BC18
      一进入就看到一个* Reference to: kernel32.GetLocalTime()

    根据上面,显示一个对话框有固定的语句

    * Reference to: controls.TControl.GetText(TControl):TCaption;
    |
    00508BD5   E8CE0BF3FF             call    004397A8
    00508BDA   8B45E4                 mov     eax, [ebp-$1C]
    00508BDD   50                     push    eax

    * Possible String Reference to: '不存在该工号的用户!!!'
    |
    00508BDE   68D48E5000             push    $00508ED4

    * Reference to: Unit_00409424.Proc_0040BC18
    |
    00508BE3   E83030F0FF             call    0040BC18
    00508BE8   83C4F8                 add     esp, -$08
    00508BEB   DD1C24                 fstp    qword ptr [esp]
    00508BEE   9B                     wait
    00508BEF   8D55E0                 lea     edx, [ebp-$20]

    * Reference to control TUserLoginFrm.LoginName_Edit : TdxPickEdit
    |
    00508BF2   8B86FC020000           mov     eax, [esi+$02FC]

    * Reference to : TdxInplaceMaskEdit._PROC_004C742C()
    |
    00508BF8   E82FE8FBFF             call    004C742C
    00508BFD   8B45E0                 mov     eax, [ebp-$20]

    * Reference to pointer to GlobalVar_00734AC8
    |
    00508C00   8B15E82E7300           mov     edx, [$00732EE8]

    * Reference to field GlobalVar_00734AC8.OFFS_0038
    |
    00508C06   8B5238                 mov     edx, [edx+$38]

    所以我们排除很多无用的代码

    * Reference to: Unit_00501C00.Proc_00504DF8 这是纪录这次登陆的日志,这里也是唯一可能的地方了,双击进入
    什么都不用想,找jmp
    00504E4B   E92A010000             jmp     00504F7A <--这里基本就是退出

    但仔细察看后,发现没有什么jz,jnz,光是jmp是没有作用的

    于是只能往上找,在检查了用户名,密码的SQL后面,发现了
    00508CCC   E81790FFFF             call    00501CE8
    它里面有和运行日期相关的SQL,应该是第一次运行建立帐号的,如果账号已经存在了,就把序列号,上次使用时间全部取出来,
    可能用于判断

    (实在搞不定了,我狠狠心把00508CCC得E81790FFFF改成9090909090,最后成功)

    总结: 作者设计的加密还是还是比较小心,浪费我好多时间,最后只有咬牙赌运气,没想到成功了,本来准备用Softice调试的,无奈本机是XP系统,要执行那个所谓的21步骤才能运行,所以还是采用静态分析的方法了.

    发表于 @ 2006年03月23日 15:58:00|评论(loading...)|编辑

    新一篇: 项目经理需知的Java技术问题 | 旧一篇: 如何在Spring中使用JasperReport

    评论

    #bigtall 发表于2006-03-24 11:19:00  IP: 61.141.230.*
    看楼主还是有点水平的人,我看这种事情就不要说出来了八。如果换一下,你是作者会怎么想?

    现在国内软件还不行,所以需要自己人相互扶持,至于国外的版权嘛,等到我们大家有机会往外卖软件的时候再保护也来得及。
    #纯月 发表于2006-03-24 12:06:00  IP: 202.195.172.*
    呵呵,我没有用这款软件做任何盈利行为,我只是下下来参考一下,不料前段时间比较忙,现在试用的时候过期了,想继续试用,又不想重装操作系统之外,我只能自己动手

    我的目的很简单,把使用Dede的心得贴出来.同时也提醒自己,如果没有严密的反盗版措施,破解一个软件仅在于几个字节的修改.
    #神仙 发表于2006-04-07 12:17:00  IP: 202.195.168.*
    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © 纯月