莱鸟爆破某人事软件
日期:2005年7月31日 破解人:林海雪原
―――――――――――――――――――――――――――――――――――――――――――
【软件名称】:国产软件不必明言 软件版本:
【软件大小】: KB
【下载地址】:http://
【软件简介】:“人力资源是企业经营的第一资源”。是MBA管理思想在中国企业管理实践中应用的一个“人力资源整合”管理软件产品,包括
现代企业员工档案管理、员工招聘、员工培训、薪酬管理、绩效考核、奖惩管理、调动管理、合同管理、保险福利管理、考勤管理等十大模块
。C/S与B/S组合架构设计,具有强大的数据安全保障,并支持可扩展的远程查询功能和远程数据采集功能。
【软件限制】:50人和50天限制,打印限制.
【破解声明】:初学Crack,只是感兴趣,没有其它目的。失误之处敬请诸位大侠赐教!
【破解工具】:flyodbg,peid,W32Dasm
―――――――――――――――――――――――――――――――――――――――――――
【破解过程】:
由于是试用的,不提供注册,只好爆破作业--其实俺们也只会这个:( 。本人很莱,这是俺的第一篇破文,请高手多指教!
1、用peid查壳,是Armadillo 1.xx - 2.xx -> Silicon Realms Toolworks [Overlay]加壳,用ArmaDumper脱之。
2、用W32Dasm载入,查相关限制的字符串,有多处,记下地址。
3、用od载入
0072F630 U> $ 55 push ebp <----暂停于OEP;
0072F631 . 8BEC mov ebp,esp
0072F633 . 83C4 F0 add esp,-10
0072F636 . 53 push ebx
0072F637 . 56 push esi
0072F638 . 57 push edi
0072F639 . B8 60E97200 mov eax,Unpack1.0072E960
.....
找到00696EA1,这是50个员工的限制:
00696E90 |> \8BC6 mov eax,esi
00696E92 |. E8 D9E1FFFF call Unpacked.00695070
00696E97 |. A1 6C507300 mov eax,dword ptr ds:[73506C]
00696E9C |. 8338 32 cmp dword ptr ds:[eax],32
00696E9F |. 7C 0F jl short Unpacked.00696EB0
00696EA1 |. B8 F4706900 mov eax,Unpacked.006970F4
00696EA6 |. E8 F9480900 call Unpacked.0072B7A4
00696EAB |. E8 E068D7FF call Unpacked.0040D790
00696EB0 |> BA 48716900 mov edx,Unpacked.00697148 ; ASCII "department"
看看00696E9F处可以跳过,就把7c-->eb, ....把记下的地址找到一一修改。
run! 主界面选员工就职-->增加员工。ok!50人限制没了!不会把???
4、管它3721,看看50次限制在说:
0072F8ED 8B10 mov edx,dword ptr ds:[eax]
0072F8EF FF92 E8000000 call dword ptr ds:[edx+E8] 1<-------logo!登陆!
0072F8F5 E8 62B6FFFF call Unpack1.0072AF5C 2<-----
0072F8FA E8 21A7FFFF call Unpack1.0072A020 3<-----
0072F8FF 85C0 test eax,eax
重载入,在0072F8F5处下断,点登陆后单步跟到这:
0072A046 |. E8 6D28D6FF call Unpack1.0048C8B8
0072A04B |. 8B03 mov eax,dword ptr ds:[ebx]
0072A04D |. 8B80 F8020000 mov eax,dword ptr ds:[eax+2F8]
0072A053 |. E8 649BDCFF call Unpack1.004F3BBC
0072A058 |. BA 78A17200 mov edx,Unpack1.0072A178 ; ASCII "SELECT paytype FROM mysetting "
0072A05D |. 8B08 mov ecx,dword ptr ds:[eax]
0072A05F |. FF51 2C call dword ptr ds:[ecx+2C]
0072A062 |. 8B03 mov eax,dword ptr ds:[ebx]
0072A064 |. 8B80 F8020000 mov eax,dword ptr ds:[eax+2F8]
我注意到"SELECT paytype FROM mysetting "出现了好几次,于是打开数据库,果真如此!有“mysetting”表,里面就是试用期!修改为
最大数“999999999”,重run,嘿,它诰诉我还有“999999999”次才到期!
真这么简单?好戏在后面!当我再次run时,我的60个员工被裁员10个!--好!替我裁员了,真是自作聪明!
0072A0BB |. FF75 FC push dword ptr ss:[ebp-4] <----堆栈 ss:[0012FF98]=028AE9F0, (ASCII"999999984");试用天数
0072A0BE |. 68 98A27200 push Unpack1.0072A298
0072A0C3 |. B8 98897300 mov eax,Unpack1.00738998
0072A0C8 |. BA 03000000 mov edx,3
0072A0CD |. E8 82AACDFF call Unpack1.00404B54
0072A0D2 |. 8B03 mov eax,dword ptr ds:[ebx]
0072A0D4 |. 8B80 F8020000 mov eax,dword ptr ds:[eax+2F8]
0072A0DA |. E8 D927D6FF call Unpack1.0048C8B8
0072A0DF |. 8D55 F0 lea edx,dword ptr ss:[ebp-10]
0072A0E2 |. A1 A8897300 mov eax,dword ptr ds:[7389A8]
0072A0E7 |. 48 dec eax
0072A0E8 |. E8 B3F7CDFF call Unpack1.004098A0
0072A0ED |. 8B4D F0 mov ecx,dword ptr ss:[ebp-10] <----试用天数-1
<<<<<<<<<<<<<<修改如此,就永远不过期!>>>>>>>>>>>>>>>>>>>>>>>>
0072A0ED 8B4D FC mov ecx,dword ptr ss:[ebp-4] >
<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>
0072A0F0 |. 8D45 F4 lea eax,dword ptr ss:[ebp-C]
0072A0F3 |. BA A8A27200 mov edx,Unpack1.0072A2A8 ; ASCII "UPDATE mysetting SET paytype ="\\写表!
0072A0F8 |. E8 E3A9CDFF call Unpack1.00404AE0
0072A0FD |. 8B55 F4 mov edx,dword ptr ss:[ebp-C]
5、拔掉那个暗丁!
经多次跟踪,我把目标锁定在这:
0072F8EB 8B00 mov eax,dword ptr ds:[eax]
0072F8ED 8B10 mov edx,dword ptr ds:[eax]
0072F8EF FF92 E8000000 call dword ptr ds:[edx+E8] 1<-------logo!登陆!
0072F8F5 E8 62B6FFFF call Unpack1.0072AF5C 2<-----删除50个以上员工!
0072F8FA E8 21A7FFFF call Unpack1.0072A020 3<-----试用期计算!
0072F8FF 85C0 test eax,eax
0072F901 7E 26 jle short Unpack1.0072F929
2: 0072F8F5 的 call Unpack1.0072AF5C: 启动时删除员工!!!
0072AF5C /$ 55 push ebp 《--修改为ret!
0072AF5D |. 8BEC mov ebp,esp
0072AF5F |. B9 0E000000 mov ecx,0E
0072AF64 |> 6A 00 /push 0
0072AF66 |. 6A 00 |push 0
0072AF68 |. 49 |dec ecx
0072AF69 |.^ 75 F9 \jnz short Unpack1.0072AF>
0072AF6B |. 53 push ebx
0072AF6C |. 8B1D DC4C7300 mov ebx,dword ptr ds:[734>; Unpack1.00738A50
0072AF72 |. 33C0 xor eax,eax
0072AF74 |. 55 push ebp
..........
0072B100 |. 8D45 94 lea eax,dword ptr ss:[ebp-6C]
0072B103 |. BA 06000000 mov edx,6
0072B108 |. E8 479ACDFF call Unpacked.00404B54
0072B10D |. 8B55 94 mov edx,dword ptr ss:[ebp-6C]
0072B110 |. A1 E4457300 mov eax,dword ptr ds:[7345E4]
0072B115 |. 8B00 mov eax,dword ptr ds:[eax]
0072B117 |. E8 A038D2FF call Unpacked.0044E9BC
0072B11C |. E8 1FF9FFFF call Unpacked.0072AA40
0072B121 |. E8 CEFAFFFF call Unpacked.0072ABF4
0072B126 |. E8 A1F4FFFF call Unpacked.0072A5CC
0072B12B |. E8 78FCFFFF call Unpacked.0072ADA8
0072B130 |. 33C0 xor eax,eax
0072B132 |. 5A pop edx
0072B133 |. 59 pop ecx
0072B134 |. 59 pop ecx
..........
当然,代码很长,我试了一下“空城计”,就是直截了当的让0072F8F5 的 call Unpack1.0072AF5C返回---修改第一句“55”为"c3"。
运行!嘿,我的员工是55个!(只加了5个),可是,上帝啊,好景不长,当我高兴的点击“浏览员工”想看看我的子民时,我的员工又只有50
个了!还有暗丁!可是如何找呢?大虾们有好方法诰诉我下。一时没了主意,只好来莱鸟的手段!我把0072F8F5 的 call中的所有子call的入
口处全下断---莱鸟把它叫做“全面反击”,我想是这些子call在别处被调用了啊(后来证明事实如此,如果不是那就没有办法了,真的很莱啊
)。很快我找到这:
00685808 |. 55 push ebp
00685809 |. 68 73586800 push Unpack2.00685873
0068580E |. 64:FF30 push dword ptr fs:[eax]
00685811 |. 64:8920 mov dword ptr fs:[eax],esp
00685814 |. E8 27520A00 call Unpack2.0072AA40 <<<<<<<<<<<<<<<这!!!删除了!!!!
00685819 |. E8 D6530A00 call Unpack2.0072ABF4 <<<<<<<<<<<<<<<这!!!再次删除!!!!
0068581E |. 8B45 FC mov eax,dword ptr ss:[ebp-4]
00685821 |. 33D2 xor edx,edx
00685823 |. 8990 60070000 mov dword ptr ds:[eax+760],edx
00685829 |. 8B45 FC mov eax,dword ptr ss:[ebp-4]
0068582C |. 8B80 B8030000 mov eax,dword ptr ds:[eax+3B8]
00685832 |. 8B80 A8020000 mov eax,dword ptr ds:[eax+2A8]
00685838 |. E8 DB53D9FF call Unpack2.0041AC18
0068583D |. 48 dec eax
还不只一次,是连续二次!这地方多次被call,我只好再次用上"空城计",把Unpack2.0072AA40 和call Unpack2.0072ABF4的第一句ret了事!
到这基本算是完了,可那个试用期提示看起来总感觉不舒服,于是下bp messageboxa,立即拦了下来,shift+f9到这:
004706D1 |. 64:8921 mov dword ptr fs:[ecx],esp
004706D4 |. 53 push ebx ; /Style
004706D5 |. 57 push edi ; |Title
004706D6 |. 56 push esi ; |Text
004706D7 |. 8B45 FC mov eax,dword ptr ss:[ebp-4] ; |
004706DA |. 8B40 30 mov eax,dword ptr ds:[eax+30] ; |
004706DD |. 50 push eax ; |hOwner
004706DE |. E8 0976F9FF call Unpack1.00407CEC ; \MessageBoxA
004706E3 |. 8945 F8 mov dword ptr ss:[ebp-8],eax ; 《---停于此!
004706E6 |. 33C0 xor eax,eax
莱鸟一时高兴又唱了一出“空城计”:
004705F8 /$ 55 push ebp <<----莱鸟ret了这!
004705F9 |. 8BEC mov ebp,esp
004705FB |. 83C4 AC add esp,-54
004705FE |. 53 push ebx
004705FF |. 56 push esi
莱鸟这下犯大错了,我返回了所有call,也包括那些正常调用,所以,俺的程序退不出了,屋~~~~~~~(教训:“空城计”不能乱唱!)
我只好nop这了:
0072F918 A1 1C4C7300 mov eax,dword ptr ds:[734C1C]
0072F91D 8B00 mov eax,dword ptr ds:[eax]
0072F91F E8 D40CD4FF call Unpack1.004705F8 <-------------提示:你还可用XXXXXX天!nop掉
0072F924 E9 AC000000 jmp Unpack1.0072F9D5
0072F929 6A 00 push 0
到这我收工了,可是那个打印.....
006BA4C0 B8 D4A46B00 MOV EAX,6BA4D4 \->: 您使用的是我公司产品的试用版本。打印只有正试版中才有。
原版本是可用的,脱壳后就没了??我跟到这就没法子了:
有关打印:<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<请高手指教!
0044B790 55 push ebp
0044B791 8BEC mov ebp,esp
0044B793 51 push ecx
0044B794 53 push ebx
0044B795 8D5D FC lea ebx,dword ptr ss:[ebp-4]
0044B798 A1 DC0B7300 mov eax,dword ptr ds:[730BDC]
0044B79D 8B55 08 mov edx,dword ptr ss:[ebp+8]
0044B7A0 8990 80010000 mov dword ptr ds:[eax+180],edx
0044B7A6 A1 DC0B7300 mov eax,dword ptr ds:[730BDC]
0044B7AB 8B80 8C010000 mov eax,dword ptr ds:[eax+18C]
0044B7B1 50 push eax
0044B7B2 6A FC push -4
0044B7B4 8B45 08 mov eax,dword ptr ss:[ebp+8]
0044B7B7 50 push eax
0044B7B8 E8 7FC6FBFF call manpower.00407E3C ; jmp to USER32.SetWindowLongA
0044B7BD 6A F0 push -10
0044B7BF 8B45 08 mov eax,dword ptr ss:[ebp+8]
0044B7C2 50 push eax
0044B7C3 E8 14C4FBFF call manpower.00407BDC ; jmp to USER32.GetWindowLongA
0044B7C8 A9 00000040 test eax,40000000
0044B7CD 74 1E je short manpower.0044B7ED
0044B7CF 6A F4 push -0C
0044B7D1 8B45 08 mov eax,dword ptr ss:[ebp+8]
0044B7D4 50 push eax
0044B7D5 E8 02C4FBFF call manpower.00407BDC ; jmp to USER32.GetWindowLongA
0044B7DA 85C0 test eax,eax
0044B7DC 75 0F jnz short manpower.0044B7ED
0044B7DE 8B45 08 mov eax,dword ptr ss:[ebp+8]
0044B7E1 50 push eax
0044B7E2 6A F4 push -0C
0044B7E4 8B45 08 mov eax,dword ptr ss:[ebp+8]
0044B7E7 50 push eax
0044B7E8 E8 4FC6FBFF call manpower.00407E3C ; jmp to USER32.SetWindowLongA
0044B7ED A1 DC0B7300 mov eax,dword ptr ds:[730BDC]
0044B7F2 50 push eax
0044B7F3 0FB705 AE6B7300 movzx eax,word ptr ds:[736BAE]
0044B7FA 50 push eax
0044B7FB 8B45 08 mov eax,dword ptr ss:[ebp+8]
0044B7FE 50 push eax
0044B7FF E8 08C6FBFF call manpower.00407E0C ; jmp to USER32.SetPropA
0044B804 A1 DC0B7300 mov eax,dword ptr ds:[730BDC]
0044B809 50 push eax
0044B80A 0FB705 AC6B7300 movzx eax,word ptr ds:[736BAC]
0044B811 50 push eax
0044B812 8B45 08 mov eax,dword ptr ss:[ebp+8]
0044B815 50 push eax
0044B816 E8 F1C5FBFF call manpower.00407E0C ; jmp to USER32.SetPropA
0044B81B FF75 14 push dword ptr ss:[ebp+14]
0044B81E FF75 10 push dword ptr ss:[ebp+10]
0044B821 FF75 0C push dword ptr ss:[ebp+C]
0044B824 FF75 08 push dword ptr ss:[ebp+8]
0044B827 A1 DC0B7300 mov eax,dword ptr ds:[730BDC]
0044B82C C705 DC0B7300 00>mov dword ptr ds:[730BDC],0
0044B836 FF90 8C010000 call dword ptr ds:[eax+18C]
0044B83C 8945 FC mov dword ptr ss:[ebp-4],eax
0044B83F 8B03 mov eax,dword ptr ds:[ebx]
0044B841 5B pop ebx
0044B842 59 pop ecx
0044B843 5D pop ebp
0044B844 C2 1000 retn 10
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!