分享
 
 
 

用Dede再次大战一个工资管理软件

王朝other·作者佚名  2006-03-24
窄屏简体版  字體: |||超大  

目标锁定: 某款工资软件

分析:可以从两个地方入手: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步骤才能运行,所以还是采用静态分析的方法了.

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有