不容忽视的变量
本帖最后由 mm475 于 2014-12-13 19:44 编辑不容忽视的变量目标软件Registry Victor6, 4, 4, 19多国语言版McAfee出品的一款一流的注册表错误清理及系统性能优化软件,下载地址:http://www.registryvictor.com/查看帮助得知:The free version has some limited functionality. You can scan your computer and detect errors. To remove all the detected items you will need to purchase the full version免费版本有功能限制。您可以扫描和检测错误。删除检测到的错误项,将需要购买完整版废话不多说,查无壳,OD载入运行,试着注册,输入假码123456789,有错误提示框。目测一下貌似简单。F12alt+k调用堆栈: 主线程, 条目 17地址=00FF15D0 堆栈=0043B538函数过程 / 参数=Registry.005222D8调用来自=Registry.0043B533 显示调用结构=00FF15CC我们就来到了0043B533|.E8 A06D0E00 call Registry.005222D8向上反动几下就看到了
0043B43C|.E8 F7B40500 call Registry.004969380043B441|.83F8 01 cmp eax,0x10043B444|.0F85 A4000000 jnz Registry.0043B4EENop掉0043B444|.0F85 A4000000 jnz Registry.0043B4EE就出现了注册成功,但是重启任然是未注册,显然是重启验证,我们先进关键call里去查看查看有2出调用,好吧!我们全下断重启软件重启软件后发现先断在了49491c处,这里是启动验证,经过调试得出494923的jnz不跳就是未注册,必须在让eax出call是值要调整为1。结合上面的分析得出:虽然启动和注册是分开的,但是call是一个,好吧!我们把目光聚焦在call Registry.00496938重新来,断下后F7进cal,好长一段代码在不修改的时候出call eax=0,我们向上找eax有赋值的地方修改,再看信息框处有8次跳转过来,每次跳转都有个eax赋值语句
00496A59|.E8 F62E0800 call Registry.0051995400496A5E|.8B85 F0FAFFFF mov eax,00496A64|.E9 EC0D0000 jmp Registry.00497855
00496C12|.E8 3D2D0800 call Registry.0051995400496C17|.8B85 E8FAFFFF mov eax,00496C1D|.E9 330C0000 jmp Registry.00497855
00496E05|.E8 4A2B0800 call Registry.0051995400496E0A|.8B85 54FAFFFF mov eax,00496E10|.E9 400A0000 jmp Registry.00497855
00496FB9|.E8 96290800 call Registry.0051995400496FBE|.8B85 44FAFFFF mov eax,00496FC4|.E9 8C080000 jmp Registry.00497855
004972AC|.E8 A3260800 call Registry.00519954004972B1|.8B85 34FAFFFF mov eax,004972B7|.E9 99050000 jmp Registry.00497855
0049746F|.E8 E0240800 call Registry.0051995400497474|.8B85 20FAFFFF mov eax,0049747A|.E9 D6030000 jmp Registry.00497855
0049764E|.E8 01230800 call Registry.0051995400497653|.8B85 0CFAFFFF mov eax,00497659|.E9 F7010000 jmp Registry.00497855
00497765|.E8 EA210800 call Registry.005199540049776A|.8B85 04FAFFFF mov eax,00497770|.E9 E0000000 jmp Registry.00497855Call 00519954 被调用多次,每次出call都是个变量给eax赋值,结合网站上购买协议,我们暂且猜测这是不同版本的注册。好了,先从第二个下手,为什么第二个?因为第一个被跳过了,修改代码地方越少越好,所以从第二个入手。注册成功但是修复错误时出现显然注册是不完全的!我们要想办法断在上面提示框出来之前!!………………漫长的调试………………找到给变量赋值的地方查找参考地址常量00496BB3 C785 E8FAFFFF>mov dword ptr ss:,0x1 ;给变量赋初值觉定去0043dcba看看,好长的代码!循环套循环,难道是在做某个验证?断首下断点点修复错误成功断下。F8单步0043DBFA |.E8 B1410000 call Registry.00441DB00043DBFF |.85C0 test eax,eax0043DC01 |.0F85 52010000 jnz Registry.0043DD590043DC07 |.6A 00 push 0x00043DC09 |.8D8D F0FAFFFF lea ecx,0043DC0F |.E8 0CFB0400 call Registry.0048D7200043DC14 |.C745 FC 00000>mov ,0x00043DC1B |.8B85 F8F8FFFF mov eax,0043DC21 |.8945 C8 mov ,eax0043DC24 |.8D8D F0FAFFFF lea ecx,0043DC2A |.E8 CAC80D00 call Registry.0051A4F9 ;启动提示框不要提示框出现0043DC01的JNZ就必须要跳,我们F7进0043DBFA的call。进call后发现好熟悉的模式。改掉变量赋值后提示框没有了,但是。。。。。。。。错误并没有修复,继续。。。。。。查找地址常量和以前的赋值地点变化了很多。有4处赋值,其中第四处是为了干掉提示框修改的,那我们修改掉上面几处看看吧!完美的KO总结:软件启动、注册、功能分别验证。启动和注册调用了同一个call,而功能的验证是另外的call。共同点是所有的值全是靠变量传递的!假如我们是作者,那个功能验证不出任何提示,没有那个提示框,将要复杂的多,真是无从下手了!哈哈~~~对了,最开始提到的8个跳转,有兴趣可以试试是有时间的版本由于时间仓促,刚才有网友提醒我!我试了下,其他地方还有功能限制,我会在下面的帖子中处理好。再发下载链接
学习了感谢分享,占个沙发{:5_119:}
穆菲菲 发表于 2014-12-13 17:27
学习了感谢分享,占个沙发
哈哈!!就你一个人看,调试加写文章拍图片弄了一下午。我还要谢谢你呢
撸主讲的好详细啊。赞一个!
写的相当的好我喜欢这样的图文教程赞一个
学习了,谢谢楼主分享!!
从来就不敢忽视全局变量
这个软件的检测点跟各个功能有关,最好把所有功能都测试一遍。
变量不会找呀
学习下了。不错的哦