好友
阅读权限10
听众
最后登录1970-1-1
|
本帖最后由 llight 于 2009-9-9 14:10 编辑
【文章标题】: "流星网络电视"简单破解
【文章作者】: Mr.vit
【下载地址】: 自己搜索下载
【加壳方式】: ASPack v2.12
【编写语言】: Delphi
【使用工具】: FastScanner OD
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
首先用FastScanner查一下壳,ASPack v2.12 -> Alexey Solodovnikov
脱壳很简单,可以用脱壳工具,也可以用OD
用OD载入
005A7001 M> 60 pushad
005A7002 E8 03000000 call MeteorNe.005A700A ; hr esp
005A7007 - E9 EB045D45 jmp 45B774F7
005A700C 55 push ebp
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
用ESP定律
005A73B0 /75 08 jnz short MeteorNe.005A73BA
005A73B2 |B8 01000000 mov eax,1
005A73B7 |C2 0C00 retn 0C
005A73BA \68 6CF95100 push MeteorNe.0051F96C ; 程序入口点
005A73BF C3 retn ; 返回
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
F8单步,就到入口点了,然后脱一下壳就可以了
现在进行破解,软件是重启验证的,但是破解起来还是简单的
打开软件,当你填入用户名与注册码的时候,点击注册,这时候会出现两种情况
1.点注册没有反应
2.点注册后就把马上关闭软件
这主要是输入的注册码是有位数规定的,输入注册码的时候,先输入一位,再点注册,没有反应,再输入两位,再点注册
直到输入关闭为止(在没有分析软件之前,这是不一个不错的方法)
直到输入十六位的时候,软件才会关闭
现在用OD载入软件,查一下字符,看看有没有用的信息
00517F46 mov edx,Unpack.0051831C nmmd-sgpj
00517F4B mov eax,Unpack.00518330 [标准版]
00517FE1 mov edx,Unpack.00518308 impressions
0051800A mov edx,Unpack.0051831C nmmd-sgpj
0051800F mov eax,Unpack.00518344 [vip版]
005180C4 mov edx,Unpack.00518308 impressions
005180ED mov edx,Unpack.0051831C nmmd-sgpj
005180F2 mov eax,Unpack.00518354 [钻石版]
00518134 mov edx,Unpack.00518368 sgpj-nmmd
找到了吧?嘿嘿,点击钻石版吧,这个是最高级别的
这样就来了
005180DB E8 74CDEEFF call Unpack.00404E54
005180E0 C705 60925200 030000>mov dword ptr ds:[529260],3
005180EA 8D4D F8 lea ecx,dword ptr ss:[ebp-8]
005180ED BA 1C835100 mov edx,Unpack.0051831C ; nmmd-sgpj
005180F2 B8 54835100 mov eax,Unpack.00518354 ; [钻石版]
005180F7 E8 4001F6FF call Unpack.0047823C
005180FC 8D85 70FFFFFF lea eax,dword ptr ss:[ebp-90]
再向上看看
00517E2F 83E8 0A sub eax,0A ;这里下个断点
00517E32 74 62 je short Unpack.00517E96 ; 跳向标准版
00517E34 83E8 02 sub eax,2
00517E37 74 17 je short Unpack.00517E50
00517E39 83E8 02 sub eax,2
00517E3C 0F84 18010000 je Unpack.00517F5A ; 跳向VIP版
00517E42 83E8 02 sub eax,2
00517E45 0F84 D3010000 je Unpack.0051801E ; 跳向钻石版
00517E4B E9 A5030000 jmp Unpack.005181F5
00517E50 68 58925200 push Unpack.00529258
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
00517F34 E8 1BCFEEFF call Unpack.00404E54
00517F39 C705 60925200 010000>mov dword ptr ds:[529260],1
00517F43 8D4D F8 lea ecx,dword ptr ss:[ebp-8]
00517F46 BA 1C835100 mov edx,Unpack.0051831C ; nmmd-sgpj
00517F4B B8 30835100 mov eax,Unpack.00518330 ; [标准版]
00517F50 E8 E702F6FF call Unpack.0047823C
00517F55 E9 A2010000 jmp Unpack.005180FC
00517F5A 68 58925200 push Unpack.00529258
00517F5F 8D45 A8 lea eax,dword ptr ss:[ebp-58]
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
00517FF8 E8 57CEEEFF call Unpack.00404E54
00517FFD C705 60925200 020000>mov dword ptr ds:[529260],2
00518007 8D4D F8 lea ecx,dword ptr ss:[ebp-8]
0051800A BA 1C835100 mov edx,Unpack.0051831C ; nmmd-sgpj
0051800F B8 44835100 mov eax,Unpack.00518344 ; [vip版]
00518014 E8 2302F6FF call Unpack.0047823C
00518019 E9 DE000000 jmp Unpack.005180FC
0051801E 68 58925200 push Unpack.00529258
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
005180E0 C705 60925200 030000>mov dword ptr ds:[529260],3
005180EA 8D4D F8 lea ecx,dword ptr ss:[ebp-8]
005180ED BA 1C835100 mov edx,Unpack.0051831C ; nmmd-sgpj
005180F2 B8 54835100 mov eax,Unpack.00518354 ; [钻石版]
005180F7 E8 4001F6FF call Unpack.0047823C
005180FC 8D85 70FFFFFF lea eax,dword ptr ss:[ebp-90]
看到了吧,上面很多跳,跳向不同的版本,那么就在00517E2F下一个断点
然后运行程序,断下来了,这时候看一下寄存器当中EAX的值为十六进制的A即为10
执行 sub eax,0A (相当于eax=eax-10)后,eax的值为零,这样je就实现了跳转
这里讲一下JE指令
跳转条件为上一表达式的计算结果为零,或者比较的两个数相等,标志位为ZF=1
这样程序就会跳向标准版,但是我们要实现的是跳向钻石版,所以有两种方法可以改
一种是NOP掉JE指令
一种是输入二十四位的注册码(分析得来的,可以根据几个SUB指令与观察EAX的值)
还是关闭OD,打开程序,输入用户名与二十四位的注册码
接着再用OD载入程序
运行程序,断到
00517E2F 83E8 0A sub eax,0A ;这里下个断点
00517E32 74 62 je short Unpack.00517E96 ; 跳向标准版
00517E34 83E8 02 sub eax,2
00517E37 74 17 je short Unpack.00517E50
00517E39 83E8 02 sub eax,2
00517E3C 0F84 18010000 je Unpack.00517F5A ; 跳向VIP版
00517E42 83E8 02 sub eax,2
00517E45 0F84 D3010000 je Unpack.0051801E ; 跳向钻石版这里就实现了
00517E4B E9 A5030000 jmp Unpack.005181F5
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
可以看一下EAX的值为十六进制的10,即十进制的16
接下来单步跟踪
00518034 E8 1BCEEEFF call Unpack.00404E54
00518039 FF75 8C push dword ptr ss:[ebp-74]
0051803C 8D45 88 lea eax,dword ptr ss:[ebp-78] ; 这里开始注意堆栈窗口了
0051803F 50 push eax ;堆栈会出现一段段数字与字母
00518040 B9 07000000 mov ecx,7 ;连接一下就是注册码了,刚好24位
00518045 BA 12000000 mov edx,12
0051804A 8B45 FC mov eax,dword ptr ss:[ebp-4]
0051804D E8 02CEEEFF call Unpack.00404E54
00518052 FF75 88 push dword ptr ss:[ebp-78]
00518055 8D45 84 lea eax,dword ptr ss:[ebp-7C]
00518058 50 push eax
00518059 B9 03000000 mov ecx,3
0051805E BA 03000000 mov edx,3
00518063 8B45 FC mov eax,dword ptr ss:[ebp-4]
00518066 E8 E9CDEEFF call Unpack.00404E54
0051806B FF75 84 push dword ptr ss:[ebp-7C]
0051806E 8D45 80 lea eax,dword ptr ss:[ebp-80]
00518071 50 push eax
00518072 B9 03000000 mov ecx,3
00518077 BA 0D000000 mov edx,0D
0051807C 8B45 FC mov eax,dword ptr ss:[ebp-4]
0051807F E8 D0CDEEFF call Unpack.00404E54
00518084 FF75 80 push dword ptr ss:[ebp-80]
00518087 8D85 7CFFFFFF lea eax,dword ptr ss:[ebp-84]
0051808D 50 push eax
0051808E B9 05000000 mov ecx,5
00518093 BA 16000000 mov edx,16
00518098 8B45 FC mov eax,dword ptr ss:[ebp-4]
0051809B E8 B4CDEEFF call Unpack.00404E54
005180A0 FFB5 7CFFFFFF push dword ptr ss:[ebp-84]
005180A6 8D45 90 lea eax,dword ptr ss:[ebp-70]
005180A9 BA 05000000 mov edx,5
005180AE E8 01CCEEFF call Unpack.00404CB4
005180B3 8B45 90 mov eax,dword ptr ss:[ebp-70] ; 注册码来了,与堆栈里出现的一致
005180B6 8D55 94 lea edx,dword ptr ss:[ebp-6C]
005180B9 E8 6A0FF6FF call Unpack.00479028
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
堆栈会出现这样:
0012FC8C 00F02238 ASCII "4dd82"
0012FC90 00F02228 ASCII "1b1"
0012FC94 00EE6094 ASCII "cfb"
0012FC98 00F02214 ASCII "42944dd"
0012FC9C 00F02200 ASCII "ad5041"
这里我的注册码:ad504142944ddcfb1b14dd82
这样就简单的追出了注册码,找爆破点也很容易
-------------------------------------------------------------------------
大家可以拿FASTTV练练,因为这两个注册机制基本相同
【版权声明】: 转载请注明作者并保持文章的完整, 谢谢! |
免费评分
-
查看全部评分
|