- UID
- 2198
注册时间2005-6-29
阅读权限255
最后登录1970-1-1
副坛主
该用户从未签到
|
HomePage: http://www.ariolic.com/
误打误撞错下了该软件,快下班的时候简单分析了一下,不遂人愿,居然是双进程,紫禁城还有壳 ...
虽然难度不大,还是发帖子整理下,权当好久没写文章了,灌水冒个泡。OD 带参来搞紫禁城:
不会脱壳,带壳操,运行软件后,输入错误的注册码后,bp MessageBoxW :
- <a href="tel:<a href="tel:00407862">00407862</a>">00407862</a> |. 51 PUSH ECX ; Name
- <a href="tel:<a href="tel:00407863">00407863</a>">00407863</a> |. 50 PUSH EAX ; Key
- <a href="tel:<a href="tel:00407864">00407864</a>">00407864</a> |. E8 0B8F1700 CALL ASmartCo.00580774
- <a href="tel:<a href="tel:00407869">00407869</a>">00407869</a> |. 85C0 TEST EAX, EAX
- 0040786B |. 74 73 JE SHORT ASmartCo.004078E0 ; 跳向失败
- ... ...
- 004078E0 |> \8B55 D8 MOV EDX, DWORD PTR SS:[EBP-28]
- 004078E3 |. 6A 00 PUSH 0 ; /Style = MB_OK|MB_APPLMODAL
- 004078E5 |. <a href="tel:<a href="tel:68 40875900">68 40875900</a>">68 40875900</a> PUSH ASmartCo.00598740 ; |Active SMART
- 004078EA |. 52 PUSH EDX ; |Text = "Wrong registration information. Please check it and try again."
- 004078EB |. 6A 00 PUSH 0 ; |hOwner = NULL
- 004078ED |. FF15 E4785900 CALL NEAR DWORD PTR DS:[5978E4] ; \MessageBoxW
- 004078F3 |> 8B85 7CFCFFFF MOV EAX, DWORD PTR SS:[EBP-384]
复制代码
跟进CALL看下:
- <a href="tel:<a href="tel:00580762">00580762</a>">00580762</a> $- FF25 38795900 JMP NEAR DWORD PTR DS:[597938] ; version.VerQueryValueW
- <a href="tel:<a href="tel:00580768">00580768</a>">00580768</a> $- FF25 34795900 JMP NEAR DWORD PTR DS:[597934] ; version.GetFileVersionInfoW
- 0058076E $- FF25 30795900 JMP NEAR DWORD PTR DS:[597930] ; version.GetFileVersionInfoSizeW
- <a href="tel:<a href="tel:00580774">00580774</a>">00580774</a> $- FF25 64705900 JMP NEAR DWORD PTR DS:[597064] ; 弹窗验证是否成功
- 0058077A $- FF25 60705900 JMP NEAR DWORD PTR DS:[597060]
- <a href="tel:<a href="tel:00580780">00580780</a>">00580780</a> $- FF25 68705900 JMP NEAR DWORD PTR DS:[597068]
复制代码
提示重启验证 ... 在这里下硬件断点 : 00580774 , 无果, 于是只能靠猜 ... 对这里 0058077A,00580780 下硬件断点 。
重启后中断了,中断在这里:程序有四处调用:
00580780 $- FF25 68705900 JMP NEAR DWORD PTR DS:[597068]
DS:[00597068]=0037CF20
本地调用来自 004081BC, 0040C4F2, 0040E5CC, 004354D1
一处是启动时弹窗,一处是验证是否成功修改标题,一处是点HELP下拉菜单,一处是显示关于。(这些不是猜的啦,是调试看到的 ... )
我们就先来看下验证成功修改标题这里:
- 0040E5CC |. E8 AF211700 CALL ASmartCo.00580780
- 0040E5D1 |. 8B07 MOV EAX, DWORD PTR DS:[EDI]
- 0040E5D3 |. 85C0 TEST EAX, EAX
- 0040E5D5 |. 0F84 81000000 JE ASmartCo.0040E65C // 首先这里不能跳
- 0040E5DB |. B9 CC7E5900 MOV ECX, ASmartCo.00597ECC
- 0040E5E0 |> 8A10 /MOV DL, BYTE PTR DS:[EAX] // 若不跳则 EAX = 0 必异常
- 0040E5E2 |. 3A11 |CMP DL, BYTE PTR DS:[ECX]
- 0040E5E4 |. 75 1A |JNZ SHORT ASmartCo.0040E600
- 0040E5E6 |. 84D2 |TEST DL, DL
- 0040E5E8 |. 74 12 |JE SHORT ASmartCo.0040E5FC
- 0040E5EA |. 8A50 01 |MOV DL, BYTE PTR DS:[EAX+1]
- 0040E5ED |. 3A51 01 |CMP DL, BYTE PTR DS:[ECX+1]
- 0040E5F0 |. 75 0E |JNZ SHORT ASmartCo.0040E600
- 0040E5F2 |. 83C0 02 |ADD EAX, 2
- 0040E5F5 |. 83C1 02 |ADD ECX, 2
- 0040E5F8 |. 84D2 |TEST DL, DL
- 0040E5FA |.^ 75 E4 \JNZ SHORT ASmartCo.0040E5E0
- 0040E5FC |> 33C0 XOR EAX, EAX
- 0040E5FE |. EB 05 JMP SHORT ASmartCo.0040E605
- 0040E600 |> 1BC0 SBB EAX, EAX
- 0040E602 |. 83D8 FF SBB EAX, -1
- 0040E605 |> 85C0 TEST EAX, EAX
- 0040E607 |. 74 53 JE SHORT ASmartCo.0040E65C
- 0040E609 |. 6A 00 PUSH 0
- 0040E60B |. <a href="tel:<a href="tel:68 20050000">68 20050000</a>">68 20050000</a> PUSH 520
- 0040E610 |. 8BCE MOV ECX, ESI
- 0040E612 |. E8 3A140600 CALL ASmartCo.0046FA51
- 0040E617 |. 8BC8 MOV ECX, EAX
- 0040E619 |. E8 8F160600 CALL ASmartCo.0046FCAD
- 0040E61E |. 6A 00 PUSH 0
- 0040E620 |. 8D8E F8780000 LEA ECX, DWORD PTR DS:[ESI+78F8]
- 0040E626 |. E8 82160600 CALL ASmartCo.0046FCAD
- 0040E62B |. 6A 00 PUSH 0
- 0040E62D |. 68 1D050000 PUSH 51D
- 0040E632 |. 8BCE MOV ECX, ESI
- 0040E634 |. E8 18140600 CALL ASmartCo.0046FA51
- 0040E639 |. 8BC8 MOV ECX, EAX
- 0040E63B |. E8 6D160600 CALL ASmartCo.0046FCAD
- 0040E640 |. 6A 00 PUSH 0
- 0040E642 |. 68 1E050000 PUSH 51E
- 0040E647 |. 8BCE MOV ECX, ESI
- 0040E649 |. E8 <a href="tel:<a href="tel:03140600">03140600</a>">03140600</a> CALL ASmartCo.0046FA51
- 0040E64E |. 8BC8 MOV ECX, EAX
- 0040E650 |. E8 58160600 CALL ASmartCo.0046FCAD
- 0040E655 |. 6A 00 PUSH 0
- 0040E657 |. E9 D8000000 JMP ASmartCo.0040E734
- 0040E65C |> 8B45 B0 MOV EAX, DWORD PTR SS:[EBP-50] ;这里就是显示那个 trial version 的标题了
- 0040E65F |. 8B8D 10FFFFFF MOV ECX, DWORD PTR SS:[EBP-F0]
- 0040E665 |. 50 PUSH EAX
- 0040E666 |. 51 PUSH ECX
- 0040E667 |. 8D95 20FFFFFF LEA EDX, DWORD PTR SS:[EBP-E0]
- 0040E66D |. 68 309E5900 PUSH ASmartCo.00599E30 ; %s - [ %s ]
- 0040E672 |. 52 PUSH EDX
- 0040E673 |. E8 E858FFFF CALL ASmartCo.00403F60
- 0040E678 |. 8B9D 20FFFFFF MOV EBX, DWORD PTR SS:[EBP-E0] ; ASmartCo.005F85A0
- 0040E67E |. 83C4 10 ADD ESP, 10
- 0040E681 |. 53 PUSH EBX ; ASmartCo.005F85A0
- 0040E682 |. 8BCE MOV ECX, ESI
- 0040E684 |. E8 59150600 CALL ASmartCo.0046FBE2
- 0040E689 |. 8D85 0CFFFFFF LEA EAX, DWORD PTR SS:[EBP-F4]
- 0040E68F |. 50 PUSH EAX
- 0040E690 |. 8D8D F4FEFFFF LEA ECX, DWORD PTR SS:[EBP-10C]
- 0040E696 |. 51 PUSH ECX
- 0040E697 |. 6A 01 PUSH 1
- 0040E699 |. E8 DC201700 CALL ASmartCo.0058077A
- 0040E69E |. 8B85 0CFFFFFF MOV EAX, DWORD PTR SS:[EBP-F4] ; USER32.75386D91
- 0040E6A4 |. 8986 FC220000 MOV DWORD PTR DS:[ESI+22FC], EAX
- 0040E6AA |. 85C0 TEST EAX, EAX
- 0040E6AC |. 74 20 JE SHORT ASmartCo.0040E6CE
- 0040E6AE |. 8B8E 70240000 MOV ECX, DWORD PTR DS:[ESI+2470]
- 0040E6B4 |. 50 PUSH EAX
- 0040E6B5 |. 51 PUSH ECX
- 0040E6B6 |. 8D95 20FFFFFF LEA EDX, DWORD PTR SS:[EBP-E0]
- 0040E6BC |. 52 PUSH EDX
- 0040E6BD |. E8 9E58FFFF CALL ASmartCo.00403F60
- 0040E6C2 |. 8B9D 20FFFFFF MOV EBX, DWORD PTR SS:[EBP-E0] ; ASmartCo.005F85A0
- 0040E6C8 |. 83C4 0C ADD ESP, 0C
- 0040E6CB |. 53 PUSH EBX ; ASmartCo.005F85A0
- 0040E6CC |. EB 05 JMP SHORT ASmartCo.0040E6D3
- 0040E6CE |> <a href="tel:<a href="tel:68 20955900">68 20955900</a>">68 20955900</a> PUSH ASmartCo.00599520 ; You are running evaluating ActiveSMART. Register to remove limitations.
复制代码
综上所述,修改方案为: 0040E5D7 81==>2E 请仔细体会 。。。
我们发现,这四处关键点类似(特征码 ...):
0040E5FC |> \33C0 XOR EAX, EAX ; 这里EAX不能清零
0040E5FE |. EB 05 JMP SHORT ASmartCo.0040E605
0040E600 |> 1BC0 SBB EAX, EAX
0040E602 |. 83D8 FF SBB EAX, -1
0040E605 |> 85C0 TEST EAX, EAX
0040E607 |. 74 53 JE SHORT ASmartCo.0040E65C ; 这里不能跳
所以其他几处我们 33CO ==> B801
于是PATCH这四处,但是程序显示注册处为空,so ... 跟踪看下,Patch内存数据让其显示注册给 Nisy ...
但是大家发现这样貌似不妥,启动时就会报一个错误,why ... 因为我们把注册信息path进去,程序读取之后很不爽 ...
所以我们还得动个小聪明,这样就不报错了,有兴趣的朋友请去查看补丁自行收藏学习,多改一个字节即可。
最终成品 ~ (~﹃~)~zZ 去, 虽然玩OD会很累,也不是风华正茂的年纪了,但是我发现自己还是喜欢OD下自己感兴趣的软件,这个爱好自己还是可以收获快乐的。
|
评分
-
查看全部评分
|