学习破解之路:【无线天5.29】寻码过程
本帖最后由 lmze2000 于 2015-5-26 20:43 编辑做为刚刚学得一点点逆向皮毛的小白,为能帮助一些人而有点小成就感{:17_1068:}
也深知,从一点不会摸索着前行的艰难,很多时候都是在猜测与试验中一点点的往前撑着走,
应坛友Jiejec的要求,录制了一个简单的视频,由于是第一次操作,声音不好听,还有些害羞呀,不习惯讲解,就全是文字说明的吧。
大神们就不要鄙视我了,给指点学习的方向和意见呀~~{:17_1062:}
链接:http://pan.baidu.com/s/19Aiqq 密码:c7gd
做为小白一名,向那些分享教程的前辈、同辈们致敬!!{:1_931:},发现写完一篇排版精美的教程是需要多么大的精力,特别是写了一半然后所有的东西全没了,还要再重新来一遍的时候。(刚刚写完一半,结果贴不上代码,然后切换了下浏览器的兼容模式,结果已经写好的全没有了。)
软件:无线天5.29windows版
下载地址:http://wifi.corpcorp.com/down.html
壳:经查无壳
所用工具:Cari Olldby
介绍就不多做了,上一张软件安装完成后的截图。安装完是试用7天,20用户数量(这篇破文一路坎坷,先前的截图,和后来测试时的代码完全不一样了,还得重新截一遍图{:17_1084:})
一、现在我们开始动手了,经过这么多天的学习,我们一般动手前,都是要先查一下壳,看有没有壳保护程序。经查这个无线天是裸奔的,这对我们小新手来说是最好的消息。
接下来的步骤就是,先运行程序,如上一张图,找到注册的位置,先注册一下,看看出错信息,来初步掌握一下注册的流程,是直接弹出错误信息,还是重启验证等等
好给我们的破解带来帮助。经过简单的试验,上面的是“激活码错误”这条消息,那么我们就用OD载入程序,然后在汇编窗口右键--->“中文搜索引挚"--->"智能搜索"
搜索的关键字就用”激活码错误" ,搜索结果见下图,,在“激活码错误”那行,双击左键,跳转到反汇编窗口。来查找关键Call的位置。
1.1 这是搜索窗口,用来查找错误信息
1.2 查找关键Call
一般的对于新手来说,在查找关键Call的地方,太让人头疼了,即使是看教程,在图文的指导下也可以找到关键Call,可一般让自己来找,都会
发蒙。特别是大神们,指着某个Call说,这个就是关键的了。那么像我们小白要怎么找呢。现在我们的这个水平,多半要多试验,多跑些冤枉路
会对以后的提高有好处。那么我们就以下面的例子来说明如何找关键Call.(说明:由于系统不同,OD载入的程序地址,可能每台机器不一样,
不用安全的参照我图片的地址来对应,你们可以参照反汇编出来的代码来查看。)
下面这段代码,就是刚才双击错误信息跳转到汇编窗口的代码,注意看反汇编出来的代码,别注意前面的地址:
通过观察,跳过激活码错误的跳转依次有(从下向上的顺序)
01138262 /EB 13 jmp short WiFiNoNo.01138277
01138245 /75 30 jnz short WiFiNoNo.01138277
01138234 /75 41 jnz short WiFiNoNo.01138277
01138227 /74 4E je short WiFiNoNo.01138277
这4条都是跳过错误的跳转,虽然在这上面有一个Call
0113822C FF15 D0612D01 call dword ptr ds:[<&KERNEL32.IsBadReadP>; kernel32.IsBadReadPtr(但是看注释应该是系统调用,不是关键Call)
,在往上面看看,又发现了一条je跳转语句,并且还有test比较,这条je跳转语句,直接将上面4条跳向成功的语句都给越过去了。
所以这么可疑的Call,成为关键Call是非常有可能的,F2在这下断点,先试运行一下。经过多次调试,这个是关键Call无疑了。
01138212 8D5424 58 lea edx,dword ptr ss:
01138216 E8 B53E0100 call WiFiNoNo.0114C0D0 ; 此处是关键Call,注册码也是在这里计算完成。
0113821B 83C4 0C add esp,0xC
0113821E 84C0 test al,al
01138220 74 42 je short WiFiNoNo.01138264
这段是关键Call段的代码
01138212 8D5424 58 lea edx,dword ptr ss:
01138216 E8 B53E0100 call WiFiNoNo.0114C0D0 ; 此处是关键Call,注册码也是在这里计算完成。
0113821B 83C4 0C add esp,0xC
0113821E 84C0 test al,al
01138220 74 42 je short WiFiNoNo.01138264
01138222 8B77 04 mov esi,dword ptr ds:
01138225 3BF3 cmp esi,ebx
01138227 74 4E je short WiFiNoNo.01138277
01138229 6A 08 push 0x8
0113822B 56 push esi
0113822C FF15 D0612D01 call dword ptr ds:[<&KERNEL32.IsBadReadP>; kernel32.IsBadReadPtr
01138232 85C0 test eax,eax
01138234 75 41 jnz short WiFiNoNo.01138277
01138236 8B06 mov eax,dword ptr ds:
01138238 83F8 01 cmp eax,0x1
0113823B 75 05 jnz short WiFiNoNo.01138242
0113823D 8B76 0C mov esi,dword ptr ds:
01138240 EB 0B jmp short WiFiNoNo.0113824D
01138242 83F8 14 cmp eax,0x14
01138245 75 30 jnz short WiFiNoNo.01138277
01138247 8B4E 70 mov ecx,dword ptr ds:
0113824A 8B71 0C mov esi,dword ptr ds:
0113824D 6A 01 push 0x1
0113824F 68 E8B72E01 push WiFiNoNo.012EB7E8 ; 提示
01138254 56 push esi
01138255 BE 9CD92E01 mov esi,WiFiNoNo.012ED99C ; 您使用的是旧版激活码,请找联系软件卖家升级激活码。
0113825A E8 71981300 call WiFiNoNo.01271AD0
0113825F 83C4 0C add esp,0xC
01138262 EB 13 jmp short WiFiNoNo.01138277
01138264 6A 10 push 0x10
01138266 68 00902E01 push WiFiNoNo.012E9000 ; 错误
0113826B 68 D0D92E01 push WiFiNoNo.012ED9D0 ; 激活码错误
01138270 53 push ebx
1.3、通过上面的分析,下好断点, 我们F9将程序运行起来,然后点击注册按钮---->输入我们的假码(说明,在写这篇破文的时候,发现我们输入的假码,会影响到生成的
真码,也就是说,不同的假码会使真码的有效用户数量不同,这个一会在做下测试,我用的数字假码、123生成3个有效用户,1234567生成了67个有效用户,123456789012345生
成了9242个有效用户、7131个无效用户,具体咋回事,由于不会分析,也弄不清楚。只能来猜测。)
在点击注册的时候,程序断在了我们刚才下的断点处,即
01138216 E8 B53E0100 call WiFiNoNo.0114C0D0 ; 此处是关键Call,注册码也是在这里计算完成。
在这里,我们按F7进入Call
1.4 我们的追码开始了漫长的过程,,,进到这个Call里面,我们单步F8往前走,直到遇见了如下代码。
这里有个cmp比较,然后一个je跳转,和一个jmp回跳,这里是比较假码是否和真码一样长度,如果不等于15,就回跳,
如果大家的假码是不等于15的,那么在cmp完成后,修改一下ZF标志位的值为1,让je跳转实现。
00CEC2D3 03F8 add edi,eax
00CEC2D5 13DA adc ebx,edx
00CEC2D7 3B7424 44 cmp esi,dword ptr ss: ; 此处应该是对假码的长度进行比较,
00CEC2DB 74 26 je short WiFiNoNo.00CEC303
00CEC2DD 8D8C24 C0000000 lea ecx,dword ptr ss:
00CEC2E4 E8 07BC0600 call WiFiNoNo.00D57EF0
00CEC2E9 8D8C24 A4000000 lea ecx,dword ptr ss:
00CEC2F0 E8 FBBB0600 call WiFiNoNo.00D57EF0
00CEC2F5 8D4C24 50 lea ecx,dword ptr ss:
00CEC2F9 E8 F2BB0600 call WiFiNoNo.00D57EF0
00CEC2FE^ E9 A8FEFFFF jmp WiFiNoNo.00CEC1AB ; 当不满足的时候,jmp跳回上面。
00CEC303 8B5424 18 mov edx,dword ptr ss:
00CEC307 8B4424 14 mov eax,dword ptr ss:
00CEC30B 53 push ebx
00CEC30C 57 push edi
00CEC30D 52 push edx
00CEC30E 50 push eax
00CEC30F 68 8002E900 push WiFiNoNo.00E90280 ; %014I64d%06I64d
在上面的代码向下不远处,同样还有一处jnz的跳转,也不能让它成功回跳过去,继续修改ZF标志位,
00CEC394 E8 57890700 call WiFiNoNo.00D64CF0 ; 在这个Call里面,这个附近EDX生成一串数字,其中的后4位,感觉像有效用户数。
同时发现这个Call会让EDX生成一串数字,这串数字的后4位,就是真码的有效用户数。
00CEC371 83C4 1C add esp,0x1C
00CEC374 394424 44 cmp dword ptr ss:,eax
00CEC378^ 0F85 5FFFFFFF jnz WiFiNoNo.00CEC2DD ; 此处的jnz回跳,同样不能让它跳回去,修改ZF标志位为1
00CEC37E 8B4424 18 mov eax,dword ptr ss:
00CEC382 8B4C24 14 mov ecx,dword ptr ss:
00CEC386 50 push eax
00CEC387 51 push ecx
00CEC388 68 FCDCE800 push WiFiNoNo.00E8DCFC ; %014I64d
00CEC38D 8DB424 94000000 lea esi,dword ptr ss:
00CEC394 E8 57890700 call WiFiNoNo.00D64CF0 ; 在这个Call里面,会生成有效授权用户数
00CEC399 83C4 0C add esp,0xC
00CEC39C 50 push eax
00CEC39D 8D8C24 A8000000 lea ecx,dword ptr ss:
00CEC3A4 C68424 0C010000>mov byte ptr ss:,0x4
1.5 经过上面2个回跳之后,继续F8,就离我们成功的地方不远了,先是发现机器码出现了。
1.6、在机器码出现后,真码就在其后出现了。
相应的代码如下:
00CEC54E 8D8424 8C000000 lea eax,dword ptr ss:
00CEC555 50 push eax
00CEC556 C68424 2C010000>mov byte ptr ss:,0x7
00CEC55E E8 CDE9FFFF call WiFiNoNo.00CEAF30 ; 这个call生成了机器码,在EAX中。
00CEC563 83C4 04 add esp,0x4
00CEC566 C68424 28010000>mov byte ptr ss:,0x8
00CEC56E 8378 14 10 cmp dword ptr ds:,0x10
00CEC572 72 02 jb short WiFiNoNo.00CEC576
00CEC574 8B00 mov eax,dword ptr ds:
00CEC576 8B4C24 48 mov ecx,dword ptr ss:
00CEC57A 8B11 mov edx,dword ptr ds:
00CEC57C 52 push edx
00CEC57D 8B5424 48 mov edx,dword ptr ss:
00CEC581 8D8C24 00010000 lea ecx,dword ptr ss:
00CEC588 51 push ecx
00CEC589 C68424 30010000>mov byte ptr ss:,0x9
00CEC591 8B12 mov edx,dword ptr ds:
00CEC593 8BC8 mov ecx,eax
00CEC595 E8 A6F5FFFF call WiFiNoNo.00CEBB40 ; 这个Call是生成注册码的子Call。不会分析算法,过去了。
00CEC59A 83C4 28 add esp,0x28
00CEC59D 8D4C24 6C lea ecx,dword ptr ss:
00CEC5A1 C68424 08010000>mov byte ptr ss:,0xB
00CEC5A9 E8 42B90600 call WiFiNoNo.00D57EF0
00CEC5AE 8B4424 3C mov eax,dword ptr ss: ; 真假码都出现了。
00CEC5B2 50 push eax
00CEC5B3 8D8C24 8C000000 lea ecx,dword ptr ss:
00CEC5BA E8 5186FAFF call WiFiNoNo.00C94C10
00CEC5BF 8BC8 mov ecx,eax
这个是用假码123456789012345生成的真码,用户数是9424,7173个失败的。
至此,完成无线天的追码过程,难点就是找到关键CAll,并且中间有2个回跳过程要一定不要让它们回跳过去,发现这个问题,都是通过多次的失败才找到的。
再就是从进入到关键Call后,F8的代码太远了,一会接着去试一下,不同的假码生成的用户数量问题,有结果后再编辑本帖子。
---------------------刚才又试了几个假码,,
使用ABCD.....XYZ生成的真码,支持的用户数是11652个,失效用户数是4904.
堆栈 ss:=0018E110, (ASCII "ABCDEFGHIJKLMNOPQRSTUVWXYZ")
eax=0018E080, (ASCII "QC6WLPTSTU39VVB")
堆栈地址=001CE06C, (ASCII "99999999999999")
ecx=0862E4B0, (ASCII "P82CFUF8999SPJ9B")
LCG丶Ran 发表于 2016-3-23 08:50
@lmze2000 能否把最新版的破解掉,找的几个下载地址都不行。。
http://pan.baidu.com/s/1c1F3KoK
这是5.29的版本。。。然后参照教程。找出注册码,然后在升级到新版本无线天。 我也是新手,搞了一下这个软件的破解。跟踪了三天,终于找到一个破解的方法,我的思路是bypass关键的跳转;用OD打开(winxp环境下),修改了三个关键跳转:
1、
0045C374 394424 44 cmp dword ptr ss:,eax
0045C378 ^ 0F85 5FFFFFFF jnz WiFiNoNo.0045C2DD
修改为:
0045C374 33C0 xor eax,eax
0045C376 90 nop
0045C377 90 nop
0045C378 90 nop
0045C379 90 nop
0045C37A 90 nop
0045C37B 90 nop
0045C37C 90 nop
0045C37D 90 nop
2:
0045C610 84DB test bl,bl
0045C612 ^ 0F85 93FBFFFF jnz WiFiNoNo.0045C1AB
修改为:
0045C610 33DB xor ebx,ebx
0045C612 90 nop
0045C613 90 nop
0045C614 90 nop
0045C615 90 nop
0045C616 90 nop
0045C617 90 nop
3:
00447F4D 85C0 test eax,eax
00447F4F 74 0C je short WiFiNoNo.00447F5D
修改为:
00447F4D 33C0 xor eax,eax
00447F4F EB 0C jmp short WiFiNoNo.00447F5D
然后在反汇编窗口中右健-“复制到可执行文件”-“所有修改”,选择“全部复制”;在弹出的文件窗口中,右键-“保存到文件”,另存为wifinono2.exe。重新运行wifinono2.exe,输入123456789012345,即可注册成功(这个号码是我破解时用的,很奇怪换了其它的却提示注册失败。能力有限,注册算法还没有完全搞懂,希望有大神指点指点。) 谢谢楼主,幸苦了。赞一个!!!!! 后续呢?没了? asd9988 发表于 2015-5-23 21:34
后续呢?没了?
多次编辑呢,不敢一下完成了,{:17_1084:} 说好的分析呢? 是呀。楼主,只有一半哦。继续。。。 楼主,继续! 前排学习 楼主给力 楼主好有耐心撒花赞一下。。