两年前在看雪发来求码的帖子。很久没碰这东东了,今天突发奇想没想到还活着。。。备份一下
自己本身还是临时会员,拿不出什么料来转正,现将这次经过写出来让大家点评点评。。。鉴于自己水平有限,不敢在各位大牛面前卖弄,这篇就写给像我一样的菜鸟学习交流一下吧,本人菜鸟,还望各位大牛们赐教。。。
废话不多说,下面进入正文···
第一步:用PEiD检测壳···
UPX 0.89.6 – 1.02 / 1.05 – 1.24 -> Markus & Laszlo
第二步:脱壳
1、
00673C50 > $ 60 PUSHAD
00673C51 . BE 00C05100 MOV ESI,优易ip代.0051C000
00673C56 . 8DBE 0050EEFF LEA EDI,DWORD PTR DS:[ESI+FFEE5000]
00673C5C . 57 PUSH EDI
00673C5D . 83CD FF OR EBP,FFFFFFFF
00673C60 . EB 10 JMP SHORT 优易ip代.00673C72
载入OD后看到 PUSHAD ,既然有入栈,肯定就有出栈···待到出栈之时就是壳恢复了真正的原程序···
0012FF6C 00000000
0012FF70 00000000
0012FF74 0012FF94
0012FF78 0012FF8C
0012FF7C 7FFD3000
0012FF80 00673C50 优易ip代.<模块入口点>
0012FF84 00000000
0012FF88 768CED5A kernel32.BaseThreadInitThunk
第一次压栈后的栈内容~~~接下来就是下断点
2、
输入命令 hw 12FF6C 按 F9
接下来就是出口附近了是不?神奇吧~~
3、
等跳转后再用OD脱壳就是了~~~~~~
用PEiD检测
Microsoft Visual C++ 6.0
第三步:破解···
1、
点击 正版认证
结果发现要购买序列号,而且还是网上购买,最杯具的还是通过QQ看来这不是普通的用户名&注册码的玩意了,然后看了下有什么限制。。。找了好久,结果发现就是在程序运行5分钟后会弹出一个框框提示···你懂的。。。
既然不能通过序列号拿到正版,至少可以把这300秒的限制给去除吧。。。Come on~~~
2、
程序要通过检测时间,必定有个计时器,而大部分的程序都是调用SetTimer来实现~~~试了一个,果真行了···
3、
a、用OD载入,在SetTimer设置断点···按F9运行···
b、本想用Alt+F9直接跳回程序领空,结果发现跳回后不是调用SetTimer的地方···
c、执行a
d、既然b这样做不行,就一步一步慢慢来嘛
按F8,看出来的是在哪个领空,如果不是程序领空就按F9,又来到SetTimer,按F8···
循环上一行的步骤,直到回到程序的领空。断点不要取消哦,不然程序一发而不可收拾了。。。从SetTimer来来回回几次后终于回到我们可爱的程序的领空啦···
看注释那是不有 USER32.SetTimer 有就对了···
e、
0048E750 6A 00 PUSH 0
0048E752 68 C8000000 PUSH 0C8
0048E757 6A 01 PUSH 1
0048E759 50 PUSH EAX
0048E75A FF15 ECE54E00 CALL DWORD PTR DS:[<&USER32.SetTimer>] ; USER32.SetTimer
0048E760 8BC7 MOV EAX,EDI
我们往上看有四个 PUSH 。这些就是调用SetTimer所需要的东东,我们所需要做的就是不让这程序产生 SetTimer 这样的事件,这样程序的计时功能就被我们搞定了,嘿嘿···
具体做法就是将 0048E750 6A 00 PUSH 0 这个改为 JMP 0048E760
f、OK,保存~~~~
g、接下来就是检验成功与否,很明显这样理论上是没什么问题的。。。。打开程序运行,嘀嗒嘀嗒,5分钟过去了,竟然又弹出了这东东。。。。纳尼,再来一遍a~f 的步骤,再来一遍后就再也没有提示说5分钟关闭的框框了···
原来程序有两个地方调用SetTimer的地方,不过现在还是未注册的版本,功能基本上可以用,不过现在是没有提示关闭程序了。。。鉴于我的是校园网,调试起来有点不应手。。。
水平有限,欢迎点评~~~
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/tech/safety/219772.html