ActiveSMART v2.9.7.144 简单分析
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:
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: ; \MessageBoxW
004078F3|>8B85 7CFCFFFF MOV EAX, DWORD PTR SS:
跟进CALL看下:
<a href="tel:<a href="tel:00580762">00580762</a>">00580762</a> $- FF25 38795900 JMP NEAR DWORD PTR DS: ;version.VerQueryValueW
<a href="tel:<a href="tel:00580768">00580768</a>">00580768</a> $- FF25 34795900 JMP NEAR DWORD PTR DS: ;version.GetFileVersionInfoW
0058076E $- FF25 30795900 JMP NEAR DWORD PTR DS: ;version.GetFileVersionInfoSizeW
<a href="tel:<a href="tel:00580774">00580774</a>">00580774</a> $- FF25 64705900 JMP NEAR DWORD PTR DS: ;弹窗验证是否成功
0058077A $- FF25 60705900 JMP NEAR DWORD PTR DS:
<a href="tel:<a href="tel:00580780">00580780</a>">00580780</a> $- FF25 68705900 JMP NEAR DWORD PTR DS:
提示重启验证 ...在这里下硬件断点 : 00580774 , 无果, 于是只能靠猜 ...对这里 0058077A,00580780 下硬件断点 。
重启后中断了,中断在这里:程序有四处调用:
00580780 $- FF25 68705900 JMP NEAR DWORD PTR DS:
DS:=0037CF20
本地调用来自 004081BC, 0040C4F2, 0040E5CC, 004354D1
一处是启动时弹窗,一处是验证是否成功修改标题,一处是点HELP下拉菜单,一处是显示关于。(这些不是猜的啦,是调试看到的 ... )
我们就先来看下验证成功修改标题这里:
0040E5CC|.E8 AF211700 CALL ASmartCo.00580780
0040E5D1|.8B07 MOV EAX, DWORD PTR DS:
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 = 0 必异常
0040E5E2|.3A11 |CMP DL, BYTE PTR DS:
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:
0040E5ED|.3A51 01 |CMP DL, BYTE PTR DS:
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:
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: ;这里就是显示那个 trial version 的标题了
0040E65F|.8B8D 10FFFFFF MOV ECX, DWORD PTR SS:
0040E665|.50 PUSH EAX
0040E666|.51 PUSH ECX
0040E667|.8D95 20FFFFFF LEA EDX, DWORD PTR SS:
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: ;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:
0040E68F|.50 PUSH EAX
0040E690|.8D8D F4FEFFFF LEA ECX, DWORD PTR SS:
0040E696|.51 PUSH ECX
0040E697|.6A 01 PUSH 1
0040E699|.E8 DC201700 CALL ASmartCo.0058077A
0040E69E|.8B85 0CFFFFFF MOV EAX, DWORD PTR SS: ;USER32.75386D91
0040E6A4|.8986 FC220000 MOV DWORD PTR DS:, EAX
0040E6AA|.85C0 TEST EAX, EAX
0040E6AC|.74 20 JE SHORT ASmartCo.0040E6CE
0040E6AE|.8B8E 70240000 MOV ECX, DWORD PTR DS:
0040E6B4|.50 PUSH EAX
0040E6B5|.51 PUSH ECX
0040E6B6|.8D95 20FFFFFF LEA EDX, DWORD PTR SS:
0040E6BC|.52 PUSH EDX
0040E6BD|.E8 9E58FFFF CALL ASmartCo.00403F60
0040E6C2|.8B9D 20FFFFFF MOV EBX, DWORD PTR SS: ;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.
综上所述,修改方案为: 0040E5D781==>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下自己感兴趣的软件,这个爱好自己还是可以收获快乐的。
大神出手,教材简单实用 应该将path => patch, 感谢分享方法,学习了 轩轩1018 发表于 2015-8-8 10:35
大神出手,教材简单实用
软件难度中等,看破文可能难以得其精妙,若有兴趣可以先调试后再来对照破文。
就像是破解对方设置好的一道道关卡,一旦全部通过,心情自然是很愉悦。这叫智慧的挑战。 我想知道的是这个带参调试的参数是怎么取得的{:soso_e154:} 跟踪的时候有看到过这个-O 但是不晓得那个就是参数 是不是需要下 双进程的断点
膜拜神贴,后面的请保持队形~ Rooking 发表于 2015-8-8 12:06
跟踪的时候有看到过这个-O 但是不晓得那个就是参数 是不是需要下 双进程的断点
OD 打开调试程序的时候输入从process explorer中获取的参数即可
Nisy 发表于 2015-8-8 13:16
OD 打开调试程序的时候输入从process explorer中获取的参数即可
我是跟到最后 跟到那里了 发现可以patch掉这个参数
页:
[1]
2